diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a3152bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Gradle +.gradle +build + +# VSC +bin + +# IntelliJ +*.iml +.idea +out + +# Eclipse +.classpath +.project + +# Libraries +*.so +*.dylib +*.dll +*.jar +*.class + +.DS_Store +!Projekte/gradle/wrapper/gradle-wrapper.jar + diff --git a/Dokumente/.gitignore b/Dokumente/.gitignore new file mode 100644 index 0000000..792d600 --- /dev/null +++ b/Dokumente/.gitignore @@ -0,0 +1 @@ +# diff --git a/Projekte/.gitattributes b/Projekte/.gitattributes new file mode 100644 index 0000000..8af8e39 --- /dev/null +++ b/Projekte/.gitattributes @@ -0,0 +1,3 @@ +*.bat text eol=crlf +gradlew text eol=lf + diff --git a/Projekte/.run/BattleshipApp (Mac).run.xml b/Projekte/.run/BattleshipApp (Mac).run.xml new file mode 100644 index 0000000..f2d9901 --- /dev/null +++ b/Projekte/.run/BattleshipApp (Mac).run.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/Projekte/.run/BattleshipApp.run.xml b/Projekte/.run/BattleshipApp.run.xml new file mode 100644 index 0000000..49eecb2 --- /dev/null +++ b/Projekte/.run/BattleshipApp.run.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/Projekte/.run/BattleshipServer.run.xml b/Projekte/.run/BattleshipServer.run.xml new file mode 100644 index 0000000..22e642e --- /dev/null +++ b/Projekte/.run/BattleshipServer.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/Projekte/.run/Projekte [test].run.xml b/Projekte/.run/Projekte [test].run.xml new file mode 100644 index 0000000..4a9bc66 --- /dev/null +++ b/Projekte/.run/Projekte [test].run.xml @@ -0,0 +1,24 @@ + + + + + + + true + true + false + false + + + \ No newline at end of file diff --git a/Projekte/README.md b/Projekte/README.md new file mode 100644 index 0000000..be56e20 --- /dev/null +++ b/Projekte/README.md @@ -0,0 +1,189 @@ +# Beispielprogramme des Programmierprojekts + +Hier ist der Quellcode für das in der Einarbeitungsphase genutzte Spiel +_Battleships_ zu finden. Die Quellen bestehen aus den folgenden +Gradle-Unterprojekten: + +* _:battleship:server_ +* _:battleship:client_ +* _:battleship:model_ +* _:battleship:converter_ +* _:common_ +* _:jme-common_ + +_Battleships_ ist ein netzwerkbasiertes Spiel und besteht aus einem Server- und +einem Clientanteil, die in den Unterprojekten _:battleship:server_ und +_:battleship:client_ realisiert sind. Beide nutzen das Unterprojekt +_:battleship:model_, das den gemeinsamen Modellanteil enthält. + +Die Unterprojekte _:common_ und _:jme-common_ enthalten Hilfsklassen. + +Das Unterprojekt _:battleship:converter_ wird für _Battleships_ selbst nicht +benötigt, sondern enthält lediglich den Code, um ein im Spiel verwendetes +3d-Modell eines Schlachtschiffs in eine _J3O_-Datei umzuwandeln, die von jME +einfacher geladen werden kann. + +## 1 Vorbereitung + +Für das Programmierprojekt empfehlen wir die Verwendung von Java 20. Unter Linux +sollte [_Eclipse Temurin_](https://adoptium.net/temurin/releases/?version=20) +als JDK verwendet werden, andere JDKs können unter Linux Probleme verursachen. +Auf anderen Betriebssystemen empfehlen wir aber ebenfalls Temurin. Im Folgenden +ist beschrieben, wie Sie Temurin installieren und die Umgebungsvariable +**JAVA_HOME** richtig setzen, damit Sie Gradle (siehe unten) verwenden können. + +### 1.1 Installation von Temurin + +Laden Sie [_Eclipse Temurin_](https://adoptium.net/temurin/releases/?version=20) +entsprechend Ihrem Betriebssystem und Ihrer Prozessorarchitektur herunter und +entpacken Sie das Archiv in einem Verzeichnis Ihrer Wahl auf Ihrem Rechner. + +### 1.2 Setzen von JAVA_HOME + +Zur Verwendung mit Gradle muss die Umgebungsvariable **JAVA_HOME** richtig +gesetzt werden. Folgen Sie dazu den nachfolgenden Anweisungen entsprechend Ihrem +Betriebssystem: + +* **Windows:** + + Öffnen Sie ihre Powershell (Core) bzw. ihr Windows Terminal mit Powershell + (Core). Überprüfen Sie, ob die Umgebungsvariable korrekt gesetzt ist: + `Get-ChildItem -Path Env:JAVA_HOME` + Falls kein oder ein falscher Pfad gesetzt ist, setzen Sie diesen mit dem + folgenden Kommando (in einer Zeile): + `[System.Environment]::SetEnvironmentVariable('JAVA_HOME','',[System.EnvironmentVariableTarget]::User)` + + Alternativ können Sie die GUI verwenden. Unter Windows 10 klicken Sie die + Windows-Taste und dann das Zahnrad um die Einstellungen zu öffnen. Dort wählen + Sie "System", dann "Info" (links unten) und nun + "Erweiterte Systemeinstellungen" (rechts) um den Dialog "Systemeigenschaften" + zu starten. Im Reiter "Erweitert" klicken Sie + "Umgebungsvariablen..." und klicken dann unter "Benutzervariablen" den Knopf + "Neu..." um JAVA_HOME anzulegen oder "Bearbeiten" um ihn zu ändern. Geben Sie + als Name `JAVA_HOME` und als Wert den Pfad ein. Schließen Sie mit "OK". + + > **(!) Beachten Sie, dass Sie die jeweilige Applikation neu starten müssen**, + > um von der gesetzten Umgebungsvariablen Notiz zu nehmen. + > Dies betrifft auch die Shell, die Sie gerade verwenden. + +* **UNIX (Linux/MacOS):** + + Öffnen oder erstellen Sie die Datei `~/.profile` (wenn Sie die Bash verwenden; + bei anderen Shells sind es andere Dateien) und ergänzen Sie am Ende der Datei + die Zeile: + + `export JAVA_HOME=""` + + Ersetzen Sie dabei `` mit dem entsprechenden Pfad. + Zum Beispiel: + + `export JAVA_HOME="/home/user/jdk-20.0.2"` + + Fügen Sie dann die folgende Zeile hinzu: + + `export PATH="$JAVA_HOME/bin:$PATH"` + +## 2 Programmstart + +Grundsätzlich kann man das gesamte Projekt einfach in IntelliJ öffnen. Details +dazu sind im Aufgabenblatt zur Einarbeitungsaufgabe zu finden. Im Folgenden ist +beschrieben, wie die _Batttleships_ unmittelbar von der Kommandozeile gestartet +werden können. + +Um _Battleships_ spielen zu können, muss man zuerst das Server-Programm auf +einem Rechner und dann zweimal das Client-Programm auf beliebigen Rechnern +starten, die TCP/IP-Verbindungen zum Server erlauben. Natürlich ist es auch +möglich, alle drei Programme auf demselben Rechner zu starten. + +Es empfiehlt sich der Start von der Kommandozeile. Will man alle drei Programme +auf demselben Rechner starten, sollte man dazu drei Shell-Instanzen öffnen und +in jeder eines der Programme starten. Auf diese Weise können die +Logging-Ausgaben der drei Programme voneinander unterschieden werden. + +Das Server-Programm startet man unmittelbar mit Gradle mit + +`./gradlew :battleship:server:run` + +Unter Windows kann es je nach Shell (Eingabeaufforderung cmd) erforderlich sein, +`/` jeweils durch `\ ` zu ersetzen. + +Im Verzeichnis `battleship/server` befindet sich die Datei `config.propeties`, +worüber sich der Server konfigurieren lässt. Mit der Zeile `port=1234` lässt +sich der verwendete Server-Port (hier 1234) einstellen. Außerdem befindet sich +dort die Datei `logging.properties`, womit das Logging des Servers konfiguriert +wird. + +Das Client-Programm startet man unmittelbar mit Gradle mit + +`./gradlew :battleship:client:run` + +Die Datei `logging.properties` im Verzeichnis `battleship/client` konfiguriert +das Logging des Clients. + +Alternativ kann man auch die Start-Skripte + +* `./battleship/server/build/install/battleship-server/bin/battleship-server` +* `./battleship/client/build/install/battleship/bin/battleship` + +direkt in der Kommandozeile starten. Allerdings müssen sie zuvor mittels + +`./gradlew installDist` + +erzeugt worden sein. Beachten Sie aber, dass nur im **aktuellen +Arbeitsverzeichnis** nach den Dateien `config.properties` und +`logging.properties` gesucht wird und diese geladen werden. Das heißt, dass die +vordefinierten Dateien in den Verzeichnissen `battleship/server` und +`battleship/client` nur dann gelesen werden, wenn Sie diese Verzeichnisse als +aktuelle Arbeitsverzeichnisse nutzen. Wie üblich müssen Sie dazu in der +Kommandozeile + +`cd battleship/server` + +bzw. + +`cd battleship/client` + +eingeben. + +## 3 Hinweise zu _Battleships_ + +Der _Battleships_-Client hat ein Menü, in das man immer mit der +Esc-Taste kommt. Aus dem Menü heraus lässt sich das Programm auch schließen. +Beachte, dass sich beim Laden und Speichern eines Spiels kein Dateidialog +öffnet. Vielmehr muss man den Dateipfad in das Dialogfeld eingeben. Da +JSON-Dateien geschrieben werden, empfiehlt sich das Datei-Suffix _.json_. + +## 4 Allgemeine Gradle-Tasks: + +- `./gradlew clean` + + Entfernt alle `build`-Verzeichnisse und alle erzeugten Dateien. + +- `./gradlew classes` + + Übersetzt den Quellcode und legt unter build den Bytecode sowie + Ressourcen ab. + +- `./gradlew javadoc` + + Erzeugt die Dokumentation aus den JavaDoc-Kommentaren im Verzeichnis + `build/docs/javadoc` des jeweiligen Unterprojekts. + +- `./gradlew test` + + Führt die JUnit-Tests durch. Ergebnisse sind im Verzeichnis + `build/reports/tests` des jeweiligen Unterprojekts zu finden. + +- `./gradlew build` + + Führt die JUnit-Tests durch und erstellt in `build/distributions` + gepackte Distributionsdateien + +- `./gradlew installDist` + + Erstellt unter `battleship/client/build/install` und + `battleship/server/build/install` Verzeichnisse, die jeweils eine ausführbare + Distribution samt Start-Skripten enthält (siehe oben). + +--- +Juli 2024 diff --git a/Projekte/battleship/client/build.gradle b/Projekte/battleship/client/build.gradle new file mode 100644 index 0000000..a8aeff3 --- /dev/null +++ b/Projekte/battleship/client/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'buildlogic.jme-application-conventions' +} + +description = 'Battleship Client' + +dependencies { + implementation project(":jme-common") + implementation project(":battleship:model") + + implementation libs.jme3.desktop + + runtimeOnly libs.jme3.awt.dialogs + runtimeOnly libs.jme3.plugins + runtimeOnly libs.jme3.jogg + runtimeOnly libs.jme3.testdata +} + +application { + mainClass = 'pp.battleship.client.BattleshipApp' + applicationName = 'battleship' +} diff --git a/Projekte/battleship/client/client.properties b/Projekte/battleship/client/client.properties new file mode 100644 index 0000000..4403fa3 --- /dev/null +++ b/Projekte/battleship/client/client.properties @@ -0,0 +1,73 @@ +######################################## +## Programming project code +## UniBw M, 2022, 2023, 2024 +## www.unibw.de/inf2 +## (c) Mark Minas (mark.minas@unibw.de) +######################################## +# +# Battleship client configuration +# +# Specifies the map used by the opponent in single mode. +# Single mode is activated if this property is set. +#map.opponent=maps/map2.json +# +# Specifies the map used by the player in single mode. +# The player must define their own map if this property is not set. +map.own=maps/map1.json +# +# Coordinates of the shots fired by the RobotClient in the order listed. +# Example: +# 2, 0,\ +# 2, 1,\ +# 2, 2,\ +# 2, 3 +# defines four shots, namely at the coordinates +# (x=2, y=0), (x=2, y=1), (x=2, y=2), and (x=2, y=3) +robot.targets=2, 0,\ + 2, 1,\ + 2, 2,\ + 2, 3 +# +# Delay in milliseconds between each shot fired by the RobotClient. +robot.delay=500 +# +# The dimensions of the game map used in single mode. +# 'map.width' defines the number of columns, and 'map.height' defines the number of rows. +map.width=10 +map.height=10 +# +# The number of ships of each length available in single mode. +# The value is a comma-separated list where each element corresponds to the number of ships +# with a specific length. For example: +# ship.nums=4, 3, 2, 1 +# This configuration means: +# - 4 ships of length 1 +# - 3 ships of length 2 +# - 2 ships of length 3 +# - 1 ship of length 4 +ship.nums=4, 3, 2, 1 +# +# Screen settings +# +# Color of the text displayed at the top of the overlay. +# The format is (red, green, blue, alpha) where each value ranges from 0 to 1. +overlay.top.color=1, 1, 1, 1 +# +# Application settings configuration +# Determines whether the settings window is shown at startup. +settings.show=false +# +# Specifies the width of the application window in pixels. +settings.resolution.width=1200 +# +# Specifies the height of the application window in pixels. +settings.resolution.height=800 +# +# Determines whether the application runs in full-screen mode. +settings.full-screen=false +# +# Enables or disables gamma correction to improve color accuracy. +settings.use-gamma-correction=true +# +# Indicates whether the statistics window is displayed during gameplay. +statistics.show=false diff --git a/Projekte/battleship/client/logging.properties b/Projekte/battleship/client/logging.properties new file mode 100644 index 0000000..cbbaec0 --- /dev/null +++ b/Projekte/battleship/client/logging.properties @@ -0,0 +1,8 @@ +handlers=java.util.logging.ConsoleHandler +.level=INFO +pp.level=FINE +com.jme3.network.level=INFO +;com.jme3.util.TangentBinormalGenerator.level=SEVERE +java.util.logging.ConsoleHandler.level=FINER +java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter +;java.util.logging.SimpleFormatter.format=[%4$s %2$s] %5$s%n diff --git a/Projekte/battleship/client/maps/map1.json b/Projekte/battleship/client/maps/map1.json new file mode 100644 index 0000000..a99474d --- /dev/null +++ b/Projekte/battleship/client/maps/map1.json @@ -0,0 +1,66 @@ +{ + "width": 10, + "height": 10, + "ships": [ + { + "length": 4, + "x": 2, + "y": 8, + "rot": "RIGHT" + }, + { + "length": 3, + "x": 2, + "y": 5, + "rot": "DOWN" + }, + { + "length": 3, + "x": 5, + "y": 6, + "rot": "RIGHT" + }, + { + "length": 2, + "x": 4, + "y": 4, + "rot": "RIGHT" + }, + { + "length": 2, + "x": 7, + "y": 4, + "rot": "RIGHT" + }, + { + "length": 2, + "x": 4, + "y": 2, + "rot": "DOWN" + }, + { + "length": 1, + "x": 6, + "y": 2, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 8, + "y": 2, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 6, + "y": 0, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 8, + "y": 0, + "rot": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/Projekte/battleship/client/maps/map2.json b/Projekte/battleship/client/maps/map2.json new file mode 100644 index 0000000..8862315 --- /dev/null +++ b/Projekte/battleship/client/maps/map2.json @@ -0,0 +1,66 @@ +{ + "width": 10, + "height": 10, + "ships": [ + { + "length": 4, + "x": 0, + "y": 5, + "rot": "DOWN" + }, + { + "length": 3, + "x": 0, + "y": 9, + "rot": "DOWN" + }, + { + "length": 3, + "x": 2, + "y": 6, + "rot": "RIGHT" + }, + { + "length": 2, + "x": 4, + "y": 8, + "rot": "RIGHT" + }, + { + "length": 2, + "x": 2, + "y": 4, + "rot": "DOWN" + }, + { + "length": 2, + "x": 2, + "y": 1, + "rot": "DOWN" + }, + { + "length": 1, + "x": 6, + "y": 2, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 8, + "y": 2, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 6, + "y": 0, + "rot": "RIGHT" + }, + { + "length": 1, + "x": 8, + "y": 0, + "rot": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipApp.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipApp.java new file mode 100644 index 0000000..6ac1c72 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipApp.java @@ -0,0 +1,429 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.jme3.app.DebugKeysAppState; +import com.jme3.app.SimpleApplication; +import com.jme3.app.StatsAppState; +import com.jme3.font.BitmapFont; +import com.jme3.font.BitmapText; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.controls.ActionListener; +import com.jme3.input.controls.KeyTrigger; +import com.jme3.input.controls.MouseButtonTrigger; +import com.jme3.system.AppSettings; +import com.simsilica.lemur.GuiGlobals; +import com.simsilica.lemur.style.BaseStyles; +import pp.battleship.client.gui.BattleAppState; +import pp.battleship.client.gui.EditorAppState; +import pp.battleship.client.gui.SeaAppState; +import pp.battleship.game.client.BattleshipClient; +import pp.battleship.game.client.ClientGameLogic; +import pp.battleship.game.client.ServerConnection; +import pp.battleship.game.singlemode.BattleshipClientConfig; +import pp.battleship.game.singlemode.ServerConnectionMockup; +import pp.battleship.notification.ClientStateEvent; +import pp.battleship.notification.GameEventListener; +import pp.battleship.notification.InfoTextEvent; +import pp.dialog.DialogBuilder; +import pp.dialog.DialogManager; +import pp.graphics.Draw; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.logging.LogManager; + +import static pp.battleship.Resources.lookup; + +/** + * The main class for the Battleship client application. + * It manages the initialization, input setup, GUI setup, and game states for the client. + */ +public class BattleshipApp extends SimpleApplication implements BattleshipClient, GameEventListener { + + /** + * Logger for logging messages within the application. + */ + private static final Logger LOGGER = System.getLogger(BattleshipApp.class.getName()); + + /** + * Path to the styles script for GUI elements. + */ + private static final String STYLES_SCRIPT = "Interface/Lemur/pp-styles.groovy"; //NON-NLS + + /** + * Path to the font resource used in the GUI. + */ + private static final String FONT = "Interface/Fonts/Default.fnt"; //NON-NLS + + /** + * Path to the client configuration file, if one exists. + */ + private static final File CONFIG_FILE = new File("client.properties"); + + /** + * Input mapping name for mouse clicks. + */ + public static final String CLICK = "CLICK"; + + /** + * Input mapping name for the Escape key. + */ + private static final String ESC = "ESC"; + + /** + * Manager for handling dialogs within the application. + */ + private final DialogManager dialogManager = new DialogManager(this); + + /** + * The server connection instance, used for communicating with the game server. + */ + private final ServerConnection serverConnection; + + /** + * Instance of the {@link Draw} class for rendering graphics. + */ + private Draw draw; + + /** + * Text display at the top of the GUI for showing information to the user. + */ + private BitmapText topText; + + /** + * Executor service for handling asynchronous tasks within the application. + */ + private ExecutorService executor; + + /** + * Handler for managing the client's game logic. + */ + private final ClientGameLogic logic; + + /** + * Configuration settings for the Battleship client application. + */ + private final BattleshipAppConfig config; + + /** + * Listener for handling actions triggered by the Escape key. + */ + private final ActionListener escapeListener = (name, isPressed, tpf) -> escape(isPressed); + + static { + // Configure logging + LogManager manager = LogManager.getLogManager(); + try { + manager.readConfiguration(new FileInputStream("logging.properties")); + LOGGER.log(Level.INFO, "Successfully read logging properties"); //NON-NLS + } + catch (IOException e) { + LOGGER.log(Level.INFO, e.getMessage()); + } + } + + /** + * Starts the Battleship application. + * + * @param args Command-line arguments for launching the application. + */ + public static void main(String[] args) { + new BattleshipApp().start(); + } + + /** + * Constructs a new {@code BattleshipApp} instance. + * Initializes the configuration, server connection, and game logic listeners. + */ + private BattleshipApp() { + config = new BattleshipAppConfig(); + config.readFromIfExists(CONFIG_FILE); + serverConnection = makeServerConnection(); + logic = new ClientGameLogic(serverConnection); + logic.addListener(this); + setShowSettings(config.getShowSettings()); + setSettings(makeSettings()); + } + + /** + * Creates and configures application settings from the client configuration. + * + * @return A configured {@link AppSettings} object. + */ + private AppSettings makeSettings() { + final AppSettings settings = new AppSettings(true); + settings.setTitle(lookup("battleship.name")); + settings.setResolution(config.getResolutionWidth(), config.getResolutionHeight()); + settings.setFullscreen(config.fullScreen()); + settings.setUseRetinaFrameBuffer(config.useRetinaFrameBuffer()); + settings.setGammaCorrection(config.useGammaCorrection()); + return settings; + } + + /** + * Factory method for creating a server connection based on the current + * client configuration. + * + * @return A {@link ServerConnection} instance, which could be a real or mock server. + */ + private ServerConnection makeServerConnection() { + if (config.isSingleMode()) + return new ServerConnectionMockup(this); + return new NetworkSupport(this); + } + + /** + * Returns the dialog manager responsible for managing in-game dialogs. + * + * @return The {@link DialogManager} instance. + */ + DialogManager getDialogManager() { + return dialogManager; + } + + /** + * Returns the game logic handler for the client. + * + * @return The {@link ClientGameLogic} instance. + */ + @Override + public ClientGameLogic getGameLogic() { + return logic; + } + + /** + * Returns the current configuration settings for the Battleship client. + * + * @return The {@link BattleshipClientConfig} instance. + */ + @Override + public BattleshipAppConfig getConfig() { + return config; + } + + /** + * Initializes the application. + * Sets up input mappings, GUI, game states, and connects to the server. + */ + @Override + public void simpleInitApp() { + setPauseOnLostFocus(false); + draw = new Draw(assetManager); + setupInput(); + setupStates(); + setupGui(); + serverConnection.connect(); + } + + /** + * Sets up the graphical user interface (GUI) for the application. + */ + private void setupGui() { + GuiGlobals.initialize(this); + BaseStyles.loadStyleResources(STYLES_SCRIPT); + GuiGlobals.getInstance().getStyles().setDefaultStyle("pp"); //NON-NLS + final BitmapFont normalFont = assetManager.loadFont(FONT); //NON-NLS + topText = new BitmapText(normalFont); + final int height = context.getSettings().getHeight(); + topText.setLocalTranslation(10f, height - 10f, 0f); + topText.setColor(config.getTopColor()); + guiNode.attachChild(topText); + } + + /** + * Configures input mappings and sets up listeners for user interactions. + */ + private void setupInput() { + inputManager.deleteMapping(INPUT_MAPPING_EXIT); + inputManager.setCursorVisible(false); + inputManager.addMapping(ESC, new KeyTrigger(KeyInput.KEY_ESCAPE)); + inputManager.addMapping(CLICK, new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); + inputManager.addListener(escapeListener, ESC); + } + + /** + * Initializes and attaches the necessary application states for the game. + */ + private void setupStates() { + if (config.getShowStatistics()) { + final BitmapFont normalFont = assetManager.loadFont(FONT); //NON-NLS + final StatsAppState stats = new StatsAppState(guiNode, normalFont); + stateManager.attach(stats); + } + flyCam.setEnabled(false); + stateManager.detach(stateManager.getState(StatsAppState.class)); + stateManager.detach(stateManager.getState(DebugKeysAppState.class)); + + attachGameSound(); + stateManager.attachAll(new EditorAppState(), new BattleAppState(), new SeaAppState()); + } + + /** + * Attaches the game sound state and sets its initial enabled state. + */ + private void attachGameSound() { + final GameSound gameSound = new GameSound(); + logic.addListener(gameSound); + gameSound.setEnabled(GameSound.enabledInPreferences()); + stateManager.attach(gameSound); + } + + /** + * Updates the application state every frame. + * This method is called once per frame during the game loop. + * + * @param tpf Time per frame in seconds. + */ + @Override + public void simpleUpdate(float tpf) { + super.simpleUpdate(tpf); + dialogManager.update(tpf); + logic.update(tpf); + } + + /** + * Handles the Escape key action to either close the top dialog or show the main menu. + * + * @param isPressed Indicates whether the Escape key is pressed. + */ + private void escape(boolean isPressed) { + if (!isPressed) return; + if (dialogManager.showsDialog()) + dialogManager.escape(); + else + new Menu(this).open(); + } + + /** + * Returns the {@link Draw} instance used for rendering graphical elements in the game. + * + * @return The {@link Draw} instance. + */ + public Draw getDraw() { + return draw; + } + + /** + * Handles a request to close the application. + * If the request is initiated by pressing ESC, this parameter is true. + * + * @param esc If true, the request is due to the ESC key being pressed. + */ + @Override + public void requestClose(boolean esc) { /* do nothing */ } + + /** + * Closes the application, displaying a confirmation dialog if the client is connected to a server. + */ + public void closeApp() { + if (serverConnection.isConnected()) + confirmDialog(lookup("confirm.leaving"), this::close); + else + close(); + } + + /** + * Closes the application, disconnecting from the server and stopping the application. + */ + private void close() { + serverConnection.disconnect(); + stop(); + } + + /** + * Updates the informational text displayed in the GUI. + * + * @param text The information text to display. + */ + void setInfoText(String text) { + LOGGER.log(Level.DEBUG, "setInfoText {0}", text); //NON-NLS + topText.setText(text); + } + + /** + * Updates the informational text in the GUI based on the key received in an {@link InfoTextEvent}. + * + * @param event The {@link InfoTextEvent} containing the key for the text to display. + */ + @Override + public void receivedEvent(InfoTextEvent event) { + LOGGER.log(Level.DEBUG, "received info text {0}", event.key()); //NON-NLS + setInfoText(lookup(event.key())); + } + + /** + * Handles client state events to update the game states accordingly. + * + * @param event The {@link ClientStateEvent} representing the state change. + */ + @Override + public void receivedEvent(ClientStateEvent event) { + stateManager.getState(EditorAppState.class).setEnabled(logic.showEditor()); + stateManager.getState(BattleAppState.class).setEnabled(logic.showBattle()); + stateManager.getState(SeaAppState.class).setEnabled(logic.showBattle()); + } + + /** + * Returns the executor service used for handling multithreaded tasks. + * + * @return The {@link ExecutorService} instance. + */ + public ExecutorService getExecutor() { + if (executor == null) + executor = Executors.newCachedThreadPool(); + return executor; + } + + /** + * Stops the application, shutting down the executor service and halting execution. + * + * @param waitFor If true, waits for the application to stop before returning. + */ + @Override + public void stop(boolean waitFor) { + if (executor != null) executor.shutdownNow(); + super.stop(waitFor); + } + + /** + * Displays a confirmation dialog with a specified question and action for the "Yes" button. + * + * @param question The question to display in the dialog. + * @param yesAction The action to perform if "Yes" is selected. + */ + void confirmDialog(String question, Runnable yesAction) { + DialogBuilder.simple(dialogManager) + .setTitle(lookup("dialog.question")) + .setText(question) + .setOkButton(lookup("button.yes"), yesAction) + .setNoButton(lookup("button.no")) + .build() + .open(); + } + + /** + * Displays an error dialog with the specified error message. + * + * @param errorMessage The error message to display in the dialog. + */ + void errorDialog(String errorMessage) { + DialogBuilder.simple(dialogManager) + .setTitle(lookup("dialog.error")) + .setText(errorMessage) + .setOkButton(lookup("button.ok")) + .build() + .open(); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppConfig.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppConfig.java new file mode 100644 index 0000000..6e32c8c --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppConfig.java @@ -0,0 +1,196 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.jme3.math.ColorRGBA; +import pp.battleship.game.singlemode.BattleshipClientConfig; + +/** + * Provides access to the Battleship application configuration. + * Extends {@link BattleshipClientConfig} to include additional properties specific to the client, + * particularly those related to screen settings and visual customization. + *

+ * Note: Attributes of this class should not be marked as {@code final} + * to ensure proper functionality when reading from a properties file. + *

+ */ +public class BattleshipAppConfig extends BattleshipClientConfig { + + /** + * Converts a string value found in the properties file into an object of the specified type. + * Extends the superclass method to support conversion to {@link ColorRGBA}. + * + * @param value the string value to be converted + * @param targetType the target type into which the value string is converted + * @return the converted object of the specified type + */ + @Override + protected Object convertToType(String value, Class targetType) { + if (targetType == ColorRGBA.class) + return makeColorRGBA(value); + return super.convertToType(value, targetType); + } + + /** + * Converts the specified string value to a corresponding {@link ColorRGBA} object. + * + * @param value the color in the format "red, green, blue, alpha" with all values in the range [0..1] + * @return a {@link ColorRGBA} object representing the color + * @throws IllegalArgumentException if the input string is not in the expected format + */ + private static ColorRGBA makeColorRGBA(String value) { + String[] split = value.split(",", -1); + try { + if (split.length == 4) + return new ColorRGBA(Float.parseFloat(split[0]), + Float.parseFloat(split[1]), + Float.parseFloat(split[2]), + Float.parseFloat(split[3])); + } + catch (NumberFormatException e) { + // deliberately left empty + } + throw new IllegalArgumentException(value + " should consist of exactly 4 numbers"); + } + + /** + * The width of the game view resolution in pixels. + */ + @Property("settings.resolution.width") //NON-NLS + private int resolutionWidth = 1200; + + /** + * The height of the game view resolution in pixels. + */ + @Property("settings.resolution.height") //NON-NLS + private int resolutionHeight = 800; + + /** + * Specifies whether the game should start in full-screen mode. + */ + @Property("settings.full-screen") //NON-NLS + private boolean fullScreen = false; + + /** + * Specifies whether gamma correction should be enabled. + * If enabled, the main framebuffer is configured for sRGB colors, + * and sRGB images are linearized. + *

+ * Requires a GPU that supports GL_ARB_framebuffer_sRGB; otherwise, this setting will be ignored. + *

+ */ + @Property("settings.use-gamma-correction") //NON-NLS + private boolean useGammaCorrection = true; + + /** + * Specifies whether full resolution framebuffers should be used on Retina displays. + * This setting is ignored on non-Retina platforms. + */ + @Property("settings.use-retina-framebuffer") //NON-NLS + private boolean useRetinaFrameBuffer = false; + + /** + * Specifies whether the settings window should be shown for configuring the game. + */ + @Property("settings.show") //NON-NLS + private boolean showSettings = false; + + /** + * Specifies whether the JME statistics window should be shown in the lower left corner of the screen. + */ + @Property("statistics.show") //NON-NLS + private boolean showStatistics = false; + + /** + * The color of the top text during gameplay, represented as a {@link ColorRGBA} object. + */ + @Property("overlay.top.color") //NON-NLS + private ColorRGBA topColor = ColorRGBA.White; + + /** + * Creates a default {@code BattleshipAppConfig} with predefined values. + */ + public BattleshipAppConfig() { + // Default constructor + } + + /** + * Returns the width of the game view resolution in pixels. + * + * @return the width of the game view resolution in pixels + */ + public int getResolutionWidth() { + return resolutionWidth; + } + + /** + * Returns the height of the game view resolution in pixels. + * + * @return the height of the game view resolution in pixels + */ + public int getResolutionHeight() { + return resolutionHeight; + } + + /** + * Returns whether the game should start in full-screen mode. + * + * @return {@code true} if the game should start in full-screen mode; {@code false} otherwise + */ + public boolean fullScreen() { + return fullScreen; + } + + /** + * Returns whether gamma correction is enabled. + * If enabled, the main framebuffer is configured for sRGB colors, + * and sRGB images are linearized. + * + * @return {@code true} if gamma correction is enabled; {@code false} otherwise + */ + public boolean useGammaCorrection() { + return useGammaCorrection; + } + + /** + * Returns whether full resolution framebuffers should be used on Retina displays. + * This setting is ignored on non-Retina platforms. + * + * @return {@code true} if full resolution framebuffers should be used on Retina displays; {@code false} otherwise + */ + public boolean useRetinaFrameBuffer() { + return useRetinaFrameBuffer; + } + + /** + * Returns whether the settings window should be shown for configuring the game. + * + * @return {@code true} if the settings window should be shown; {@code false} otherwise + */ + public boolean getShowSettings() { + return showSettings; + } + + /** + * Returns whether the JME statistics window should be shown in the lower left corner of the screen. + * + * @return {@code true} if the statistics window should be shown; {@code false} otherwise + */ + public boolean getShowStatistics() { + return showStatistics; + } + + /** + * Returns the color of the top text during gameplay as a {@link ColorRGBA} object. + * + * @return the color of the top text during gameplay + */ + public ColorRGBA getTopColor() { + return topColor; + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppState.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppState.java new file mode 100644 index 0000000..0094516 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/BattleshipAppState.java @@ -0,0 +1,102 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.jme3.app.Application; +import com.jme3.app.state.AbstractAppState; +import com.jme3.app.state.AppStateManager; +import pp.battleship.game.client.ClientGameLogic; + +/** + * Abstract class representing a state in the Battleship game. + * Extends the AbstractAppState from jMonkeyEngine to manage state behavior. + */ +public abstract class BattleshipAppState extends AbstractAppState { + private BattleshipApp app; + + /** + * Creates a new BattleshipAppState that is initially disabled. + * + * @see #setEnabled(boolean) + */ + protected BattleshipAppState() { + setEnabled(false); + } + + /** + * Initializes the state manager and application. + * + * @param stateManager The state manager + * @param application The application instance + */ + @Override + public void initialize(AppStateManager stateManager, Application application) { + super.initialize(stateManager, application); + this.app = (BattleshipApp) application; + if (isEnabled()) enableState(); + } + + /** + * Returns the BattleshipApp instance associated with this BattleshipAppState. + * + * @return The BattleshipApp instance. + */ + public BattleshipApp getApp() { + return app; + } + + /** + * Returns the client game logic handler. + * + * @return the client game logic handler + */ + public ClientGameLogic getGameLogic() { + return app.getGameLogic(); + } + + /** + * Checks if any dialog is currently displayed. + * + * @return true if any dialog is currently shown, false otherwise + */ + public boolean showsDialog() { + return app.getDialogManager().showsDialog(); + } + + /** + * Sets the enabled state of the BattleshipAppState. + * If the new state is the same as the current state, the method returns. + * + * @param enabled The new enabled state. + */ + @Override + public void setEnabled(boolean enabled) { + if (isEnabled() == enabled) return; + super.setEnabled(enabled); + if (app != null) { + if (enabled) + enableState(); + else + disableState(); + } + } + + /** + * This method is called when the state is enabled. + * It is meant to be overridden by subclasses to perform + * specific actions when the state is enabled. + */ + protected abstract void enableState(); + + /** + * This method is called when the state is disabled. + * It is meant to be overridden by subclasses to perform + * specific actions when the state is disabled. + */ + protected abstract void disableState(); +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/GameSound.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/GameSound.java new file mode 100644 index 0000000..0fdcef6 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/GameSound.java @@ -0,0 +1,135 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.jme3.app.Application; +import com.jme3.app.state.AbstractAppState; +import com.jme3.app.state.AppStateManager; +import com.jme3.asset.AssetLoadException; +import com.jme3.asset.AssetNotFoundException; +import com.jme3.audio.AudioData; +import com.jme3.audio.AudioNode; +import pp.battleship.notification.GameEventListener; +import pp.battleship.notification.SoundEvent; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.prefs.Preferences; + +import static pp.util.PreferencesUtils.getPreferences; + +/** + * An application state that plays sounds. + */ +public class GameSound extends AbstractAppState implements GameEventListener { + private static final Logger LOGGER = System.getLogger(GameSound.class.getName()); + private static final Preferences PREFERENCES = getPreferences(GameSound.class); + private static final String ENABLED_PREF = "enabled"; //NON-NLS + + private AudioNode splashSound; + private AudioNode shipDestroyedSound; + private AudioNode explosionSound; + + /** + * Checks if sound is enabled in the preferences. + * + * @return {@code true} if sound is enabled, {@code false} otherwise. + */ + public static boolean enabledInPreferences() { + return PREFERENCES.getBoolean(ENABLED_PREF, true); + } + + /** + * Toggles the game sound on or off. + */ + public void toggleSound() { + setEnabled(!isEnabled()); + } + + /** + * Sets the enabled state of this AppState. + * Overrides {@link com.jme3.app.state.AbstractAppState#setEnabled(boolean)} + * + * @param enabled {@code true} to enable the AppState, {@code false} to disable it. + */ + @Override + public void setEnabled(boolean enabled) { + if (isEnabled() == enabled) return; + super.setEnabled(enabled); + LOGGER.log(Level.INFO, "Sound enabled: {0}", enabled); //NON-NLS + PREFERENCES.putBoolean(ENABLED_PREF, enabled); + } + + /** + * Initializes the sound effects for the game. + * Overrides {@link AbstractAppState#initialize(AppStateManager, Application)} + * + * @param stateManager The state manager + * @param app The application + */ + @Override + public void initialize(AppStateManager stateManager, Application app) { + super.initialize(stateManager, app); + shipDestroyedSound = loadSound(app, "Sound/Effects/sunken.wav"); //NON-NLS + splashSound = loadSound(app, "Sound/Effects/splash.wav"); //NON-NLS + explosionSound = loadSound(app, "Sound/Effects/explosion.wav"); //NON-NLS + } + + /** + * Loads a sound from the specified file. + * + * @param app The application + * @param name The name of the sound file. + * @return The loaded AudioNode. + */ + private AudioNode loadSound(Application app, String name) { + try { + final AudioNode sound = new AudioNode(app.getAssetManager(), name, AudioData.DataType.Buffer); + sound.setLooping(false); + sound.setPositional(false); + return sound; + } + catch (AssetLoadException | AssetNotFoundException ex) { + LOGGER.log(Level.ERROR, ex.getMessage(), ex); + } + return null; + } + + /** + * Plays the splash sound effect. + */ + public void splash() { + if (isEnabled() && splashSound != null) + splashSound.playInstance(); + } + + /** + * Plays the explosion sound effect. + */ + public void explosion() { + if (isEnabled() && explosionSound != null) + explosionSound.playInstance(); + } + + /** + * Plays sound effect when a ship has been destroyed. + */ + public void shipDestroyed() { + if (isEnabled() && shipDestroyedSound != null) + shipDestroyedSound.playInstance(); + } + + @Override + public void receivedEvent(SoundEvent event) { + switch (event.sound()) { + case EXPLOSION -> explosion(); + case SPLASH -> splash(); + case DESTROYED_SHIP -> shipDestroyed(); + } + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java new file mode 100644 index 0000000..0e100e8 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java @@ -0,0 +1,143 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.simsilica.lemur.Button; +import com.simsilica.lemur.Checkbox; +import com.simsilica.lemur.Label; +import com.simsilica.lemur.style.ElementId; +import pp.dialog.Dialog; +import pp.dialog.StateCheckboxModel; +import pp.dialog.TextInputDialog; + +import java.io.File; +import java.io.IOException; +import java.util.prefs.Preferences; + +import static pp.battleship.Resources.lookup; +import static pp.util.PreferencesUtils.getPreferences; + +/** + * The Menu class represents the main menu in the Battleship game application. + * It extends the Dialog class and provides functionalities for loading, saving, + * returning to the game, and quitting the application. + */ +class Menu extends Dialog { + private static final Preferences PREFERENCES = getPreferences(Menu.class); + private static final String LAST_PATH = "last.file.path"; + private final BattleshipApp app; + private final Button loadButton = new Button(lookup("menu.map.load")); + private final Button saveButton = new Button(lookup("menu.map.save")); + + /** + * Constructs the Menu dialog for the Battleship application. + * + * @param app the BattleshipApp instance + */ + public Menu(BattleshipApp app) { + super(app.getDialogManager()); + this.app = app; + addChild(new Label(lookup("battleship.name"), new ElementId("header"))); //NON-NLS + addChild(new Checkbox(lookup("menu.sound-enabled"), + new StateCheckboxModel(app, GameSound.class))); + addChild(loadButton) + .addClickCommands(s -> ifTopDialog(this::loadDialog)); + addChild(saveButton) + .addClickCommands(s -> ifTopDialog(this::saveDialog)); + addChild(new Button(lookup("menu.return-to-game"))) + .addClickCommands(s -> ifTopDialog(this::close)); + addChild(new Button(lookup("menu.quit"))) + .addClickCommands(s -> ifTopDialog(app::closeApp)); + update(); + } + + /** + * Updates the state of the load and save buttons based on the game logic. + */ + @Override + public void update() { + loadButton.setEnabled(app.getGameLogic().mayLoadMap()); + saveButton.setEnabled(app.getGameLogic().maySaveMap()); + } + + /** + * As an escape action, this method closes the menu if it is the top dialog. + */ + @Override + public void escape() { + close(); + } + + /** + * Functional interface for file actions. + */ + @FunctionalInterface + private interface FileAction { + /** + * Executes a file action. + * + * @param file the file to be processed + * @throws IOException if an I/O error occurs + */ + void run(File file) throws IOException; + } + + /** + * Handles the file action for the provided dialog. + * + * @param fileAction the file action to be executed + * @param dialog the dialog providing the file input + */ + private void handle(FileAction fileAction, TextInputDialog dialog) { + try { + final String path = dialog.getInput().getText(); + PREFERENCES.put(LAST_PATH, path); + fileAction.run(new File(path)); + dialog.close(); + } + catch (IOException e) { + app.errorDialog(e.getLocalizedMessage()); + } + } + + /** + * Shows a file dialog for loading or saving files. + * + * @param fileAction the action to perform with the selected file + * @param label the label for the dialog + */ + private void fileDialog(FileAction fileAction, String label) { + final TextInputDialog dialog = + TextInputDialog.builder(app.getDialogManager()) + .setLabel(lookup("label.file")) + .setFocus(TextInputDialog::getInput) + .setTitle(label) + .setOkButton(lookup("button.ok"), d -> handle(fileAction, d)) + .setNoButton(lookup("button.cancel")) + .setOkClose(false) + .build(); + final String path = PREFERENCES.get(LAST_PATH, null); + if (path != null) + dialog.getInput().setText(path.trim()); + dialog.open(); + } + + /** + * Shows the load dialog for loading maps. + */ + private void loadDialog() { + fileDialog(app.getGameLogic()::loadMap, lookup("menu.map.load")); + } + + /** + * Shows the save dialog for saving maps. + */ + private void saveDialog() { + fileDialog(app.getGameLogic()::saveMap, lookup("menu.map.save")); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkDialog.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkDialog.java new file mode 100644 index 0000000..3f2f5a6 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkDialog.java @@ -0,0 +1,153 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.simsilica.lemur.Container; +import com.simsilica.lemur.Label; +import com.simsilica.lemur.TextField; +import com.simsilica.lemur.component.SpringGridLayout; +import pp.dialog.Dialog; +import pp.dialog.DialogBuilder; +import pp.dialog.SimpleDialog; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +import static pp.battleship.Resources.lookup; + +/** + * Represents a dialog for setting up a network connection in the Battleship game. + * Allows users to specify the host and port for connecting to a game server. + */ +class NetworkDialog extends SimpleDialog { + private static final Logger LOGGER = System.getLogger(NetworkDialog.class.getName()); + private static final String LOCALHOST = "localhost"; //NON-NLS + private static final String DEFAULT_PORT = "1234"; //NON-NLS + private final NetworkSupport network; + private final TextField host = new TextField(LOCALHOST); + private final TextField port = new TextField(DEFAULT_PORT); + private String hostname; + private int portNumber; + private Future connectionFuture; + private Dialog progressDialog; + + /** + * Constructs a new NetworkDialog. + * + * @param network The NetworkSupport instance to be used for network operations. + */ + NetworkDialog(NetworkSupport network) { + super(network.getApp().getDialogManager()); + this.network = network; + host.setSingleLine(true); + host.setPreferredWidth(400f); + port.setSingleLine(true); + + final BattleshipApp app = network.getApp(); + final Container input = new Container(new SpringGridLayout()); + input.addChild(new Label(lookup("host.name") + ": ")); + input.addChild(host, 1); + input.addChild(new Label(lookup("port.number") + ": ")); + input.addChild(port, 1); + + DialogBuilder.simple(app.getDialogManager()) + .setTitle(lookup("server.dialog")) + .setExtension(d -> d.addChild(input)) + .setOkButton(lookup("button.connect"), d -> connect()) + .setNoButton(lookup("button.cancel"), app::closeApp) + .setOkClose(false) + .setNoClose(false) + .build(this); + } + + /** + * Handles the action for the connect button in the connection dialog. + * Tries to parse the port number and initiate connection to the server. + */ + private void connect() { + LOGGER.log(Level.INFO, "connect to host={0}, port={1}", host, port); //NON-NLS + try { + hostname = host.getText().trim().isEmpty() ? LOCALHOST : host.getText(); + portNumber = Integer.parseInt(port.getText()); + openProgressDialog(); + connectionFuture = network.getApp().getExecutor().submit(this::initNetwork); + } + catch (NumberFormatException e) { + network.getApp().errorDialog(lookup("port.must.be.integer")); + } + } + + /** + * Creates a dialog indicating that the connection is in progress. + */ + private void openProgressDialog() { + progressDialog = DialogBuilder.simple(network.getApp().getDialogManager()) + .setText(lookup("label.connecting")) + .build(); + progressDialog.open(); + } + + /** + * Tries to initialize the network connection. + * + * @throws RuntimeException If an error occurs when creating the client. + */ + private Object initNetwork() { + try { + network.initNetwork(hostname, portNumber); + return null; + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * This method is called by {@linkplain pp.dialog.DialogManager#update(float)} for periodically + * updating this dialog. T + */ + @Override + public void update(float delta) { + if (connectionFuture != null && connectionFuture.isDone()) + try { + connectionFuture.get(); + success(); + } + catch (ExecutionException e) { + failure(e.getCause()); + } + catch (InterruptedException e) { + LOGGER.log(Level.WARNING, "Interrupted!", e); //NON-NLS + Thread.currentThread().interrupt(); + } + } + + /** + * Handles a successful connection to the game server. + */ + private void success() { + connectionFuture = null; + progressDialog.close(); + this.close(); + network.getApp().setInfoText(lookup("wait.for.an.opponent")); + } + + /** + * Handles a failed connection attempt. + * + * @param e The cause of the failure. + */ + private void failure(Throwable e) { + connectionFuture = null; + progressDialog.close(); + network.getApp().errorDialog(lookup("server.connection.failed")); + network.getApp().setInfoText(e.getLocalizedMessage()); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkSupport.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkSupport.java new file mode 100644 index 0000000..71eb22b --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/NetworkSupport.java @@ -0,0 +1,152 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import com.jme3.network.Client; +import com.jme3.network.ClientStateListener; +import com.jme3.network.Message; +import com.jme3.network.MessageListener; +import com.jme3.network.Network; +import pp.battleship.game.client.ServerConnection; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.server.ServerMessage; + +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; + +import static pp.battleship.Resources.lookup; + +/** + * Manages the network connection for the Battleship application. + * Handles connecting to and disconnecting from the server, and sending messages. + */ +class NetworkSupport implements MessageListener, ClientStateListener, ServerConnection { + private static final Logger LOGGER = System.getLogger(NetworkSupport.class.getName()); + private final BattleshipApp app; + private Client client; + + /** + * Constructs a NetworkSupport instance for the given Battleship application. + * + * @param app The Battleship application instance. + */ + public NetworkSupport(BattleshipApp app) { + this.app = app; + } + + /** + * Returns the Battleship application instance. + * + * @return Battleship application instance + */ + BattleshipApp getApp() { + return app; + } + + /** + * Checks if there is a connection to the game server. + * + * @return true if there is a connection to the game server, false otherwise. + */ + @Override + public boolean isConnected() { + return client != null && client.isConnected(); + } + + /** + * Attempts to join the game if there is no connection yet. + * Opens a dialog for the user to enter the host and port information. + */ + @Override + public void connect() { + if (client == null) + new NetworkDialog(this).open(); + } + + /** + * Closes the client connection. + */ + @Override + public void disconnect() { + if (client == null) return; + client.close(); + client = null; + LOGGER.log(Level.INFO, "client closed"); //NON-NLS + } + + /** + * Initializes the network connection. + * + * @param host The server's address. + * @param port The server's port. + * @throws IOException If an I/O error occurs when creating the client. + */ + void initNetwork(String host, int port) throws IOException { + if (client != null) + throw new IllegalStateException("trying to join a game again"); + client = Network.connectToServer(host, port); + client.start(); + client.addMessageListener(this); + client.addClientStateListener(this); + } + + /** + * Called when a message is received from the server. + * + * @param client The client instance that received the message. + * @param message The message received from the server. + */ + @Override + public void messageReceived(Client client, Message message) { + LOGGER.log(Level.INFO, "message received from server: {0}", message); //NON-NLS + if (message instanceof ServerMessage serverMessage) + app.enqueue(() -> serverMessage.accept(app.getGameLogic())); + } + + /** + * Called when the client has successfully connected to the server. + * + * @param client The client that connected to the server. + */ + @Override + public void clientConnected(Client client) { + LOGGER.log(Level.INFO, "Client connected: {0}", client); //NON-NLS + } + + /** + * Called when the client is disconnected from the server. + * + * @param client The client that was disconnected. + * @param disconnectInfo Information about the disconnection. + */ + @Override + public void clientDisconnected(Client client, DisconnectInfo disconnectInfo) { + LOGGER.log(Level.INFO, "Client {0} disconnected: {1}", client, disconnectInfo); //NON-NLS + if (this.client != client) + throw new IllegalArgumentException("parameter value must be client"); + LOGGER.log(Level.INFO, "client still connected: {0}", client.isConnected()); //NON-NLS + this.client = null; + disconnect(); + app.enqueue(() -> app.setInfoText(lookup("lost.connection.to.server"))); + } + + /** + * Sends the specified message to the server. + * + * @param message The message to be sent to the server. + */ + @Override + public void send(ClientMessage message) { + LOGGER.log(Level.INFO, "sending {0}", message); //NON-NLS + if (client == null) + app.errorDialog(lookup("lost.connection.to.server")); + else + client.send(message); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/BattleAppState.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/BattleAppState.java new file mode 100644 index 0000000..1a0fb8a --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/BattleAppState.java @@ -0,0 +1,122 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.input.controls.ActionListener; +import com.jme3.scene.Node; +import com.jme3.system.AppSettings; +import pp.battleship.client.BattleshipAppState; +import pp.battleship.model.IntPoint; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; + +import static pp.battleship.client.BattleshipApp.CLICK; + +/** + * Represents the state responsible for managing the battle interface within the Battleship game. + * This state handles the display and interaction of the battle map, including the opponent's map. + * It manages GUI components, input events, and the layout of the interface when this state is enabled. + */ +public class BattleAppState extends BattleshipAppState { + private static final Logger LOGGER = System.getLogger(BattleAppState.class.getName()); + private static final float DEPTH = 0f; + private static final float GAP = 20f; + + /** + * A listener for handling click events in the battle interface. + * When a click is detected, it triggers the corresponding actions on the opponent's map. + */ + private final ActionListener clickListener = (name, isPressed, tpf) -> click(isPressed); + + /** + * The root node for all GUI components in the battle state. + */ + private final Node battleNode = new Node("Battle"); //NON-NLS + + /** + * A view representing the opponent's map in the GUI. + */ + private MapView opponentMapView; + + /** + * Enables the battle state by initializing, laying out, and adding GUI components. + * Attaches the components to the GUI node and registers input listeners. + */ + @Override + protected void enableState() { + battleNode.detachAllChildren(); + initializeGuiComponents(); + layoutGuiComponents(); + addGuiComponents(); + getApp().getGuiNode().attachChild(battleNode); + getApp().getInputManager().addListener(clickListener, CLICK); + } + + /** + * Disables the battle state by removing GUI components and unregistering input listeners. + * Also handles cleanup of resources, such as the opponent's map view. + */ + @Override + protected void disableState() { + getApp().getGuiNode().detachChild(battleNode); + getApp().getInputManager().removeListener(clickListener); + if (opponentMapView != null) { + opponentMapView.unregister(); + opponentMapView = null; + } + } + + /** + * Initializes the GUI components used in the battle state. + * Creates the opponent's map view and adds a grid overlay to it. + */ + private void initializeGuiComponents() { + opponentMapView = new MapView(getGameLogic().getOpponentMap(), getApp()); + opponentMapView.addGrid(); + } + + /** + * Adds the initialized GUI components to the battle node. + * Currently, it attaches the opponent's map view to the node. + */ + private void addGuiComponents() { + battleNode.attachChild(opponentMapView.getNode()); + } + + /** + * Lays out the GUI components within the window, positioning them appropriately. + * The opponent's map view is positioned based on the window's dimensions and a specified gap. + */ + private void layoutGuiComponents() { + final AppSettings s = getApp().getContext().getSettings(); + final float mapWidth = opponentMapView.getWidth(); + final float mapHeight = opponentMapView.getHeight(); + final float windowWidth = s.getWidth(); + final float windowHeight = s.getHeight(); + + opponentMapView.getNode().setLocalTranslation(windowWidth - mapWidth - GAP, + windowHeight - mapHeight - GAP, + DEPTH); + } + + /** + * Handles click events in the battle interface. If the event indicates a click (not a release), + * it translates the cursor position to the model's coordinate system and triggers the game logic + * for interacting with the opponent's map. + * + * @param isPressed whether the mouse button is currently pressed (true) or released (false) + */ + private void click(boolean isPressed) { + if (!isPressed || showsDialog()) + return; + final IntPoint cursorPos = opponentMapView.mouseToModel(getApp().getInputManager().getCursorPosition()); + LOGGER.log(Level.DEBUG, "click: {0}", cursorPos); //NON-NLS + getGameLogic().clickOpponentMap(cursorPos); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/EditorAppState.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/EditorAppState.java new file mode 100644 index 0000000..3341238 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/EditorAppState.java @@ -0,0 +1,173 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.input.controls.ActionListener; +import com.jme3.math.Vector2f; +import com.jme3.scene.Node; +import com.jme3.system.AppSettings; +import com.simsilica.lemur.Button; +import com.simsilica.lemur.Container; +import pp.battleship.client.BattleshipAppState; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; + +import static pp.battleship.Resources.lookup; +import static pp.battleship.client.BattleshipApp.CLICK; + +/** + * EditorState manages the editor mode in the Battleship game, + * allowing players to place and rotate ships. + */ +public class EditorAppState extends BattleshipAppState { + private static final Logger LOGGER = System.getLogger(EditorAppState.class.getName()); + private static final float DEPTH = 0f; + private static final float GAP = 20f; + + private final ActionListener clickListener = (name, isPressed, tpf) -> click(isPressed); + private final Node editorNode = new Node("Editor"); //NON-NLS + private Container buttonContainer; + private Button rotateButton; + private Button readyButton; + private MapView ownMapView; + private MapView harborView; + private Vector2f oldCursorPosition; + + /** + * Enables the editor state by attaching necessary nodes and listeners. + */ + @Override + protected void enableState() { + editorNode.detachAllChildren(); + initializeGuiComponents(); + addGuiComponents(); + layoutGuiComponents(); + getApp().getGuiNode().attachChild(editorNode); + getApp().getInputManager().addListener(clickListener, CLICK); + } + + /** + * Disables the editor state by detaching nodes and removing listeners. + */ + @Override + protected void disableState() { + getApp().getGuiNode().detachChild(editorNode); + getApp().getInputManager().removeListener(clickListener); + if (ownMapView != null) { + ownMapView.unregister(); + ownMapView = null; + } + if (harborView != null) { + harborView.unregister(); + harborView = null; + } + } + + /** + * Updates the editor state, handling cursor movement and enabling buttons. + * + * @param tpf Time per frame + */ + @Override + public void update(float tpf) { + super.update(tpf); + cursorMovement(); + enableButtons(); + } + + /** + * Enables or disables buttons based on the logic state. + */ + private void enableButtons() { + readyButton.setEnabled(getGameLogic().isMapComplete()); + rotateButton.setEnabled(getGameLogic().movingShip()); + } + + /** + * Handles cursor movement for previewing ship placement. + */ + private void cursorMovement() { + if (!getGameLogic().movingShip() || ownMapView == null || showsDialog()) + return; + final Vector2f cursorPosition = getApp().getInputManager().getCursorPosition(); + if (!cursorPosition.equals(oldCursorPosition)) { + oldCursorPosition = new Vector2f(cursorPosition); + getGameLogic().movePreview(ownMapView.mouseToModel(cursorPosition)); + } + } + + /** + * Initializes the GUI components for the editor. + */ + private void initializeGuiComponents() { + ownMapView = new MapView(getGameLogic().getOwnMap(), getApp()); + harborView = new MapView(getGameLogic().getHarbor(), getApp()); + ownMapView.addGrid(); + rotateButton = new Button(lookup("button.rotate")); + readyButton = new Button(lookup("button.ready")); + rotateButton.addClickCommands(e -> { + if (!showsDialog()) + getGameLogic().rotateShip(); + }); + readyButton.addClickCommands(e -> { + if (!showsDialog()) + getGameLogic().mapFinished(); + }); + buttonContainer = new Container(); + } + + /** + * Adds the GUI components to the editor node. + */ + private void addGuiComponents() { + buttonContainer.addChild(rotateButton, 0, 0); + buttonContainer.addChild(readyButton, 0, 1); + editorNode.attachChild(ownMapView.getNode()); + editorNode.attachChild(harborView.getNode()); + editorNode.attachChild(buttonContainer); + } + + /** + * Lays out the GUI components on the screen. + */ + private void layoutGuiComponents() { + final AppSettings s = getApp().getContext().getSettings(); + final float harborWidth = harborView.getWidth(); + final float harborHeight = harborView.getHeight(); + final float ownMapWidth = ownMapView.getWidth(); + final float ownMapHeight = ownMapView.getHeight(); + final float windowWidth = s.getWidth(); + final float windowHeight = s.getHeight(); + + ownMapView.getNode() + .setLocalTranslation(0.5f * (windowWidth - harborWidth - ownMapWidth - GAP), + 0.5f * (windowHeight - ownMapHeight), + DEPTH); + + harborView.getNode() + .setLocalTranslation(0.5f * (windowWidth - harborWidth + ownMapWidth + GAP), + 0.5f * (windowHeight - harborHeight), + DEPTH); + + buttonContainer.setLocalTranslation(0.5f * (windowWidth - harborWidth - ownMapWidth - GAP), + 0.5f * (windowHeight - ownMapHeight - GAP), + DEPTH); + } + + /** + * Handles click events to place or rotate ships on the maps. + */ + private void click(boolean isPressed) { + if (!isPressed || showsDialog()) return; + final Vector2f cursorPos = getApp().getInputManager().getCursorPosition(); + LOGGER.log(Level.DEBUG, "click: {0}", cursorPos); //NON-NLS + getGameLogic().clickHarbor(harborView.mouseToModel(cursorPos)); + getGameLogic().clickOwnMap(ownMapView.mouseToModel(cursorPos)); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java new file mode 100644 index 0000000..bd16c83 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapView.java @@ -0,0 +1,191 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.material.Material; +import com.jme3.material.RenderState.BlendMode; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial.CullHint; +import com.jme3.scene.shape.Quad; +import pp.battleship.client.BattleshipApp; +import pp.battleship.model.IntPoint; +import pp.battleship.model.ShipMap; +import pp.util.FloatPoint; +import pp.util.Position; + +/** + * Represents the visual view of a {@link ShipMap}, used to display the map structure such as the player's map, harbor, + * and opponent's map. This class handles the graphical representation of the map, including background setup, grid lines, + * and interaction between the model and the view. + */ +class MapView { + private static final float FIELD_SIZE = 40f; + private static final float GRID_LINE_WIDTH = 2f; + private static final float BACKGROUND_DEPTH = -4f; + private static final float GRID_DEPTH = -1f; + private static final ColorRGBA BACKGROUND_COLOR = new ColorRGBA(0, 0.05f, 0.05f, 0.5f); + private static final ColorRGBA GRID_COLOR = ColorRGBA.Green; + + // Reference to the main application and the ship map being visualized + private final BattleshipApp app; + private final Node mapNode = new Node("map"); // NON-NLS + private final ShipMap map; + private final MapViewSynchronizer synchronizer; + + /** + * Constructs a new MapView for a given {@link ShipMap} and {@link BattleshipApp}. + * Initializes the view by setting up the background and registering a synchronizer to listen to changes in the map. + * + * @param map the ship map to visualize + * @param app the main application instance + */ + MapView(ShipMap map, BattleshipApp app) { + this.map = map; + this.app = app; + this.synchronizer = new MapViewSynchronizer(this); + setupBackground(); + app.getGameLogic().addListener(synchronizer); + } + + /** + * Unregisters the {@link MapViewSynchronizer} from the listener list of the ClientGameLogic, + * stopping the view from receiving updates when the underlying {@link ShipMap} changes. + * After calling this method, this MapView instance should no longer be used. + */ + void unregister() { + app.getGameLogic().removeListener(synchronizer); + } + + /** + * Gets the {@link ShipMap} associated with this view. + * + * @return the ship map + */ + public ShipMap getMap() { + return map; + } + + /** + * Gets the {@link BattleshipApp} instance associated with this view. + * + * @return the main application instance + */ + public BattleshipApp getApp() { + return app; + } + + /** + * Sets up the background of the map view using a quad geometry. + * The background is configured with a semi-transparent color and placed at a specific depth. + */ + private void setupBackground() { + final Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); // NON-NLS + mat.setColor("Color", BACKGROUND_COLOR); // NON-NLS + mat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); + final Position corner = modelToView(map.getWidth(), map.getHeight()); + final Geometry background = new Geometry("MapBackground", new Quad(corner.getX(), corner.getY())); + background.setMaterial(mat); + background.setLocalTranslation(0f, 0f, BACKGROUND_DEPTH); + background.setCullHint(CullHint.Never); + mapNode.attachChild(background); + } + + /** + * Adds grid lines to the map view to visually separate the fields within the map. + * The grid lines are drawn based on the dimensions of the ship map. + */ + public void addGrid() { + for (int x = 0; x <= map.getWidth(); x++) { + final Position f = modelToView(x, 0); + final Position t = modelToView(x, map.getHeight()); + mapNode.attachChild(gridLine(f, t)); + } + for (int y = 0; y <= map.getHeight(); y++) { + final Position f = modelToView(0, y); + final Position t = modelToView(map.getWidth(), y); + mapNode.attachChild(gridLine(f, t)); + } + } + + /** + * Gets the root node containing all visual elements in this map view. + * + * @return the root node for the map view + */ + public Node getNode() { + return mapNode; + } + + /** + * Gets the total width of the map in view coordinates. + * + * @return the width of the map in view coordinates + */ + public float getWidth() { + return FIELD_SIZE * map.getWidth(); + } + + /** + * Gets the total height of the map in view coordinates. + * + * @return the height of the map in view coordinates + */ + public float getHeight() { + return FIELD_SIZE * map.getHeight(); + } + + /** + * Converts coordinates from view coordinates to model coordinates. + * + * @param x the x-coordinate in view space + * @param y the y-coordinate in view space + * @return the corresponding model coordinates as an {@link IntPoint} + */ + public IntPoint viewToModel(float x, float y) { + return new IntPoint((int) Math.floor(x / FIELD_SIZE), (int) Math.floor(y / FIELD_SIZE)); + } + + /** + * Converts coordinates from model coordinates to view coordinates. + * + * @param x the x-coordinate in model space + * @param y the y-coordinate in model space + * @return the corresponding view coordinates as a {@link Position} + */ + public Position modelToView(float x, float y) { + return new FloatPoint(x * FIELD_SIZE, y * FIELD_SIZE); + } + + /** + * Converts the mouse position to model coordinates. + * This method takes into account the map's transformation in the 3D scene. + * + * @param pos the 2D vector representing the mouse position in the view + * @return the corresponding model coordinates as an {@link IntPoint} + */ + public IntPoint mouseToModel(Vector2f pos) { + final Vector3f world = new Vector3f(pos.getX(), pos.getY(), 0f); + final Vector3f view = mapNode.getWorldTransform().transformInverseVector(world, null); + return viewToModel(view.getX(), view.getY()); + } + + /** + * Creates a visual representation of a grid line between two positions. + * + * @param p1 the start position of the grid line + * @param p2 the end position of the grid line + * @return a {@link Geometry} representing the grid line + */ + private Geometry gridLine(Position p1, Position p2) { + return app.getDraw().makeFatLine(p1, p2, GRID_DEPTH, GRID_COLOR, GRID_LINE_WIDTH); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java new file mode 100644 index 0000000..a6075fd --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/MapViewSynchronizer.java @@ -0,0 +1,125 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.math.ColorRGBA; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; +import pp.battleship.model.Battleship; +import pp.battleship.model.Shot; +import pp.util.Position; + +/** + * Synchronizes the visual representation of the ship map with the game model. + * It handles the rendering of ships and shots on the map view, updating the view + * whenever changes occur in the model. + */ +class MapViewSynchronizer extends ShipMapSynchronizer { + // Constants for rendering properties + private static final float SHIP_LINE_WIDTH = 6f; + private static final float SHOT_DEPTH = -2f; + private static final float SHIP_DEPTH = 0f; + private static final float INDENT = 4f; + + // Colors used for different visual elements + private static final ColorRGBA HIT_COLOR = ColorRGBA.Red; + private static final ColorRGBA MISS_COLOR = ColorRGBA.Blue; + private static final ColorRGBA SHIP_BORDER_COLOR = ColorRGBA.White; + private static final ColorRGBA PREVIEW_COLOR = ColorRGBA.Gray; + private static final ColorRGBA ERROR_COLOR = ColorRGBA.Red; + + // The MapView associated with this synchronizer + private final MapView view; + + /** + * Constructs a new MapViewSynchronizer for the given MapView. + * Initializes the synchronizer and adds existing elements from the model to the view. + * + * @param view the MapView to synchronize with the game model + */ + public MapViewSynchronizer(MapView view) { + super(view.getMap(), view.getNode()); + this.view = view; + addExisting(); + } + + /** + * Creates a visual representation of a shot on the map. + * A hit shot is represented in red, while a miss is represented in blue. + * + * @param shot the Shot object representing the shot in the model + * @return a Spatial representing the shot on the map + */ + @Override + public Spatial visit(Shot shot) { + // Convert the shot's model coordinates to view coordinates + final Position p1 = view.modelToView(shot.getX(), shot.getY()); + final Position p2 = view.modelToView(shot.getX() + 1, shot.getY() + 1); + final ColorRGBA color = shot.isHit() ? HIT_COLOR : MISS_COLOR; + + // Create and return a rectangle representing the shot + return view.getApp().getDraw().makeRectangle(p1.getX(), p1.getY(), + SHOT_DEPTH, + p2.getX() - p1.getX(), p2.getY() - p1.getY(), + color); + } + + /** + * Creates a visual representation of a battleship on the map. + * The ship's border color depends on its status: normal, valid preview, or invalid preview. + * + * @param ship the Battleship object representing the ship in the model + * @return a Spatial representing the ship on the map + */ + @Override + public Spatial visit(Battleship ship) { + // Create a node to represent the ship + final Node shipNode = new Node("ship"); //NON-NLS + + // Convert the ship's model coordinates to view coordinates + final Position p1 = view.modelToView(ship.getMinX(), ship.getMinY()); + final Position p2 = view.modelToView(ship.getMaxX() + 1, ship.getMaxY() + 1); + + // Calculate the coordinates for the ship's bounding box + final float x1 = p1.getX() + INDENT; + final float y1 = p1.getY() + INDENT; + final float x2 = p2.getX() - INDENT; + final float y2 = p2.getY() - INDENT; + + // Determine the color based on the ship's status + final ColorRGBA color = switch (ship.getStatus()) { + case NORMAL -> SHIP_BORDER_COLOR; + case VALID_PREVIEW -> PREVIEW_COLOR; + case INVALID_PREVIEW -> ERROR_COLOR; + }; + + // Add the ship's borders to the node + shipNode.attachChild(shipLine(x1, y1, x2, y1, color)); + shipNode.attachChild(shipLine(x1, y2, x2, y2, color)); + shipNode.attachChild(shipLine(x1, y1, x1, y2, color)); + shipNode.attachChild(shipLine(x2, y1, x2, y2, color)); + + // Return the complete ship representation + return shipNode; + } + + /** + * Creates a line geometry representing part of the ship's border. + * + * @param x1 the starting x-coordinate of the line + * @param y1 the starting y-coordinate of the line + * @param x2 the ending x-coordinate of the line + * @param y2 the ending y-coordinate of the line + * @param color the color of the line + * @return a Geometry representing the line + */ + private Geometry shipLine(float x1, float y1, float x2, float y2, ColorRGBA color) { + return view.getApp().getDraw().makeFatLine(x1, y1, x2, y2, SHIP_DEPTH, color, SHIP_LINE_WIDTH); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaAppState.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaAppState.java new file mode 100644 index 0000000..c9bc821 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaAppState.java @@ -0,0 +1,203 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.app.Application; +import com.jme3.app.state.AppStateManager; +import com.jme3.asset.AssetManager; +import com.jme3.light.AmbientLight; +import com.jme3.light.DirectionalLight; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.renderer.Camera; +import com.jme3.renderer.queue.RenderQueue.ShadowMode; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; +import com.jme3.scene.shape.Box; +import com.jme3.shadow.DirectionalLightShadowRenderer; +import com.jme3.shadow.EdgeFilteringMode; +import com.jme3.texture.Texture; +import com.jme3.util.SkyFactory; +import com.jme3.util.TangentBinormalGenerator; +import pp.battleship.client.BattleshipAppState; +import pp.battleship.model.ShipMap; +import pp.util.FloatMath; + +import static pp.util.FloatMath.TWO_PI; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sin; +import static pp.util.FloatMath.sqrt; + +/** + * Manages the rendering and visual aspects of the sea and sky in the Battleship game. + * This state is responsible for setting up and updating the sea, sky, and lighting + * conditions, and controls the camera to create a dynamic view of the game environment. + */ +public class SeaAppState extends BattleshipAppState { + /** + * The path to the sea texture material. + */ + private static final String SEA_TEXTURE = "Textures/Terrain/Water/Water.j3m"; //NON-NLS + private static final float ABOVE_SEA_LEVEL = 4f; + private static final float INCLINATION = 2.5f; + + /** + * The root node for all visual elements in this state. + */ + private final Node viewNode = new Node("view"); //NON-NLS + + /** + * The node containing the scene elements, such as the sea surface. + */ + private final Node sceneNode = new Node("scene"); //NON-NLS + + /** + * Synchronizes the sea's visual representation with the game logic. + */ + private SeaSynchronizer synchronizer; + + /** + * The current angle of the camera around the center of the map. + */ + private float cameraAngle; + + /** + * Initializes the state by setting up the sky, lights, and other visual components. + * This method is called when the state is first attached to the state manager. + * + * @param stateManager the state manager + * @param application the application + */ + @Override + public void initialize(AppStateManager stateManager, Application application) { + super.initialize(stateManager, application); + viewNode.attachChild(sceneNode); + setupLights(); + setupSky(); + } + + /** + * Enables the sea and sky state, setting up the scene and registering any necessary listeners. + * This method is called when the state is set to active. + */ + @Override + protected void enableState() { + sceneNode.detachAllChildren(); + setupScene(); + if (synchronizer == null) { + synchronizer = new SeaSynchronizer(getApp(), sceneNode, getGameLogic().getOwnMap()); + getGameLogic().addListener(synchronizer); + } + getApp().getRootNode().attachChild(viewNode); + } + + /** + * Disables the sea and sky state, removing visual elements from the scene and unregistering listeners. + * This method is called when the state is set to inactive. + */ + @Override + protected void disableState() { + getApp().getRootNode().detachChild(viewNode); + if (synchronizer != null) { + getGameLogic().removeListener(synchronizer); + synchronizer = null; + } + } + + /** + * Updates the state each frame, moving the camera to simulate it circling around the map. + * + * @param tpf the time per frame (seconds) + */ + @Override + public void update(float tpf) { + super.update(tpf); + cameraAngle += TWO_PI * 0.05f * tpf; + adjustCamera(); + } + + /** + * Sets up the lighting for the scene, including directional and ambient lights. + * Also configures shadows to enhance the visual depth of the scene. + */ + private void setupLights() { + final AssetManager assetManager = getApp().getAssetManager(); + final DirectionalLightShadowRenderer shRend = new DirectionalLightShadowRenderer(assetManager, 2048, 3); + shRend.setLambda(0.55f); + shRend.setShadowIntensity(0.6f); + shRend.setEdgeFilteringMode(EdgeFilteringMode.Bilinear); + getApp().getViewPort().addProcessor(shRend); + + final DirectionalLight sun = new DirectionalLight(); + sun.setDirection(new Vector3f(-1f, -0.7f, -1f).normalizeLocal()); + viewNode.addLight(sun); + shRend.setLight(sun); + + final AmbientLight ambientLight = new AmbientLight(new ColorRGBA(0.3f, 0.3f, 0.3f, 0f)); + viewNode.addLight(ambientLight); + } + + /** + * Sets up the sky in the scene using a skybox with textures for all six directions. + * This creates a realistic and immersive environment for the sea. + */ + private void setupSky() { + final AssetManager assetManager = getApp().getAssetManager(); + final Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); //NON-NLS + final Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); //NON-NLS + final Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); //NON-NLS + final Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); //NON-NLS + final Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); //NON-NLS + final Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); //NON-NLS + final Spatial sky = SkyFactory.createSky(assetManager, west, east, north, south, up, down); + sky.rotate(0f, FloatMath.PI, 0f); + viewNode.attachChild(sky); + } + + /** + * Sets up the sea surface in the scene. This includes creating the sea mesh, + * applying textures, and enabling shadows. + */ + private void setupScene() { + final ShipMap ownMap = getGameLogic().getOwnMap(); + final float x = 0.5f * ownMap.getWidth(); + final float y = 0.5f * ownMap.getHeight(); + final Box seaMesh = new Box(y + 0.5f, 0.1f, x + 0.5f); + final Geometry seaGeo = new Geometry("sea", seaMesh); //NON-NLS + seaGeo.setLocalTranslation(new Vector3f(y, -0.1f, x)); + seaMesh.scaleTextureCoordinates(new Vector2f(4f, 4f)); + final Material seaMat = getApp().getAssetManager().loadMaterial(SEA_TEXTURE); + seaGeo.setMaterial(seaMat); + seaGeo.setShadowMode(ShadowMode.CastAndReceive); + TangentBinormalGenerator.generate(seaGeo); + sceneNode.attachChild(seaGeo); + } + + /** + * Adjusts the camera position and orientation to create a circular motion around + * the center of the map. This provides a dynamic view of the sea and surrounding environment. + */ + private void adjustCamera() { + final ShipMap ownMap = getGameLogic().getOwnMap(); + final float mx = 0.5f * ownMap.getWidth(); + final float my = 0.5f * ownMap.getHeight(); + final float radius = 2f * sqrt(mx * mx + my + my); + final float cos = radius * cos(cameraAngle); + final float sin = radius * sin(cameraAngle); + final float x = mx - cos; + final float y = my - sin; + final Camera camera = getApp().getCamera(); + camera.setLocation(new Vector3f(y, ABOVE_SEA_LEVEL, x)); + camera.getRotation().lookAt(new Vector3f(sin, -INCLINATION, cos), + Vector3f.UNIT_Y); + camera.update(); + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java new file mode 100644 index 0000000..dea0741 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/SeaSynchronizer.java @@ -0,0 +1,213 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.material.Material; +import com.jme3.material.RenderState.BlendMode; +import com.jme3.math.ColorRGBA; +import com.jme3.renderer.queue.RenderQueue.ShadowMode; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; +import com.jme3.scene.shape.Box; +import com.jme3.scene.shape.Cylinder; +import pp.battleship.client.BattleshipApp; +import pp.battleship.model.Battleship; +import pp.battleship.model.Rotation; +import pp.battleship.model.ShipMap; +import pp.battleship.model.Shot; + +import static java.util.Objects.requireNonNull; +import static pp.util.FloatMath.HALF_PI; +import static pp.util.FloatMath.PI; + +/** + * The {@code SeaSynchronizer} class is responsible for synchronizing the graphical + * representation of the ships and shots on the sea map with the underlying data model. + * It extends the {@link ShipMapSynchronizer} to provide specific synchronization + * logic for the sea map. + */ +class SeaSynchronizer extends ShipMapSynchronizer { + private static final String UNSHADED = "Common/MatDefs/Misc/Unshaded.j3md"; //NON-NLS + private static final String KING_GEORGE_V_MODEL = "Models/KingGeorgeV/KingGeorgeV.j3o"; //NON-NLS + private static final String COLOR = "Color"; //NON-NLS + private static final String SHIP = "ship"; //NON-NLS + private static final String SHOT = "shot"; //NON-NLS + private static final ColorRGBA BOX_COLOR = ColorRGBA.Gray; + private static final ColorRGBA SPLASH_COLOR = new ColorRGBA(0f, 0f, 1f, 0.4f); + private static final ColorRGBA HIT_COLOR = new ColorRGBA(1f, 0f, 0f, 0.4f); + + private final ShipMap map; + private final BattleshipApp app; + + /** + * Constructs a {@code SeaSynchronizer} object with the specified application, root node, and ship map. + * + * @param app the Battleship application + * @param root the root node to which graphical elements will be attached + * @param map the ship map containing the ships and shots + */ + public SeaSynchronizer(BattleshipApp app, Node root, ShipMap map) { + super(app.getGameLogic().getOwnMap(), root); + this.app = app; + this.map = map; + addExisting(); + } + + /** + * Visits a {@link Shot} and creates a graphical representation of it. + * If the shot is a hit, it attaches the representation to the ship node. + * + * @param shot the shot to be represented + * @return the graphical representation of the shot, or null if the shot is a hit + * and the representation has been attached to the ship node + */ + @Override + public Spatial visit(Shot shot) { + return shot.isHit() ? handleHit(shot) : createCylinder(shot); + } + + /** + * Handles a hit by attaching its representation to the node that + * contains the ship model as a child so that it moves with the ship. + * + * @param shot a hit + * @return always null to prevent the representation from being attached + * to the items node as well + */ + private Spatial handleHit(Shot shot) { + final Battleship ship = requireNonNull(map.findShipAt(shot), "Missing ship"); + final Node shipNode = requireNonNull((Node) getSpatial(ship), "Missing ship node"); + + final Geometry representation = createCylinder(shot); + representation.getLocalTranslation().subtractLocal(shipNode.getLocalTranslation()); + shipNode.attachChild(representation); + + return null; + } + + /** + * Creates a cylinder geometry representing the specified shot. + * The appearance of the cylinder depends on whether the shot is a hit or a miss. + * + * @param shot the shot to be represented + * @return the geometry representing the shot + */ + private Geometry createCylinder(Shot shot) { + final ColorRGBA color = shot.isHit() ? HIT_COLOR : SPLASH_COLOR; + final float height = shot.isHit() ? 1.2f : 0.1f; + + final Cylinder cylinder = new Cylinder(2, 20, 0.45f, height, true); + final Geometry geometry = new Geometry(SHOT, cylinder); + + geometry.setMaterial(createColoredMaterial(color)); + geometry.rotate(HALF_PI, 0f, 0f); + // compute the center of the shot in world coordinates + geometry.setLocalTranslation(shot.getY() + 0.5f, 0f, shot.getX() + 0.5f); + + return geometry; + } + + /** + * Visits a {@link Battleship} and creates a graphical representation of it. + * The representation is either a 3D model or a simple box depending on the + * type of battleship. + * + * @param ship the battleship to be represented + * @return the node containing the graphical representation of the battleship + */ + @Override + public Spatial visit(Battleship ship) { + final Node node = new Node(SHIP); + node.attachChild(createShip(ship)); + // compute the center of the ship in world coordinates + final float x = 0.5f * (ship.getMinY() + ship.getMaxY() + 1f); + final float z = 0.5f * (ship.getMinX() + ship.getMaxX() + 1f); + node.setLocalTranslation(x, 0f, z); + node.addControl(new ShipControl(ship)); + return node; + } + + /** + * Creates the appropriate graphical representation of the specified battleship. + * The representation is either a detailed model or a simple box based on the length of the ship. + * + * @param ship the battleship to be represented + * @return the spatial representing the battleship + */ + private Spatial createShip(Battleship ship) { + return ship.getLength() == 4 ? createBattleship(ship) : createBox(ship); + } + + /** + * Creates a simple box to represent a battleship that is not of the "King George V" type. + * + * @param ship the battleship to be represented + * @return the geometry representing the battleship as a box + */ + private Spatial createBox(Battleship ship) { + final Box box = new Box(0.5f * (ship.getMaxY() - ship.getMinY()) + 0.3f, + 0.3f, + 0.5f * (ship.getMaxX() - ship.getMinX()) + 0.3f); + final Geometry geometry = new Geometry(SHIP, box); + geometry.setMaterial(createColoredMaterial(BOX_COLOR)); + geometry.setShadowMode(ShadowMode.CastAndReceive); + + return geometry; + } + + /** + * Creates a new {@link Material} with the specified color. + * If the color includes transparency (i.e., alpha value less than 1), + * the material's render state is set to use alpha blending, allowing for + * semi-transparent rendering. + * + * @param color the {@link ColorRGBA} to be applied to the material. If the alpha value + * of the color is less than 1, the material will support transparency. + * @return a {@link Material} instance configured with the specified color and, + * if necessary, alpha blending enabled. + */ + private Material createColoredMaterial(ColorRGBA color) { + final Material material = new Material(app.getAssetManager(), UNSHADED); + if (color.getAlpha() < 1f) + material.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); + material.setColor(COLOR, color); + return material; + } + + /** + * Creates a detailed 3D model to represent a "King George V" battleship. + * + * @param ship the battleship to be represented + * @return the spatial representing the "King George V" battleship + */ + private Spatial createBattleship(Battleship ship) { + final Spatial model = app.getAssetManager().loadModel(KING_GEORGE_V_MODEL); + + model.rotate(-HALF_PI, calculateRotationAngle(ship.getRot()), 0f); + model.scale(1.48f); + model.setShadowMode(ShadowMode.CastAndReceive); + + return model; + } + + /** + * Calculates the rotation angle for the specified rotation. + * + * @param rot the rotation of the battleship + * @return the rotation angle in radians + */ + private static float calculateRotationAngle(Rotation rot) { + return switch (rot) { + case RIGHT -> HALF_PI; + case DOWN -> 0f; + case LEFT -> -HALF_PI; + case UP -> PI; + }; + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipControl.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipControl.java new file mode 100644 index 0000000..81acfbb --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipControl.java @@ -0,0 +1,106 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.ViewPort; +import com.jme3.scene.control.AbstractControl; +import pp.battleship.model.Battleship; + +import static pp.util.FloatMath.DEG_TO_RAD; +import static pp.util.FloatMath.TWO_PI; +import static pp.util.FloatMath.sin; + +/** + * Controls the oscillating pitch motion of a battleship model in the game. + * The ship oscillates to simulate a realistic movement on water, based on its orientation and length. + */ +class ShipControl extends AbstractControl { + /** + * The axis of rotation for the ship's pitch (tilting forward and backward). + */ + private final Vector3f axis; + + /** + * The duration of one complete oscillation cycle in seconds. + */ + private final float cycle; + + /** + * The amplitude of the pitch oscillation in radians, determining how much the ship tilts. + */ + private final float amplitude; + + /** + * A quaternion representing the ship's current pitch rotation. + */ + private final Quaternion pitch = new Quaternion(); + + /** + * The current time within the oscillation cycle, used to calculate the ship's pitch angle. + */ + private float time; + + /** + * Constructs a new ShipControl instance for the specified Battleship. + * The ship's orientation determines the axis of rotation, while its length influences + * the cycle duration and amplitude of the oscillation. + * + * @param ship the Battleship object to control + */ + public ShipControl(Battleship ship) { + // Determine the axis of rotation based on the ship's orientation + axis = switch (ship.getRot()) { + case LEFT, RIGHT -> Vector3f.UNIT_X; + case UP, DOWN -> Vector3f.UNIT_Z; + }; + + // Set the cycle duration and amplitude based on the ship's length + cycle = ship.getLength() * 2f; + amplitude = 5f * DEG_TO_RAD / ship.getLength(); + } + + /** + * Updates the ship's pitch oscillation each frame. The ship's pitch is adjusted + * to create a continuous tilting motion, simulating the effect of waves. + * + * @param tpf time per frame (in seconds), used to calculate the new pitch angle + */ + @Override + protected void controlUpdate(float tpf) { + // If spatial is null, do nothing + if (spatial == null) return; + + // Update the time within the oscillation cycle + time = (time + tpf) % cycle; + + // Calculate the current angle of the oscillation + final float angle = amplitude * sin(time * TWO_PI / cycle); + + // Update the pitch Quaternion with the new angle + pitch.fromAngleAxis(angle, axis); + + // Apply the pitch rotation to the spatial + spatial.setLocalRotation(pitch); + } + + /** + * This method is called during the rendering phase, but it does not perform any + * operations in this implementation as the control only influences the spatial's + * transformation, not its rendering process. + * + * @param rm the RenderManager rendering the controlled Spatial (not null) + * @param vp the ViewPort being rendered (not null) + */ + @Override + protected void controlRender(RenderManager rm, ViewPort vp) { + // No rendering logic is needed for this control + } +} diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipMapSynchronizer.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipMapSynchronizer.java new file mode 100644 index 0000000..6af0c80 --- /dev/null +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/ShipMapSynchronizer.java @@ -0,0 +1,89 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client.gui; + +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; +import pp.battleship.model.Item; +import pp.battleship.model.ShipMap; +import pp.battleship.model.Visitor; +import pp.battleship.notification.GameEventListener; +import pp.battleship.notification.ItemAddedEvent; +import pp.battleship.notification.ItemRemovedEvent; +import pp.view.ModelViewSynchronizer; + +/** + * Abstract base class for synchronizing the visual representation of a {@link ShipMap} with its model state. + * This class handles the addition and removal of items from the ship map, ensuring that changes in the model + * are accurately reflected in the view. + *

+ * Subclasses are responsible for providing the specific implementation of how each item in the map + * is represented visually by implementing the {@link Visitor} interface. + *

+ */ +abstract class ShipMapSynchronizer extends ModelViewSynchronizer implements Visitor, GameEventListener { + // The ship map that this synchronizer is responsible for + private final ShipMap shipMap; + + /** + * Constructs a new ShipMapSynchronizer. + * Initializes the synchronizer with the provided ship map and the root node for attaching view representations. + * + * @param map the ship map to be synchronized + * @param root the root node to which the view representations of the ship map items are attached + */ + protected ShipMapSynchronizer(ShipMap map, Node root) { + super(root); + this.shipMap = map; + } + + /** + * Translates a model item into its corresponding visual representation. + * The specific visual representation is determined by the concrete implementation of the {@link Visitor} interface. + * + * @param item the item from the model to be translated + * @return the visual representation of the item as a {@link Spatial} + */ + @Override + protected Spatial translate(Item item) { + return item.accept(this); + } + + /** + * Adds the existing items from the ship map to the view. + * This method should be called during initialization to ensure that all current items in the ship map + * are visually represented. + */ + protected void addExisting() { + shipMap.getItems().forEach(this::add); + } + + /** + * Handles the event when an item is removed from the ship map. + * Removes the visual representation of the item from the view if it belongs to the synchronized ship map. + * + * @param event the event indicating that an item has been removed from the ship map + */ + @Override + public void receivedEvent(ItemRemovedEvent event) { + if (shipMap == event.map()) + delete(event.item()); + } + + /** + * Handles the event when an item is added to the ship map. + * Adds the visual representation of the new item to the view if it belongs to the synchronized ship map. + * + * @param event the event indicating that an item has been added to the ship map + */ + @Override + public void receivedEvent(ItemAddedEvent event) { + if (shipMap == event.map()) + add(event.item()); + } +} diff --git a/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/KingGeorgeV.j3o b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/KingGeorgeV.j3o new file mode 100644 index 0000000..b030d91 Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/KingGeorgeV.j3o differ diff --git a/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V.jpg b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V.jpg new file mode 100644 index 0000000..b6f59cb Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V.jpg differ diff --git a/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg new file mode 100644 index 0000000..cbd05be Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg differ diff --git a/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/README.txt b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/README.txt new file mode 100644 index 0000000..ce2ac33 --- /dev/null +++ b/Projekte/battleship/client/src/main/resources/Models/KingGeorgeV/README.txt @@ -0,0 +1,3 @@ +based on: +https://free3d.com/3d-model/wwii-ship-uk-king-george-v-class-battleship-v1--185381.html +License: Free Personal Use Only \ No newline at end of file diff --git a/Projekte/battleship/client/src/main/resources/Sound/Effects/explosion.wav b/Projekte/battleship/client/src/main/resources/Sound/Effects/explosion.wav new file mode 100644 index 0000000..5184b68 Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Sound/Effects/explosion.wav differ diff --git a/Projekte/battleship/client/src/main/resources/Sound/Effects/splash.wav b/Projekte/battleship/client/src/main/resources/Sound/Effects/splash.wav new file mode 100644 index 0000000..7f3bc56 Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Sound/Effects/splash.wav differ diff --git a/Projekte/battleship/client/src/main/resources/Sound/Effects/sunken.wav b/Projekte/battleship/client/src/main/resources/Sound/Effects/sunken.wav new file mode 100644 index 0000000..603cae9 Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Sound/Effects/sunken.wav differ diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/README.txt b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/README.txt new file mode 100644 index 0000000..5a7378c --- /dev/null +++ b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/README.txt @@ -0,0 +1,4 @@ +based on: +water 002 +by Katsukagi on 29/11/2018 +https://3dtextures.me/2018/11/29/water-002/ \ No newline at end of file diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water.j3m b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water.j3m new file mode 100644 index 0000000..f99fa4d --- /dev/null +++ b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water.j3m @@ -0,0 +1,14 @@ +Material Water : Common/MatDefs/Light/Lighting.j3md { + MaterialParameters { + Shininess : 64 + DiffuseMap : Repeat Textures/Terrain/Water/Water_002_COLOR.jpg + NormalMap : Repeat Textures/Terrain/Water/Water_002_NORM.jpg + SpecularMap : Repeat Textures/Terrain/Water/Water_002_ROUGH.jpg + ParallaxMap : Repeat Textures/Terrain/Water/Water_002_DISP.png + // PackedNormalParallax : true + // UseMaterialColors : true + Ambient : 0.5 0.5 0.5 1.0 + Diffuse : 1.0 1.0 1.0 1.0 + Specular : 1.0 1.0 1.0 1.0 + } +} \ No newline at end of file diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_COLOR.jpg b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_COLOR.jpg new file mode 100644 index 0000000..a28ed8c Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_COLOR.jpg differ diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_DISP.png b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_DISP.png new file mode 100644 index 0000000..6441bcf Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_DISP.png differ diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_NORM.jpg b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_NORM.jpg new file mode 100644 index 0000000..f7fdefe Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_NORM.jpg differ diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_OCC.jpg b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_OCC.jpg new file mode 100644 index 0000000..fba9c2d Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_OCC.jpg differ diff --git a/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_ROUGH.jpg b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_ROUGH.jpg new file mode 100644 index 0000000..8db62be Binary files /dev/null and b/Projekte/battleship/client/src/main/resources/Textures/Terrain/Water/Water_002_ROUGH.jpg differ diff --git a/Projekte/battleship/converter/build.gradle b/Projekte/battleship/converter/build.gradle new file mode 100644 index 0000000..48e27a9 --- /dev/null +++ b/Projekte/battleship/converter/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'buildlogic.jme-application-conventions' +} + +description = 'Battleship converter for resources' + +dependencies { + implementation libs.jme3.core + + runtimeOnly libs.jme3.desktop + runtimeOnly libs.jme3.plugins +} + +application { + mainClass = 'pp.battleship.exporter.ModelExporter' +} diff --git a/Projekte/battleship/converter/src/main/java/pp/battleship/exporter/ModelExporter.java b/Projekte/battleship/converter/src/main/java/pp/battleship/exporter/ModelExporter.java new file mode 100644 index 0000000..819fc9d --- /dev/null +++ b/Projekte/battleship/converter/src/main/java/pp/battleship/exporter/ModelExporter.java @@ -0,0 +1,69 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.exporter; + +import com.jme3.app.SimpleApplication; +import com.jme3.export.JmeExporter; +import com.jme3.export.binary.BinaryExporter; +import com.jme3.scene.Spatial; +import com.jme3.system.JmeContext; +import com.jme3.util.TangentBinormalGenerator; + +import java.io.File; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; + +/** + * This class transforms models into j3o format. + */ +public class ModelExporter extends SimpleApplication { + private static final Logger LOGGER = System.getLogger(ModelExporter.class.getName()); + + /** + * The main method of the converter + * + * @param args input args + */ + public static void main(String[] args) { + ModelExporter application = new ModelExporter(); + application.start(JmeContext.Type.Headless); + } + + /** + * Overrides {@link com.jme3.app.SimpleApplication#simpleInitApp()}. + * It initializes a simple app by exporting robots and rocks. + */ + @Override + public void simpleInitApp() { + export("Models/KingGeorgeV/King_George_V.obj", "KingGeorgeV.j3o"); //NON-NLS + + stop(); + } + + /** + * Exports spatial into a file + * + * @param fileName the file name of the model + * @param exportFileName the name of the file where the .j3o file is going to be stored + */ + private void export(String fileName, String exportFileName) { + final File file = new File(exportFileName); + JmeExporter exporter = BinaryExporter.getInstance(); + try { + final Spatial model = getAssetManager().loadModel(fileName); + TangentBinormalGenerator.generate(model); + exporter.save(model, file); + } + catch (IOException exception) { + LOGGER.log(Level.ERROR, "write to {0} failed", file); //NON-NLS + throw new RuntimeException(exception); + } + LOGGER.log(Level.INFO, "wrote file {0}", file); //NON-NLS + } +} diff --git a/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.jpg b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.jpg new file mode 100644 index 0000000..b6f59cb Binary files /dev/null and b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.jpg differ diff --git a/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.mtl b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.mtl new file mode 100644 index 0000000..cc36563 --- /dev/null +++ b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.mtl @@ -0,0 +1,18 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 16.03.2012 14:15:53 + +newmtl _King_George_V + Ns 60.0000 + Ni 1.5000 + d 1.0000 + Tr 0.0000 + Tf 1.0000 1.0000 1.0000 + illum 2 + Ka 1.0000 1.0000 1.0000 + Kd 1.0000 1.0000 1.0000 + Ks 0.4500 0.4500 0.4500 + Ke 0.0000 0.0000 0.0000 + map_Ka King_George_V.jpg + map_Kd King_George_V.jpg + map_bump King_George_V_bump.jpg + bump King_George_V_bump.jpg diff --git a/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.obj b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.obj new file mode 100644 index 0000000..7a2907a --- /dev/null +++ b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V.obj @@ -0,0 +1,31546 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 16.03.2012 14:15:53 + +mtllib King_George_V.mtl + +# +# object _King_George_V_body +# + +v -1.3333 -0.0028 0.1370 +v -1.2081 -0.0418 0.1371 +v -1.2085 -0.0448 0.1483 +v -1.3357 -0.0029 0.1483 +v -0.0500 -0.1955 0.1381 +v 0.3649 -0.1931 0.1384 +v 0.3649 -0.1933 0.1482 +v -0.0500 -0.1955 0.1482 +v 0.6056 -0.1838 0.1386 +v 0.6056 -0.1843 0.1482 +v 0.8463 -0.1595 0.0736 +v 0.9646 -0.1376 0.0748 +v 0.9646 -0.1468 0.1390 +v 0.8463 -0.1669 0.1389 +v 1.0509 -0.1229 0.0759 +v 1.1864 -0.0812 0.0790 +v 1.1792 -0.0875 0.1396 +v 1.0509 -0.1282 0.1392 +v 1.3357 -0.0044 0.0830 +v 1.3249 -0.0047 0.1401 +v 0.6056 -0.1804 0.0714 +v -0.0500 -0.1955 0.0672 +v -0.3543 -0.1838 0.1378 +v -0.3543 -0.1838 0.0650 +v -0.7432 -0.1235 0.0613 +v -0.7432 -0.1422 0.1374 +v -0.9125 -0.1137 0.1374 +v -0.9125 -0.0866 0.0600 +v -1.0817 -0.0769 0.1373 +v -1.0817 -0.0487 0.0589 +v -1.2053 -0.0211 0.0584 +v 0.8463 -0.1298 -0.0073 +v 0.9646 -0.1102 0.0127 +v 1.0509 -0.0961 0.0271 +v 1.1864 -0.0628 0.0496 +v 1.3227 -0.0039 0.0675 +v 0.6056 -0.1700 -0.0155 +v -0.7432 -0.1208 -0.0230 +v -0.3543 -0.1838 -0.0193 +v 0.3649 -0.1911 0.0695 +v -0.0500 -0.1955 -0.0171 +v 0.3649 -0.1887 -0.0148 +v -1.0783 -0.0444 -0.0254 +v -0.9125 -0.0818 -0.0243 +v -1.1985 -0.0186 -0.0269 +v -1.3168 -0.0023 0.0579 +v -1.2954 -0.0023 -0.0264 +v -1.2085 0.0448 0.1483 +v -1.2081 0.0418 0.1371 +v -1.3333 0.0028 0.1370 +v -1.3357 0.0029 0.1483 +v 0.3649 0.1933 0.1482 +v 0.3649 0.1931 0.1384 +v -0.0500 0.1955 0.1381 +v -0.0500 0.1955 0.1482 +v 0.6056 0.1843 0.1482 +v 0.6056 0.1838 0.1386 +v 0.8463 0.1595 0.0736 +v 0.8463 0.1669 0.1389 +v 0.9646 0.1468 0.1390 +v 0.9646 0.1376 0.0748 +v 1.0509 0.1229 0.0759 +v 1.0509 0.1282 0.1392 +v 1.1792 0.0875 0.1396 +v 1.1864 0.0812 0.0790 +v 1.3249 0.0047 0.1401 +v 1.3357 0.0044 0.0830 +v 0.6056 0.1804 0.0714 +v -0.3543 0.1838 0.1378 +v -0.0500 0.1955 0.0672 +v -0.3543 0.1838 0.0650 +v -0.9125 0.1137 0.1374 +v -0.7432 0.1422 0.1374 +v -0.7432 0.1235 0.0613 +v -0.9125 0.0866 0.0600 +v -1.0817 0.0769 0.1373 +v -1.0817 0.0487 0.0589 +v -1.2053 0.0211 0.0584 +v 0.9646 0.1102 0.0127 +v 0.8463 0.1298 -0.0073 +v 1.1864 0.0628 0.0496 +v 1.0509 0.0961 0.0271 +v 1.3227 0.0039 0.0675 +v 0.6056 0.1700 -0.0155 +v -0.3543 0.1838 -0.0193 +v -0.7432 0.1208 -0.0230 +v 0.3649 0.1911 0.0695 +v 0.3649 0.1887 -0.0148 +v -0.0500 0.1955 -0.0171 +v -0.9125 0.0818 -0.0243 +v -1.0783 0.0444 -0.0254 +v -1.1985 0.0186 -0.0269 +v -1.2954 0.0023 -0.0264 +v -1.3168 0.0023 0.0579 +v 1.1864 0.0212 0.0445 +v 1.0509 0.0213 0.0207 +v 0.9646 0.0213 0.0060 +v 0.8463 0.0213 -0.0139 +v 0.6073 -0.0000 -0.0230 +v 0.3649 -0.0000 -0.0226 +v -0.0500 -0.0000 -0.0250 +v -0.3543 -0.0000 -0.0271 +v -0.7404 -0.0000 -0.0304 +v -0.9125 0.0036 -0.0314 +v -1.0783 0.0036 -0.0317 +v -1.1985 0.0034 -0.0314 +v 1.0509 -0.0213 0.0207 +v 1.1864 -0.0212 0.0445 +v 0.9646 -0.0213 0.0060 +v 0.8463 -0.0213 -0.0139 +v -0.9125 -0.0036 -0.0314 +v -1.0783 -0.0036 -0.0317 +v -1.1985 -0.0034 -0.0314 +v 1.1875 0.0078 0.0381 +v 1.0509 0.0046 -0.0144 +v 0.9646 0.0058 -0.0152 +v 0.8474 0.0080 -0.0189 +v 1.0509 -0.0046 -0.0144 +v 1.1875 -0.0078 0.0381 +v 0.9646 -0.0058 -0.0152 +v 0.8474 -0.0080 -0.0189 +v 1.3233 -0.0048 0.1483 +v 1.3233 0.0048 0.1483 +v -0.0499 0.1827 0.1495 +v -0.3537 0.1710 0.1495 +v -0.3537 -0.1710 0.1495 +v -0.0499 -0.1827 0.1495 +v 1.1741 -0.0767 0.1495 +v 1.3017 -0.0000 0.1495 +v 1.1741 0.0767 0.1495 +v 1.0486 0.1168 0.1495 +v 1.0486 -0.1168 0.1495 +v 0.9630 0.1360 0.1495 +v 0.9630 -0.1360 0.1495 +v 0.8453 0.1557 0.1495 +v 0.8453 -0.1557 0.1495 +v 0.6052 0.1717 0.1495 +v 0.6052 -0.1717 0.1495 +v 0.3647 0.1806 0.1495 +v 0.3647 -0.1806 0.1495 +v -0.7421 0.1331 0.1495 +v -0.7421 -0.1331 0.1495 +v -0.9109 0.1063 0.1495 +v -0.9109 -0.1063 0.1495 +v -1.0796 0.0698 0.1495 +v -1.0796 -0.0698 0.1495 +v -1.2061 0.0334 0.1495 +v -1.2061 -0.0334 0.1495 +v -1.3055 -0.0000 0.1495 +v -0.0500 -0.1913 0.1495 +v -0.3543 -0.1796 0.1495 +v -0.3543 -0.1838 0.1482 +v 0.3649 -0.1892 0.1495 +v 1.3183 -0.0000 0.1495 +v 1.1776 -0.0846 0.1495 +v 1.1781 -0.0884 0.1482 +v 0.8463 -0.1680 0.1482 +v 0.8463 -0.1642 0.1495 +v 0.6056 -0.1803 0.1495 +v 1.0509 -0.1290 0.1482 +v 1.0509 -0.1251 0.1495 +v 0.9646 -0.1444 0.1495 +v 0.9646 -0.1481 0.1482 +v -0.7432 -0.1416 0.1495 +v -0.7432 -0.1449 0.1483 +v -0.9125 -0.1176 0.1484 +v -0.9125 -0.1147 0.1495 +v -1.0817 -0.0781 0.1495 +v -1.0817 -0.0809 0.1484 +v -1.2087 -0.0416 0.1495 +v -1.3323 -0.0000 0.1495 +v -0.3543 0.1838 0.1482 +v -0.3543 0.1796 0.1495 +v -0.0500 0.1913 0.1495 +v 0.3649 0.1892 0.1495 +v 1.1781 0.0884 0.1482 +v 1.1776 0.0846 0.1495 +v 0.6056 0.1803 0.1495 +v 0.8463 0.1642 0.1495 +v 0.8463 0.1680 0.1482 +v 0.9646 0.1481 0.1482 +v 0.9646 0.1444 0.1495 +v 1.0509 0.1251 0.1495 +v 1.0509 0.1290 0.1482 +v -0.7432 0.1449 0.1483 +v -0.7432 0.1416 0.1495 +v -1.0817 0.0809 0.1484 +v -1.0817 0.0781 0.1495 +v -0.9125 0.1147 0.1495 +v -0.9125 0.1176 0.1484 +v -1.2087 0.0416 0.1495 +# 191 vertices + +vn -0.7919 -0.5858 -0.1726 +vn -0.2470 -0.9376 -0.2449 +vn -0.2733 -0.9284 -0.2517 +vn -0.8197 -0.5454 -0.1749 +vn 0.0056 -0.9999 -0.0143 +vn 0.0378 -0.9985 -0.0398 +vn 0.1740 -0.9768 -0.1252 +vn 0.2981 -0.9518 -0.0719 +vn 0.1891 -0.9757 -0.1107 +vn 0.4755 -0.8794 0.0234 +vn 0.0786 -0.9935 -0.0818 +vn -0.0384 -0.9993 0.0000 +vn -0.1599 -0.9553 -0.2488 +vn -0.1392 -0.9633 -0.2297 +vn -0.1871 -0.9292 -0.3187 +vn -0.2005 -0.9242 -0.3250 +vn -0.1119 -0.9933 -0.0296 +vn -0.1065 -0.9943 0.0000 +vn -0.2288 -0.9166 -0.3279 +vn -0.2217 -0.9223 -0.3164 +vn -0.1843 -0.9487 -0.2568 +vn 0.1919 -0.9115 -0.3639 +vn 0.2760 -0.8323 -0.4808 +vn 0.1864 -0.8829 -0.4310 +vn 0.4106 -0.7910 -0.4536 +vn 0.1276 -0.9647 -0.2304 +vn -0.1565 -0.9876 -0.0157 +vn 0.0137 -0.9998 -0.0140 +vn 0.0609 -0.9954 -0.0742 +vn -0.2185 -0.9742 -0.0569 +vn -0.2183 -0.9749 -0.0431 +vn -0.2134 -0.9756 -0.0517 +vn -0.1655 -0.9853 -0.0415 +vn -0.2733 0.9284 -0.2517 +vn -0.2470 0.9376 -0.2449 +vn -0.7919 0.5858 -0.1726 +vn -0.8197 0.5454 -0.1749 +vn 0.0056 0.9999 -0.0143 +vn 0.0378 0.9985 -0.0398 +vn 0.1740 0.9768 -0.1252 +vn 0.2981 0.9518 -0.0719 +vn 0.1891 0.9757 -0.1107 +vn 0.4755 0.8794 0.0234 +vn 0.0786 0.9935 -0.0818 +vn -0.0384 0.9993 0.0000 +vn -0.1871 0.9292 -0.3187 +vn -0.1407 0.9628 -0.2306 +vn -0.1599 0.9553 -0.2488 +vn -0.2005 0.9242 -0.3250 +vn -0.1032 0.9947 -0.0022 +vn -0.1119 0.9933 -0.0296 +vn -0.2288 0.9166 -0.3279 +vn -0.2217 0.9223 -0.3164 +vn -0.1843 0.9487 -0.2568 +vn 0.1919 0.9115 -0.3639 +vn 0.2760 0.8323 -0.4808 +vn 0.1864 0.8829 -0.4310 +vn 0.4106 0.7910 -0.4536 +vn 0.1276 0.9647 -0.2304 +vn -0.1565 0.9876 -0.0157 +vn 0.0137 0.9998 -0.0140 +vn 0.0609 0.9954 -0.0742 +vn -0.2185 0.9742 -0.0569 +vn -0.2183 0.9749 -0.0431 +vn -0.2134 0.9756 -0.0517 +vn -0.1655 0.9853 -0.0415 +vn 0.1751 0.1096 -0.9784 +vn 0.1715 0.1209 -0.9777 +vn 0.1747 0.0864 -0.9808 +vn 0.1771 0.0802 -0.9809 +vn 0.1687 0.0759 -0.9827 +vn 0.1727 0.0702 -0.9825 +vn 0.1002 0.0630 -0.9930 +vn 0.0992 0.0569 -0.9934 +vn 0.0182 0.0000 -0.9998 +vn 0.0184 0.0440 -0.9989 +vn 0.0026 0.0000 -1.0000 +vn 0.0032 0.0414 -0.9991 +vn 0.0061 0.0000 -1.0000 +vn 0.0059 0.0402 -0.9992 +vn 0.0046 0.0422 -0.9991 +vn 0.0053 0.0000 -1.0000 +vn 0.0011 0.0589 -0.9983 +vn 0.0032 0.0000 -1.0000 +vn -0.0047 0.0838 -0.9965 +vn 0.0009 0.0478 -0.9989 +vn -0.0099 0.1448 -0.9894 +vn -0.0042 0.0802 -0.9968 +vn -0.0062 0.2606 -0.9654 +vn -0.0026 0.1439 -0.9896 +vn 0.1751 -0.1096 -0.9784 +vn 0.1771 -0.0802 -0.9809 +vn 0.1747 -0.0864 -0.9808 +vn 0.1715 -0.1209 -0.9777 +vn 0.1727 -0.0702 -0.9825 +vn 0.1687 -0.0759 -0.9827 +vn 0.0992 -0.0569 -0.9934 +vn 0.1002 -0.0630 -0.9930 +vn 0.0184 -0.0440 -0.9989 +vn 0.0032 -0.0414 -0.9991 +vn 0.0059 -0.0402 -0.9992 +vn 0.0046 -0.0422 -0.9991 +vn 0.0011 -0.0589 -0.9983 +vn -0.0047 -0.0838 -0.9965 +vn 0.0009 -0.0478 -0.9989 +vn -0.0099 -0.1448 -0.9894 +vn -0.0042 -0.0802 -0.9968 +vn -0.0062 -0.2606 -0.9654 +vn -0.0026 -0.1439 -0.9896 +vn 0.1803 -0.1207 -0.9762 +vn 0.1803 0.1207 -0.9762 +vn -0.0523 -0.2848 -0.9572 +vn -0.0523 0.2848 -0.9572 +vn 0.1527 0.8020 -0.5775 +vn 0.0509 0.8665 -0.4965 +vn 0.0800 0.6705 -0.7376 +vn 0.0047 0.3501 -0.9367 +vn 0.1527 -0.8020 -0.5775 +vn 0.0509 -0.8665 -0.4965 +vn 0.0800 -0.6705 -0.7376 +vn 0.0047 -0.3501 -0.9367 +vn 0.2035 -0.4349 -0.8772 +vn 0.2035 0.4349 -0.8772 +vn -0.0514 0.0000 -0.9987 +vn -0.7431 -0.6354 -0.2099 +vn -0.7431 0.6354 -0.2099 +vn -0.9694 0.0000 -0.2455 +vn 0.2126 0.0000 -0.9771 +vn 0.9825 0.0000 0.1862 +vn 0.7655 0.0000 -0.6434 +vn 0.0088 0.0000 -1.0000 +vn 0.0313 0.0000 -0.9995 +vn 0.0174 0.0000 -0.9998 +vn 0.3589 0.0000 -0.9334 +vn 0.0000 0.0000 1.0000 +vn -0.0109 -0.2842 0.9587 +vn 0.0015 -0.2878 0.9577 +vn 0.1159 -0.1970 0.9735 +vn 0.0204 -0.3037 0.9526 +vn 0.0691 -0.3095 0.9484 +vn 0.0525 -0.3131 0.9483 +vn 0.0944 -0.2962 0.9504 +vn 0.0109 -0.2942 0.9557 +vn -0.0300 -0.3048 0.9519 +vn -0.0729 -0.3368 0.9387 +vn -0.0532 -0.3340 0.9411 +vn -0.0964 -0.3356 0.9371 +vn -0.1016 -0.3047 0.9470 +vn -0.0109 0.2842 0.9587 +vn 0.0015 0.2878 0.9577 +vn 0.1159 0.1970 0.9735 +vn 0.0204 0.3037 0.9526 +vn 0.0691 0.3095 0.9484 +vn 0.0525 0.3131 0.9483 +vn 0.0944 0.2962 0.9504 +vn 0.0109 0.2942 0.9557 +vn -0.0300 0.3048 0.9519 +vn -0.0729 0.3368 0.9387 +vn -0.0532 0.3340 0.9411 +vn -0.0964 0.3356 0.9371 +vn -0.1016 0.3047 0.9470 +vn -0.3270 0.0000 0.9450 +vn 0.2289 0.0000 0.9735 +vn 0.0084 -0.9999 -0.0143 +vn 0.0414 -0.9983 -0.0398 +vn 0.1658 -0.9782 -0.1254 +vn 0.3025 -0.9505 -0.0715 +vn 0.2119 -0.9711 -0.1102 +vn 0.4963 -0.8677 0.0273 +vn 0.0688 -0.9943 -0.0818 +vn -0.1254 -0.9634 -0.2368 +vn -0.1778 -0.9294 -0.3235 +vn -0.1064 -0.9943 -0.0043 +vn -0.2280 -0.9163 -0.3294 +vn 0.0084 0.9999 -0.0143 +vn 0.0414 0.9983 -0.0398 +vn 0.1658 0.9782 -0.1254 +vn 0.3025 0.9505 -0.0715 +vn 0.2119 0.9711 -0.1102 +vn 0.4963 0.8677 0.0273 +vn 0.0688 0.9943 -0.0818 +vn -0.1778 0.9294 -0.3235 +vn -0.1286 0.9635 -0.2348 +vn -0.0997 0.9950 0.0000 +vn -0.2280 0.9163 -0.3294 +# 185 vertex normals + +vt 0.0252 0.6499 0.0000 +vt 0.0699 0.6499 0.0000 +vt 0.0698 0.6556 0.0000 +vt 0.0244 0.6556 0.0000 +vt 0.4829 0.6504 0.0000 +vt 0.6309 0.6506 0.0000 +vt 0.6309 0.6556 0.0000 +vt 0.4829 0.6556 0.0000 +vt 0.7167 0.6507 0.0000 +vt 0.7167 0.6556 0.0000 +vt 0.8026 0.6178 0.0000 +vt 0.8448 0.6184 0.0000 +vt 0.8448 0.6509 0.0000 +vt 0.8026 0.6509 0.0000 +vt 0.8755 0.6190 0.0000 +vt 0.9239 0.6205 0.0000 +vt 0.9213 0.6512 0.0000 +vt 0.8755 0.6510 0.0000 +vt 0.9771 0.6225 0.0000 +vt 0.9732 0.6515 0.0000 +vt 0.7167 0.6167 0.0000 +vt 0.4829 0.6145 0.0000 +vt 0.3744 0.6503 0.0000 +vt 0.3744 0.6134 0.0000 +vt 0.2357 0.6116 0.0000 +vt 0.2357 0.6501 0.0000 +vt 0.1753 0.6501 0.0000 +vt 0.1753 0.6109 0.0000 +vt 0.1150 0.6500 0.0000 +vt 0.1150 0.6104 0.0000 +vt 0.0709 0.6101 0.0000 +vt 0.8026 0.5768 0.0000 +vt 0.8448 0.5869 0.0000 +vt 0.8755 0.5942 0.0000 +vt 0.9239 0.6056 0.0000 +vt 0.9725 0.6147 0.0000 +vt 0.7167 0.5727 0.0000 +vt 0.2357 0.5689 0.0000 +vt 0.3744 0.5707 0.0000 +vt 0.6309 0.6157 0.0000 +vt 0.4829 0.5718 0.0000 +vt 0.6309 0.5730 0.0000 +vt 0.1162 0.5677 0.0000 +vt 0.1753 0.5682 0.0000 +vt 0.0733 0.5669 0.0000 +vt 0.0311 0.6099 0.0000 +vt 0.0388 0.5671 0.0000 +vt 0.0804 0.4586 0.0000 +vt 0.0805 0.4643 0.0000 +vt 0.0359 0.4643 0.0000 +vt 0.0350 0.4586 0.0000 +vt 0.6415 0.4587 0.0000 +vt 0.6415 0.4637 0.0000 +vt 0.4935 0.4638 0.0000 +vt 0.4935 0.4587 0.0000 +vt 0.7274 0.4587 0.0000 +vt 0.7274 0.4636 0.0000 +vt 0.8132 0.4965 0.0000 +vt 0.8132 0.4634 0.0000 +vt 0.8554 0.4633 0.0000 +vt 0.8554 0.4959 0.0000 +vt 0.8862 0.4953 0.0000 +vt 0.8862 0.4633 0.0000 +vt 0.9319 0.4631 0.0000 +vt 0.9345 0.4937 0.0000 +vt 0.9839 0.4627 0.0000 +vt 0.9878 0.4918 0.0000 +vt 0.7274 0.4976 0.0000 +vt 0.3850 0.4640 0.0000 +vt 0.4935 0.4998 0.0000 +vt 0.3850 0.5008 0.0000 +vt 0.1860 0.4642 0.0000 +vt 0.2463 0.4641 0.0000 +vt 0.2463 0.5027 0.0000 +vt 0.1860 0.5034 0.0000 +vt 0.1256 0.4642 0.0000 +vt 0.1256 0.5039 0.0000 +vt 0.0816 0.5042 0.0000 +vt 0.8554 0.5274 0.0000 +vt 0.8132 0.5375 0.0000 +vt 0.9345 0.5086 0.0000 +vt 0.8862 0.5201 0.0000 +vt 0.9832 0.4995 0.0000 +vt 0.7274 0.5416 0.0000 +vt 0.3850 0.5435 0.0000 +vt 0.2463 0.5454 0.0000 +vt 0.6415 0.4985 0.0000 +vt 0.6415 0.5412 0.0000 +vt 0.4935 0.5425 0.0000 +vt 0.1860 0.5461 0.0000 +vt 0.1268 0.5466 0.0000 +vt 0.0840 0.5474 0.0000 +vt 0.0494 0.5470 0.0000 +vt 0.0418 0.5044 0.0000 +vt 0.9333 0.7180 0.0000 +vt 0.9333 0.7332 0.0000 +vt 0.8840 0.7331 0.0000 +vt 0.8840 0.7059 0.0000 +vt 0.8526 0.7331 0.0000 +vt 0.8526 0.7008 0.0000 +vt 0.8095 0.7331 0.0000 +vt 0.8095 0.6937 0.0000 +vt 0.7226 0.7409 0.0000 +vt 0.7220 0.6790 0.0000 +vt 0.6344 0.7409 0.0000 +vt 0.6344 0.6722 0.0000 +vt 0.4834 0.7409 0.0000 +vt 0.4834 0.6697 0.0000 +vt 0.3726 0.6740 0.0000 +vt 0.3726 0.7409 0.0000 +vt 0.2311 0.6969 0.0000 +vt 0.2322 0.7409 0.0000 +vt 0.1695 0.7111 0.0000 +vt 0.1695 0.7396 0.0000 +vt 0.1092 0.7247 0.0000 +vt 0.1092 0.7396 0.0000 +vt 0.0655 0.7341 0.0000 +vt 0.0655 0.7397 0.0000 +vt 0.9333 0.7637 0.0000 +vt 0.8840 0.7759 0.0000 +vt 0.8840 0.7486 0.0000 +vt 0.9333 0.7486 0.0000 +vt 0.8526 0.7810 0.0000 +vt 0.8526 0.7486 0.0000 +vt 0.8095 0.7881 0.0000 +vt 0.8095 0.7486 0.0000 +vt 0.7220 0.8027 0.0000 +vt 0.6344 0.8095 0.0000 +vt 0.4834 0.8120 0.0000 +vt 0.3726 0.8078 0.0000 +vt 0.2311 0.7848 0.0000 +vt 0.1695 0.7706 0.0000 +vt 0.1695 0.7422 0.0000 +vt 0.1092 0.7570 0.0000 +vt 0.1092 0.7422 0.0000 +vt 0.0655 0.7476 0.0000 +vt 0.0655 0.7421 0.0000 +vt 0.9829 0.7423 0.0000 +vt 0.9829 0.7395 0.0000 +vt 0.0302 0.7417 0.0000 +vt 0.0302 0.7400 0.0000 +vt 0.9337 0.7380 0.0000 +vt 0.8840 0.7392 0.0000 +vt 0.8526 0.7388 0.0000 +vt 0.8099 0.7380 0.0000 +vt 0.8840 0.7425 0.0000 +vt 0.9337 0.7437 0.0000 +vt 0.8526 0.7430 0.0000 +vt 0.8099 0.7438 0.0000 +vt 0.0393 0.5044 0.0000 +vt 0.0329 0.4643 0.0000 +vt 0.0469 0.5469 0.0000 +vt 0.9882 0.4586 0.0000 +vt 0.9887 0.4627 0.0000 +vt 0.9834 0.4586 0.0000 +vt 0.9921 0.4919 0.0000 +vt 0.9871 0.4995 0.0000 +vt 0.4820 0.9698 0.0000 +vt 0.3714 0.9656 0.0000 +vt 0.3714 0.8411 0.0000 +vt 0.4820 0.8368 0.0000 +vt 0.9274 0.8754 0.0000 +vt 0.9738 0.9033 0.0000 +vt 0.9274 0.9313 0.0000 +vt 0.8817 0.9458 0.0000 +vt 0.8817 0.8608 0.0000 +vt 0.8506 0.9528 0.0000 +vt 0.8506 0.8538 0.0000 +vt 0.8078 0.9600 0.0000 +vt 0.8078 0.8467 0.0000 +vt 0.7204 0.9658 0.0000 +vt 0.7204 0.8408 0.0000 +vt 0.6329 0.9691 0.0000 +vt 0.6329 0.8376 0.0000 +vt 0.2301 0.9518 0.0000 +vt 0.2301 0.8549 0.0000 +vt 0.1687 0.9420 0.0000 +vt 0.1687 0.8647 0.0000 +vt 0.1073 0.9287 0.0000 +vt 0.1073 0.8779 0.0000 +vt 0.0613 0.9155 0.0000 +vt 0.0613 0.8912 0.0000 +vt 0.0251 0.9033 0.0000 +vt 0.4819 0.8322 0.0000 +vt 0.4819 0.8337 0.0000 +vt 0.3712 0.8380 0.0000 +vt 0.3712 0.8364 0.0000 +vt 0.6329 0.8330 0.0000 +vt 0.6329 0.8345 0.0000 +vt 0.9817 0.9016 0.0000 +vt 0.9798 0.9033 0.0000 +vt 0.9287 0.8726 0.0000 +vt 0.9288 0.8712 0.0000 +vt 0.8081 0.8422 0.0000 +vt 0.8081 0.8436 0.0000 +vt 0.7205 0.8377 0.0000 +vt 0.7205 0.8363 0.0000 +vt 0.8825 0.8564 0.0000 +vt 0.8825 0.8578 0.0000 +vt 0.8512 0.8508 0.0000 +vt 0.8512 0.8494 0.0000 +vt 0.2297 0.8518 0.0000 +vt 0.2297 0.8506 0.0000 +vt 0.1681 0.8606 0.0000 +vt 0.1681 0.8616 0.0000 +vt 0.1065 0.8749 0.0000 +vt 0.1065 0.8739 0.0000 +vt 0.0603 0.8882 0.0000 +vt 0.0604 0.8870 0.0000 +vt 0.0153 0.9033 0.0000 +vt 0.0141 0.9023 0.0000 +vt 0.3712 0.9702 0.0000 +vt 0.3712 0.9687 0.0000 +vt 0.4819 0.9729 0.0000 +vt 0.4819 0.9745 0.0000 +vt 0.6329 0.9722 0.0000 +vt 0.6329 0.9737 0.0000 +vt 0.9288 0.9355 0.0000 +vt 0.9287 0.9341 0.0000 +vt 0.9817 0.9051 0.0000 +vt 0.7205 0.9704 0.0000 +vt 0.7205 0.9689 0.0000 +vt 0.8081 0.9631 0.0000 +vt 0.8081 0.9645 0.0000 +vt 0.8512 0.9572 0.0000 +vt 0.8512 0.9559 0.0000 +vt 0.8825 0.9488 0.0000 +vt 0.8825 0.9503 0.0000 +vt 0.2297 0.9560 0.0000 +vt 0.2297 0.9549 0.0000 +vt 0.1065 0.9328 0.0000 +vt 0.1065 0.9317 0.0000 +vt 0.1681 0.9451 0.0000 +vt 0.1681 0.9461 0.0000 +vt 0.0604 0.9196 0.0000 +vt 0.0603 0.9185 0.0000 +vt 0.0141 0.9044 0.0000 +vt 0.8448 0.6556 0.0000 +vt 0.8026 0.6556 0.0000 +vt 0.9209 0.6556 0.0000 +vt 0.8755 0.6556 0.0000 +vt 0.9727 0.6556 0.0000 +vt 0.3744 0.6556 0.0000 +vt 0.2357 0.6556 0.0000 +vt 0.1753 0.6557 0.0000 +vt 0.1150 0.6557 0.0000 +vt 0.8132 0.4587 0.0000 +vt 0.8554 0.4587 0.0000 +vt 0.8862 0.4587 0.0000 +vt 0.9315 0.4587 0.0000 +vt 0.3850 0.4587 0.0000 +vt 0.1860 0.4586 0.0000 +vt 0.2463 0.4586 0.0000 +vt 0.1256 0.4586 0.0000 +vt 0.0319 0.4586 0.0000 +# 255 texture coords + +g _King_George_V_body +usemtl _King_George_V +s 1 +f 1/1/1 2/2/2 3/3/3 4/4/4 +s off +f 5/5/5 6/6/5 7/7/5 8/8/5 +f 6/6/6 9/9/6 10/10/6 7/7/6 +f 11/11/7 12/12/7 13/13/7 14/14/7 +f 15/15/8 16/16/8 17/17/8 18/18/8 +f 12/12/9 15/15/9 18/18/9 13/13/9 +f 16/16/10 19/19/10 20/20/10 17/17/10 +f 11/11/11 14/14/11 9/9/11 21/21/11 +f 22/22/12 5/5/12 23/23/12 24/24/12 +s 1 +f 25/25/13 26/26/14 27/27/15 28/28/16 +f 24/24/17 23/23/18 26/26/14 25/25/13 +f 28/28/16 27/27/15 29/29/19 30/30/20 +f 30/30/20 29/29/19 2/2/2 31/31/21 +s off +f 12/12/22 11/11/22 32/32/22 33/33/22 +f 16/16/23 15/15/23 34/34/23 35/35/23 +f 15/15/24 12/12/24 33/33/24 34/34/24 +f 19/19/25 16/16/25 35/35/25 36/36/25 +f 11/11/26 21/21/26 37/37/26 32/32/26 +f 24/24/27 25/25/27 38/38/27 39/39/27 +f 40/40/28 22/22/28 41/41/28 42/42/28 +f 21/21/29 40/40/29 42/42/29 37/37/29 +f 22/22/12 24/24/12 39/39/12 41/41/12 +f 28/28/30 30/30/30 43/43/30 44/44/30 +f 25/25/31 28/28/31 44/44/31 38/38/31 +f 30/30/32 31/31/32 45/45/32 43/43/32 +f 31/31/33 46/46/33 47/47/33 45/45/33 +s 1 +f 48/48/34 49/49/35 50/50/36 51/51/37 +s off +f 52/52/38 53/53/38 54/54/38 55/55/38 +f 56/56/39 57/57/39 53/53/39 52/52/39 +f 58/58/40 59/59/40 60/60/40 61/61/40 +f 62/62/41 63/63/41 64/64/41 65/65/41 +f 61/61/42 60/60/42 63/63/42 62/62/42 +f 65/65/43 64/64/43 66/66/43 67/67/43 +f 57/57/44 59/59/44 58/58/44 68/68/44 +f 69/69/45 54/54/45 70/70/45 71/71/45 +s 1 +f 72/72/46 73/73/47 74/74/48 75/75/49 +f 73/73/47 69/69/50 71/71/51 74/74/48 +f 76/76/52 72/72/46 75/75/49 77/77/53 +f 49/49/35 76/76/52 77/77/53 78/78/54 +s off +f 61/61/55 79/79/55 80/80/55 58/58/55 +f 65/65/56 81/81/56 82/82/56 62/62/56 +f 62/62/57 82/82/57 79/79/57 61/61/57 +f 67/67/58 83/83/58 81/81/58 65/65/58 +f 58/58/59 80/80/59 84/84/59 68/68/59 +f 71/71/60 85/85/60 86/86/60 74/74/60 +f 87/87/61 88/88/61 89/89/61 70/70/61 +f 68/68/62 84/84/62 88/88/62 87/87/62 +f 70/70/45 89/89/45 85/85/45 71/71/45 +f 75/75/63 90/90/63 91/91/63 77/77/63 +f 74/74/64 86/86/64 90/90/64 75/75/64 +f 77/77/65 91/91/65 92/92/65 78/78/65 +f 78/78/66 92/92/66 93/93/66 94/94/66 +s 1 +f 81/95/67 95/96/68 96/97/69 82/98/70 +f 82/98/70 96/97/69 97/99/71 79/100/72 +f 79/100/72 97/99/71 98/101/73 80/102/74 +f 80/102/74 98/101/73 99/103/75 84/104/76 +f 84/104/76 99/103/75 100/105/77 88/106/78 +f 88/106/78 100/105/77 101/107/79 89/108/80 +f 85/109/81 89/108/80 101/107/79 102/110/82 +f 86/111/83 85/109/81 102/110/82 103/112/84 +f 90/113/85 86/111/83 103/112/84 104/114/86 +f 91/115/87 90/113/85 104/114/86 105/116/88 +f 92/117/89 91/115/87 105/116/88 106/118/90 +f 35/119/91 34/120/92 107/121/93 108/122/94 +f 34/120/92 33/123/95 109/124/96 107/121/93 +f 33/123/95 32/125/97 110/126/98 109/124/96 +f 32/125/97 37/127/99 99/103/75 110/126/98 +f 37/127/99 42/128/100 100/105/77 99/103/75 +f 42/128/100 41/129/101 101/107/79 100/105/77 +f 101/107/79 41/129/101 39/130/102 102/110/82 +f 102/110/82 39/130/102 38/131/103 103/112/84 +f 103/112/84 38/131/103 44/132/104 111/133/105 +f 111/133/105 44/132/104 43/134/106 112/135/107 +f 112/135/107 43/134/106 45/136/108 113/137/109 +s off +f 35/119/110 108/122/110 36/138/110 +f 95/96/111 81/95/111 83/139/111 +f 47/140/112 113/137/112 45/136/112 +f 106/118/113 93/141/113 92/117/113 +f 114/142/114 115/143/114 96/97/114 95/96/114 +f 116/144/115 97/99/115 96/97/115 115/143/115 +f 117/145/116 98/101/116 97/99/116 116/144/116 +f 98/101/117 117/145/117 99/103/117 +f 118/146/118 119/147/118 108/122/118 107/121/118 +f 118/146/119 107/121/119 109/124/119 120/148/119 +f 120/148/120 109/124/120 110/126/120 121/149/120 +f 99/103/121 121/149/121 110/126/121 +f 108/122/122 119/147/122 36/138/122 +f 83/139/123 114/142/123 95/96/123 +f 93/141/124 106/118/124 113/137/124 47/140/124 +s 1 +f 46/150/125 1/151/1 50/50/36 94/94/126 +s off +f 93/93/127 47/152/127 46/150/127 94/94/127 +f 36/138/128 119/147/128 114/142/128 83/139/128 +f 122/153/129 20/154/129 66/66/129 123/155/129 +f 67/67/130 19/156/130 36/157/130 83/83/130 +f 115/143/131 118/146/131 120/148/131 116/144/131 +f 116/144/132 120/148/132 121/149/132 117/145/132 +f 117/145/133 121/149/133 99/103/133 +s 1 +f 103/112/84 111/133/105 104/114/86 +f 104/114/86 111/133/105 112/135/107 105/116/88 +f 105/116/88 112/135/107 113/137/109 106/118/90 +s off +f 115/143/134 114/142/134 119/147/134 118/146/134 +f 124/158/135 125/159/135 126/160/135 127/161/135 +f 128/162/135 129/163/135 130/164/135 +f 128/162/135 130/164/135 131/165/135 132/166/135 +f 132/166/135 131/165/135 133/167/135 134/168/135 +f 134/168/135 133/167/135 135/169/135 136/170/135 +f 136/170/135 135/169/135 137/171/135 138/172/135 +f 138/172/135 137/171/135 139/173/135 140/174/135 +f 140/174/135 139/173/135 124/158/135 127/161/135 +f 141/175/135 142/176/135 126/160/135 125/159/135 +f 143/177/135 144/178/135 142/176/135 141/175/135 +f 145/179/135 146/180/135 144/178/135 143/177/135 +f 147/181/135 148/182/135 146/180/135 145/179/135 +f 147/181/135 149/183/135 148/182/135 +f 8/184/136 150/185/136 151/186/136 152/187/136 +f 7/188/137 153/189/137 150/185/137 8/184/137 +f 122/190/138 154/191/138 155/192/138 156/193/138 +f 157/194/139 158/195/139 159/196/139 10/197/139 +f 160/198/140 161/199/140 162/200/140 163/201/140 +f 163/201/141 162/200/141 158/195/141 157/194/141 +f 156/193/142 155/192/142 161/199/142 160/198/142 +f 10/197/143 159/196/143 153/189/143 7/188/143 +f 152/187/144 151/186/144 164/202/144 165/203/144 +f 166/204/145 167/205/145 168/206/145 169/207/145 +f 165/203/146 164/202/146 167/205/146 166/204/146 +f 169/207/147 168/206/147 170/208/147 3/209/147 +f 3/209/148 170/208/148 171/210/148 4/211/148 +f 172/212/149 173/213/149 174/214/149 55/215/149 +f 55/215/150 174/214/150 175/216/150 52/217/150 +f 176/218/151 177/219/151 154/191/151 123/220/151 +f 56/221/152 178/222/152 179/223/152 180/224/152 +f 181/225/153 182/226/153 183/227/153 184/228/153 +f 180/224/154 179/223/154 182/226/154 181/225/154 +f 184/228/155 183/227/155 177/219/155 176/218/155 +f 52/217/156 175/216/156 178/222/156 56/221/156 +f 185/229/157 186/230/157 173/213/157 172/212/157 +f 187/231/158 188/232/158 189/233/158 190/234/158 +f 190/234/159 189/233/159 186/230/159 185/229/159 +f 48/235/160 191/236/160 188/232/160 187/231/160 +f 51/237/161 171/210/161 191/236/161 48/235/161 +f 4/211/162 171/210/162 51/237/162 +f 123/220/163 154/191/163 122/190/163 +s 1 +f 46/46/125 31/31/21 2/2/2 1/1/1 +s off +f 22/22/164 40/40/164 6/6/164 5/5/164 +f 40/40/165 21/21/165 9/9/165 6/6/165 +f 163/238/166 157/239/166 14/14/166 13/13/166 +f 156/240/167 160/241/167 18/18/167 17/17/167 +f 160/241/168 163/238/168 13/13/168 18/18/168 +f 122/242/169 156/240/169 17/17/169 20/20/169 +f 157/239/170 10/10/170 9/9/170 14/14/170 +f 8/8/12 152/243/12 23/23/12 5/5/12 +s 1 +f 26/26/14 165/244/171 166/245/172 27/27/15 +f 152/243/173 165/244/171 26/26/14 23/23/18 +f 27/27/15 166/245/172 169/246/174 29/29/19 +f 29/29/19 169/246/174 3/3/3 2/2/2 +f 49/49/35 78/78/54 94/94/126 50/50/36 +s off +f 87/87/175 70/70/175 54/54/175 53/53/175 +f 68/68/176 87/87/176 53/53/176 57/57/176 +f 180/247/177 181/248/177 60/60/177 59/59/177 +f 63/63/178 184/249/178 176/250/178 64/64/178 +f 181/248/179 184/249/179 63/63/179 60/60/179 +f 64/64/180 176/250/180 123/155/180 66/66/180 +f 56/56/181 180/247/181 59/59/181 57/57/181 +f 172/251/45 55/55/45 54/54/45 69/69/45 +s 1 +f 190/252/182 185/253/183 73/73/47 72/72/46 +f 185/253/183 172/251/184 69/69/50 73/73/47 +f 187/254/185 190/252/182 72/72/46 76/76/52 +f 48/48/34 187/254/185 76/76/52 49/49/35 +f 4/255/4 51/51/37 50/50/36 1/151/1 +s off +f 19/156/129 67/67/129 66/66/129 20/154/129 +f 151/186/135 150/185/135 127/161/135 126/160/135 +f 150/185/135 153/189/135 140/174/135 127/161/135 +f 153/189/135 159/196/135 138/172/135 140/174/135 +f 159/196/135 158/195/135 136/170/135 138/172/135 +f 158/195/135 162/200/135 134/168/135 136/170/135 +f 162/200/135 161/199/135 132/166/135 134/168/135 +f 161/199/135 155/192/135 128/162/135 132/166/135 +f 155/192/135 154/191/135 129/163/135 128/162/135 +f 154/191/135 177/219/135 130/164/135 129/163/135 +f 177/219/135 183/227/135 131/165/135 130/164/135 +f 183/227/135 182/226/135 133/167/135 131/165/135 +f 182/226/135 179/223/135 135/169/135 133/167/135 +f 179/223/135 178/222/135 137/171/135 135/169/135 +f 178/222/135 175/216/135 139/173/135 137/171/135 +f 175/216/135 174/214/135 124/158/135 139/173/135 +f 174/214/135 173/213/135 125/159/135 124/158/135 +f 173/213/135 186/230/135 141/175/135 125/159/135 +f 186/230/135 189/233/135 143/177/135 141/175/135 +f 189/233/135 188/232/135 145/179/135 143/177/135 +f 188/232/135 191/236/135 147/181/135 145/179/135 +f 191/236/135 171/210/135 149/183/135 147/181/135 +f 171/210/135 170/208/135 148/182/135 149/183/135 +f 170/208/135 168/206/135 146/180/135 148/182/135 +f 168/206/135 167/205/135 144/178/135 146/180/135 +f 167/205/135 164/202/135 142/176/135 144/178/135 +f 164/202/135 151/186/135 126/160/135 142/176/135 +# 182 polygons - 14 triangles + +# +# object _King_George_V_detail +# + +v 1.2243 -0.0076 -0.0057 +v 1.2405 -0.0076 0.0439 +v 1.1572 -0.0076 0.0313 +v 1.1585 -0.0076 -0.0075 +v 1.2428 -0.0076 0.0454 +v 1.2408 -0.0076 0.0477 +v 1.1561 -0.0076 0.0339 +v 1.1546 -0.0076 0.0316 +v 1.1557 -0.0076 -0.0073 +v 1.1564 -0.0076 -0.0093 +v 1.1583 -0.0076 -0.0105 +v 1.2233 -0.0076 -0.0096 +v 1.2261 -0.0076 -0.0077 +v 1.2282 -0.0076 -0.0058 +v 1.2435 -0.0076 0.0425 +v 1.1572 0.0010 0.0313 +v 1.2405 0.0010 0.0439 +v 1.2243 0.0010 -0.0057 +v 1.1585 0.0010 -0.0075 +v 1.2408 0.0010 0.0477 +v 1.2428 0.0010 0.0454 +v 1.1561 0.0010 0.0339 +v 1.1546 0.0010 0.0316 +v 1.1557 0.0010 -0.0073 +v 1.1564 0.0010 -0.0093 +v 1.1583 0.0010 -0.0105 +v 1.2233 0.0010 -0.0096 +v 1.2261 0.0010 -0.0077 +v 1.2282 0.0010 -0.0058 +v 1.2435 0.0010 0.0425 +v 1.2446 -0.0012 0.0466 +v 1.2410 -0.0012 0.0498 +v 1.2410 -0.0054 0.0498 +v 1.2446 -0.0054 0.0466 +v 1.1552 -0.0012 0.0359 +v 1.1552 -0.0054 0.0359 +v 1.1524 -0.0012 0.0319 +v 1.1524 -0.0054 0.0319 +v 1.1536 -0.0012 -0.0072 +v 1.1536 -0.0054 -0.0072 +v 1.1548 -0.0012 -0.0107 +v 1.1548 -0.0054 -0.0107 +v 1.1582 -0.0012 -0.0126 +v 1.1582 -0.0054 -0.0126 +v 1.2227 -0.0012 -0.0117 +v 1.2227 -0.0054 -0.0117 +v 1.2275 -0.0012 -0.0093 +v 1.2275 -0.0054 -0.0093 +v 1.2304 -0.0012 -0.0059 +v 1.2304 -0.0054 -0.0059 +v 1.2455 -0.0012 0.0416 +v 1.2455 -0.0054 0.0416 +v 0.7874 0.0143 0.1880 +v 0.7925 0.0143 0.1863 +v 0.7925 0.0207 0.1863 +v 0.7874 0.0207 0.1880 +v 0.7925 0.0143 0.1721 +v 0.7874 0.0143 0.1705 +v 0.7874 0.0207 0.1705 +v 0.7925 0.0207 0.1721 +v 0.7849 0.0143 0.1711 +v 0.7849 0.0207 0.1711 +v 0.7849 0.0143 0.1873 +v 0.7849 0.0207 0.1873 +v 0.7957 0.0207 0.1814 +v 0.7947 0.0173 0.1834 +v 0.7962 0.0192 0.1808 +v 0.7957 0.0207 0.1771 +v 0.7962 0.0192 0.1776 +v 0.7947 0.0173 0.1751 +v 0.7939 0.0143 0.1741 +v 0.7939 0.0143 0.1844 +v 0.7985 0.0173 0.1751 +v 0.7985 0.0143 0.1741 +v 0.7985 0.0192 0.1777 +v 0.7985 0.0192 0.1808 +v 0.7985 0.0173 0.1834 +v 0.7985 0.0143 0.1844 +v 0.7921 0.0218 0.1857 +v 0.7874 0.0218 0.1872 +v 0.7949 0.0218 0.1817 +v 0.7949 0.0218 0.1768 +v 0.7921 0.0218 0.1728 +v 0.7874 0.0218 0.1713 +v 0.7849 0.0218 0.1717 +v 0.7849 0.0218 0.1866 +v 0.7811 0.0189 0.1828 +v 0.7811 0.0189 0.1755 +v 0.7807 0.0175 0.1748 +v 0.7807 0.0175 0.1835 +v 0.7799 0.0143 0.1748 +v 0.7799 0.0143 0.1835 +v 0.8216 0.0171 0.1753 +v 0.8216 0.0143 0.1744 +v 0.8216 0.0189 0.1777 +v 0.8216 0.0189 0.1807 +v 0.8216 0.0171 0.1832 +v 0.8216 0.0143 0.1841 +v 0.9149 0.0165 0.1762 +v 0.9149 0.0143 0.1755 +v 0.8231 0.0143 0.1746 +v 0.8231 0.0170 0.1755 +v 0.9149 0.0178 0.1781 +v 0.8231 0.0187 0.1778 +v 0.9149 0.0178 0.1804 +v 0.8231 0.0187 0.1807 +v 0.9149 0.0165 0.1823 +v 0.8231 0.0170 0.1830 +v 0.9149 0.0143 0.1830 +v 0.8231 0.0143 0.1839 +v 0.7874 0.0078 0.1880 +v 0.7925 0.0078 0.1863 +v 0.7925 0.0078 0.1721 +v 0.7874 0.0078 0.1705 +v 0.7849 0.0078 0.1711 +v 0.7849 0.0078 0.1873 +v 0.7957 0.0078 0.1814 +v 0.7962 0.0094 0.1808 +v 0.7947 0.0112 0.1834 +v 0.7957 0.0078 0.1771 +v 0.7962 0.0094 0.1776 +v 0.7947 0.0112 0.1751 +v 0.7985 0.0113 0.1751 +v 0.7985 0.0094 0.1777 +v 0.7985 0.0094 0.1808 +v 0.7985 0.0113 0.1834 +v 0.7874 0.0068 0.1872 +v 0.7921 0.0068 0.1857 +v 0.7949 0.0068 0.1817 +v 0.7949 0.0068 0.1768 +v 0.7921 0.0068 0.1728 +v 0.7874 0.0068 0.1713 +v 0.7849 0.0068 0.1717 +v 0.7849 0.0068 0.1866 +v 0.7811 0.0097 0.1828 +v 0.7807 0.0111 0.1835 +v 0.7807 0.0111 0.1748 +v 0.7811 0.0097 0.1755 +v 0.8216 0.0114 0.1753 +v 0.8216 0.0097 0.1777 +v 0.8216 0.0097 0.1807 +v 0.8216 0.0114 0.1832 +v 0.9149 0.0121 0.1762 +v 0.8231 0.0115 0.1755 +v 0.9149 0.0107 0.1781 +v 0.8231 0.0098 0.1778 +v 0.9149 0.0107 0.1804 +v 0.8231 0.0098 0.1807 +v 0.9149 0.0121 0.1823 +v 0.8231 0.0115 0.1830 +v 0.7867 0.0218 0.1792 +v 0.7867 0.0068 0.1792 +v 0.9158 0.0143 0.1764 +v 0.9158 0.0160 0.1769 +v 0.9158 0.0143 0.1792 +v 0.9158 0.0170 0.1784 +v 0.9158 0.0170 0.1801 +v 0.9158 0.0160 0.1816 +v 0.9158 0.0143 0.1821 +v 0.9158 0.0126 0.1816 +v 0.9158 0.0116 0.1801 +v 0.9158 0.0116 0.1784 +v 0.9158 0.0126 0.1769 +v 0.7874 0.0427 0.1880 +v 0.7925 0.0427 0.1863 +v 0.7925 0.0492 0.1863 +v 0.7874 0.0492 0.1880 +v 0.7925 0.0427 0.1721 +v 0.7874 0.0427 0.1705 +v 0.7874 0.0492 0.1705 +v 0.7925 0.0492 0.1721 +v 0.7849 0.0427 0.1711 +v 0.7849 0.0492 0.1711 +v 0.7849 0.0427 0.1873 +v 0.7849 0.0492 0.1873 +v 0.7957 0.0492 0.1814 +v 0.7947 0.0457 0.1834 +v 0.7962 0.0476 0.1808 +v 0.7957 0.0492 0.1771 +v 0.7962 0.0476 0.1776 +v 0.7947 0.0457 0.1751 +v 0.7939 0.0427 0.1741 +v 0.7939 0.0427 0.1844 +v 0.7985 0.0457 0.1751 +v 0.7985 0.0427 0.1741 +v 0.7985 0.0476 0.1777 +v 0.7985 0.0476 0.1808 +v 0.7985 0.0457 0.1834 +v 0.7985 0.0427 0.1844 +v 0.7921 0.0502 0.1857 +v 0.7874 0.0502 0.1872 +v 0.7949 0.0502 0.1817 +v 0.7949 0.0502 0.1768 +v 0.7921 0.0502 0.1728 +v 0.7874 0.0502 0.1713 +v 0.7849 0.0502 0.1717 +v 0.7849 0.0502 0.1866 +v 0.7811 0.0473 0.1828 +v 0.7811 0.0473 0.1755 +v 0.7807 0.0459 0.1748 +v 0.7807 0.0459 0.1835 +v 0.7799 0.0427 0.1748 +v 0.7799 0.0427 0.1835 +v 0.8216 0.0455 0.1753 +v 0.8216 0.0427 0.1744 +v 0.8216 0.0473 0.1777 +v 0.8216 0.0473 0.1807 +v 0.8216 0.0455 0.1832 +v 0.8216 0.0427 0.1841 +v 0.9149 0.0449 0.1762 +v 0.9149 0.0427 0.1755 +v 0.8231 0.0427 0.1746 +v 0.8231 0.0454 0.1755 +v 0.9149 0.0462 0.1781 +v 0.8231 0.0471 0.1778 +v 0.9149 0.0462 0.1804 +v 0.8231 0.0471 0.1807 +v 0.9149 0.0449 0.1823 +v 0.8231 0.0454 0.1830 +v 0.9149 0.0427 0.1830 +v 0.8231 0.0427 0.1839 +v 0.7874 0.0362 0.1880 +v 0.7925 0.0362 0.1863 +v 0.7925 0.0362 0.1721 +v 0.7874 0.0362 0.1705 +v 0.7849 0.0362 0.1711 +v 0.7849 0.0362 0.1873 +v 0.7957 0.0362 0.1814 +v 0.7962 0.0378 0.1808 +v 0.7947 0.0397 0.1834 +v 0.7957 0.0362 0.1771 +v 0.7962 0.0378 0.1776 +v 0.7947 0.0397 0.1751 +v 0.7985 0.0397 0.1751 +v 0.7985 0.0378 0.1777 +v 0.7985 0.0378 0.1808 +v 0.7985 0.0397 0.1834 +v 0.7874 0.0352 0.1872 +v 0.7921 0.0352 0.1857 +v 0.7949 0.0352 0.1817 +v 0.7949 0.0352 0.1768 +v 0.7921 0.0352 0.1728 +v 0.7874 0.0352 0.1713 +v 0.7849 0.0352 0.1717 +v 0.7849 0.0352 0.1866 +v 0.7811 0.0381 0.1828 +v 0.7807 0.0395 0.1835 +v 0.7807 0.0395 0.1748 +v 0.7811 0.0381 0.1755 +v 0.8216 0.0398 0.1753 +v 0.8216 0.0381 0.1777 +v 0.8216 0.0381 0.1807 +v 0.8216 0.0398 0.1832 +v 0.9149 0.0405 0.1762 +v 0.8231 0.0400 0.1755 +v 0.9149 0.0391 0.1781 +v 0.8231 0.0383 0.1778 +v 0.9149 0.0391 0.1804 +v 0.8231 0.0383 0.1807 +v 0.9149 0.0405 0.1823 +v 0.8231 0.0400 0.1830 +v 0.7867 0.0502 0.1792 +v 0.7867 0.0352 0.1792 +v 0.9158 0.0427 0.1764 +v 0.9158 0.0444 0.1769 +v 0.9158 0.0427 0.1792 +v 0.9158 0.0454 0.1784 +v 0.9158 0.0454 0.1801 +v 0.9158 0.0444 0.1816 +v 0.9158 0.0427 0.1821 +v 0.9158 0.0410 0.1816 +v 0.9158 0.0400 0.1801 +v 0.9158 0.0400 0.1784 +v 0.9158 0.0410 0.1769 +v 0.7435 0.0283 0.1892 +v 0.7325 0.0283 0.1892 +v 0.7325 0.0143 0.1892 +v 0.7435 0.0143 0.1892 +v 0.6408 0.0328 0.1587 +v 0.6404 0.0265 0.1587 +v 0.6414 0.0265 0.1691 +v 0.6419 0.0328 0.1691 +v 0.7903 0.0283 0.1587 +v 0.7903 0.0283 0.1691 +v 0.7903 0.0228 0.1691 +v 0.7903 0.0229 0.1587 +v 0.7903 0.0589 0.1587 +v 0.7885 0.0643 0.1587 +v 0.7885 0.0622 0.1691 +v 0.7903 0.0569 0.1691 +v 0.7846 0.0663 0.1587 +v 0.7846 0.0643 0.1691 +v 0.7443 0.0720 0.1587 +v 0.7443 0.0699 0.1691 +v 0.7324 0.0727 0.1587 +v 0.7324 0.0707 0.1691 +v 0.7205 0.0717 0.1587 +v 0.7205 0.0697 0.1691 +v 0.6628 0.0626 0.1587 +v 0.6637 0.0606 0.1691 +v 0.6542 0.0594 0.1587 +v 0.6551 0.0574 0.1691 +v 0.6464 0.0525 0.1587 +v 0.6474 0.0505 0.1691 +v 0.6414 0.0403 0.1587 +v 0.6423 0.0383 0.1691 +v 0.6650 0.0265 0.1587 +v 0.6510 0.0265 0.1587 +v 0.6520 0.0328 0.1587 +v 0.6650 0.0328 0.1587 +v 0.6492 0.0143 0.1587 +v 0.6395 0.0143 0.1587 +v 0.6540 0.0459 0.1587 +v 0.6650 0.0543 0.1587 +v 0.7215 0.0632 0.1587 +v 0.7325 0.0642 0.1587 +v 0.7435 0.0634 0.1587 +v 0.7817 0.0580 0.1587 +v 0.7903 0.0346 0.1587 +v 0.7817 0.0427 0.1587 +v 0.7903 0.0427 0.1587 +v 0.7817 0.0283 0.1587 +v 0.7435 0.0283 0.1587 +v 0.7435 0.0427 0.1587 +v 0.7325 0.0283 0.1587 +v 0.7325 0.0427 0.1587 +v 0.7215 0.0283 0.1587 +v 0.7215 0.0427 0.1587 +v 0.6452 0.0328 0.1892 +v 0.6447 0.0265 0.1892 +v 0.6543 0.0265 0.1892 +v 0.6554 0.0328 0.1892 +v 0.7887 0.0539 0.1892 +v 0.7873 0.0578 0.1892 +v 0.7764 0.0528 0.1892 +v 0.7837 0.0596 0.1892 +v 0.7442 0.0648 0.1892 +v 0.7435 0.0576 0.1892 +v 0.7324 0.0656 0.1892 +v 0.7325 0.0583 0.1892 +v 0.7207 0.0646 0.1892 +v 0.7216 0.0574 0.1892 +v 0.6658 0.0555 0.1892 +v 0.6677 0.0484 0.1892 +v 0.6568 0.0522 0.1892 +v 0.6567 0.0400 0.1892 +v 0.6501 0.0457 0.1892 +v 0.6452 0.0349 0.1892 +v 0.7765 0.0283 0.1892 +v 0.7774 0.0143 0.1892 +v 0.6677 0.0328 0.1892 +v 0.6677 0.0265 0.1892 +v 0.7216 0.0283 0.1892 +v 0.7216 0.0427 0.1892 +v 0.7216 0.0143 0.1892 +v 0.7325 0.0427 0.1892 +v 0.7435 0.0427 0.1892 +v 0.7325 -0.0001 0.1892 +v 0.7435 -0.0001 0.1892 +v 0.6384 -0.0001 0.1587 +v 0.6393 -0.0001 0.1691 +v 0.6404 0.0143 0.1691 +v 0.6439 0.0347 0.1880 +v 0.6438 0.0328 0.1880 +v 0.7903 0.0527 0.1587 +v 0.7903 0.0511 0.1691 +v 0.7903 0.0427 0.1691 +v 0.7903 0.0344 0.1691 +v 0.6650 -0.0001 0.1587 +v 0.6470 -0.0001 0.1587 +v 0.6650 0.0143 0.1587 +v 0.7903 0.0062 0.1587 +v 0.7903 -0.0001 0.1587 +v 0.7818 0.0143 0.1587 +v 0.7903 0.0143 0.1587 +v 0.7818 -0.0001 0.1587 +v 0.7435 -0.0001 0.1587 +v 0.7435 0.0143 0.1587 +v 0.7325 -0.0001 0.1587 +v 0.7325 0.0143 0.1587 +v 0.7215 -0.0001 0.1587 +v 0.7215 0.0143 0.1587 +v 0.6436 0.0143 0.1892 +v 0.6424 -0.0001 0.1892 +v 0.6497 -0.0001 0.1892 +v 0.6522 0.0143 0.1892 +v 0.7851 0.0510 0.1691 +v 0.7807 0.0479 0.1691 +v 0.7790 0.0427 0.1691 +v 0.7851 0.0343 0.1691 +v 0.7807 0.0375 0.1691 +v 0.7851 0.0060 0.1691 +v 0.7903 0.0061 0.1691 +v 0.7903 0.0143 0.1691 +v 0.7789 0.0143 0.1691 +v 0.7774 0.0427 0.1892 +v 0.7765 -0.0001 0.1892 +v 0.6677 0.0143 0.1892 +v 0.6677 -0.0001 0.1892 +v 0.7216 -0.0001 0.1892 +v 0.7798 0.0485 0.1892 +v 0.7797 0.0367 0.1892 +v 0.7843 0.0331 0.1892 +v 0.7842 0.0237 0.1892 +v 0.7796 0.0202 0.1892 +v 0.7797 0.0082 0.1892 +v 0.7845 0.0048 0.1892 +v 0.7851 0.0227 0.1691 +v 0.7903 0.0283 0.1880 +v 0.7903 0.0344 0.1880 +v 0.7903 -0.0001 0.1880 +v 0.7903 -0.0001 0.1691 +v 0.7903 0.0060 0.1880 +v 0.7890 -0.0001 0.1892 +v 0.7890 0.0047 0.1892 +v 0.7890 0.0240 0.1892 +v 0.7890 0.0283 0.1892 +v 0.7890 0.0331 0.1892 +v 0.7890 0.0523 0.1892 +v 0.7847 0.0519 0.1892 +v 0.7903 0.0510 0.1880 +v 0.7851 0.0510 0.1880 +v 0.7807 0.0479 0.1880 +v 0.7790 0.0427 0.1880 +v 0.7807 0.0375 0.1880 +v 0.7851 0.0343 0.1880 +v 0.7903 0.0228 0.1880 +v 0.7851 0.0227 0.1880 +v 0.7807 0.0195 0.1880 +v 0.7807 0.0195 0.1691 +v 0.7789 0.0143 0.1880 +v 0.7807 0.0092 0.1880 +v 0.7807 0.0092 0.1691 +v 0.7851 0.0060 0.1880 +v 0.6432 0.0265 0.1880 +v 0.7885 0.0586 0.1880 +v 0.7903 0.0533 0.1880 +v 0.7846 0.0607 0.1880 +v 0.7443 0.0663 0.1880 +v 0.7324 0.0671 0.1880 +v 0.7205 0.0661 0.1880 +v 0.6653 0.0570 0.1880 +v 0.6567 0.0537 0.1880 +v 0.6490 0.0468 0.1880 +v 0.6410 -0.0001 0.1880 +v 0.6422 0.0143 0.1880 +v 0.7874 -0.0145 0.1880 +v 0.7874 -0.0210 0.1880 +v 0.7925 -0.0210 0.1863 +v 0.7925 -0.0145 0.1863 +v 0.7925 -0.0145 0.1721 +v 0.7925 -0.0210 0.1721 +v 0.7874 -0.0210 0.1705 +v 0.7874 -0.0145 0.1705 +v 0.7849 -0.0210 0.1711 +v 0.7849 -0.0145 0.1711 +v 0.7849 -0.0145 0.1873 +v 0.7849 -0.0210 0.1873 +v 0.7957 -0.0210 0.1814 +v 0.7962 -0.0194 0.1808 +v 0.7947 -0.0175 0.1834 +v 0.7957 -0.0210 0.1771 +v 0.7962 -0.0194 0.1776 +v 0.7939 -0.0145 0.1741 +v 0.7947 -0.0175 0.1751 +v 0.7939 -0.0145 0.1844 +v 0.7985 -0.0145 0.1741 +v 0.7985 -0.0175 0.1751 +v 0.7985 -0.0194 0.1777 +v 0.7985 -0.0194 0.1808 +v 0.7985 -0.0175 0.1834 +v 0.7985 -0.0145 0.1844 +v 0.7874 -0.0220 0.1872 +v 0.7921 -0.0220 0.1857 +v 0.7949 -0.0220 0.1817 +v 0.7949 -0.0220 0.1768 +v 0.7921 -0.0220 0.1728 +v 0.7874 -0.0220 0.1713 +v 0.7849 -0.0220 0.1717 +v 0.7849 -0.0220 0.1866 +v 0.7811 -0.0191 0.1828 +v 0.7807 -0.0177 0.1835 +v 0.7807 -0.0177 0.1748 +v 0.7811 -0.0191 0.1755 +v 0.7799 -0.0145 0.1835 +v 0.7799 -0.0145 0.1748 +v 0.8216 -0.0173 0.1753 +v 0.8216 -0.0145 0.1744 +v 0.8216 -0.0191 0.1777 +v 0.8216 -0.0191 0.1807 +v 0.8216 -0.0173 0.1832 +v 0.8216 -0.0145 0.1841 +v 0.9149 -0.0167 0.1762 +v 0.8231 -0.0172 0.1755 +v 0.8231 -0.0145 0.1746 +v 0.9149 -0.0145 0.1755 +v 0.9149 -0.0180 0.1781 +v 0.8231 -0.0189 0.1778 +v 0.9149 -0.0180 0.1804 +v 0.8231 -0.0189 0.1807 +v 0.9149 -0.0167 0.1823 +v 0.8231 -0.0172 0.1830 +v 0.9149 -0.0145 0.1830 +v 0.8231 -0.0145 0.1839 +v 0.7925 -0.0080 0.1863 +v 0.7874 -0.0080 0.1880 +v 0.7874 -0.0080 0.1705 +v 0.7925 -0.0080 0.1721 +v 0.7849 -0.0080 0.1711 +v 0.7849 -0.0080 0.1873 +v 0.7957 -0.0080 0.1814 +v 0.7947 -0.0114 0.1834 +v 0.7962 -0.0096 0.1808 +v 0.7957 -0.0080 0.1771 +v 0.7962 -0.0096 0.1776 +v 0.7947 -0.0114 0.1751 +v 0.7985 -0.0115 0.1751 +v 0.7985 -0.0096 0.1777 +v 0.7985 -0.0096 0.1808 +v 0.7985 -0.0115 0.1834 +v 0.7921 -0.0070 0.1857 +v 0.7874 -0.0070 0.1872 +v 0.7949 -0.0070 0.1817 +v 0.7949 -0.0070 0.1768 +v 0.7921 -0.0070 0.1728 +v 0.7874 -0.0070 0.1713 +v 0.7849 -0.0070 0.1717 +v 0.7849 -0.0070 0.1866 +v 0.7811 -0.0099 0.1828 +v 0.7811 -0.0099 0.1755 +v 0.7807 -0.0113 0.1748 +v 0.7807 -0.0113 0.1835 +v 0.8216 -0.0116 0.1753 +v 0.8216 -0.0099 0.1777 +v 0.8216 -0.0099 0.1807 +v 0.8216 -0.0116 0.1832 +v 0.9149 -0.0123 0.1762 +v 0.8231 -0.0117 0.1755 +v 0.9149 -0.0109 0.1781 +v 0.8231 -0.0100 0.1778 +v 0.9149 -0.0109 0.1804 +v 0.8231 -0.0100 0.1807 +v 0.9149 -0.0123 0.1823 +v 0.8231 -0.0117 0.1830 +v 0.7867 -0.0220 0.1792 +v 0.7867 -0.0070 0.1792 +v 0.9158 -0.0145 0.1764 +v 0.9158 -0.0145 0.1792 +v 0.9158 -0.0162 0.1769 +v 0.9158 -0.0172 0.1784 +v 0.9158 -0.0172 0.1801 +v 0.9158 -0.0162 0.1816 +v 0.9158 -0.0145 0.1821 +v 0.9158 -0.0128 0.1816 +v 0.9158 -0.0118 0.1801 +v 0.9158 -0.0118 0.1784 +v 0.9158 -0.0128 0.1769 +v 0.7874 -0.0429 0.1880 +v 0.7874 -0.0494 0.1880 +v 0.7925 -0.0494 0.1863 +v 0.7925 -0.0429 0.1863 +v 0.7925 -0.0429 0.1721 +v 0.7925 -0.0494 0.1721 +v 0.7874 -0.0494 0.1705 +v 0.7874 -0.0429 0.1705 +v 0.7849 -0.0494 0.1711 +v 0.7849 -0.0429 0.1711 +v 0.7849 -0.0429 0.1873 +v 0.7849 -0.0494 0.1873 +v 0.7957 -0.0494 0.1814 +v 0.7962 -0.0478 0.1808 +v 0.7947 -0.0459 0.1834 +v 0.7957 -0.0494 0.1771 +v 0.7962 -0.0478 0.1776 +v 0.7939 -0.0429 0.1741 +v 0.7947 -0.0459 0.1751 +v 0.7939 -0.0429 0.1844 +v 0.7985 -0.0429 0.1741 +v 0.7985 -0.0459 0.1751 +v 0.7985 -0.0478 0.1777 +v 0.7985 -0.0478 0.1808 +v 0.7985 -0.0459 0.1834 +v 0.7985 -0.0429 0.1844 +v 0.7874 -0.0504 0.1872 +v 0.7921 -0.0504 0.1857 +v 0.7949 -0.0504 0.1817 +v 0.7949 -0.0504 0.1768 +v 0.7921 -0.0504 0.1728 +v 0.7874 -0.0504 0.1713 +v 0.7849 -0.0504 0.1717 +v 0.7849 -0.0504 0.1866 +v 0.7811 -0.0475 0.1828 +v 0.7807 -0.0461 0.1835 +v 0.7807 -0.0461 0.1748 +v 0.7811 -0.0475 0.1755 +v 0.7799 -0.0429 0.1835 +v 0.7799 -0.0429 0.1748 +v 0.8216 -0.0458 0.1753 +v 0.8216 -0.0429 0.1744 +v 0.8216 -0.0475 0.1777 +v 0.8216 -0.0475 0.1807 +v 0.8216 -0.0458 0.1832 +v 0.8216 -0.0429 0.1841 +v 0.9149 -0.0451 0.1762 +v 0.8231 -0.0456 0.1755 +v 0.8231 -0.0429 0.1746 +v 0.9149 -0.0429 0.1755 +v 0.9149 -0.0465 0.1781 +v 0.8231 -0.0473 0.1778 +v 0.9149 -0.0465 0.1804 +v 0.8231 -0.0473 0.1807 +v 0.9149 -0.0451 0.1823 +v 0.8231 -0.0456 0.1830 +v 0.9149 -0.0429 0.1830 +v 0.8231 -0.0429 0.1839 +v 0.7925 -0.0364 0.1863 +v 0.7874 -0.0364 0.1880 +v 0.7874 -0.0364 0.1705 +v 0.7925 -0.0364 0.1721 +v 0.7849 -0.0364 0.1711 +v 0.7849 -0.0364 0.1873 +v 0.7957 -0.0364 0.1814 +v 0.7947 -0.0399 0.1834 +v 0.7962 -0.0380 0.1808 +v 0.7957 -0.0364 0.1771 +v 0.7962 -0.0380 0.1776 +v 0.7947 -0.0399 0.1751 +v 0.7985 -0.0399 0.1751 +v 0.7985 -0.0380 0.1777 +v 0.7985 -0.0380 0.1808 +v 0.7985 -0.0399 0.1834 +v 0.7921 -0.0354 0.1857 +v 0.7874 -0.0354 0.1872 +v 0.7949 -0.0354 0.1817 +v 0.7949 -0.0354 0.1768 +v 0.7921 -0.0354 0.1728 +v 0.7874 -0.0354 0.1713 +v 0.7849 -0.0354 0.1717 +v 0.7849 -0.0354 0.1866 +v 0.7811 -0.0383 0.1828 +v 0.7811 -0.0383 0.1755 +v 0.7807 -0.0397 0.1748 +v 0.7807 -0.0397 0.1835 +v 0.8216 -0.0401 0.1753 +v 0.8216 -0.0383 0.1777 +v 0.8216 -0.0383 0.1807 +v 0.8216 -0.0401 0.1832 +v 0.9149 -0.0407 0.1762 +v 0.8231 -0.0402 0.1755 +v 0.9149 -0.0394 0.1781 +v 0.8231 -0.0385 0.1778 +v 0.9149 -0.0394 0.1804 +v 0.8231 -0.0385 0.1807 +v 0.9149 -0.0407 0.1823 +v 0.8231 -0.0402 0.1830 +v 0.7867 -0.0504 0.1792 +v 0.7867 -0.0354 0.1792 +v 0.9158 -0.0429 0.1764 +v 0.9158 -0.0429 0.1792 +v 0.9158 -0.0446 0.1769 +v 0.9158 -0.0456 0.1784 +v 0.9158 -0.0456 0.1801 +v 0.9158 -0.0446 0.1816 +v 0.9158 -0.0429 0.1821 +v 0.9158 -0.0412 0.1816 +v 0.9158 -0.0402 0.1801 +v 0.9158 -0.0402 0.1784 +v 0.9158 -0.0412 0.1769 +v 0.7435 -0.0285 0.1892 +v 0.7435 -0.0145 0.1892 +v 0.7325 -0.0145 0.1892 +v 0.7325 -0.0285 0.1892 +v 0.6408 -0.0330 0.1587 +v 0.6419 -0.0330 0.1691 +v 0.6414 -0.0267 0.1691 +v 0.6404 -0.0267 0.1587 +v 0.7903 -0.0285 0.1587 +v 0.7903 -0.0231 0.1587 +v 0.7903 -0.0230 0.1691 +v 0.7903 -0.0285 0.1691 +v 0.7903 -0.0591 0.1587 +v 0.7903 -0.0571 0.1691 +v 0.7885 -0.0625 0.1691 +v 0.7885 -0.0645 0.1587 +v 0.7846 -0.0645 0.1691 +v 0.7846 -0.0665 0.1587 +v 0.7443 -0.0702 0.1691 +v 0.7443 -0.0722 0.1587 +v 0.7324 -0.0709 0.1691 +v 0.7324 -0.0729 0.1587 +v 0.7205 -0.0719 0.1587 +v 0.7205 -0.0699 0.1691 +v 0.6637 -0.0608 0.1691 +v 0.6628 -0.0628 0.1587 +v 0.6551 -0.0576 0.1691 +v 0.6542 -0.0596 0.1587 +v 0.6464 -0.0527 0.1587 +v 0.6474 -0.0507 0.1691 +v 0.6414 -0.0405 0.1587 +v 0.6423 -0.0385 0.1691 +v 0.6650 -0.0267 0.1587 +v 0.6650 -0.0330 0.1587 +v 0.6520 -0.0330 0.1587 +v 0.6510 -0.0267 0.1587 +v 0.6395 -0.0145 0.1587 +v 0.6492 -0.0145 0.1587 +v 0.6540 -0.0461 0.1587 +v 0.6650 -0.0545 0.1587 +v 0.7215 -0.0635 0.1587 +v 0.7325 -0.0644 0.1587 +v 0.7435 -0.0637 0.1587 +v 0.7817 -0.0582 0.1587 +v 0.7817 -0.0429 0.1587 +v 0.7903 -0.0348 0.1587 +v 0.7903 -0.0429 0.1587 +v 0.7435 -0.0429 0.1587 +v 0.7435 -0.0285 0.1587 +v 0.7817 -0.0285 0.1587 +v 0.7325 -0.0429 0.1587 +v 0.7325 -0.0285 0.1587 +v 0.7215 -0.0429 0.1587 +v 0.7215 -0.0285 0.1587 +v 0.6452 -0.0330 0.1892 +v 0.6554 -0.0330 0.1892 +v 0.6543 -0.0267 0.1892 +v 0.6447 -0.0267 0.1892 +v 0.7887 -0.0541 0.1892 +v 0.7764 -0.0530 0.1892 +v 0.7873 -0.0580 0.1892 +v 0.7837 -0.0598 0.1892 +v 0.7435 -0.0578 0.1892 +v 0.7442 -0.0650 0.1892 +v 0.7325 -0.0585 0.1892 +v 0.7324 -0.0658 0.1892 +v 0.7216 -0.0576 0.1892 +v 0.7207 -0.0648 0.1892 +v 0.6677 -0.0486 0.1892 +v 0.6658 -0.0557 0.1892 +v 0.6567 -0.0402 0.1892 +v 0.6568 -0.0524 0.1892 +v 0.6501 -0.0460 0.1892 +v 0.6452 -0.0351 0.1892 +v 0.7765 -0.0285 0.1892 +v 0.7774 -0.0145 0.1892 +v 0.6677 -0.0330 0.1892 +v 0.7216 -0.0429 0.1892 +v 0.7216 -0.0285 0.1892 +v 0.6677 -0.0267 0.1892 +v 0.7216 -0.0145 0.1892 +v 0.7435 -0.0429 0.1892 +v 0.7325 -0.0429 0.1892 +v 0.6404 -0.0145 0.1691 +v 0.6439 -0.0349 0.1880 +v 0.6438 -0.0330 0.1880 +v 0.7903 -0.0529 0.1587 +v 0.7903 -0.0513 0.1691 +v 0.7903 -0.0346 0.1691 +v 0.7903 -0.0429 0.1691 +v 0.6650 -0.0145 0.1587 +v 0.7818 -0.0145 0.1587 +v 0.7903 -0.0064 0.1587 +v 0.7903 -0.0145 0.1587 +v 0.7435 -0.0145 0.1587 +v 0.7325 -0.0145 0.1587 +v 0.7215 -0.0145 0.1587 +v 0.6436 -0.0145 0.1892 +v 0.6522 -0.0145 0.1892 +v 0.7807 -0.0481 0.1691 +v 0.7851 -0.0513 0.1691 +v 0.7851 -0.0346 0.1691 +v 0.7790 -0.0429 0.1691 +v 0.7789 -0.0145 0.1691 +v 0.7903 -0.0145 0.1691 +v 0.7851 -0.0062 0.1691 +v 0.7807 -0.0094 0.1691 +v 0.7774 -0.0429 0.1892 +v 0.6677 -0.0145 0.1892 +v 0.7798 -0.0487 0.1892 +v 0.7797 -0.0369 0.1892 +v 0.7843 -0.0333 0.1892 +v 0.7842 -0.0239 0.1892 +v 0.7796 -0.0204 0.1892 +v 0.7797 -0.0084 0.1892 +v 0.7845 -0.0051 0.1892 +v 0.7851 -0.0229 0.1691 +v 0.7807 -0.0197 0.1691 +v 0.7903 -0.0285 0.1880 +v 0.7903 -0.0346 0.1880 +v 0.7903 -0.0062 0.1880 +v 0.7903 -0.0063 0.1691 +v 0.7890 -0.0049 0.1892 +v 0.7890 -0.0285 0.1892 +v 0.7890 -0.0242 0.1892 +v 0.7890 -0.0333 0.1892 +v 0.7890 -0.0525 0.1892 +v 0.7847 -0.0522 0.1892 +v 0.7903 -0.0513 0.1880 +v 0.7851 -0.0513 0.1880 +v 0.7807 -0.0481 0.1880 +v 0.7790 -0.0429 0.1880 +v 0.7807 -0.0377 0.1691 +v 0.7807 -0.0377 0.1880 +v 0.7851 -0.0346 0.1880 +v 0.7903 -0.0230 0.1880 +v 0.7851 -0.0229 0.1880 +v 0.7807 -0.0197 0.1880 +v 0.7789 -0.0145 0.1880 +v 0.7807 -0.0094 0.1880 +v 0.7851 -0.0062 0.1880 +v 0.6432 -0.0267 0.1880 +v 0.7885 -0.0588 0.1880 +v 0.7903 -0.0535 0.1880 +v 0.7846 -0.0609 0.1880 +v 0.7443 -0.0665 0.1880 +v 0.7324 -0.0673 0.1880 +v 0.7205 -0.0663 0.1880 +v 0.6653 -0.0572 0.1880 +v 0.6567 -0.0539 0.1880 +v 0.6490 -0.0470 0.1880 +v 0.6422 -0.0145 0.1880 +v 0.6694 0.0005 0.1500 +v 0.6729 -0.0213 0.1500 +v 0.6729 -0.0213 0.1562 +v 0.6694 0.0005 0.1562 +v 0.6829 -0.0410 0.1500 +v 0.6829 -0.0410 0.1562 +v 0.6985 -0.0566 0.1500 +v 0.6985 -0.0566 0.1562 +v 0.7182 -0.0666 0.1500 +v 0.7182 -0.0666 0.1562 +v 0.7400 -0.0701 0.1500 +v 0.7400 -0.0701 0.1562 +v 0.7618 -0.0666 0.1500 +v 0.7618 -0.0666 0.1562 +v 0.7815 -0.0566 0.1500 +v 0.7815 -0.0566 0.1562 +v 0.7971 -0.0410 0.1500 +v 0.7971 -0.0410 0.1562 +v 0.8072 -0.0213 0.1500 +v 0.8072 -0.0213 0.1562 +v 0.8106 0.0005 0.1500 +v 0.8106 0.0005 0.1562 +v 0.8072 0.0223 0.1500 +v 0.8072 0.0223 0.1562 +v 0.7971 0.0420 0.1500 +v 0.7971 0.0420 0.1562 +v 0.7815 0.0576 0.1500 +v 0.7815 0.0576 0.1562 +v 0.7618 0.0677 0.1500 +v 0.7618 0.0677 0.1562 +v 0.7400 0.0711 0.1500 +v 0.7400 0.0711 0.1562 +v 0.7182 0.0677 0.1500 +v 0.7182 0.0677 0.1562 +v 0.6985 0.0576 0.1500 +v 0.6985 0.0576 0.1562 +v 0.6829 0.0420 0.1500 +v 0.6829 0.0420 0.1562 +v 0.6729 0.0223 0.1500 +v 0.6729 0.0223 0.1562 +v 0.7433 -0.0011 0.1500 +v 0.7115 0.0213 0.1500 +v 0.7064 0.0114 0.1500 +v 0.6712 0.0005 0.1575 +v 0.6746 -0.0208 0.1575 +v 0.7433 -0.0011 0.1575 +v 0.6844 -0.0400 0.1575 +v 0.6996 -0.0552 0.1575 +v 0.7188 -0.0650 0.1575 +v 0.7401 -0.0683 0.1575 +v 0.7614 -0.0649 0.1575 +v 0.7805 -0.0552 0.1575 +v 0.7957 -0.0399 0.1575 +v 0.8055 -0.0208 0.1575 +v 0.8089 0.0005 0.1575 +v 0.8055 0.0217 0.1575 +v 0.7958 0.0409 0.1575 +v 0.7806 0.0562 0.1575 +v 0.7614 0.0660 0.1575 +v 0.7401 0.0694 0.1575 +v 0.7188 0.0660 0.1575 +v 0.6996 0.0563 0.1575 +v 0.6843 0.0410 0.1575 +v 0.7115 0.0213 0.1575 +v 0.6745 0.0218 0.1575 +v 0.7064 0.0114 0.1575 +v -0.4770 -0.0169 0.2156 +v -0.4821 -0.0169 0.2139 +v -0.4821 -0.0234 0.2139 +v -0.4770 -0.0234 0.2156 +v -0.4821 -0.0169 0.1997 +v -0.4770 -0.0169 0.1980 +v -0.4770 -0.0234 0.1980 +v -0.4821 -0.0234 0.1997 +v -0.4745 -0.0169 0.1986 +v -0.4745 -0.0234 0.1986 +v -0.4745 -0.0169 0.2148 +v -0.4745 -0.0234 0.2148 +v -0.4853 -0.0234 0.2089 +v -0.4842 -0.0199 0.2110 +v -0.4857 -0.0218 0.2084 +v -0.4853 -0.0234 0.2047 +v -0.4857 -0.0218 0.2052 +v -0.4842 -0.0199 0.2026 +v -0.4835 -0.0169 0.2016 +v -0.4835 -0.0169 0.2120 +v -0.4881 -0.0199 0.2027 +v -0.4881 -0.0169 0.2017 +v -0.4881 -0.0218 0.2052 +v -0.4881 -0.0218 0.2084 +v -0.4881 -0.0199 0.2110 +v -0.4881 -0.0169 0.2119 +v -0.4816 -0.0244 0.2132 +v -0.4770 -0.0244 0.2148 +v -0.4845 -0.0244 0.2093 +v -0.4845 -0.0244 0.2044 +v -0.4816 -0.0244 0.2004 +v -0.4770 -0.0244 0.1989 +v -0.4745 -0.0244 0.1993 +v -0.4745 -0.0244 0.2142 +v -0.4706 -0.0215 0.2104 +v -0.4706 -0.0215 0.2030 +v -0.4703 -0.0201 0.2024 +v -0.4703 -0.0201 0.2110 +v -0.4695 -0.0169 0.2024 +v -0.4695 -0.0169 0.2110 +v -0.5112 -0.0198 0.2029 +v -0.5112 -0.0169 0.2020 +v -0.5112 -0.0215 0.2053 +v -0.5112 -0.0215 0.2083 +v -0.5112 -0.0198 0.2107 +v -0.5112 -0.0169 0.2117 +v -0.6045 -0.0191 0.2038 +v -0.6045 -0.0169 0.2031 +v -0.5127 -0.0169 0.2022 +v -0.5127 -0.0196 0.2030 +v -0.6045 -0.0205 0.2057 +v -0.5127 -0.0213 0.2054 +v -0.6045 -0.0205 0.2080 +v -0.5127 -0.0213 0.2083 +v -0.6045 -0.0191 0.2098 +v -0.5127 -0.0196 0.2106 +v -0.6045 -0.0169 0.2105 +v -0.5127 -0.0169 0.2115 +v -0.4770 -0.0104 0.2156 +v -0.4821 -0.0104 0.2139 +v -0.4821 -0.0104 0.1997 +v -0.4770 -0.0104 0.1980 +v -0.4745 -0.0104 0.1986 +v -0.4745 -0.0104 0.2148 +v -0.4853 -0.0104 0.2089 +v -0.4857 -0.0120 0.2084 +v -0.4842 -0.0139 0.2110 +v -0.4853 -0.0104 0.2047 +v -0.4857 -0.0120 0.2052 +v -0.4842 -0.0139 0.2026 +v -0.4881 -0.0139 0.2027 +v -0.4881 -0.0120 0.2052 +v -0.4881 -0.0120 0.2084 +v -0.4881 -0.0139 0.2110 +v -0.4770 -0.0094 0.2148 +v -0.4816 -0.0094 0.2132 +v -0.4845 -0.0094 0.2093 +v -0.4845 -0.0094 0.2044 +v -0.4816 -0.0094 0.2004 +v -0.4770 -0.0094 0.1989 +v -0.4745 -0.0094 0.1993 +v -0.4745 -0.0094 0.2142 +v -0.4706 -0.0123 0.2104 +v -0.4703 -0.0137 0.2110 +v -0.4703 -0.0137 0.2024 +v -0.4706 -0.0123 0.2030 +v -0.5112 -0.0140 0.2029 +v -0.5112 -0.0123 0.2053 +v -0.5112 -0.0123 0.2083 +v -0.5112 -0.0140 0.2107 +v -0.6045 -0.0147 0.2038 +v -0.5127 -0.0142 0.2030 +v -0.6045 -0.0134 0.2057 +v -0.5127 -0.0125 0.2054 +v -0.6045 -0.0134 0.2080 +v -0.5127 -0.0125 0.2083 +v -0.6045 -0.0147 0.2098 +v -0.5127 -0.0142 0.2106 +v -0.4763 -0.0244 0.2068 +v -0.4763 -0.0094 0.2068 +v -0.6054 -0.0169 0.2039 +v -0.6054 -0.0186 0.2045 +v -0.6054 -0.0169 0.2068 +v -0.6054 -0.0196 0.2059 +v -0.6054 -0.0196 0.2077 +v -0.6054 -0.0186 0.2091 +v -0.6054 -0.0169 0.2097 +v -0.6054 -0.0152 0.2091 +v -0.6054 -0.0142 0.2077 +v -0.6054 -0.0142 0.2059 +v -0.6054 -0.0152 0.2045 +v -0.4331 -0.0374 0.2168 +v -0.4221 -0.0382 0.2168 +v -0.4221 -0.0088 0.2168 +v -0.4331 -0.0088 0.2168 +v -0.4799 -0.0359 0.1862 +v -0.4799 -0.0339 0.1967 +v -0.4799 -0.0252 0.1967 +v -0.4799 -0.0252 0.1862 +v -0.4781 -0.0413 0.1862 +v -0.4781 -0.0393 0.1967 +v -0.4742 -0.0433 0.1862 +v -0.4742 -0.0413 0.1967 +v -0.4339 -0.0530 0.1862 +v -0.4339 -0.0509 0.1967 +v -0.4220 -0.0539 0.1862 +v -0.4220 -0.0517 0.1967 +v -0.4101 -0.0528 0.1862 +v -0.4101 -0.0506 0.1967 +v -0.3691 -0.0445 0.1862 +v -0.3700 -0.0423 0.1967 +v -0.3605 -0.0409 0.1862 +v -0.3614 -0.0386 0.1967 +v -0.3527 -0.0331 0.1862 +v -0.3537 -0.0309 0.1967 +v -0.3477 -0.0194 0.1862 +v -0.3486 -0.0172 0.1967 +v -0.3603 -0.0257 0.1862 +v -0.3577 -0.0091 0.1862 +v -0.3454 -0.0084 0.1862 +v -0.3713 -0.0352 0.1862 +v -0.4111 -0.0436 0.1862 +v -0.4221 -0.0446 0.1862 +v -0.4331 -0.0438 0.1862 +v -0.4713 -0.0350 0.1862 +v -0.4783 -0.0310 0.2168 +v -0.4769 -0.0349 0.2168 +v -0.4660 -0.0299 0.2168 +v -0.4733 -0.0366 0.2168 +v -0.4338 -0.0453 0.2168 +v -0.4220 -0.0461 0.2168 +v -0.4103 -0.0450 0.2168 +v -0.4112 -0.0372 0.2168 +v -0.3721 -0.0365 0.2168 +v -0.3740 -0.0286 0.2168 +v -0.3631 -0.0328 0.2168 +v -0.3630 -0.0191 0.2168 +v -0.3564 -0.0256 0.2168 +v -0.3515 -0.0134 0.2168 +v -0.4670 -0.0167 0.2168 +v -0.4112 -0.0088 0.2168 +v -0.4221 -0.0001 0.2168 +v -0.4331 -0.0001 0.2168 +v -0.3447 -0.0001 0.1862 +v -0.3456 -0.0001 0.1967 +v -0.3465 -0.0084 0.1967 +v -0.3713 -0.0001 0.1862 +v -0.3575 -0.0001 0.1862 +v -0.3713 -0.0091 0.1862 +v -0.4799 -0.0085 0.1862 +v -0.4799 -0.0001 0.1862 +v -0.4713 -0.0167 0.1862 +v -0.4799 -0.0167 0.1862 +v -0.4713 -0.0001 0.1862 +v -0.4331 -0.0001 0.1862 +v -0.4331 -0.0088 0.1862 +v -0.4221 -0.0001 0.1862 +v -0.4221 -0.0088 0.1862 +v -0.4111 -0.0001 0.1862 +v -0.4111 -0.0088 0.1862 +v -0.3498 -0.0084 0.2168 +v -0.3487 -0.0001 0.2168 +v -0.3602 -0.0001 0.2168 +v -0.3610 -0.0091 0.2168 +v -0.4747 -0.0083 0.1967 +v -0.4798 -0.0084 0.1967 +v -0.4799 -0.0167 0.1967 +v -0.4685 -0.0167 0.1967 +v -0.4661 -0.0001 0.2168 +v -0.3740 -0.0091 0.2168 +v -0.3740 -0.0001 0.2168 +v -0.4112 -0.0001 0.2168 +v -0.4738 -0.0261 0.2168 +v -0.4692 -0.0226 0.2168 +v -0.4693 -0.0105 0.2168 +v -0.4740 -0.0072 0.2168 +v -0.4747 -0.0250 0.1967 +v -0.4799 -0.0001 0.2155 +v -0.4799 -0.0001 0.1967 +v -0.4799 -0.0083 0.2155 +v -0.4786 -0.0001 0.2168 +v -0.4786 -0.0071 0.2168 +v -0.4786 -0.0264 0.2168 +v -0.4799 -0.0251 0.2155 +v -0.4747 -0.0250 0.2155 +v -0.4703 -0.0219 0.2155 +v -0.4703 -0.0219 0.1967 +v -0.4685 -0.0167 0.2155 +v -0.4703 -0.0115 0.2155 +v -0.4703 -0.0115 0.1967 +v -0.4747 -0.0083 0.2155 +v -0.4799 -0.0303 0.2155 +v -0.4781 -0.0356 0.2155 +v -0.4742 -0.0377 0.2155 +v -0.4339 -0.0469 0.2155 +v -0.4220 -0.0478 0.2155 +v -0.4101 -0.0467 0.2155 +v -0.3716 -0.0382 0.2156 +v -0.3630 -0.0345 0.2156 +v -0.3553 -0.0268 0.2156 +v -0.3503 -0.0131 0.2156 +v -0.3473 -0.0001 0.2155 +v -0.3486 -0.0084 0.2155 +v -0.4744 -0.0001 0.1500 +v -0.4715 -0.0184 0.1500 +v -0.4715 -0.0184 0.1838 +v -0.4744 -0.0001 0.1838 +v -0.4633 -0.0346 0.1500 +v -0.4633 -0.0346 0.1838 +v -0.4504 -0.0475 0.1500 +v -0.4504 -0.0475 0.1838 +v -0.4342 -0.0558 0.1500 +v -0.4342 -0.0558 0.1838 +v -0.4161 -0.0586 0.1500 +v -0.4161 -0.0586 0.1838 +v -0.4161 -0.0001 0.1500 +v -0.4729 -0.0001 0.1851 +v -0.4702 -0.0179 0.1851 +v -0.4161 -0.0001 0.1851 +v -0.4621 -0.0337 0.1851 +v -0.4496 -0.0463 0.1851 +v -0.4338 -0.0544 0.1851 +v -0.4161 -0.0572 0.1851 +v -0.3579 -0.0001 0.1500 +v -0.3579 -0.0001 0.1838 +v -0.3607 -0.0184 0.1838 +v -0.3607 -0.0184 0.1500 +v -0.3690 -0.0346 0.1838 +v -0.3690 -0.0346 0.1500 +v -0.3818 -0.0475 0.1838 +v -0.3818 -0.0475 0.1500 +v -0.3981 -0.0558 0.1838 +v -0.3981 -0.0558 0.1500 +v -0.3593 -0.0001 0.1851 +v -0.3621 -0.0179 0.1851 +v -0.3701 -0.0337 0.1851 +v -0.3826 -0.0463 0.1851 +v -0.3984 -0.0544 0.1851 +v -0.3607 0.0183 0.1500 +v -0.3607 0.0183 0.1838 +v -0.3690 0.0345 0.1500 +v -0.3690 0.0345 0.1838 +v -0.3818 0.0474 0.1500 +v -0.3818 0.0474 0.1838 +v -0.3981 0.0556 0.1500 +v -0.3981 0.0556 0.1838 +v -0.4161 0.0585 0.1500 +v -0.4161 0.0585 0.1838 +v -0.3621 0.0178 0.1851 +v -0.3701 0.0336 0.1851 +v -0.3826 0.0461 0.1851 +v -0.3984 0.0542 0.1851 +v -0.4161 0.0570 0.1851 +v -0.4715 0.0183 0.1838 +v -0.4715 0.0183 0.1500 +v -0.4633 0.0345 0.1838 +v -0.4633 0.0345 0.1500 +v -0.4504 0.0474 0.1838 +v -0.4504 0.0474 0.1500 +v -0.4342 0.0556 0.1838 +v -0.4342 0.0556 0.1500 +v -0.4702 0.0178 0.1851 +v -0.4621 0.0336 0.1851 +v -0.4496 0.0461 0.1851 +v -0.4338 0.0542 0.1851 +v -0.4770 0.0167 0.2156 +v -0.4770 0.0232 0.2156 +v -0.4821 0.0232 0.2139 +v -0.4821 0.0167 0.2139 +v -0.4821 0.0167 0.1997 +v -0.4821 0.0232 0.1997 +v -0.4770 0.0232 0.1980 +v -0.4770 0.0167 0.1980 +v -0.4745 0.0232 0.1986 +v -0.4745 0.0167 0.1986 +v -0.4745 0.0167 0.2148 +v -0.4745 0.0232 0.2148 +v -0.4853 0.0232 0.2089 +v -0.4857 0.0216 0.2084 +v -0.4842 0.0197 0.2110 +v -0.4853 0.0232 0.2047 +v -0.4857 0.0216 0.2052 +v -0.4835 0.0167 0.2016 +v -0.4842 0.0197 0.2026 +v -0.4835 0.0167 0.2120 +v -0.4881 0.0167 0.2017 +v -0.4881 0.0197 0.2027 +v -0.4881 0.0216 0.2052 +v -0.4881 0.0216 0.2084 +v -0.4881 0.0197 0.2110 +v -0.4881 0.0167 0.2119 +v -0.4770 0.0242 0.2148 +v -0.4816 0.0242 0.2132 +v -0.4845 0.0242 0.2093 +v -0.4845 0.0242 0.2044 +v -0.4816 0.0242 0.2004 +v -0.4770 0.0242 0.1989 +v -0.4745 0.0242 0.1993 +v -0.4745 0.0242 0.2142 +v -0.4706 0.0213 0.2104 +v -0.4703 0.0199 0.2110 +v -0.4703 0.0199 0.2024 +v -0.4706 0.0213 0.2030 +v -0.4695 0.0167 0.2110 +v -0.4695 0.0167 0.2024 +v -0.5112 0.0196 0.2029 +v -0.5112 0.0167 0.2020 +v -0.5112 0.0213 0.2053 +v -0.5112 0.0213 0.2083 +v -0.5112 0.0196 0.2107 +v -0.5112 0.0167 0.2117 +v -0.6045 0.0189 0.2038 +v -0.5127 0.0194 0.2030 +v -0.5127 0.0167 0.2022 +v -0.6045 0.0167 0.2031 +v -0.6045 0.0202 0.2057 +v -0.5127 0.0211 0.2054 +v -0.6045 0.0202 0.2080 +v -0.5127 0.0211 0.2083 +v -0.6045 0.0189 0.2098 +v -0.5127 0.0194 0.2106 +v -0.6045 0.0167 0.2105 +v -0.5127 0.0167 0.2115 +v -0.4821 0.0102 0.2139 +v -0.4770 0.0102 0.2156 +v -0.4770 0.0102 0.1980 +v -0.4821 0.0102 0.1997 +v -0.4745 0.0102 0.1986 +v -0.4745 0.0102 0.2148 +v -0.4853 0.0102 0.2089 +v -0.4842 0.0137 0.2110 +v -0.4857 0.0118 0.2084 +v -0.4853 0.0102 0.2047 +v -0.4857 0.0118 0.2052 +v -0.4842 0.0137 0.2026 +v -0.4881 0.0137 0.2027 +v -0.4881 0.0118 0.2052 +v -0.4881 0.0118 0.2084 +v -0.4881 0.0137 0.2110 +v -0.4816 0.0092 0.2132 +v -0.4770 0.0092 0.2148 +v -0.4845 0.0092 0.2093 +v -0.4845 0.0092 0.2044 +v -0.4816 0.0092 0.2004 +v -0.4770 0.0092 0.1989 +v -0.4745 0.0092 0.1993 +v -0.4745 0.0092 0.2142 +v -0.4706 0.0121 0.2104 +v -0.4706 0.0121 0.2030 +v -0.4703 0.0135 0.2024 +v -0.4703 0.0135 0.2110 +v -0.5112 0.0138 0.2029 +v -0.5112 0.0121 0.2053 +v -0.5112 0.0121 0.2083 +v -0.5112 0.0138 0.2107 +v -0.6045 0.0145 0.2038 +v -0.5127 0.0140 0.2030 +v -0.6045 0.0132 0.2057 +v -0.5127 0.0123 0.2054 +v -0.6045 0.0132 0.2080 +v -0.5127 0.0123 0.2083 +v -0.6045 0.0145 0.2098 +v -0.5127 0.0140 0.2106 +v -0.4763 0.0242 0.2068 +v -0.4763 0.0092 0.2068 +v -0.6054 0.0167 0.2039 +v -0.6054 0.0167 0.2068 +v -0.6054 0.0184 0.2045 +v -0.6054 0.0194 0.2059 +v -0.6054 0.0194 0.2077 +v -0.6054 0.0184 0.2091 +v -0.6054 0.0167 0.2097 +v -0.6054 0.0150 0.2091 +v -0.6054 0.0140 0.2077 +v -0.6054 0.0140 0.2059 +v -0.6054 0.0150 0.2045 +v -0.4331 0.0372 0.2168 +v -0.4331 0.0085 0.2168 +v -0.4221 0.0085 0.2168 +v -0.4221 0.0380 0.2168 +v -0.4799 0.0357 0.1862 +v -0.4799 0.0250 0.1862 +v -0.4799 0.0250 0.1967 +v -0.4799 0.0337 0.1967 +v -0.4781 0.0391 0.1967 +v -0.4781 0.0411 0.1862 +v -0.4742 0.0411 0.1967 +v -0.4742 0.0431 0.1862 +v -0.4339 0.0507 0.1967 +v -0.4339 0.0528 0.1862 +v -0.4220 0.0515 0.1967 +v -0.4220 0.0537 0.1862 +v -0.4101 0.0526 0.1862 +v -0.4101 0.0504 0.1967 +v -0.3700 0.0421 0.1967 +v -0.3691 0.0443 0.1862 +v -0.3614 0.0384 0.1967 +v -0.3605 0.0407 0.1862 +v -0.3527 0.0329 0.1862 +v -0.3537 0.0307 0.1967 +v -0.3477 0.0192 0.1862 +v -0.3486 0.0170 0.1967 +v -0.3454 0.0082 0.1862 +v -0.3577 0.0089 0.1862 +v -0.3603 0.0255 0.1862 +v -0.3713 0.0350 0.1862 +v -0.4111 0.0434 0.1862 +v -0.4221 0.0444 0.1862 +v -0.4331 0.0436 0.1862 +v -0.4713 0.0348 0.1862 +v -0.4783 0.0308 0.2168 +v -0.4660 0.0297 0.2168 +v -0.4769 0.0347 0.2168 +v -0.4733 0.0364 0.2168 +v -0.4338 0.0451 0.2168 +v -0.4220 0.0459 0.2168 +v -0.4112 0.0370 0.2168 +v -0.4103 0.0448 0.2168 +v -0.3740 0.0284 0.2168 +v -0.3721 0.0363 0.2168 +v -0.3630 0.0189 0.2168 +v -0.3631 0.0326 0.2168 +v -0.3564 0.0254 0.2168 +v -0.3515 0.0132 0.2168 +v -0.4670 0.0164 0.2168 +v -0.4112 0.0085 0.2168 +v -0.3465 0.0082 0.1967 +v -0.3713 0.0089 0.1862 +v -0.4713 0.0165 0.1862 +v -0.4799 0.0083 0.1862 +v -0.4799 0.0165 0.1862 +v -0.4331 0.0085 0.1862 +v -0.4221 0.0085 0.1862 +v -0.4111 0.0085 0.1862 +v -0.3498 0.0082 0.2168 +v -0.3610 0.0089 0.2168 +v -0.4685 0.0165 0.1967 +v -0.4799 0.0165 0.1967 +v -0.4747 0.0081 0.1967 +v -0.4703 0.0113 0.1967 +v -0.3740 0.0089 0.2168 +v -0.4738 0.0259 0.2168 +v -0.4692 0.0224 0.2168 +v -0.4693 0.0103 0.2168 +v -0.4740 0.0070 0.2168 +v -0.4747 0.0248 0.1967 +v -0.4703 0.0216 0.1967 +v -0.4799 0.0081 0.2155 +v -0.4798 0.0082 0.1967 +v -0.4786 0.0069 0.2168 +v -0.4786 0.0262 0.2168 +v -0.4799 0.0249 0.2155 +v -0.4747 0.0248 0.2155 +v -0.4703 0.0216 0.2155 +v -0.4685 0.0165 0.2155 +v -0.4703 0.0113 0.2155 +v -0.4747 0.0081 0.2155 +v -0.4799 0.0301 0.2155 +v -0.4781 0.0354 0.2155 +v -0.4742 0.0375 0.2155 +v -0.4339 0.0467 0.2155 +v -0.4220 0.0476 0.2155 +v -0.4101 0.0465 0.2155 +v -0.3716 0.0380 0.2156 +v -0.3630 0.0343 0.2156 +v -0.3553 0.0266 0.2156 +v -0.3503 0.0129 0.2156 +v -0.3486 0.0082 0.2155 +v -0.6497 -0.0145 0.1880 +v -0.6549 -0.0145 0.1863 +v -0.6549 -0.0210 0.1863 +v -0.6497 -0.0210 0.1880 +v -0.6549 -0.0145 0.1721 +v -0.6497 -0.0145 0.1705 +v -0.6497 -0.0210 0.1705 +v -0.6549 -0.0210 0.1721 +v -0.6473 -0.0145 0.1711 +v -0.6473 -0.0210 0.1711 +v -0.6473 -0.0145 0.1873 +v -0.6473 -0.0210 0.1873 +v -0.6581 -0.0210 0.1814 +v -0.6570 -0.0175 0.1834 +v -0.6585 -0.0194 0.1808 +v -0.6581 -0.0210 0.1771 +v -0.6585 -0.0194 0.1776 +v -0.6570 -0.0175 0.1751 +v -0.6563 -0.0145 0.1741 +v -0.6563 -0.0145 0.1844 +v -0.6608 -0.0175 0.1751 +v -0.6608 -0.0145 0.1741 +v -0.6608 -0.0194 0.1777 +v -0.6608 -0.0194 0.1808 +v -0.6608 -0.0175 0.1834 +v -0.6608 -0.0145 0.1844 +v -0.6544 -0.0220 0.1857 +v -0.6497 -0.0220 0.1872 +v -0.6573 -0.0220 0.1817 +v -0.6573 -0.0220 0.1768 +v -0.6544 -0.0220 0.1728 +v -0.6497 -0.0220 0.1713 +v -0.6473 -0.0220 0.1717 +v -0.6473 -0.0220 0.1866 +v -0.6434 -0.0191 0.1828 +v -0.6434 -0.0191 0.1755 +v -0.6430 -0.0177 0.1748 +v -0.6430 -0.0177 0.1835 +v -0.6423 -0.0145 0.1748 +v -0.6423 -0.0145 0.1835 +v -0.6840 -0.0173 0.1753 +v -0.6840 -0.0145 0.1744 +v -0.6840 -0.0191 0.1777 +v -0.6840 -0.0191 0.1807 +v -0.6840 -0.0173 0.1832 +v -0.6840 -0.0145 0.1841 +v -0.7773 -0.0167 0.1762 +v -0.7773 -0.0145 0.1755 +v -0.6854 -0.0145 0.1746 +v -0.6854 -0.0172 0.1755 +v -0.7773 -0.0180 0.1781 +v -0.6854 -0.0189 0.1778 +v -0.7773 -0.0180 0.1804 +v -0.6854 -0.0189 0.1807 +v -0.7773 -0.0167 0.1823 +v -0.6854 -0.0172 0.1830 +v -0.7773 -0.0145 0.1830 +v -0.6854 -0.0145 0.1839 +v -0.6497 -0.0080 0.1880 +v -0.6549 -0.0080 0.1863 +v -0.6549 -0.0080 0.1721 +v -0.6497 -0.0080 0.1705 +v -0.6473 -0.0080 0.1711 +v -0.6473 -0.0080 0.1873 +v -0.6581 -0.0080 0.1814 +v -0.6585 -0.0096 0.1808 +v -0.6570 -0.0114 0.1834 +v -0.6581 -0.0080 0.1771 +v -0.6585 -0.0096 0.1776 +v -0.6570 -0.0114 0.1751 +v -0.6608 -0.0115 0.1751 +v -0.6608 -0.0096 0.1777 +v -0.6608 -0.0096 0.1808 +v -0.6608 -0.0115 0.1834 +v -0.6497 -0.0070 0.1872 +v -0.6544 -0.0070 0.1857 +v -0.6573 -0.0070 0.1817 +v -0.6573 -0.0070 0.1768 +v -0.6544 -0.0070 0.1728 +v -0.6497 -0.0070 0.1713 +v -0.6473 -0.0070 0.1717 +v -0.6473 -0.0070 0.1866 +v -0.6434 -0.0099 0.1828 +v -0.6430 -0.0113 0.1835 +v -0.6430 -0.0113 0.1748 +v -0.6434 -0.0099 0.1755 +v -0.6840 -0.0116 0.1753 +v -0.6840 -0.0099 0.1777 +v -0.6840 -0.0099 0.1807 +v -0.6840 -0.0116 0.1832 +v -0.7773 -0.0123 0.1762 +v -0.6854 -0.0118 0.1755 +v -0.7773 -0.0109 0.1781 +v -0.6854 -0.0101 0.1778 +v -0.7773 -0.0109 0.1804 +v -0.6854 -0.0101 0.1807 +v -0.7773 -0.0123 0.1823 +v -0.6854 -0.0118 0.1830 +v -0.6491 -0.0220 0.1792 +v -0.6491 -0.0070 0.1792 +v -0.7781 -0.0145 0.1764 +v -0.7781 -0.0162 0.1769 +v -0.7781 -0.0145 0.1792 +v -0.7781 -0.0172 0.1784 +v -0.7781 -0.0172 0.1801 +v -0.7781 -0.0162 0.1816 +v -0.7781 -0.0145 0.1821 +v -0.7781 -0.0128 0.1816 +v -0.7781 -0.0118 0.1801 +v -0.7781 -0.0118 0.1784 +v -0.7781 -0.0128 0.1769 +v -0.6497 -0.0429 0.1880 +v -0.6549 -0.0429 0.1863 +v -0.6549 -0.0494 0.1863 +v -0.6497 -0.0494 0.1880 +v -0.6549 -0.0429 0.1721 +v -0.6497 -0.0429 0.1705 +v -0.6497 -0.0494 0.1705 +v -0.6549 -0.0494 0.1721 +v -0.6473 -0.0429 0.1711 +v -0.6473 -0.0494 0.1711 +v -0.6473 -0.0429 0.1873 +v -0.6473 -0.0494 0.1873 +v -0.6581 -0.0494 0.1814 +v -0.6570 -0.0460 0.1834 +v -0.6585 -0.0478 0.1808 +v -0.6581 -0.0494 0.1771 +v -0.6585 -0.0478 0.1776 +v -0.6570 -0.0460 0.1751 +v -0.6563 -0.0429 0.1741 +v -0.6563 -0.0429 0.1844 +v -0.6608 -0.0459 0.1751 +v -0.6608 -0.0429 0.1741 +v -0.6608 -0.0478 0.1777 +v -0.6608 -0.0478 0.1808 +v -0.6608 -0.0459 0.1834 +v -0.6608 -0.0429 0.1844 +v -0.6544 -0.0504 0.1857 +v -0.6497 -0.0504 0.1872 +v -0.6573 -0.0504 0.1817 +v -0.6573 -0.0504 0.1768 +v -0.6544 -0.0504 0.1728 +v -0.6497 -0.0504 0.1713 +v -0.6473 -0.0504 0.1717 +v -0.6473 -0.0504 0.1866 +v -0.6434 -0.0475 0.1828 +v -0.6434 -0.0475 0.1755 +v -0.6430 -0.0461 0.1748 +v -0.6430 -0.0461 0.1835 +v -0.6423 -0.0429 0.1748 +v -0.6423 -0.0429 0.1835 +v -0.6840 -0.0458 0.1753 +v -0.6840 -0.0429 0.1744 +v -0.6840 -0.0475 0.1777 +v -0.6840 -0.0475 0.1807 +v -0.6840 -0.0458 0.1832 +v -0.6840 -0.0429 0.1841 +v -0.7773 -0.0451 0.1762 +v -0.7773 -0.0429 0.1755 +v -0.6854 -0.0429 0.1746 +v -0.6854 -0.0456 0.1755 +v -0.7773 -0.0465 0.1781 +v -0.6854 -0.0473 0.1778 +v -0.7773 -0.0465 0.1804 +v -0.6854 -0.0473 0.1807 +v -0.7773 -0.0451 0.1823 +v -0.6854 -0.0456 0.1830 +v -0.7773 -0.0429 0.1830 +v -0.6854 -0.0429 0.1839 +v -0.6497 -0.0364 0.1880 +v -0.6549 -0.0364 0.1863 +v -0.6549 -0.0364 0.1721 +v -0.6497 -0.0364 0.1705 +v -0.6473 -0.0364 0.1711 +v -0.6473 -0.0364 0.1873 +v -0.6581 -0.0364 0.1814 +v -0.6585 -0.0380 0.1808 +v -0.6570 -0.0399 0.1834 +v -0.6581 -0.0364 0.1771 +v -0.6585 -0.0380 0.1776 +v -0.6570 -0.0399 0.1751 +v -0.6608 -0.0399 0.1751 +v -0.6608 -0.0380 0.1777 +v -0.6608 -0.0380 0.1808 +v -0.6608 -0.0399 0.1834 +v -0.6497 -0.0354 0.1872 +v -0.6544 -0.0354 0.1857 +v -0.6573 -0.0354 0.1817 +v -0.6573 -0.0354 0.1768 +v -0.6544 -0.0354 0.1728 +v -0.6497 -0.0354 0.1713 +v -0.6473 -0.0354 0.1717 +v -0.6473 -0.0354 0.1866 +v -0.6434 -0.0383 0.1828 +v -0.6430 -0.0397 0.1835 +v -0.6430 -0.0397 0.1748 +v -0.6434 -0.0383 0.1755 +v -0.6840 -0.0401 0.1753 +v -0.6840 -0.0383 0.1777 +v -0.6840 -0.0383 0.1807 +v -0.6840 -0.0401 0.1832 +v -0.7773 -0.0407 0.1762 +v -0.6854 -0.0402 0.1755 +v -0.7773 -0.0394 0.1781 +v -0.6854 -0.0385 0.1778 +v -0.7773 -0.0394 0.1804 +v -0.6854 -0.0385 0.1807 +v -0.7773 -0.0407 0.1823 +v -0.6854 -0.0402 0.1830 +v -0.6491 -0.0504 0.1792 +v -0.6491 -0.0354 0.1792 +v -0.7781 -0.0429 0.1764 +v -0.7781 -0.0446 0.1769 +v -0.7781 -0.0429 0.1792 +v -0.7781 -0.0456 0.1784 +v -0.7781 -0.0456 0.1801 +v -0.7781 -0.0446 0.1816 +v -0.7781 -0.0429 0.1821 +v -0.7781 -0.0412 0.1816 +v -0.7781 -0.0402 0.1801 +v -0.7781 -0.0402 0.1784 +v -0.7781 -0.0412 0.1769 +v -0.6058 -0.0285 0.1892 +v -0.5949 -0.0285 0.1892 +v -0.5949 -0.0145 0.1892 +v -0.6058 -0.0145 0.1892 +v -0.5032 -0.0330 0.1587 +v -0.5027 -0.0267 0.1587 +v -0.5037 -0.0267 0.1691 +v -0.5042 -0.0330 0.1691 +v -0.6527 -0.0285 0.1587 +v -0.6527 -0.0285 0.1691 +v -0.6527 -0.0230 0.1691 +v -0.6527 -0.0231 0.1587 +v -0.6527 -0.0591 0.1587 +v -0.6508 -0.0645 0.1587 +v -0.6508 -0.0625 0.1691 +v -0.6527 -0.0571 0.1691 +v -0.6470 -0.0665 0.1587 +v -0.6470 -0.0645 0.1691 +v -0.6067 -0.0722 0.1587 +v -0.6067 -0.0702 0.1691 +v -0.5948 -0.0729 0.1587 +v -0.5948 -0.0709 0.1691 +v -0.5829 -0.0720 0.1587 +v -0.5829 -0.0699 0.1691 +v -0.5251 -0.0628 0.1587 +v -0.5260 -0.0608 0.1691 +v -0.5165 -0.0596 0.1587 +v -0.5174 -0.0576 0.1691 +v -0.5088 -0.0527 0.1587 +v -0.5097 -0.0507 0.1691 +v -0.5037 -0.0405 0.1587 +v -0.5046 -0.0385 0.1691 +v -0.5273 -0.0267 0.1587 +v -0.5134 -0.0267 0.1587 +v -0.5144 -0.0330 0.1587 +v -0.5273 -0.0330 0.1587 +v -0.5115 -0.0145 0.1587 +v -0.5018 -0.0145 0.1587 +v -0.5164 -0.0461 0.1587 +v -0.5273 -0.0545 0.1587 +v -0.5839 -0.0635 0.1587 +v -0.5949 -0.0644 0.1587 +v -0.6058 -0.0637 0.1587 +v -0.6441 -0.0582 0.1587 +v -0.6527 -0.0348 0.1587 +v -0.6441 -0.0429 0.1587 +v -0.6527 -0.0429 0.1587 +v -0.6441 -0.0285 0.1587 +v -0.6058 -0.0285 0.1587 +v -0.6058 -0.0429 0.1587 +v -0.5949 -0.0285 0.1587 +v -0.5949 -0.0429 0.1587 +v -0.5839 -0.0285 0.1587 +v -0.5839 -0.0429 0.1587 +v -0.5076 -0.0330 0.1892 +v -0.5070 -0.0267 0.1892 +v -0.5167 -0.0267 0.1892 +v -0.5178 -0.0330 0.1892 +v -0.6511 -0.0541 0.1892 +v -0.6497 -0.0580 0.1892 +v -0.6388 -0.0530 0.1892 +v -0.6461 -0.0598 0.1892 +v -0.6066 -0.0650 0.1892 +v -0.6058 -0.0578 0.1892 +v -0.5948 -0.0658 0.1892 +v -0.5949 -0.0585 0.1892 +v -0.5830 -0.0648 0.1892 +v -0.5839 -0.0576 0.1892 +v -0.5281 -0.0557 0.1892 +v -0.5300 -0.0486 0.1892 +v -0.5192 -0.0524 0.1892 +v -0.5190 -0.0402 0.1892 +v -0.5124 -0.0460 0.1892 +v -0.5076 -0.0351 0.1892 +v -0.6388 -0.0285 0.1892 +v -0.6398 -0.0145 0.1892 +v -0.5300 -0.0330 0.1892 +v -0.5300 -0.0267 0.1892 +v -0.5839 -0.0285 0.1892 +v -0.5839 -0.0429 0.1892 +v -0.5839 -0.0145 0.1892 +v -0.5949 -0.0429 0.1892 +v -0.6058 -0.0429 0.1892 +v -0.5949 -0.0001 0.1892 +v -0.6058 -0.0001 0.1892 +v -0.5008 -0.0001 0.1587 +v -0.5017 -0.0001 0.1691 +v -0.5028 -0.0145 0.1691 +v -0.5063 -0.0349 0.1880 +v -0.5061 -0.0330 0.1880 +v -0.6527 -0.0529 0.1587 +v -0.6527 -0.0513 0.1691 +v -0.6527 -0.0429 0.1691 +v -0.6527 -0.0346 0.1691 +v -0.5273 -0.0001 0.1587 +v -0.5093 -0.0001 0.1587 +v -0.5273 -0.0145 0.1587 +v -0.6527 -0.0064 0.1587 +v -0.6527 -0.0001 0.1587 +v -0.6441 -0.0145 0.1587 +v -0.6527 -0.0145 0.1587 +v -0.6441 -0.0001 0.1587 +v -0.6058 -0.0001 0.1587 +v -0.6058 -0.0145 0.1587 +v -0.5949 -0.0001 0.1587 +v -0.5949 -0.0145 0.1587 +v -0.5839 -0.0001 0.1587 +v -0.5839 -0.0145 0.1587 +v -0.5060 -0.0145 0.1892 +v -0.5047 -0.0001 0.1892 +v -0.5120 -0.0001 0.1892 +v -0.5145 -0.0145 0.1892 +v -0.6474 -0.0513 0.1691 +v -0.6430 -0.0481 0.1691 +v -0.6413 -0.0429 0.1691 +v -0.6474 -0.0346 0.1691 +v -0.6430 -0.0377 0.1691 +v -0.6474 -0.0062 0.1691 +v -0.6526 -0.0063 0.1691 +v -0.6527 -0.0145 0.1691 +v -0.6413 -0.0145 0.1691 +v -0.6398 -0.0429 0.1892 +v -0.6388 -0.0001 0.1892 +v -0.5300 -0.0145 0.1892 +v -0.5300 -0.0001 0.1892 +v -0.5839 -0.0001 0.1892 +v -0.6421 -0.0487 0.1892 +v -0.6421 -0.0369 0.1892 +v -0.6467 -0.0333 0.1892 +v -0.6466 -0.0240 0.1892 +v -0.6420 -0.0204 0.1892 +v -0.6421 -0.0084 0.1892 +v -0.6468 -0.0051 0.1892 +v -0.6474 -0.0229 0.1691 +v -0.6527 -0.0285 0.1880 +v -0.6527 -0.0346 0.1880 +v -0.6527 -0.0001 0.1880 +v -0.6527 -0.0001 0.1691 +v -0.6527 -0.0062 0.1880 +v -0.6514 -0.0001 0.1892 +v -0.6514 -0.0049 0.1892 +v -0.6514 -0.0242 0.1892 +v -0.6514 -0.0285 0.1892 +v -0.6514 -0.0333 0.1892 +v -0.6514 -0.0525 0.1892 +v -0.6471 -0.0522 0.1892 +v -0.6527 -0.0513 0.1880 +v -0.6474 -0.0513 0.1880 +v -0.6430 -0.0481 0.1880 +v -0.6413 -0.0429 0.1880 +v -0.6430 -0.0377 0.1880 +v -0.6474 -0.0346 0.1880 +v -0.6527 -0.0230 0.1880 +v -0.6474 -0.0229 0.1880 +v -0.6430 -0.0197 0.1880 +v -0.6430 -0.0197 0.1691 +v -0.6413 -0.0145 0.1880 +v -0.6430 -0.0094 0.1880 +v -0.6430 -0.0094 0.1691 +v -0.6474 -0.0062 0.1880 +v -0.5056 -0.0267 0.1880 +v -0.6508 -0.0588 0.1880 +v -0.6527 -0.0535 0.1880 +v -0.6470 -0.0609 0.1880 +v -0.6067 -0.0665 0.1880 +v -0.5948 -0.0673 0.1880 +v -0.5829 -0.0663 0.1880 +v -0.5277 -0.0572 0.1880 +v -0.5191 -0.0539 0.1880 +v -0.5114 -0.0470 0.1880 +v -0.5033 -0.0001 0.1880 +v -0.5046 -0.0145 0.1880 +v -0.6497 0.0143 0.1880 +v -0.6497 0.0207 0.1880 +v -0.6549 0.0207 0.1863 +v -0.6549 0.0143 0.1863 +v -0.6549 0.0143 0.1721 +v -0.6549 0.0207 0.1721 +v -0.6497 0.0207 0.1705 +v -0.6497 0.0143 0.1705 +v -0.6473 0.0207 0.1711 +v -0.6473 0.0143 0.1711 +v -0.6473 0.0143 0.1873 +v -0.6473 0.0207 0.1873 +v -0.6581 0.0207 0.1814 +v -0.6585 0.0192 0.1808 +v -0.6570 0.0173 0.1834 +v -0.6581 0.0207 0.1771 +v -0.6585 0.0192 0.1776 +v -0.6563 0.0143 0.1741 +v -0.6570 0.0173 0.1751 +v -0.6563 0.0143 0.1844 +v -0.6608 0.0143 0.1741 +v -0.6608 0.0173 0.1751 +v -0.6608 0.0192 0.1777 +v -0.6608 0.0192 0.1808 +v -0.6608 0.0173 0.1834 +v -0.6608 0.0143 0.1844 +v -0.6497 0.0218 0.1872 +v -0.6544 0.0218 0.1857 +v -0.6573 0.0218 0.1817 +v -0.6573 0.0218 0.1768 +v -0.6544 0.0218 0.1728 +v -0.6497 0.0218 0.1713 +v -0.6473 0.0218 0.1717 +v -0.6473 0.0218 0.1866 +v -0.6434 0.0189 0.1828 +v -0.6430 0.0175 0.1835 +v -0.6430 0.0175 0.1748 +v -0.6434 0.0189 0.1755 +v -0.6423 0.0143 0.1835 +v -0.6423 0.0143 0.1748 +v -0.6840 0.0171 0.1753 +v -0.6840 0.0143 0.1744 +v -0.6840 0.0189 0.1777 +v -0.6840 0.0189 0.1807 +v -0.6840 0.0171 0.1832 +v -0.6840 0.0143 0.1841 +v -0.7773 0.0165 0.1762 +v -0.6854 0.0170 0.1755 +v -0.6854 0.0143 0.1746 +v -0.7773 0.0143 0.1755 +v -0.7773 0.0178 0.1781 +v -0.6854 0.0187 0.1778 +v -0.7773 0.0178 0.1804 +v -0.6854 0.0187 0.1807 +v -0.7773 0.0165 0.1823 +v -0.6854 0.0170 0.1830 +v -0.7773 0.0143 0.1830 +v -0.6854 0.0143 0.1839 +v -0.6549 0.0078 0.1863 +v -0.6497 0.0078 0.1880 +v -0.6497 0.0078 0.1705 +v -0.6549 0.0078 0.1721 +v -0.6473 0.0078 0.1711 +v -0.6473 0.0078 0.1873 +v -0.6581 0.0078 0.1814 +v -0.6570 0.0112 0.1834 +v -0.6585 0.0093 0.1808 +v -0.6581 0.0078 0.1771 +v -0.6585 0.0093 0.1776 +v -0.6570 0.0112 0.1751 +v -0.6608 0.0113 0.1751 +v -0.6608 0.0094 0.1777 +v -0.6608 0.0094 0.1808 +v -0.6608 0.0113 0.1834 +v -0.6544 0.0068 0.1857 +v -0.6497 0.0068 0.1872 +v -0.6573 0.0068 0.1817 +v -0.6573 0.0068 0.1768 +v -0.6544 0.0068 0.1728 +v -0.6497 0.0068 0.1713 +v -0.6473 0.0068 0.1717 +v -0.6473 0.0068 0.1866 +v -0.6434 0.0097 0.1828 +v -0.6434 0.0097 0.1755 +v -0.6430 0.0111 0.1748 +v -0.6430 0.0111 0.1835 +v -0.6840 0.0114 0.1753 +v -0.6840 0.0096 0.1777 +v -0.6840 0.0096 0.1807 +v -0.6840 0.0114 0.1832 +v -0.7773 0.0121 0.1762 +v -0.6854 0.0115 0.1755 +v -0.7773 0.0107 0.1781 +v -0.6854 0.0098 0.1778 +v -0.7773 0.0107 0.1804 +v -0.6854 0.0098 0.1807 +v -0.7773 0.0121 0.1823 +v -0.6854 0.0115 0.1830 +v -0.6491 0.0218 0.1792 +v -0.6491 0.0068 0.1792 +v -0.7781 0.0143 0.1764 +v -0.7781 0.0143 0.1792 +v -0.7781 0.0160 0.1769 +v -0.7781 0.0170 0.1784 +v -0.7781 0.0170 0.1801 +v -0.7781 0.0160 0.1816 +v -0.7781 0.0143 0.1821 +v -0.7781 0.0126 0.1816 +v -0.7781 0.0115 0.1801 +v -0.7781 0.0115 0.1784 +v -0.7781 0.0126 0.1769 +v -0.6497 0.0427 0.1880 +v -0.6497 0.0492 0.1880 +v -0.6549 0.0492 0.1863 +v -0.6549 0.0427 0.1863 +v -0.6549 0.0427 0.1721 +v -0.6549 0.0492 0.1721 +v -0.6497 0.0492 0.1705 +v -0.6497 0.0427 0.1705 +v -0.6473 0.0492 0.1711 +v -0.6473 0.0427 0.1711 +v -0.6473 0.0427 0.1873 +v -0.6473 0.0492 0.1873 +v -0.6581 0.0492 0.1814 +v -0.6585 0.0476 0.1808 +v -0.6570 0.0457 0.1834 +v -0.6581 0.0492 0.1771 +v -0.6585 0.0476 0.1776 +v -0.6563 0.0427 0.1741 +v -0.6570 0.0457 0.1751 +v -0.6563 0.0427 0.1844 +v -0.6608 0.0427 0.1741 +v -0.6608 0.0457 0.1751 +v -0.6608 0.0476 0.1777 +v -0.6608 0.0476 0.1808 +v -0.6608 0.0457 0.1834 +v -0.6608 0.0427 0.1844 +v -0.6497 0.0502 0.1872 +v -0.6544 0.0502 0.1857 +v -0.6573 0.0502 0.1817 +v -0.6573 0.0502 0.1768 +v -0.6544 0.0502 0.1728 +v -0.6497 0.0502 0.1713 +v -0.6473 0.0502 0.1717 +v -0.6473 0.0502 0.1866 +v -0.6434 0.0473 0.1828 +v -0.6430 0.0459 0.1835 +v -0.6430 0.0459 0.1748 +v -0.6434 0.0473 0.1755 +v -0.6423 0.0427 0.1835 +v -0.6423 0.0427 0.1748 +v -0.6840 0.0455 0.1753 +v -0.6840 0.0427 0.1744 +v -0.6840 0.0473 0.1777 +v -0.6840 0.0473 0.1807 +v -0.6840 0.0455 0.1832 +v -0.6840 0.0427 0.1841 +v -0.7773 0.0449 0.1762 +v -0.6854 0.0454 0.1755 +v -0.6854 0.0427 0.1746 +v -0.7773 0.0427 0.1755 +v -0.7773 0.0462 0.1781 +v -0.6854 0.0471 0.1778 +v -0.7773 0.0462 0.1804 +v -0.6854 0.0471 0.1807 +v -0.7773 0.0449 0.1823 +v -0.6854 0.0454 0.1830 +v -0.7773 0.0427 0.1830 +v -0.6854 0.0427 0.1839 +v -0.6549 0.0362 0.1863 +v -0.6497 0.0362 0.1880 +v -0.6497 0.0362 0.1705 +v -0.6549 0.0362 0.1721 +v -0.6473 0.0362 0.1711 +v -0.6473 0.0362 0.1873 +v -0.6581 0.0362 0.1814 +v -0.6570 0.0396 0.1834 +v -0.6585 0.0378 0.1808 +v -0.6581 0.0362 0.1771 +v -0.6585 0.0378 0.1776 +v -0.6570 0.0396 0.1751 +v -0.6608 0.0397 0.1751 +v -0.6608 0.0378 0.1777 +v -0.6608 0.0378 0.1808 +v -0.6608 0.0397 0.1834 +v -0.6544 0.0352 0.1857 +v -0.6497 0.0352 0.1872 +v -0.6573 0.0352 0.1817 +v -0.6573 0.0352 0.1768 +v -0.6544 0.0352 0.1728 +v -0.6497 0.0352 0.1713 +v -0.6473 0.0352 0.1717 +v -0.6473 0.0352 0.1866 +v -0.6434 0.0381 0.1828 +v -0.6434 0.0381 0.1755 +v -0.6430 0.0395 0.1748 +v -0.6430 0.0395 0.1835 +v -0.6840 0.0398 0.1753 +v -0.6840 0.0381 0.1777 +v -0.6840 0.0381 0.1807 +v -0.6840 0.0398 0.1832 +v -0.7773 0.0405 0.1762 +v -0.6854 0.0400 0.1755 +v -0.7773 0.0391 0.1781 +v -0.6854 0.0383 0.1778 +v -0.7773 0.0391 0.1804 +v -0.6854 0.0383 0.1807 +v -0.7773 0.0405 0.1823 +v -0.6854 0.0400 0.1830 +v -0.6491 0.0502 0.1792 +v -0.6491 0.0352 0.1792 +v -0.7781 0.0427 0.1764 +v -0.7781 0.0427 0.1792 +v -0.7781 0.0444 0.1769 +v -0.7781 0.0454 0.1784 +v -0.7781 0.0454 0.1801 +v -0.7781 0.0444 0.1816 +v -0.7781 0.0427 0.1821 +v -0.7781 0.0410 0.1816 +v -0.7781 0.0400 0.1801 +v -0.7781 0.0400 0.1784 +v -0.7781 0.0410 0.1769 +v -0.6058 0.0283 0.1892 +v -0.6058 0.0143 0.1892 +v -0.5949 0.0143 0.1892 +v -0.5949 0.0283 0.1892 +v -0.5032 0.0327 0.1587 +v -0.5042 0.0327 0.1691 +v -0.5037 0.0265 0.1691 +v -0.5027 0.0265 0.1587 +v -0.6527 0.0283 0.1587 +v -0.6527 0.0229 0.1587 +v -0.6527 0.0228 0.1691 +v -0.6527 0.0283 0.1691 +v -0.6527 0.0589 0.1587 +v -0.6527 0.0569 0.1691 +v -0.6508 0.0622 0.1691 +v -0.6508 0.0642 0.1587 +v -0.6470 0.0643 0.1691 +v -0.6470 0.0663 0.1587 +v -0.6067 0.0699 0.1691 +v -0.6067 0.0719 0.1587 +v -0.5948 0.0707 0.1691 +v -0.5948 0.0727 0.1587 +v -0.5829 0.0717 0.1587 +v -0.5829 0.0697 0.1691 +v -0.5260 0.0606 0.1691 +v -0.5251 0.0626 0.1587 +v -0.5174 0.0574 0.1691 +v -0.5165 0.0594 0.1587 +v -0.5088 0.0525 0.1587 +v -0.5097 0.0505 0.1691 +v -0.5037 0.0403 0.1587 +v -0.5046 0.0383 0.1691 +v -0.5273 0.0265 0.1587 +v -0.5273 0.0327 0.1587 +v -0.5144 0.0327 0.1587 +v -0.5134 0.0265 0.1587 +v -0.5018 0.0143 0.1587 +v -0.5115 0.0143 0.1587 +v -0.5164 0.0459 0.1587 +v -0.5273 0.0543 0.1587 +v -0.5839 0.0632 0.1587 +v -0.5949 0.0642 0.1587 +v -0.6058 0.0634 0.1587 +v -0.6441 0.0580 0.1587 +v -0.6441 0.0427 0.1587 +v -0.6527 0.0346 0.1587 +v -0.6527 0.0427 0.1587 +v -0.6058 0.0427 0.1587 +v -0.6058 0.0283 0.1587 +v -0.6441 0.0283 0.1587 +v -0.5949 0.0427 0.1587 +v -0.5949 0.0283 0.1587 +v -0.5839 0.0427 0.1587 +v -0.5839 0.0283 0.1587 +v -0.5076 0.0327 0.1892 +v -0.5178 0.0327 0.1892 +v -0.5167 0.0265 0.1892 +v -0.5070 0.0265 0.1892 +v -0.6511 0.0539 0.1892 +v -0.6388 0.0528 0.1892 +v -0.6497 0.0578 0.1892 +v -0.6461 0.0596 0.1892 +v -0.6058 0.0576 0.1892 +v -0.6066 0.0648 0.1892 +v -0.5949 0.0583 0.1892 +v -0.5948 0.0656 0.1892 +v -0.5839 0.0574 0.1892 +v -0.5830 0.0646 0.1892 +v -0.5300 0.0484 0.1892 +v -0.5281 0.0555 0.1892 +v -0.5190 0.0400 0.1892 +v -0.5192 0.0522 0.1892 +v -0.5124 0.0457 0.1892 +v -0.5076 0.0349 0.1892 +v -0.6388 0.0283 0.1892 +v -0.6398 0.0143 0.1892 +v -0.5300 0.0327 0.1892 +v -0.5839 0.0427 0.1892 +v -0.5839 0.0283 0.1892 +v -0.5300 0.0265 0.1892 +v -0.5839 0.0143 0.1892 +v -0.6058 0.0427 0.1892 +v -0.5949 0.0427 0.1892 +v -0.5028 0.0143 0.1691 +v -0.5063 0.0346 0.1880 +v -0.5061 0.0327 0.1880 +v -0.6527 0.0526 0.1587 +v -0.6527 0.0511 0.1691 +v -0.6527 0.0344 0.1691 +v -0.6527 0.0427 0.1691 +v -0.5273 0.0143 0.1587 +v -0.6441 0.0143 0.1587 +v -0.6527 0.0062 0.1587 +v -0.6527 0.0143 0.1587 +v -0.6058 0.0143 0.1587 +v -0.5949 0.0143 0.1587 +v -0.5839 0.0143 0.1587 +v -0.5060 0.0143 0.1892 +v -0.5145 0.0143 0.1892 +v -0.6430 0.0479 0.1691 +v -0.6474 0.0510 0.1691 +v -0.6474 0.0343 0.1691 +v -0.6413 0.0427 0.1691 +v -0.6413 0.0143 0.1691 +v -0.6527 0.0143 0.1691 +v -0.6474 0.0060 0.1691 +v -0.6430 0.0092 0.1691 +v -0.6398 0.0427 0.1892 +v -0.5300 0.0143 0.1892 +v -0.6421 0.0485 0.1892 +v -0.6421 0.0367 0.1892 +v -0.6467 0.0331 0.1892 +v -0.6466 0.0237 0.1892 +v -0.6420 0.0202 0.1892 +v -0.6421 0.0082 0.1892 +v -0.6468 0.0048 0.1892 +v -0.6474 0.0227 0.1691 +v -0.6430 0.0195 0.1691 +v -0.6527 0.0283 0.1880 +v -0.6527 0.0343 0.1880 +v -0.6527 0.0060 0.1880 +v -0.6526 0.0061 0.1691 +v -0.6514 0.0047 0.1892 +v -0.6514 0.0283 0.1892 +v -0.6514 0.0240 0.1892 +v -0.6514 0.0331 0.1892 +v -0.6514 0.0523 0.1892 +v -0.6471 0.0519 0.1892 +v -0.6527 0.0510 0.1880 +v -0.6474 0.0510 0.1880 +v -0.6430 0.0479 0.1880 +v -0.6413 0.0427 0.1880 +v -0.6430 0.0375 0.1691 +v -0.6430 0.0375 0.1880 +v -0.6474 0.0343 0.1880 +v -0.6527 0.0228 0.1880 +v -0.6474 0.0227 0.1880 +v -0.6430 0.0195 0.1880 +v -0.6413 0.0143 0.1880 +v -0.6430 0.0092 0.1880 +v -0.6474 0.0060 0.1880 +v -0.5056 0.0265 0.1880 +v -0.6508 0.0586 0.1880 +v -0.6527 0.0532 0.1880 +v -0.6470 0.0607 0.1880 +v -0.6067 0.0663 0.1880 +v -0.5948 0.0671 0.1880 +v -0.5829 0.0661 0.1880 +v -0.5277 0.0570 0.1880 +v -0.5191 0.0537 0.1880 +v -0.5114 0.0468 0.1880 +v -0.5046 0.0143 0.1880 +v -0.5318 -0.0007 0.1500 +v -0.5352 0.0211 0.1500 +v -0.5352 0.0211 0.1562 +v -0.5318 -0.0007 0.1562 +v -0.5453 0.0408 0.1500 +v -0.5453 0.0408 0.1562 +v -0.5609 0.0564 0.1500 +v -0.5609 0.0564 0.1562 +v -0.5806 0.0664 0.1500 +v -0.5806 0.0664 0.1562 +v -0.6024 0.0699 0.1500 +v -0.6024 0.0699 0.1562 +v -0.6242 0.0664 0.1500 +v -0.6242 0.0664 0.1562 +v -0.6439 0.0564 0.1500 +v -0.6439 0.0564 0.1562 +v -0.6595 0.0408 0.1500 +v -0.6595 0.0408 0.1562 +v -0.6695 0.0211 0.1500 +v -0.6695 0.0211 0.1562 +v -0.6730 -0.0007 0.1500 +v -0.6730 -0.0007 0.1562 +v -0.6695 -0.0226 0.1500 +v -0.6695 -0.0226 0.1562 +v -0.6595 -0.0422 0.1500 +v -0.6595 -0.0422 0.1562 +v -0.6439 -0.0579 0.1500 +v -0.6439 -0.0579 0.1562 +v -0.6242 -0.0679 0.1500 +v -0.6242 -0.0679 0.1562 +v -0.6024 -0.0713 0.1500 +v -0.6024 -0.0713 0.1562 +v -0.5806 -0.0679 0.1500 +v -0.5806 -0.0679 0.1562 +v -0.5609 -0.0579 0.1500 +v -0.5609 -0.0579 0.1562 +v -0.5453 -0.0422 0.1500 +v -0.5453 -0.0422 0.1562 +v -0.5352 -0.0226 0.1500 +v -0.5352 -0.0226 0.1562 +v -0.6057 0.0009 0.1500 +v -0.5738 -0.0215 0.1500 +v -0.5688 -0.0116 0.1500 +v -0.5335 -0.0007 0.1575 +v -0.5369 0.0206 0.1575 +v -0.6057 0.0009 0.1575 +v -0.5467 0.0398 0.1575 +v -0.5620 0.0550 0.1575 +v -0.5812 0.0648 0.1575 +v -0.6025 0.0681 0.1575 +v -0.6237 0.0647 0.1575 +v -0.6429 0.0549 0.1575 +v -0.6581 0.0397 0.1575 +v -0.6679 0.0206 0.1575 +v -0.6712 -0.0007 0.1575 +v -0.6679 -0.0220 0.1575 +v -0.6581 -0.0411 0.1575 +v -0.6429 -0.0564 0.1575 +v -0.6237 -0.0662 0.1575 +v -0.6025 -0.0696 0.1575 +v -0.5812 -0.0662 0.1575 +v -0.5619 -0.0565 0.1575 +v -0.5467 -0.0412 0.1575 +v -0.5738 -0.0215 0.1575 +v -0.5369 -0.0220 0.1575 +v -0.5688 -0.0116 0.1575 +v -0.0199 -0.1885 0.1756 +v -0.0126 -0.1493 0.1756 +v -0.0273 -0.1858 0.1756 +v -0.3118 -0.0002 0.1500 +v -0.3119 -0.0343 0.1500 +v -0.3119 -0.0343 0.1756 +v -0.3118 -0.0002 0.1756 +v -0.2786 -0.0685 0.1500 +v -0.2786 -0.0685 0.1756 +v -0.1720 -0.1052 0.1500 +v -0.1720 -0.1052 0.1756 +v -0.2429 -0.1051 0.1756 +v -0.2429 -0.1051 0.1500 +v -0.1036 -0.1185 0.1500 +v -0.1036 -0.1185 0.1756 +v -0.1036 -0.1052 0.1756 +v -0.1036 -0.1052 0.1500 +v -0.1036 -0.1506 0.1500 +v -0.0393 -0.1760 0.1500 +v -0.0393 -0.1760 0.1756 +v -0.1036 -0.1506 0.1756 +v -0.0339 -0.1817 0.1500 +v -0.0339 -0.1817 0.1756 +v -0.0273 -0.1858 0.1500 +v -0.0199 -0.1885 0.1500 +v -0.0118 -0.1894 0.1500 +v -0.0118 -0.1894 0.1756 +v -0.0036 -0.1885 0.1500 +v -0.0036 -0.1885 0.1756 +v 0.0038 -0.1858 0.1500 +v 0.0038 -0.1858 0.1756 +v 0.0104 -0.1817 0.1500 +v 0.0104 -0.1817 0.1756 +v 0.0159 -0.1762 0.1500 +v 0.0159 -0.1762 0.1756 +v 0.0201 -0.1696 0.1500 +v 0.0201 -0.1696 0.1756 +v 0.0227 -0.1621 0.1500 +v 0.0227 -0.1621 0.1756 +v 0.0237 -0.1540 0.1500 +v 0.0237 -0.1540 0.1756 +v 0.0227 -0.1459 0.1500 +v 0.0227 -0.1459 0.1756 +v 0.0201 -0.1384 0.1500 +v 0.0201 -0.1384 0.1756 +v 0.0159 -0.1319 0.1500 +v 0.0159 -0.1319 0.1756 +v 0.0104 -0.1264 0.1500 +v 0.0104 -0.1264 0.1756 +v 0.0156 -0.1185 0.1500 +v 0.0156 -0.1185 0.1756 +v 0.0156 -0.1052 0.1500 +v 0.0156 -0.1052 0.1756 +v 0.0303 -0.0768 0.1500 +v 0.0303 -0.0768 0.1756 +v 0.0303 -0.0002 0.1500 +v 0.0303 -0.0002 0.1756 +v -0.0470 -0.1185 0.1756 +v -0.0619 -0.1052 0.1756 +v -0.3119 -0.0343 0.2111 +v -0.3118 -0.0002 0.2111 +v -0.2786 -0.0685 0.2111 +v -0.1720 -0.1052 0.2111 +v -0.2429 -0.1051 0.2111 +v 0.0156 -0.1052 0.2111 +v -0.0619 -0.1052 0.2111 +v 0.0303 -0.0768 0.2111 +v 0.0303 -0.0002 0.2111 +v 0.0156 -0.1052 0.2231 +v 0.0303 -0.0768 0.2231 +v 0.0303 -0.0768 0.2347 +v 0.0156 -0.1052 0.2347 +v 0.0303 -0.0002 0.2231 +v 0.0303 -0.0002 0.2347 +v -0.1272 -0.1052 0.1756 +v -0.1272 -0.1052 0.1500 +v -0.1036 -0.1052 0.2111 +v -0.1272 -0.1052 0.2111 +v -0.0948 -0.0002 0.2347 +v -0.0948 -0.1052 0.2347 +v -0.0619 -0.1052 0.2347 +v -0.0619 -0.0002 0.2347 +v -0.0619 -0.1052 0.2231 +v -0.1002 -0.1052 0.2231 +v -0.1272 -0.1052 0.2231 +v -0.0633 -0.1134 0.2347 +v -0.0633 -0.1134 0.2231 +v -0.1272 -0.1052 0.2347 +v -0.1272 -0.1134 0.2231 +v -0.1272 -0.1134 0.2347 +v -0.1272 -0.0002 0.2347 +v -0.1272 -0.0002 0.2231 +v -0.1272 -0.0002 0.2111 +v -0.2807 -0.0525 0.3504 +v -0.2807 -0.0002 0.3504 +v -0.3118 -0.0002 0.3504 +v -0.3119 -0.0321 0.3504 +v -0.0692 -0.1236 0.2347 +v -0.0692 -0.1236 0.2231 +v -0.0783 -0.1312 0.2347 +v -0.0783 -0.1312 0.2231 +v -0.0894 -0.1353 0.2347 +v -0.0894 -0.1353 0.2231 +v -0.1012 -0.1353 0.2347 +v -0.1012 -0.1353 0.2231 +v -0.1123 -0.1312 0.2347 +v -0.1123 -0.1312 0.2231 +v -0.1213 -0.1236 0.2347 +v -0.1213 -0.1236 0.2231 +v -0.0948 -0.1134 0.2347 +v -0.1002 -0.1134 0.2231 +v -0.1353 -0.0002 0.2111 +v -0.1353 -0.0859 0.2111 +v -0.2786 -0.0565 0.2111 +v -0.1720 -0.0859 0.2111 +v -0.2344 -0.0859 0.2111 +v -0.3119 -0.0343 0.2617 +v -0.3118 -0.0002 0.2617 +v -0.2786 -0.0565 0.2617 +v -0.1720 -0.0859 0.2617 +v -0.2344 -0.0859 0.2617 +v -0.1353 -0.0002 0.2617 +v -0.1353 -0.0859 0.2617 +v -0.3373 -0.0284 0.3326 +v -0.3372 -0.0002 0.3326 +v -0.3372 -0.0002 0.2903 +v -0.3373 -0.0284 0.2903 +v -0.2344 -0.0859 0.3326 +v -0.2786 -0.0565 0.3326 +v -0.2786 -0.0565 0.2795 +v -0.2344 -0.0859 0.2795 +v -0.1353 -0.0859 0.3326 +v -0.1720 -0.0859 0.3326 +v -0.1720 -0.0859 0.2795 +v -0.1353 -0.0859 0.2795 +v -0.1353 -0.0002 0.3326 +v -0.1353 -0.0002 0.2795 +v -0.3330 -0.0290 0.3504 +v -0.3118 -0.0002 0.2795 +v -0.3119 -0.0343 0.2795 +v -0.3119 -0.0343 0.3326 +v -0.3352 -0.0308 0.3326 +v -0.3354 -0.0308 0.2895 +v -0.1712 -0.0002 0.3326 +v -0.2786 -0.0002 0.3326 +v -0.2786 -0.0565 0.3483 +v -0.3119 -0.0343 0.3483 +v -0.2786 -0.0002 0.3483 +v -0.3373 -0.0284 0.3483 +v -0.3372 -0.0002 0.3483 +v -0.3352 -0.0308 0.3483 +v -0.1224 -0.1124 0.2795 +v -0.1720 -0.1124 0.2795 +v -0.1720 -0.1124 0.2617 +v -0.1224 -0.1124 0.2617 +v -0.1099 -0.0002 0.2795 +v -0.1099 -0.0910 0.2795 +v -0.1099 -0.0910 0.2617 +v -0.1099 -0.0002 0.2617 +v -0.2344 -0.0910 0.2617 +v -0.2344 -0.0910 0.2795 +v -0.2224 -0.1110 0.2617 +v -0.2130 -0.1124 0.2617 +v -0.2130 -0.1124 0.2795 +v -0.2224 -0.1110 0.2795 +v -0.2291 -0.1070 0.2617 +v -0.2291 -0.1070 0.2795 +v -0.2331 -0.1004 0.2617 +v -0.2331 -0.1004 0.2795 +v -0.0619 -0.1052 0.2550 +v -0.0619 -0.0002 0.2550 +v 0.0156 -0.1052 0.2550 +v 0.0303 -0.0768 0.2550 +v 0.0303 -0.0002 0.2550 +v -0.1580 -0.0340 0.3706 +v -0.1580 -0.0002 0.3706 +v -0.1703 -0.0002 0.3706 +v -0.1703 -0.0340 0.3706 +v -0.1456 -0.0002 0.3326 +v -0.1456 -0.0340 0.3326 +v -0.1703 -0.0340 0.3326 +v -0.1580 -0.0340 0.3326 +v -0.1456 -0.0002 0.3538 +v -0.1456 -0.0340 0.3538 +v -0.1703 -0.0340 0.3538 +v -0.1703 -0.0002 0.3538 +v -0.1580 -0.0340 0.3538 +v -0.1456 -0.0002 0.3706 +v -0.1456 -0.0340 0.3706 +v -0.1554 -0.0629 0.3706 +v -0.1605 -0.0629 0.3706 +v -0.1605 -0.0629 0.3651 +v -0.1554 -0.0629 0.3651 +v -0.1580 -0.0531 0.3706 +v -0.1456 -0.0531 0.3706 +v -0.1703 -0.0537 0.3616 +v -0.1703 -0.0531 0.3706 +v -0.1580 -0.0537 0.3616 +v -0.1456 -0.0537 0.3616 +v -0.1648 -0.0623 0.3649 +v -0.1648 -0.0623 0.3706 +v -0.1511 -0.0623 0.3706 +v -0.1511 -0.0623 0.3649 +v -0.1679 -0.0606 0.3642 +v -0.1679 -0.0604 0.3706 +v -0.1697 -0.0578 0.3631 +v -0.1697 -0.0574 0.3706 +v -0.1480 -0.0604 0.3706 +v -0.1480 -0.0606 0.3642 +v -0.1462 -0.0574 0.3706 +v -0.1462 -0.0578 0.3631 +v 0.0253 -0.0155 0.2550 +v 0.0289 -0.0084 0.2550 +v -0.0393 -0.0155 0.2550 +v -0.0430 -0.0084 0.2550 +v -0.0443 -0.0002 0.2550 +v -0.0337 -0.0211 0.2550 +v -0.0266 -0.0247 0.2550 +v -0.0185 -0.0261 0.2550 +v 0.0126 -0.0247 0.2550 +v 0.0044 -0.0261 0.2550 +v 0.0197 -0.0211 0.2550 +v -0.0430 -0.0084 0.3467 +v -0.0443 -0.0002 0.3467 +v -0.0393 -0.0155 0.3467 +v -0.0337 -0.0211 0.3467 +v -0.0266 -0.0247 0.3467 +v -0.0185 -0.0261 0.3467 +v 0.0044 -0.0261 0.3467 +v 0.0126 -0.0247 0.3467 +v 0.0197 -0.0211 0.3467 +v 0.0253 -0.0155 0.3467 +v 0.0289 -0.0084 0.3467 +v 0.0303 -0.0002 0.3467 +v -0.0199 0.1881 0.1756 +v -0.0273 0.1854 0.1756 +v -0.0126 0.1489 0.1756 +v -0.3119 0.0339 0.1756 +v -0.3119 0.0339 0.1500 +v -0.2786 0.0681 0.1500 +v -0.2786 0.0681 0.1756 +v -0.1720 0.1048 0.1500 +v -0.2429 0.1047 0.1500 +v -0.2429 0.1047 0.1756 +v -0.1720 0.1048 0.1756 +v -0.1036 0.1181 0.1500 +v -0.1036 0.1048 0.1500 +v -0.1036 0.1048 0.1756 +v -0.1036 0.1181 0.1756 +v -0.1036 0.1502 0.1500 +v -0.1036 0.1502 0.1756 +v -0.0393 0.1756 0.1756 +v -0.0393 0.1756 0.1500 +v -0.0339 0.1813 0.1756 +v -0.0339 0.1813 0.1500 +v -0.0273 0.1854 0.1500 +v -0.0199 0.1881 0.1500 +v -0.0118 0.1890 0.1756 +v -0.0118 0.1890 0.1500 +v -0.0036 0.1881 0.1756 +v -0.0036 0.1881 0.1500 +v 0.0038 0.1854 0.1756 +v 0.0038 0.1854 0.1500 +v 0.0104 0.1813 0.1756 +v 0.0104 0.1813 0.1500 +v 0.0159 0.1758 0.1756 +v 0.0159 0.1758 0.1500 +v 0.0201 0.1692 0.1756 +v 0.0201 0.1692 0.1500 +v 0.0227 0.1617 0.1756 +v 0.0227 0.1617 0.1500 +v 0.0237 0.1536 0.1756 +v 0.0237 0.1536 0.1500 +v 0.0227 0.1455 0.1756 +v 0.0227 0.1455 0.1500 +v 0.0201 0.1380 0.1756 +v 0.0201 0.1380 0.1500 +v 0.0159 0.1315 0.1756 +v 0.0159 0.1315 0.1500 +v 0.0104 0.1260 0.1756 +v 0.0104 0.1260 0.1500 +v 0.0156 0.1181 0.1756 +v 0.0156 0.1181 0.1500 +v 0.0156 0.1048 0.1756 +v 0.0156 0.1048 0.1500 +v 0.0303 0.0764 0.1756 +v 0.0303 0.0764 0.1500 +v -0.0470 0.1181 0.1756 +v -0.0619 0.1048 0.1756 +v -0.3119 0.0339 0.2111 +v -0.2786 0.0681 0.2111 +v -0.2429 0.1047 0.2111 +v -0.1720 0.1048 0.2111 +v -0.0619 0.1048 0.2111 +v 0.0156 0.1048 0.2111 +v 0.0303 0.0764 0.2111 +v 0.0156 0.1048 0.2231 +v 0.0156 0.1048 0.2347 +v 0.0303 0.0764 0.2347 +v 0.0303 0.0764 0.2231 +v -0.1272 0.1048 0.1500 +v -0.1272 0.1048 0.1756 +v -0.1272 0.1048 0.2111 +v -0.1036 0.1048 0.2111 +v -0.0619 0.1048 0.2347 +v -0.0948 0.1048 0.2347 +v -0.0619 0.1048 0.2231 +v -0.1002 0.1048 0.2231 +v -0.1272 0.1048 0.2231 +v -0.0633 0.1130 0.2231 +v -0.0633 0.1130 0.2347 +v -0.1272 0.1048 0.2347 +v -0.1272 0.1130 0.2347 +v -0.1272 0.1130 0.2231 +v -0.2807 0.0521 0.3504 +v -0.3119 0.0317 0.3504 +v -0.0692 0.1233 0.2231 +v -0.0692 0.1233 0.2347 +v -0.0783 0.1308 0.2231 +v -0.0783 0.1308 0.2347 +v -0.0894 0.1349 0.2231 +v -0.0894 0.1349 0.2347 +v -0.1012 0.1349 0.2231 +v -0.1012 0.1349 0.2347 +v -0.1123 0.1308 0.2231 +v -0.1123 0.1308 0.2347 +v -0.1213 0.1233 0.2231 +v -0.1213 0.1233 0.2347 +v -0.0948 0.1130 0.2347 +v -0.1002 0.1130 0.2231 +v -0.1353 0.0855 0.2111 +v -0.2786 0.0561 0.2111 +v -0.2344 0.0855 0.2111 +v -0.1720 0.0855 0.2111 +v -0.3119 0.0339 0.2617 +v -0.2786 0.0561 0.2617 +v -0.2344 0.0855 0.2617 +v -0.1720 0.0855 0.2617 +v -0.1353 0.0855 0.2617 +v -0.3373 0.0280 0.3326 +v -0.3373 0.0280 0.2903 +v -0.2344 0.0855 0.3326 +v -0.2344 0.0855 0.2795 +v -0.2786 0.0561 0.2795 +v -0.2786 0.0561 0.3326 +v -0.1353 0.0855 0.3326 +v -0.1353 0.0855 0.2795 +v -0.1720 0.0855 0.2795 +v -0.1720 0.0855 0.3326 +v -0.3330 0.0286 0.3504 +v -0.3354 0.0304 0.2895 +v -0.3119 0.0339 0.2795 +v -0.3352 0.0304 0.3326 +v -0.3119 0.0339 0.3326 +v -0.3119 0.0339 0.3483 +v -0.2786 0.0561 0.3483 +v -0.3373 0.0280 0.3483 +v -0.3352 0.0304 0.3483 +v -0.1224 0.1120 0.2795 +v -0.1224 0.1120 0.2617 +v -0.1720 0.1120 0.2617 +v -0.1720 0.1120 0.2795 +v -0.1099 0.0906 0.2617 +v -0.1099 0.0906 0.2795 +v -0.2344 0.0906 0.2795 +v -0.2344 0.0906 0.2617 +v -0.2224 0.1107 0.2617 +v -0.2224 0.1107 0.2795 +v -0.2130 0.1120 0.2795 +v -0.2130 0.1120 0.2617 +v -0.2291 0.1066 0.2617 +v -0.2291 0.1066 0.2795 +v -0.2331 0.1000 0.2617 +v -0.2331 0.1000 0.2795 +v -0.0619 0.1048 0.2550 +v 0.0156 0.1048 0.2550 +v 0.0303 0.0764 0.2550 +v -0.1580 0.0336 0.3706 +v -0.1703 0.0336 0.3706 +v -0.1456 0.0336 0.3326 +v -0.1703 0.0336 0.3326 +v -0.1580 0.0336 0.3326 +v -0.1456 0.0336 0.3538 +v -0.1703 0.0336 0.3538 +v -0.1580 0.0336 0.3538 +v -0.1456 0.0336 0.3706 +v -0.1554 0.0625 0.3706 +v -0.1554 0.0625 0.3651 +v -0.1605 0.0625 0.3651 +v -0.1605 0.0625 0.3706 +v -0.1456 0.0527 0.3706 +v -0.1580 0.0527 0.3706 +v -0.1703 0.0527 0.3706 +v -0.1703 0.0534 0.3616 +v -0.1580 0.0534 0.3616 +v -0.1456 0.0534 0.3616 +v -0.1648 0.0619 0.3649 +v -0.1648 0.0619 0.3706 +v -0.1511 0.0619 0.3706 +v -0.1511 0.0619 0.3649 +v -0.1679 0.0602 0.3642 +v -0.1679 0.0600 0.3706 +v -0.1697 0.0574 0.3631 +v -0.1697 0.0570 0.3706 +v -0.1480 0.0600 0.3706 +v -0.1480 0.0602 0.3642 +v -0.1462 0.0570 0.3706 +v -0.1462 0.0574 0.3631 +v 0.0253 0.0151 0.2550 +v 0.0289 0.0080 0.2550 +v -0.0393 0.0151 0.2550 +v -0.0430 0.0080 0.2550 +v -0.0337 0.0207 0.2550 +v -0.0266 0.0243 0.2550 +v -0.0185 0.0257 0.2550 +v 0.0126 0.0243 0.2550 +v 0.0044 0.0257 0.2550 +v 0.0197 0.0207 0.2550 +v -0.0430 0.0080 0.3467 +v -0.0393 0.0151 0.3467 +v -0.0337 0.0207 0.3467 +v -0.0266 0.0243 0.3467 +v -0.0185 0.0257 0.3467 +v 0.0044 0.0257 0.3467 +v 0.0126 0.0243 0.3467 +v 0.0197 0.0207 0.3467 +v 0.0253 0.0151 0.3467 +v 0.0289 0.0080 0.3467 +v -0.0410 -0.0077 0.3467 +v -0.0422 -0.0002 0.3467 +v -0.0376 -0.0142 0.3467 +v -0.0325 -0.0193 0.3467 +v -0.0260 -0.0227 0.3467 +v -0.0183 -0.0239 0.3467 +v 0.0042 -0.0239 0.3467 +v 0.0119 -0.0227 0.3467 +v 0.0184 -0.0193 0.3467 +v 0.0235 -0.0142 0.3467 +v 0.0269 -0.0077 0.3467 +v 0.0281 -0.0002 0.3467 +v 0.0269 0.0073 0.3467 +v 0.0235 0.0138 0.3467 +v 0.0184 0.0189 0.3467 +v 0.0119 0.0223 0.3467 +v 0.0042 0.0235 0.3467 +v -0.0183 0.0235 0.3467 +v -0.0260 0.0223 0.3467 +v -0.0325 0.0189 0.3467 +v -0.0376 0.0138 0.3467 +v -0.0410 0.0073 0.3467 +v -0.0410 -0.0077 0.3506 +v -0.0422 -0.0002 0.3506 +v -0.0376 -0.0142 0.3506 +v -0.0325 -0.0193 0.3506 +v -0.0260 -0.0227 0.3506 +v -0.0183 -0.0239 0.3506 +v 0.0042 -0.0239 0.3506 +v 0.0119 -0.0227 0.3506 +v 0.0184 -0.0193 0.3506 +v 0.0235 -0.0142 0.3506 +v 0.0269 -0.0077 0.3506 +v 0.0281 -0.0002 0.3506 +v 0.0269 0.0073 0.3506 +v 0.0235 0.0138 0.3506 +v 0.0184 0.0189 0.3506 +v 0.0119 0.0223 0.3506 +v 0.0042 0.0235 0.3506 +v -0.0183 0.0235 0.3506 +v -0.0260 0.0223 0.3506 +v -0.0325 0.0189 0.3506 +v -0.0376 0.0138 0.3506 +v -0.0410 0.0073 0.3506 +v -0.0389 -0.0070 0.3506 +v -0.0400 -0.0002 0.3506 +v -0.0359 -0.0129 0.3506 +v -0.0312 -0.0176 0.3506 +v -0.0253 -0.0206 0.3506 +v -0.0181 -0.0218 0.3506 +v 0.0041 -0.0218 0.3506 +v 0.0112 -0.0206 0.3506 +v 0.0171 -0.0176 0.3506 +v 0.0218 -0.0129 0.3506 +v 0.0248 -0.0070 0.3506 +v 0.0259 -0.0002 0.3506 +v 0.0248 0.0066 0.3506 +v 0.0218 0.0125 0.3506 +v 0.0171 0.0172 0.3506 +v 0.0112 0.0202 0.3506 +v 0.0041 0.0214 0.3506 +v -0.0181 0.0214 0.3506 +v -0.0253 0.0202 0.3506 +v -0.0312 0.0172 0.3506 +v -0.0359 0.0125 0.3506 +v -0.0389 0.0066 0.3506 +v -0.0389 -0.0070 0.3452 +v -0.0400 -0.0002 0.3452 +v -0.0359 -0.0129 0.3452 +v -0.0312 -0.0176 0.3452 +v -0.0253 -0.0206 0.3452 +v -0.0181 -0.0218 0.3452 +v 0.0041 -0.0218 0.3452 +v 0.0112 -0.0206 0.3452 +v 0.0171 -0.0176 0.3452 +v 0.0218 -0.0129 0.3452 +v 0.0248 -0.0070 0.3452 +v 0.0259 -0.0002 0.3452 +v 0.0248 0.0066 0.3452 +v 0.0218 0.0125 0.3452 +v 0.0171 0.0172 0.3452 +v 0.0112 0.0202 0.3452 +v 0.0041 0.0214 0.3452 +v -0.0181 0.0214 0.3452 +v -0.0253 0.0202 0.3452 +v -0.0312 0.0172 0.3452 +v -0.0359 0.0125 0.3452 +v -0.0389 0.0066 0.3452 +v -0.0070 -0.0002 0.3452 +v -0.1418 -0.0443 0.3775 +v -0.1440 -0.0360 0.3775 +v -0.1440 -0.0360 0.3977 +v -0.1418 -0.0443 0.3977 +v -0.1500 -0.0300 0.3775 +v -0.1500 -0.0300 0.3977 +v -0.1583 -0.0278 0.3775 +v -0.1583 -0.0278 0.3977 +v -0.1665 -0.0300 0.3775 +v -0.1665 -0.0300 0.3977 +v -0.1726 -0.0360 0.3775 +v -0.1726 -0.0360 0.3977 +v -0.1748 -0.0443 0.3775 +v -0.1748 -0.0443 0.3977 +v -0.1726 -0.0525 0.3775 +v -0.1726 -0.0525 0.3977 +v -0.1665 -0.0585 0.3775 +v -0.1665 -0.0585 0.3977 +v -0.1583 -0.0608 0.3775 +v -0.1583 -0.0608 0.3977 +v -0.1500 -0.0585 0.3775 +v -0.1500 -0.0585 0.3977 +v -0.1440 -0.0525 0.3775 +v -0.1440 -0.0525 0.3977 +v -0.1450 -0.0366 0.3767 +v -0.1430 -0.0443 0.3767 +v -0.1500 -0.0443 0.3767 +v -0.1511 -0.0402 0.3767 +v -0.1506 -0.0310 0.3767 +v -0.1542 -0.0371 0.3767 +v -0.1583 -0.0290 0.3767 +v -0.1583 -0.0360 0.3767 +v -0.1659 -0.0310 0.3767 +v -0.1624 -0.0371 0.3767 +v -0.1715 -0.0366 0.3767 +v -0.1654 -0.0402 0.3767 +v -0.1736 -0.0443 0.3767 +v -0.1665 -0.0443 0.3767 +v -0.1715 -0.0519 0.3767 +v -0.1654 -0.0484 0.3767 +v -0.1659 -0.0575 0.3767 +v -0.1624 -0.0514 0.3767 +v -0.1583 -0.0596 0.3767 +v -0.1583 -0.0525 0.3767 +v -0.1506 -0.0575 0.3767 +v -0.1542 -0.0514 0.3767 +v -0.1450 -0.0519 0.3767 +v -0.1511 -0.0484 0.3767 +v -0.1511 -0.0402 0.3716 +v -0.1500 -0.0443 0.3716 +v -0.1583 -0.0443 0.3716 +v -0.1542 -0.0371 0.3716 +v -0.1583 -0.0360 0.3716 +v -0.1624 -0.0371 0.3716 +v -0.1654 -0.0402 0.3716 +v -0.1665 -0.0443 0.3716 +v -0.1654 -0.0484 0.3716 +v -0.1624 -0.0514 0.3716 +v -0.1583 -0.0525 0.3716 +v -0.1542 -0.0514 0.3716 +v -0.1511 -0.0484 0.3716 +v -0.1430 -0.0443 0.3986 +v -0.1450 -0.0366 0.3986 +v -0.1498 -0.0394 0.4031 +v -0.1485 -0.0443 0.4031 +v -0.1506 -0.0310 0.3986 +v -0.1534 -0.0358 0.4031 +v -0.1583 -0.0290 0.3986 +v -0.1583 -0.0345 0.4031 +v -0.1659 -0.0310 0.3986 +v -0.1632 -0.0358 0.4031 +v -0.1715 -0.0366 0.3986 +v -0.1667 -0.0394 0.4031 +v -0.1736 -0.0443 0.3986 +v -0.1680 -0.0443 0.4031 +v -0.1715 -0.0519 0.3986 +v -0.1667 -0.0492 0.4031 +v -0.1659 -0.0575 0.3986 +v -0.1632 -0.0527 0.4031 +v -0.1583 -0.0596 0.3986 +v -0.1583 -0.0540 0.4031 +v -0.1506 -0.0575 0.3986 +v -0.1534 -0.0527 0.4031 +v -0.1450 -0.0519 0.3986 +v -0.1498 -0.0492 0.4031 +v -0.1583 -0.0443 0.4056 +v -0.1418 0.0394 0.3775 +v -0.1440 0.0477 0.3775 +v -0.1440 0.0477 0.3977 +v -0.1418 0.0394 0.3977 +v -0.1500 0.0537 0.3775 +v -0.1500 0.0537 0.3977 +v -0.1583 0.0559 0.3775 +v -0.1583 0.0559 0.3977 +v -0.1665 0.0537 0.3775 +v -0.1665 0.0537 0.3977 +v -0.1726 0.0477 0.3775 +v -0.1726 0.0477 0.3977 +v -0.1748 0.0394 0.3775 +v -0.1748 0.0394 0.3977 +v -0.1726 0.0312 0.3775 +v -0.1726 0.0312 0.3977 +v -0.1665 0.0252 0.3775 +v -0.1665 0.0252 0.3977 +v -0.1583 0.0230 0.3775 +v -0.1583 0.0230 0.3977 +v -0.1500 0.0252 0.3775 +v -0.1500 0.0252 0.3977 +v -0.1440 0.0312 0.3775 +v -0.1440 0.0312 0.3977 +v -0.1450 0.0471 0.3767 +v -0.1430 0.0394 0.3767 +v -0.1500 0.0394 0.3767 +v -0.1511 0.0436 0.3767 +v -0.1506 0.0527 0.3767 +v -0.1542 0.0466 0.3767 +v -0.1583 0.0547 0.3767 +v -0.1583 0.0477 0.3767 +v -0.1659 0.0527 0.3767 +v -0.1624 0.0466 0.3767 +v -0.1715 0.0471 0.3767 +v -0.1654 0.0436 0.3767 +v -0.1736 0.0394 0.3767 +v -0.1665 0.0394 0.3767 +v -0.1715 0.0318 0.3767 +v -0.1654 0.0353 0.3767 +v -0.1659 0.0262 0.3767 +v -0.1624 0.0323 0.3767 +v -0.1583 0.0241 0.3767 +v -0.1583 0.0312 0.3767 +v -0.1506 0.0262 0.3767 +v -0.1542 0.0323 0.3767 +v -0.1450 0.0318 0.3767 +v -0.1511 0.0353 0.3767 +v -0.1511 0.0436 0.3716 +v -0.1500 0.0394 0.3716 +v -0.1583 0.0394 0.3716 +v -0.1542 0.0466 0.3716 +v -0.1583 0.0477 0.3716 +v -0.1624 0.0466 0.3716 +v -0.1654 0.0436 0.3716 +v -0.1665 0.0394 0.3716 +v -0.1654 0.0353 0.3716 +v -0.1624 0.0323 0.3716 +v -0.1583 0.0312 0.3716 +v -0.1542 0.0323 0.3716 +v -0.1511 0.0353 0.3716 +v -0.1430 0.0394 0.3986 +v -0.1450 0.0471 0.3986 +v -0.1498 0.0443 0.4031 +v -0.1485 0.0394 0.4031 +v -0.1506 0.0527 0.3986 +v -0.1534 0.0479 0.4031 +v -0.1583 0.0547 0.3986 +v -0.1583 0.0492 0.4031 +v -0.1659 0.0527 0.3986 +v -0.1632 0.0479 0.4031 +v -0.1715 0.0471 0.3986 +v -0.1667 0.0443 0.4031 +v -0.1736 0.0394 0.3986 +v -0.1680 0.0394 0.4031 +v -0.1715 0.0318 0.3986 +v -0.1667 0.0346 0.4031 +v -0.1659 0.0262 0.3986 +v -0.1632 0.0310 0.4031 +v -0.1583 0.0241 0.3986 +v -0.1583 0.0297 0.4031 +v -0.1506 0.0262 0.3986 +v -0.1534 0.0310 0.4031 +v -0.1450 0.0318 0.3986 +v -0.1498 0.0346 0.4031 +v -0.1583 0.0394 0.4056 +v 0.5215 -0.1043 0.1500 +v 0.6110 -0.0272 0.1500 +v 0.6110 -0.0272 0.1756 +v 0.5215 -0.1043 0.1756 +v 0.6110 -0.0000 0.1500 +v 0.6110 -0.0000 0.1756 +v 0.2549 -0.0587 0.1500 +v 0.2549 -0.0587 0.1756 +v 0.2549 -0.0000 0.1756 +v 0.2549 -0.0000 0.1500 +v 0.2549 -0.1173 0.1500 +v 0.2512 -0.1242 0.1500 +v 0.2512 -0.1242 0.1756 +v 0.2549 -0.1173 0.1756 +v 0.2482 -0.1316 0.1500 +v 0.2482 -0.1316 0.1756 +v 0.2465 -0.1437 0.1500 +v 0.2465 -0.1437 0.1756 +v 0.2475 -0.1528 0.1500 +v 0.2475 -0.1528 0.1756 +v 0.2506 -0.1613 0.1500 +v 0.2506 -0.1613 0.1756 +v 0.2553 -0.1687 0.1500 +v 0.2553 -0.1687 0.1756 +v 0.2615 -0.1749 0.1500 +v 0.2615 -0.1749 0.1756 +v 0.2689 -0.1796 0.1500 +v 0.2689 -0.1796 0.1756 +v 0.2774 -0.1827 0.1500 +v 0.2774 -0.1827 0.1756 +v 0.2865 -0.1837 0.1500 +v 0.2865 -0.1837 0.1756 +v 0.2943 -0.1830 0.1500 +v 0.2943 -0.1830 0.1756 +v 0.3016 -0.1808 0.1500 +v 0.3016 -0.1808 0.1756 +v 0.3113 -0.1753 0.1500 +v 0.3113 -0.1753 0.1756 +v 0.3465 -0.1639 0.1500 +v 0.3465 -0.1639 0.1756 +v 0.3704 -0.1417 0.1500 +v 0.3704 -0.1417 0.1756 +v 0.3704 -0.1173 0.1500 +v 0.3704 -0.1173 0.1756 +v 0.4206 -0.1173 0.1500 +v 0.4206 -0.1173 0.1756 +v 0.6110 -0.0272 0.2068 +v 0.5214 -0.1043 0.2068 +v 0.6110 -0.0000 0.2068 +v 0.2549 -0.0587 0.2068 +v 0.2549 -0.0000 0.2068 +v 0.3185 -0.1173 0.1756 +v 0.3185 -0.1173 0.2068 +v 0.2549 -0.1173 0.2068 +v 0.4205 -0.1173 0.2068 +v 0.3705 -0.1173 0.2068 +v 0.5935 -0.0000 0.2888 +v 0.5146 -0.0000 0.2888 +v 0.5146 -0.0670 0.2888 +v 0.5935 -0.0193 0.2888 +v 0.5146 -0.0670 0.2068 +v 0.4205 -0.0587 0.2068 +v 0.3705 -0.0587 0.2068 +v 0.5935 -0.0193 0.2068 +v 0.5935 -0.0000 0.2068 +v 0.5935 -0.0193 0.2686 +v 0.5146 -0.0670 0.2686 +v 0.5935 -0.0000 0.2686 +v 0.5146 -0.0000 0.2686 +v 0.5146 -0.0000 0.2068 +v 0.6210 -0.0471 0.2888 +v 0.5146 -0.0839 0.2888 +v 0.5146 -0.0839 0.2795 +v 0.6210 -0.0471 0.2795 +v 0.6210 -0.0000 0.2888 +v 0.6210 -0.0000 0.2795 +v 0.3185 -0.0587 0.2068 +v 0.4205 -0.0000 0.2068 +v 0.3705 -0.0000 0.2068 +v 0.2712 -0.0172 0.2068 +v 0.2771 -0.0203 0.2068 +v 0.3389 -0.0172 0.2068 +v 0.3435 -0.0126 0.2068 +v 0.2666 -0.0126 0.2068 +v 0.2636 -0.0068 0.2068 +v 0.2625 -0.0000 0.2068 +v 0.2838 -0.0214 0.2068 +v 0.3263 -0.0214 0.2068 +v 0.3185 -0.0214 0.2068 +v 0.3330 -0.0203 0.2068 +v 0.3465 -0.0068 0.2068 +v 0.3476 -0.0000 0.2068 +v 0.2636 -0.0068 0.3469 +v 0.2625 -0.0000 0.3469 +v 0.2666 -0.0126 0.3469 +v 0.2712 -0.0172 0.3469 +v 0.2771 -0.0203 0.3469 +v 0.2838 -0.0214 0.3469 +v 0.3185 -0.0214 0.3469 +v 0.3263 -0.0214 0.3469 +v 0.3330 -0.0203 0.3469 +v 0.3389 -0.0172 0.3469 +v 0.3435 -0.0126 0.3469 +v 0.3465 -0.0068 0.3469 +v 0.3476 -0.0000 0.3469 +v 0.5215 0.1042 0.1500 +v 0.5215 0.1042 0.1756 +v 0.6110 0.0271 0.1756 +v 0.6110 0.0271 0.1500 +v 0.2549 0.0586 0.1500 +v 0.2549 0.0586 0.1756 +v 0.2549 0.1172 0.1500 +v 0.2549 0.1172 0.1756 +v 0.2512 0.1242 0.1756 +v 0.2512 0.1242 0.1500 +v 0.2482 0.1315 0.1756 +v 0.2482 0.1315 0.1500 +v 0.2465 0.1436 0.1756 +v 0.2465 0.1436 0.1500 +v 0.2475 0.1528 0.1756 +v 0.2475 0.1528 0.1500 +v 0.2506 0.1612 0.1756 +v 0.2506 0.1612 0.1500 +v 0.2553 0.1686 0.1756 +v 0.2553 0.1686 0.1500 +v 0.2615 0.1748 0.1756 +v 0.2615 0.1748 0.1500 +v 0.2689 0.1796 0.1756 +v 0.2689 0.1796 0.1500 +v 0.2774 0.1826 0.1756 +v 0.2774 0.1826 0.1500 +v 0.2865 0.1836 0.1756 +v 0.2865 0.1836 0.1500 +v 0.2943 0.1829 0.1756 +v 0.2943 0.1829 0.1500 +v 0.3016 0.1808 0.1756 +v 0.3016 0.1808 0.1500 +v 0.3113 0.1752 0.1756 +v 0.3113 0.1752 0.1500 +v 0.3465 0.1638 0.1756 +v 0.3465 0.1638 0.1500 +v 0.3704 0.1417 0.1756 +v 0.3704 0.1417 0.1500 +v 0.3704 0.1172 0.1756 +v 0.3704 0.1172 0.1500 +v 0.4206 0.1172 0.1756 +v 0.4206 0.1172 0.1500 +v 0.5214 0.1042 0.2068 +v 0.6110 0.0271 0.2068 +v 0.2549 0.0586 0.2068 +v 0.3185 0.1172 0.1756 +v 0.2549 0.1172 0.2068 +v 0.3185 0.1172 0.2068 +v 0.3705 0.1172 0.2068 +v 0.4205 0.1172 0.2068 +v 0.5935 0.0193 0.2888 +v 0.5146 0.0669 0.2888 +v 0.4205 0.0586 0.2068 +v 0.5146 0.0669 0.2068 +v 0.3705 0.0586 0.2068 +v 0.5935 0.0193 0.2068 +v 0.5146 0.0669 0.2686 +v 0.5935 0.0193 0.2686 +v 0.6210 0.0470 0.2888 +v 0.6210 0.0470 0.2795 +v 0.5146 0.0839 0.2795 +v 0.5146 0.0839 0.2888 +v 0.3185 0.0586 0.2068 +v 0.2712 0.0172 0.2068 +v 0.2771 0.0202 0.2068 +v 0.3389 0.0172 0.2068 +v 0.3435 0.0126 0.2068 +v 0.2666 0.0126 0.2068 +v 0.2636 0.0067 0.2068 +v 0.2838 0.0213 0.2068 +v 0.3263 0.0213 0.2068 +v 0.3185 0.0213 0.2068 +v 0.3330 0.0202 0.2068 +v 0.3465 0.0067 0.2068 +v 0.2636 0.0067 0.3469 +v 0.2666 0.0126 0.3469 +v 0.2712 0.0172 0.3469 +v 0.2771 0.0202 0.3469 +v 0.2838 0.0213 0.3469 +v 0.3185 0.0213 0.3469 +v 0.3263 0.0213 0.3469 +v 0.3330 0.0202 0.3469 +v 0.3389 0.0172 0.3469 +v 0.3435 0.0126 0.3469 +v 0.3465 0.0067 0.3469 +v 0.2677 -0.0054 0.3469 +v 0.2668 -0.0000 0.3469 +v 0.2701 -0.0101 0.3469 +v 0.2738 -0.0138 0.3469 +v 0.2784 -0.0162 0.3469 +v 0.2842 -0.0171 0.3469 +v 0.3185 -0.0171 0.3469 +v 0.3260 -0.0171 0.3469 +v 0.3317 -0.0162 0.3469 +v 0.3363 -0.0138 0.3469 +v 0.3400 -0.0101 0.3469 +v 0.3424 -0.0054 0.3469 +v 0.3433 -0.0000 0.3469 +v 0.3424 0.0053 0.3469 +v 0.3400 0.0100 0.3469 +v 0.3363 0.0137 0.3469 +v 0.3317 0.0161 0.3469 +v 0.3260 0.0170 0.3469 +v 0.3185 0.0170 0.3469 +v 0.2842 0.0170 0.3469 +v 0.2784 0.0161 0.3469 +v 0.2738 0.0137 0.3469 +v 0.2701 0.0100 0.3469 +v 0.2677 0.0053 0.3469 +v 0.2677 -0.0054 0.3526 +v 0.2668 -0.0000 0.3526 +v 0.2701 -0.0101 0.3526 +v 0.2738 -0.0138 0.3526 +v 0.2784 -0.0162 0.3526 +v 0.2842 -0.0171 0.3526 +v 0.3185 -0.0171 0.3526 +v 0.3260 -0.0171 0.3526 +v 0.3317 -0.0162 0.3526 +v 0.3363 -0.0138 0.3526 +v 0.3400 -0.0101 0.3526 +v 0.3424 -0.0054 0.3526 +v 0.3433 -0.0000 0.3526 +v 0.3424 0.0053 0.3526 +v 0.3400 0.0100 0.3526 +v 0.3363 0.0137 0.3526 +v 0.3317 0.0161 0.3526 +v 0.3260 0.0170 0.3526 +v 0.3185 0.0170 0.3526 +v 0.2842 0.0170 0.3526 +v 0.2784 0.0161 0.3526 +v 0.2738 0.0137 0.3526 +v 0.2701 0.0100 0.3526 +v 0.2677 0.0053 0.3526 +v 0.2718 -0.0041 0.3526 +v 0.2712 -0.0000 0.3526 +v 0.2736 -0.0075 0.3526 +v 0.2763 -0.0103 0.3526 +v 0.2798 -0.0121 0.3526 +v 0.2845 -0.0128 0.3526 +v 0.3185 -0.0128 0.3526 +v 0.3256 -0.0128 0.3526 +v 0.3303 -0.0121 0.3526 +v 0.3338 -0.0103 0.3526 +v 0.3365 -0.0075 0.3526 +v 0.3383 -0.0041 0.3526 +v 0.3390 -0.0000 0.3526 +v 0.3383 0.0040 0.3526 +v 0.3365 0.0074 0.3526 +v 0.3338 0.0102 0.3526 +v 0.3303 0.0120 0.3526 +v 0.3256 0.0127 0.3526 +v 0.3185 0.0127 0.3526 +v 0.2845 0.0127 0.3526 +v 0.2798 0.0120 0.3526 +v 0.2763 0.0102 0.3526 +v 0.2736 0.0074 0.3526 +v 0.2718 0.0040 0.3526 +v 0.2718 -0.0041 0.3475 +v 0.2712 -0.0000 0.3475 +v 0.2736 -0.0075 0.3475 +v 0.2763 -0.0103 0.3475 +v 0.2798 -0.0121 0.3475 +v 0.2845 -0.0128 0.3475 +v 0.3185 -0.0128 0.3475 +v 0.3256 -0.0128 0.3475 +v 0.3303 -0.0121 0.3475 +v 0.3338 -0.0103 0.3475 +v 0.3365 -0.0075 0.3475 +v 0.3383 -0.0041 0.3475 +v 0.3390 -0.0000 0.3475 +v 0.3383 0.0040 0.3475 +v 0.3365 0.0074 0.3475 +v 0.3338 0.0102 0.3475 +v 0.3303 0.0120 0.3475 +v 0.3256 0.0127 0.3475 +v 0.3185 0.0127 0.3475 +v 0.2845 0.0127 0.3475 +v 0.2798 0.0120 0.3475 +v 0.2763 0.0102 0.3475 +v 0.2736 0.0074 0.3475 +v 0.2718 0.0040 0.3475 +v 0.3067 -0.0000 0.3475 +v 0.6159 -0.0423 0.2930 +v 0.6137 -0.0341 0.2930 +v 0.6137 -0.0341 0.3132 +v 0.6159 -0.0423 0.3132 +v 0.6077 -0.0280 0.2930 +v 0.6077 -0.0280 0.3132 +v 0.5995 -0.0258 0.2930 +v 0.5995 -0.0258 0.3132 +v 0.5912 -0.0280 0.2930 +v 0.5912 -0.0280 0.3132 +v 0.5852 -0.0341 0.2930 +v 0.5852 -0.0341 0.3132 +v 0.5830 -0.0423 0.2930 +v 0.5830 -0.0423 0.3132 +v 0.5852 -0.0505 0.2930 +v 0.5852 -0.0505 0.3132 +v 0.5912 -0.0566 0.2930 +v 0.5912 -0.0566 0.3132 +v 0.5995 -0.0588 0.2930 +v 0.5995 -0.0588 0.3132 +v 0.6077 -0.0566 0.2930 +v 0.6077 -0.0566 0.3132 +v 0.6137 -0.0505 0.2930 +v 0.6137 -0.0505 0.3132 +v 0.6127 -0.0346 0.2921 +v 0.6148 -0.0423 0.2921 +v 0.6077 -0.0423 0.2921 +v 0.6066 -0.0382 0.2921 +v 0.6071 -0.0290 0.2921 +v 0.6036 -0.0352 0.2921 +v 0.5995 -0.0270 0.2921 +v 0.5995 -0.0341 0.2921 +v 0.5918 -0.0290 0.2921 +v 0.5953 -0.0352 0.2921 +v 0.5862 -0.0346 0.2921 +v 0.5923 -0.0382 0.2921 +v 0.5842 -0.0423 0.2921 +v 0.5912 -0.0423 0.2921 +v 0.5862 -0.0499 0.2921 +v 0.5923 -0.0464 0.2921 +v 0.5918 -0.0555 0.2921 +v 0.5953 -0.0494 0.2921 +v 0.5995 -0.0576 0.2921 +v 0.5995 -0.0505 0.2921 +v 0.6071 -0.0555 0.2921 +v 0.6036 -0.0494 0.2921 +v 0.6127 -0.0499 0.2921 +v 0.6066 -0.0464 0.2921 +v 0.6066 -0.0382 0.2870 +v 0.6077 -0.0423 0.2870 +v 0.5995 -0.0423 0.2870 +v 0.6036 -0.0352 0.2870 +v 0.5995 -0.0341 0.2870 +v 0.5953 -0.0352 0.2870 +v 0.5923 -0.0382 0.2870 +v 0.5912 -0.0423 0.2870 +v 0.5923 -0.0464 0.2870 +v 0.5953 -0.0494 0.2870 +v 0.5995 -0.0505 0.2870 +v 0.6036 -0.0494 0.2870 +v 0.6066 -0.0464 0.2870 +v 0.6148 -0.0423 0.3140 +v 0.6127 -0.0346 0.3140 +v 0.6079 -0.0374 0.3185 +v 0.6092 -0.0423 0.3185 +v 0.6071 -0.0290 0.3140 +v 0.6043 -0.0338 0.3185 +v 0.5995 -0.0270 0.3140 +v 0.5995 -0.0325 0.3185 +v 0.5918 -0.0290 0.3140 +v 0.5946 -0.0338 0.3185 +v 0.5862 -0.0346 0.3140 +v 0.5910 -0.0374 0.3185 +v 0.5842 -0.0423 0.3140 +v 0.5897 -0.0423 0.3185 +v 0.5862 -0.0499 0.3140 +v 0.5910 -0.0472 0.3185 +v 0.5918 -0.0555 0.3140 +v 0.5946 -0.0507 0.3185 +v 0.5995 -0.0576 0.3140 +v 0.5995 -0.0521 0.3185 +v 0.6071 -0.0555 0.3140 +v 0.6043 -0.0507 0.3185 +v 0.6127 -0.0499 0.3140 +v 0.6079 -0.0472 0.3185 +v 0.5995 -0.0423 0.3210 +v 0.6159 0.0414 0.2930 +v 0.6137 0.0497 0.2930 +v 0.6137 0.0497 0.3132 +v 0.6159 0.0414 0.3132 +v 0.6077 0.0557 0.2930 +v 0.6077 0.0557 0.3132 +v 0.5995 0.0579 0.2930 +v 0.5995 0.0579 0.3132 +v 0.5912 0.0557 0.2930 +v 0.5912 0.0557 0.3132 +v 0.5852 0.0497 0.2930 +v 0.5852 0.0497 0.3132 +v 0.5830 0.0414 0.2930 +v 0.5830 0.0414 0.3132 +v 0.5852 0.0332 0.2930 +v 0.5852 0.0332 0.3132 +v 0.5912 0.0272 0.2930 +v 0.5912 0.0272 0.3132 +v 0.5995 0.0250 0.2930 +v 0.5995 0.0250 0.3132 +v 0.6077 0.0272 0.2930 +v 0.6077 0.0272 0.3132 +v 0.6137 0.0332 0.2930 +v 0.6137 0.0332 0.3132 +v 0.6127 0.0491 0.2921 +v 0.6148 0.0414 0.2921 +v 0.6077 0.0414 0.2921 +v 0.6066 0.0455 0.2921 +v 0.6071 0.0547 0.2921 +v 0.6036 0.0486 0.2921 +v 0.5995 0.0567 0.2921 +v 0.5995 0.0497 0.2921 +v 0.5918 0.0547 0.2921 +v 0.5953 0.0486 0.2921 +v 0.5862 0.0491 0.2921 +v 0.5923 0.0455 0.2921 +v 0.5842 0.0414 0.2921 +v 0.5912 0.0414 0.2921 +v 0.5862 0.0338 0.2921 +v 0.5923 0.0373 0.2921 +v 0.5918 0.0282 0.2921 +v 0.5953 0.0343 0.2921 +v 0.5995 0.0261 0.2921 +v 0.5995 0.0332 0.2921 +v 0.6071 0.0282 0.2921 +v 0.6036 0.0343 0.2921 +v 0.6127 0.0338 0.2921 +v 0.6066 0.0373 0.2921 +v 0.6066 0.0455 0.2870 +v 0.6077 0.0414 0.2870 +v 0.5995 0.0414 0.2870 +v 0.6036 0.0486 0.2870 +v 0.5995 0.0497 0.2870 +v 0.5953 0.0486 0.2870 +v 0.5923 0.0455 0.2870 +v 0.5912 0.0414 0.2870 +v 0.5923 0.0373 0.2870 +v 0.5953 0.0343 0.2870 +v 0.5995 0.0332 0.2870 +v 0.6036 0.0343 0.2870 +v 0.6066 0.0373 0.2870 +v 0.6148 0.0414 0.3140 +v 0.6127 0.0491 0.3140 +v 0.6079 0.0463 0.3185 +v 0.6092 0.0414 0.3185 +v 0.6071 0.0547 0.3140 +v 0.6043 0.0499 0.3185 +v 0.5995 0.0567 0.3140 +v 0.5995 0.0512 0.3185 +v 0.5918 0.0547 0.3140 +v 0.5946 0.0499 0.3185 +v 0.5862 0.0491 0.3140 +v 0.5910 0.0463 0.3185 +v 0.5842 0.0414 0.3140 +v 0.5897 0.0414 0.3185 +v 0.5862 0.0338 0.3140 +v 0.5910 0.0365 0.3185 +v 0.5918 0.0282 0.3140 +v 0.5946 0.0330 0.3185 +v 0.5995 0.0261 0.3140 +v 0.5995 0.0317 0.3185 +v 0.6071 0.0282 0.3140 +v 0.6043 0.0330 0.3185 +v 0.6127 0.0338 0.3140 +v 0.6079 0.0365 0.3185 +v 0.5995 0.0414 0.3210 +v -0.0519 -0.0494 0.2557 +v -0.0950 -0.0047 0.4133 +v -0.0942 -0.0066 0.4133 +v -0.0510 -0.0513 0.2557 +v -0.0538 -0.0486 0.2557 +v -0.0970 -0.0039 0.4133 +v -0.0558 -0.0494 0.2557 +v -0.0989 -0.0047 0.4133 +v -0.0566 -0.0513 0.2557 +v -0.0997 -0.0066 0.4133 +v -0.0558 -0.0533 0.2557 +v -0.0989 -0.0086 0.4133 +v -0.0538 -0.0541 0.2557 +v -0.0970 -0.0094 0.4133 +v -0.0519 -0.0533 0.2557 +v -0.0950 -0.0086 0.4133 +v -0.0524 -0.0513 0.2557 +v -0.0528 -0.0504 0.2557 +v -0.0538 -0.0500 0.2557 +v -0.0548 -0.0504 0.2557 +v -0.0552 -0.0513 0.2557 +v -0.0548 -0.0523 0.2557 +v -0.0538 -0.0527 0.2557 +v -0.0528 -0.0523 0.2557 +v -0.0538 -0.0513 0.2557 +v -0.0942 -0.0066 0.4294 +v -0.0950 -0.0047 0.4294 +v -0.0970 -0.0066 0.4294 +v -0.0970 -0.0001 0.4294 +v -0.0989 -0.0086 0.4294 +v -0.0970 -0.0094 0.4294 +v -0.0950 -0.0086 0.4294 +v -0.0950 -0.0047 0.4227 +v -0.0942 -0.0066 0.4227 +v -0.0970 -0.0039 0.4227 +v -0.0970 -0.0094 0.4227 +v -0.0989 -0.0086 0.4227 +v -0.0950 -0.0086 0.4227 +v -0.1074 -0.0029 0.2354 +v -0.1074 -0.0029 0.4133 +v -0.1086 -0.0001 0.4133 +v -0.1086 -0.0001 0.2354 +v -0.1047 -0.0040 0.2354 +v -0.1047 -0.0040 0.4133 +v -0.1019 -0.0029 0.2354 +v -0.1019 -0.0029 0.4133 +v -0.1007 -0.0001 0.2354 +v -0.1007 -0.0001 0.4133 +v -0.1066 -0.0001 0.2354 +v -0.1060 -0.0015 0.2354 +v -0.1047 -0.0021 0.2354 +v -0.1033 -0.0015 0.2354 +v -0.1027 -0.0001 0.2354 +v -0.1047 -0.0001 0.2354 +v -0.1086 -0.0001 0.4294 +v -0.1074 -0.0029 0.4294 +v -0.1012 -0.0015 0.4294 +v -0.1018 -0.0001 0.4294 +v -0.0998 -0.0021 0.4294 +v -0.0984 -0.0015 0.4294 +v -0.0978 -0.0001 0.4294 +v -0.1074 -0.0029 0.4227 +v -0.1086 -0.0001 0.4227 +v -0.0519 0.0491 0.2557 +v -0.0510 0.0511 0.2557 +v -0.0942 0.0064 0.4133 +v -0.0950 0.0044 0.4133 +v -0.0538 0.0483 0.2557 +v -0.0970 0.0036 0.4133 +v -0.0558 0.0491 0.2557 +v -0.0989 0.0044 0.4133 +v -0.0566 0.0511 0.2557 +v -0.0997 0.0064 0.4133 +v -0.0558 0.0531 0.2557 +v -0.0989 0.0083 0.4133 +v -0.0538 0.0539 0.2557 +v -0.0970 0.0092 0.4133 +v -0.0519 0.0531 0.2557 +v -0.0950 0.0083 0.4133 +v -0.0528 0.0501 0.2557 +v -0.0524 0.0511 0.2557 +v -0.0538 0.0497 0.2557 +v -0.0548 0.0501 0.2557 +v -0.0552 0.0511 0.2557 +v -0.0548 0.0521 0.2557 +v -0.0538 0.0525 0.2557 +v -0.0528 0.0521 0.2557 +v -0.0538 0.0511 0.2557 +v -0.0942 0.0064 0.4294 +v -0.0970 0.0064 0.4294 +v -0.0950 0.0044 0.4294 +v -0.0989 0.0083 0.4294 +v -0.0970 0.0092 0.4294 +v -0.0950 0.0083 0.4294 +v -0.0942 0.0064 0.4227 +v -0.0950 0.0044 0.4227 +v -0.0970 0.0036 0.4227 +v -0.0989 0.0083 0.4227 +v -0.0970 0.0092 0.4227 +v -0.0950 0.0083 0.4227 +v -0.1074 0.0026 0.2354 +v -0.1074 0.0026 0.4133 +v -0.1047 0.0038 0.2354 +v -0.1047 0.0038 0.4133 +v -0.1019 0.0026 0.2354 +v -0.1019 0.0026 0.4133 +v -0.1060 0.0013 0.2354 +v -0.1047 0.0018 0.2354 +v -0.1033 0.0013 0.2354 +v -0.1012 0.0013 0.4294 +v -0.1074 0.0026 0.4294 +v -0.0998 0.0018 0.4294 +v -0.0984 0.0013 0.4294 +v -0.1074 0.0026 0.4227 +v -0.0670 -0.0035 0.4294 +v -0.0670 -0.0066 0.4294 +v -0.0670 -0.0066 0.4255 +v -0.0670 -0.0035 0.4255 +v -0.0970 -0.0308 0.4294 +v -0.1057 -0.0274 0.4294 +v -0.1057 -0.0274 0.4255 +v -0.0970 -0.0308 0.4255 +v -0.0670 -0.0237 0.4294 +v -0.0670 -0.0237 0.4255 +v -0.1196 -0.0164 0.4294 +v -0.1196 -0.0001 0.4294 +v -0.1196 -0.0001 0.4255 +v -0.1196 -0.0164 0.4255 +v -0.1007 -0.0001 0.4227 +v -0.0670 0.0064 0.4294 +v -0.0670 0.0033 0.4294 +v -0.0670 0.0033 0.4255 +v -0.0670 0.0064 0.4255 +v -0.1057 0.0272 0.4294 +v -0.0970 0.0305 0.4294 +v -0.0970 0.0305 0.4255 +v -0.1057 0.0272 0.4255 +v -0.0670 0.0235 0.4294 +v -0.0670 0.0235 0.4255 +v -0.1196 0.0162 0.4294 +v -0.1196 0.0162 0.4255 +v -0.0950 -0.0001 0.4294 +v -0.0670 -0.0001 0.4255 +v -0.0670 -0.0001 0.4294 +v -0.0970 -0.0001 0.4227 +v -0.0950 -0.0001 0.4227 +v -0.1012 -0.0015 0.4671 +v -0.1012 -0.0015 0.5161 +v -0.1018 -0.0001 0.5175 +v -0.1018 -0.0001 0.4657 +v -0.1012 -0.0015 0.4643 +v -0.0998 -0.0021 0.4637 +v -0.0984 -0.0015 0.4643 +v -0.0978 -0.0001 0.4657 +v -0.0978 -0.0618 0.4657 +v -0.0984 -0.0618 0.4671 +v -0.0984 -0.0618 0.4643 +v -0.0998 -0.0618 0.4676 +v -0.0998 -0.0618 0.4637 +v -0.1012 -0.0618 0.4671 +v -0.1012 -0.0618 0.4643 +v -0.1018 -0.0618 0.4657 +v -0.0984 0.0013 0.4643 +v -0.0998 0.0018 0.4637 +v -0.1012 0.0013 0.4643 +v -0.1018 0.0615 0.4657 +v -0.1012 0.0615 0.4671 +v -0.1012 0.0615 0.4643 +v -0.0998 0.0615 0.4676 +v -0.0998 0.0615 0.4637 +v -0.0984 0.0615 0.4671 +v -0.0984 0.0615 0.4643 +v -0.0978 0.0615 0.4657 +v -0.0998 -0.0021 0.4676 +v -0.0984 -0.0015 0.4671 +v -0.0984 0.0013 0.4671 +v -0.1012 0.0013 0.4671 +v -0.0998 0.0018 0.4676 +v -0.1012 -0.0015 0.5189 +v -0.1012 -0.0015 0.5490 +v -0.1018 -0.0001 0.5490 +v -0.0998 -0.0021 0.5195 +v -0.0998 -0.0021 0.5490 +v -0.0984 -0.0015 0.5490 +v -0.0984 -0.0015 0.5189 +v -0.0978 -0.0001 0.5490 +v -0.0978 -0.0001 0.5175 +v -0.0984 0.0013 0.5189 +v -0.0984 0.0013 0.5490 +v -0.0998 0.0018 0.5195 +v -0.0998 0.0018 0.5490 +v -0.1012 0.0013 0.5490 +v -0.1012 0.0013 0.5189 +v -0.0998 -0.0021 0.5156 +v -0.0984 -0.0015 0.5161 +v -0.0978 -0.0416 0.5175 +v -0.0984 -0.0416 0.5189 +v -0.0984 -0.0416 0.5161 +v -0.0998 -0.0416 0.5195 +v -0.0998 -0.0416 0.5156 +v -0.1012 -0.0416 0.5189 +v -0.1012 -0.0416 0.5161 +v -0.1018 -0.0416 0.5175 +v -0.0984 0.0013 0.5161 +v -0.0998 0.0018 0.5156 +v -0.1012 0.0013 0.5161 +v -0.1018 0.0414 0.5175 +v -0.1012 0.0414 0.5189 +v -0.1012 0.0414 0.5161 +v -0.0998 0.0414 0.5195 +v -0.0998 0.0414 0.5156 +v -0.0984 0.0414 0.5189 +v -0.0984 0.0414 0.5161 +v -0.0978 0.0414 0.5175 +v 0.4688 0.0491 0.2073 +v 0.5187 0.0044 0.3769 +v 0.5179 0.0064 0.3769 +v 0.4680 0.0511 0.2073 +v 0.4708 0.0483 0.2073 +v 0.5207 0.0036 0.3769 +v 0.4728 0.0491 0.2073 +v 0.5227 0.0044 0.3769 +v 0.4736 0.0511 0.2073 +v 0.5235 0.0064 0.3769 +v 0.4728 0.0530 0.2073 +v 0.5227 0.0083 0.3769 +v 0.4708 0.0538 0.2073 +v 0.5207 0.0091 0.3769 +v 0.4688 0.0530 0.2073 +v 0.5187 0.0083 0.3769 +v 0.4694 0.0511 0.2073 +v 0.4698 0.0501 0.2073 +v 0.4708 0.0497 0.2073 +v 0.4718 0.0501 0.2073 +v 0.4722 0.0511 0.2073 +v 0.4718 0.0520 0.2073 +v 0.4708 0.0525 0.2073 +v 0.4698 0.0520 0.2073 +v 0.4708 0.0511 0.2073 +v 0.5179 0.0064 0.3930 +v 0.5187 0.0044 0.3930 +v 0.5207 0.0064 0.3930 +v 0.5207 -0.0002 0.3930 +v 0.5227 0.0083 0.3930 +v 0.5207 0.0091 0.3930 +v 0.5187 0.0083 0.3930 +v 0.5187 0.0044 0.3864 +v 0.5179 0.0064 0.3864 +v 0.5207 0.0036 0.3864 +v 0.5207 0.0091 0.3864 +v 0.5227 0.0083 0.3864 +v 0.5187 0.0083 0.3864 +v 0.5312 0.0026 0.2896 +v 0.5312 0.0026 0.3769 +v 0.5323 -0.0002 0.3769 +v 0.5323 -0.0002 0.2896 +v 0.5284 0.0038 0.2896 +v 0.5284 0.0038 0.3769 +v 0.5256 0.0026 0.2896 +v 0.5256 0.0026 0.3769 +v 0.5245 -0.0002 0.2896 +v 0.5245 -0.0002 0.3769 +v 0.5304 -0.0002 0.2896 +v 0.5298 0.0012 0.2896 +v 0.5284 0.0018 0.2896 +v 0.5270 0.0012 0.2896 +v 0.5264 -0.0002 0.2896 +v 0.5284 -0.0002 0.2896 +v 0.5323 -0.0002 0.3930 +v 0.5312 0.0026 0.3930 +v 0.5249 0.0012 0.3930 +v 0.5255 -0.0002 0.3930 +v 0.5235 0.0018 0.3930 +v 0.5221 0.0012 0.3930 +v 0.5216 -0.0002 0.3930 +v 0.5312 0.0026 0.3864 +v 0.5323 -0.0002 0.3864 +v 0.4688 -0.0494 0.2073 +v 0.4680 -0.0514 0.2073 +v 0.5179 -0.0067 0.3769 +v 0.5187 -0.0047 0.3769 +v 0.4708 -0.0486 0.2073 +v 0.5207 -0.0039 0.3769 +v 0.4728 -0.0494 0.2073 +v 0.5227 -0.0047 0.3769 +v 0.4736 -0.0514 0.2073 +v 0.5235 -0.0067 0.3769 +v 0.4728 -0.0533 0.2073 +v 0.5227 -0.0086 0.3769 +v 0.4708 -0.0541 0.2073 +v 0.5207 -0.0094 0.3769 +v 0.4688 -0.0533 0.2073 +v 0.5187 -0.0086 0.3769 +v 0.4698 -0.0504 0.2073 +v 0.4694 -0.0514 0.2073 +v 0.4708 -0.0500 0.2073 +v 0.4718 -0.0504 0.2073 +v 0.4722 -0.0514 0.2073 +v 0.4718 -0.0524 0.2073 +v 0.4708 -0.0528 0.2073 +v 0.4698 -0.0524 0.2073 +v 0.4708 -0.0514 0.2073 +v 0.5179 -0.0067 0.3930 +v 0.5207 -0.0067 0.3930 +v 0.5187 -0.0047 0.3930 +v 0.5227 -0.0086 0.3930 +v 0.5207 -0.0094 0.3930 +v 0.5187 -0.0086 0.3930 +v 0.5179 -0.0067 0.3864 +v 0.5187 -0.0047 0.3864 +v 0.5207 -0.0039 0.3864 +v 0.5227 -0.0086 0.3864 +v 0.5207 -0.0094 0.3864 +v 0.5187 -0.0086 0.3864 +v 0.5312 -0.0029 0.2896 +v 0.5312 -0.0029 0.3769 +v 0.5284 -0.0041 0.2896 +v 0.5284 -0.0041 0.3769 +v 0.5256 -0.0029 0.2896 +v 0.5256 -0.0029 0.3769 +v 0.5298 -0.0015 0.2896 +v 0.5284 -0.0021 0.2896 +v 0.5270 -0.0015 0.2896 +v 0.5249 -0.0015 0.3930 +v 0.5312 -0.0029 0.3930 +v 0.5235 -0.0021 0.3930 +v 0.5221 -0.0015 0.3930 +v 0.5312 -0.0029 0.3864 +v 0.5070 0.0032 0.3930 +v 0.5070 0.0064 0.3930 +v 0.5070 0.0064 0.3891 +v 0.5070 0.0032 0.3891 +v 0.5207 0.0305 0.3930 +v 0.5295 0.0272 0.3930 +v 0.5295 0.0272 0.3891 +v 0.5207 0.0305 0.3891 +v 0.5070 0.0234 0.3930 +v 0.5070 0.0234 0.3891 +v 0.5433 0.0162 0.3930 +v 0.5433 -0.0002 0.3930 +v 0.5433 -0.0002 0.3891 +v 0.5433 0.0162 0.3891 +v 0.5245 -0.0002 0.3864 +v 0.5070 -0.0067 0.3930 +v 0.5070 -0.0035 0.3930 +v 0.5070 -0.0035 0.3891 +v 0.5070 -0.0067 0.3891 +v 0.5295 -0.0275 0.3930 +v 0.5207 -0.0308 0.3930 +v 0.5207 -0.0308 0.3891 +v 0.5295 -0.0275 0.3891 +v 0.5070 -0.0237 0.3930 +v 0.5070 -0.0237 0.3891 +v 0.5433 -0.0165 0.3930 +v 0.5433 -0.0165 0.3891 +v 0.5187 -0.0002 0.3930 +v 0.5070 -0.0002 0.3891 +v 0.5070 -0.0002 0.3930 +v 0.5207 -0.0002 0.3864 +v 0.5187 -0.0002 0.3864 +v 0.5249 0.0012 0.4307 +v 0.5249 0.0009 0.4722 +v 0.5255 -0.0002 0.4736 +v 0.5255 -0.0002 0.4293 +v 0.5249 0.0012 0.4280 +v 0.5235 0.0018 0.4274 +v 0.5221 0.0012 0.4280 +v 0.5216 -0.0002 0.4293 +v 0.5216 0.0469 0.4293 +v 0.5221 0.0469 0.4307 +v 0.5221 0.0469 0.4280 +v 0.5235 0.0469 0.4313 +v 0.5235 0.0469 0.4274 +v 0.5249 0.0469 0.4307 +v 0.5249 0.0469 0.4280 +v 0.5255 0.0469 0.4293 +v 0.5221 -0.0015 0.4280 +v 0.5235 -0.0021 0.4274 +v 0.5249 -0.0015 0.4280 +v 0.5255 -0.0472 0.4293 +v 0.5249 -0.0472 0.4307 +v 0.5249 -0.0472 0.4280 +v 0.5235 -0.0472 0.4313 +v 0.5235 -0.0472 0.4274 +v 0.5221 -0.0472 0.4307 +v 0.5221 -0.0472 0.4280 +v 0.5216 -0.0472 0.4293 +v 0.5235 0.0018 0.4313 +v 0.5221 0.0012 0.4307 +v 0.5221 -0.0015 0.4307 +v 0.5249 -0.0015 0.4307 +v 0.5235 -0.0021 0.4313 +v 0.5249 0.0009 0.4750 +v 0.5249 0.0009 0.5051 +v 0.5255 -0.0002 0.5051 +v 0.5235 0.0013 0.4755 +v 0.5235 0.0013 0.5051 +v 0.5221 0.0009 0.5051 +v 0.5221 0.0009 0.4750 +v 0.5216 -0.0002 0.5051 +v 0.5216 -0.0002 0.4736 +v 0.5221 -0.0012 0.4750 +v 0.5221 -0.0012 0.5051 +v 0.5235 -0.0016 0.4755 +v 0.5235 -0.0016 0.5051 +v 0.5249 -0.0012 0.5051 +v 0.5249 -0.0012 0.4750 +v 0.5235 0.0013 0.4716 +v 0.5221 0.0009 0.4722 +v 0.5216 0.0315 0.4736 +v 0.5221 0.0315 0.4750 +v 0.5221 0.0315 0.4722 +v 0.5235 0.0315 0.4755 +v 0.5235 0.0315 0.4716 +v 0.5249 0.0315 0.4750 +v 0.5249 0.0315 0.4722 +v 0.5255 0.0315 0.4736 +v 0.5221 -0.0012 0.4722 +v 0.5235 -0.0016 0.4716 +v 0.5249 -0.0012 0.4722 +v 0.5255 -0.0318 0.4736 +v 0.5249 -0.0318 0.4750 +v 0.5249 -0.0318 0.4722 +v 0.5235 -0.0318 0.4755 +v 0.5235 -0.0318 0.4716 +v 0.5221 -0.0318 0.4750 +v 0.5221 -0.0318 0.4722 +v 0.5216 -0.0318 0.4736 +v 0.2573 -0.1363 0.1929 +v 0.2558 -0.1455 0.1929 +v 0.2558 -0.1455 0.2153 +v 0.2573 -0.1363 0.2153 +v 0.2616 -0.1279 0.1929 +v 0.2616 -0.1279 0.2153 +v 0.2682 -0.1213 0.1929 +v 0.2682 -0.1213 0.2153 +v 0.2765 -0.1171 0.1929 +v 0.2765 -0.1171 0.2153 +v 0.2858 -0.1156 0.1929 +v 0.2858 -0.1156 0.2153 +v 0.2950 -0.1171 0.2119 +v 0.2950 -0.1171 0.1929 +v 0.3034 -0.1213 0.2090 +v 0.3034 -0.1213 0.1929 +v 0.3100 -0.1279 0.2067 +v 0.3100 -0.1279 0.1929 +v 0.2919 -0.1375 0.2143 +v 0.2919 -0.1375 0.1929 +v 0.2919 -0.1279 0.1929 +v 0.2919 -0.1279 0.2143 +v 0.3157 -0.1455 0.2059 +v 0.3157 -0.1455 0.1929 +v 0.3142 -0.1375 0.1929 +v 0.3142 -0.1375 0.2065 +v 0.2573 -0.1363 0.1772 +v 0.2558 -0.1455 0.1772 +v 0.2616 -0.1279 0.1772 +v 0.2682 -0.1213 0.1772 +v 0.2765 -0.1171 0.1772 +v 0.2858 -0.1156 0.1772 +v 0.2950 -0.1171 0.1772 +v 0.3034 -0.1213 0.1772 +v 0.3100 -0.1279 0.1772 +v 0.3142 -0.1375 0.1772 +v 0.3157 -0.1455 0.1772 +v 0.3029 -0.1279 0.1929 +v 0.3029 -0.1375 0.1929 +v 0.3029 -0.1375 0.2104 +v 0.3029 -0.1279 0.2104 +v 0.3033 -0.1226 0.2103 +v 0.2947 -0.1183 0.2134 +v 0.3088 -0.1279 0.2084 +v 0.2573 -0.1548 0.1929 +v 0.2573 -0.1548 0.2153 +v 0.2616 -0.1631 0.1929 +v 0.2616 -0.1631 0.2153 +v 0.2682 -0.1697 0.1929 +v 0.2682 -0.1697 0.2153 +v 0.2765 -0.1740 0.1929 +v 0.2765 -0.1740 0.2153 +v 0.2858 -0.1754 0.1929 +v 0.2858 -0.1754 0.2153 +v 0.2950 -0.1740 0.2119 +v 0.2950 -0.1740 0.1929 +v 0.3034 -0.1697 0.2090 +v 0.3034 -0.1697 0.1929 +v 0.3100 -0.1631 0.2067 +v 0.3100 -0.1631 0.1929 +v 0.2919 -0.1535 0.2143 +v 0.2919 -0.1631 0.2143 +v 0.2919 -0.1631 0.1929 +v 0.2919 -0.1535 0.1929 +v 0.3142 -0.1535 0.2065 +v 0.3142 -0.1535 0.1929 +v 0.2573 -0.1548 0.1772 +v 0.2616 -0.1631 0.1772 +v 0.2682 -0.1697 0.1772 +v 0.2765 -0.1740 0.1772 +v 0.2858 -0.1754 0.1772 +v 0.2950 -0.1740 0.1772 +v 0.3034 -0.1697 0.1772 +v 0.3100 -0.1631 0.1772 +v 0.3142 -0.1535 0.1772 +v 0.3029 -0.1631 0.1929 +v 0.3029 -0.1535 0.2104 +v 0.3029 -0.1535 0.1929 +v 0.3029 -0.1631 0.2104 +v 0.2947 -0.1727 0.2134 +v 0.3033 -0.1684 0.2103 +v 0.3088 -0.1631 0.2084 +v 0.2571 -0.1455 0.2165 +v 0.2682 -0.1455 0.2165 +v 0.2583 -0.1371 0.2165 +v 0.3029 -0.1455 0.2104 +v 0.2919 -0.1455 0.2143 +v 0.2858 -0.1455 0.2165 +v 0.2858 -0.1742 0.2165 +v 0.2765 -0.1727 0.2165 +v 0.2765 -0.1455 0.2165 +v 0.2682 -0.1684 0.2165 +v 0.2858 -0.1169 0.2165 +v 0.2765 -0.1183 0.2165 +v 0.2682 -0.1226 0.2165 +v 0.2583 -0.1539 0.2165 +v 0.2620 -0.1291 0.2165 +v 0.2620 -0.1619 0.2165 +v 0.2857 -0.1455 0.1772 +v 0.3026 -0.1327 0.2071 +v 0.3055 -0.1327 0.2061 +v 0.3055 -0.1291 0.2061 +v 0.3026 -0.1291 0.2071 +v 0.3055 -0.1327 0.1983 +v 0.3026 -0.1327 0.1974 +v 0.3026 -0.1291 0.1974 +v 0.3055 -0.1291 0.1983 +v 0.3013 -0.1327 0.1977 +v 0.3013 -0.1291 0.1977 +v 0.3013 -0.1327 0.2067 +v 0.3013 -0.1291 0.2067 +v 0.3072 -0.1291 0.2034 +v 0.3066 -0.1310 0.2045 +v 0.3075 -0.1300 0.2031 +v 0.3072 -0.1291 0.2011 +v 0.3075 -0.1300 0.2013 +v 0.3066 -0.1310 0.1999 +v 0.3062 -0.1327 0.1994 +v 0.3062 -0.1327 0.2051 +v 0.3088 -0.1310 0.1999 +v 0.3088 -0.1327 0.1994 +v 0.3088 -0.1300 0.2013 +v 0.3088 -0.1300 0.2031 +v 0.3088 -0.1310 0.2045 +v 0.3088 -0.1327 0.2050 +v 0.3052 -0.1285 0.2058 +v 0.3026 -0.1285 0.2066 +v 0.3068 -0.1285 0.2036 +v 0.3068 -0.1285 0.2009 +v 0.3052 -0.1285 0.1987 +v 0.3026 -0.1285 0.1978 +v 0.3013 -0.1285 0.1981 +v 0.3013 -0.1285 0.2063 +v 0.2933 -0.1286 0.2042 +v 0.2933 -0.1286 0.2001 +v 0.2933 -0.1294 0.1998 +v 0.2933 -0.1294 0.2046 +v 0.2933 -0.1327 0.1998 +v 0.2933 -0.1327 0.2046 +v 0.3215 -0.1311 0.2001 +v 0.3215 -0.1327 0.1995 +v 0.3215 -0.1301 0.2014 +v 0.3215 -0.1301 0.2030 +v 0.3215 -0.1311 0.2044 +v 0.3215 -0.1327 0.2049 +v 0.3730 -0.1315 0.2006 +v 0.3730 -0.1327 0.2002 +v 0.3223 -0.1327 0.1997 +v 0.3223 -0.1312 0.2001 +v 0.3730 -0.1307 0.2016 +v 0.3223 -0.1302 0.2014 +v 0.3730 -0.1307 0.2029 +v 0.3223 -0.1302 0.2030 +v 0.3730 -0.1315 0.2039 +v 0.3223 -0.1312 0.2043 +v 0.3730 -0.1327 0.2043 +v 0.3223 -0.1327 0.2048 +v 0.3026 -0.1362 0.2071 +v 0.3055 -0.1362 0.2061 +v 0.3055 -0.1362 0.1983 +v 0.3026 -0.1362 0.1974 +v 0.3013 -0.1362 0.1977 +v 0.3013 -0.1362 0.2067 +v 0.3072 -0.1362 0.2034 +v 0.3075 -0.1354 0.2031 +v 0.3066 -0.1344 0.2045 +v 0.3072 -0.1362 0.2011 +v 0.3075 -0.1354 0.2013 +v 0.3066 -0.1344 0.1999 +v 0.3088 -0.1343 0.1999 +v 0.3088 -0.1354 0.2013 +v 0.3088 -0.1354 0.2031 +v 0.3088 -0.1343 0.2045 +v 0.3026 -0.1368 0.2066 +v 0.3052 -0.1368 0.2058 +v 0.3068 -0.1368 0.2036 +v 0.3068 -0.1368 0.2009 +v 0.3052 -0.1368 0.1987 +v 0.3026 -0.1368 0.1978 +v 0.3013 -0.1368 0.1981 +v 0.3013 -0.1368 0.2063 +v 0.2933 -0.1363 0.2042 +v 0.2933 -0.1356 0.2046 +v 0.2933 -0.1356 0.1998 +v 0.2933 -0.1363 0.2001 +v 0.3215 -0.1342 0.2001 +v 0.3215 -0.1352 0.2014 +v 0.3215 -0.1352 0.2030 +v 0.3215 -0.1342 0.2044 +v 0.3730 -0.1339 0.2006 +v 0.3223 -0.1342 0.2001 +v 0.3730 -0.1346 0.2016 +v 0.3223 -0.1351 0.2014 +v 0.3730 -0.1346 0.2029 +v 0.3223 -0.1351 0.2030 +v 0.3730 -0.1339 0.2039 +v 0.3223 -0.1342 0.2043 +v 0.3023 -0.1285 0.2022 +v 0.3023 -0.1368 0.2022 +v 0.3734 -0.1327 0.2006 +v 0.3734 -0.1317 0.2009 +v 0.3734 -0.1327 0.2022 +v 0.3734 -0.1312 0.2017 +v 0.3734 -0.1312 0.2027 +v 0.3734 -0.1317 0.2035 +v 0.3734 -0.1327 0.2038 +v 0.3734 -0.1336 0.2035 +v 0.3734 -0.1342 0.2027 +v 0.3734 -0.1342 0.2017 +v 0.3734 -0.1336 0.2009 +v 0.3026 -0.1584 0.2071 +v 0.3055 -0.1584 0.2061 +v 0.3055 -0.1548 0.2061 +v 0.3026 -0.1548 0.2071 +v 0.3055 -0.1584 0.1983 +v 0.3026 -0.1584 0.1974 +v 0.3026 -0.1548 0.1974 +v 0.3055 -0.1548 0.1983 +v 0.3013 -0.1584 0.1977 +v 0.3013 -0.1548 0.1977 +v 0.3013 -0.1584 0.2067 +v 0.3013 -0.1548 0.2067 +v 0.3072 -0.1548 0.2034 +v 0.3066 -0.1567 0.2045 +v 0.3075 -0.1556 0.2031 +v 0.3072 -0.1548 0.2011 +v 0.3075 -0.1556 0.2013 +v 0.3066 -0.1567 0.1999 +v 0.3062 -0.1584 0.1994 +v 0.3062 -0.1584 0.2051 +v 0.3088 -0.1567 0.1999 +v 0.3088 -0.1584 0.1994 +v 0.3088 -0.1557 0.2013 +v 0.3088 -0.1557 0.2031 +v 0.3088 -0.1567 0.2045 +v 0.3088 -0.1584 0.2050 +v 0.3052 -0.1542 0.2058 +v 0.3026 -0.1542 0.2066 +v 0.3068 -0.1542 0.2036 +v 0.3068 -0.1542 0.2009 +v 0.3052 -0.1542 0.1987 +v 0.3026 -0.1542 0.1978 +v 0.3013 -0.1542 0.1981 +v 0.3013 -0.1542 0.2063 +v 0.2933 -0.1543 0.2042 +v 0.2933 -0.1543 0.2001 +v 0.2933 -0.1551 0.1998 +v 0.2933 -0.1551 0.2046 +v 0.2933 -0.1584 0.1998 +v 0.2933 -0.1584 0.2046 +v 0.3215 -0.1568 0.2001 +v 0.3215 -0.1584 0.1995 +v 0.3215 -0.1558 0.2014 +v 0.3215 -0.1558 0.2030 +v 0.3215 -0.1568 0.2044 +v 0.3215 -0.1584 0.2049 +v 0.3730 -0.1571 0.2006 +v 0.3730 -0.1584 0.2002 +v 0.3223 -0.1584 0.1997 +v 0.3223 -0.1568 0.2001 +v 0.3730 -0.1564 0.2016 +v 0.3223 -0.1559 0.2014 +v 0.3730 -0.1564 0.2029 +v 0.3223 -0.1559 0.2030 +v 0.3730 -0.1571 0.2039 +v 0.3223 -0.1568 0.2043 +v 0.3730 -0.1584 0.2043 +v 0.3223 -0.1584 0.2048 +v 0.3026 -0.1619 0.2071 +v 0.3055 -0.1619 0.2061 +v 0.3055 -0.1619 0.1983 +v 0.3026 -0.1619 0.1974 +v 0.3013 -0.1619 0.1977 +v 0.3013 -0.1619 0.2067 +v 0.3072 -0.1619 0.2034 +v 0.3075 -0.1611 0.2031 +v 0.3066 -0.1600 0.2045 +v 0.3072 -0.1619 0.2011 +v 0.3075 -0.1611 0.2013 +v 0.3066 -0.1600 0.1999 +v 0.3088 -0.1600 0.1999 +v 0.3088 -0.1611 0.2013 +v 0.3088 -0.1611 0.2031 +v 0.3088 -0.1600 0.2045 +v 0.3026 -0.1625 0.2066 +v 0.3052 -0.1625 0.2058 +v 0.3068 -0.1625 0.2036 +v 0.3068 -0.1625 0.2009 +v 0.3052 -0.1625 0.1987 +v 0.3026 -0.1625 0.1978 +v 0.3013 -0.1625 0.1981 +v 0.3013 -0.1625 0.2063 +v 0.2933 -0.1620 0.2042 +v 0.2933 -0.1613 0.2046 +v 0.2933 -0.1613 0.1998 +v 0.2933 -0.1620 0.2001 +v 0.3215 -0.1599 0.2001 +v 0.3215 -0.1609 0.2014 +v 0.3215 -0.1609 0.2030 +v 0.3215 -0.1599 0.2044 +v 0.3730 -0.1596 0.2006 +v 0.3223 -0.1599 0.2001 +v 0.3730 -0.1603 0.2016 +v 0.3223 -0.1608 0.2014 +v 0.3730 -0.1603 0.2029 +v 0.3223 -0.1608 0.2030 +v 0.3730 -0.1596 0.2039 +v 0.3223 -0.1599 0.2043 +v 0.3023 -0.1542 0.2022 +v 0.3023 -0.1625 0.2022 +v 0.3734 -0.1584 0.2006 +v 0.3734 -0.1574 0.2009 +v 0.3734 -0.1584 0.2022 +v 0.3734 -0.1569 0.2017 +v 0.3734 -0.1569 0.2027 +v 0.3734 -0.1574 0.2035 +v 0.3734 -0.1584 0.2038 +v 0.3734 -0.1593 0.2035 +v 0.3734 -0.1599 0.2027 +v 0.3734 -0.1599 0.2017 +v 0.3734 -0.1593 0.2009 +v 0.3799 -0.1416 0.1645 +v 0.3784 -0.1508 0.1645 +v 0.3784 -0.1508 0.1868 +v 0.3799 -0.1416 0.1868 +v 0.3842 -0.1332 0.1645 +v 0.3842 -0.1332 0.1868 +v 0.3908 -0.1266 0.1645 +v 0.3908 -0.1266 0.1868 +v 0.3991 -0.1224 0.1645 +v 0.3991 -0.1224 0.1868 +v 0.4084 -0.1209 0.1645 +v 0.4084 -0.1209 0.1868 +v 0.4176 -0.1224 0.1835 +v 0.4176 -0.1224 0.1645 +v 0.4259 -0.1266 0.1806 +v 0.4259 -0.1266 0.1645 +v 0.4326 -0.1332 0.1782 +v 0.4326 -0.1332 0.1645 +v 0.4145 -0.1428 0.1859 +v 0.4145 -0.1428 0.1645 +v 0.4145 -0.1332 0.1645 +v 0.4145 -0.1332 0.1859 +v 0.4383 -0.1508 0.1775 +v 0.4383 -0.1508 0.1645 +v 0.4368 -0.1428 0.1645 +v 0.4368 -0.1428 0.1780 +v 0.3799 -0.1416 0.1500 +v 0.3784 -0.1508 0.1500 +v 0.3842 -0.1332 0.1500 +v 0.3908 -0.1266 0.1500 +v 0.3991 -0.1224 0.1500 +v 0.4084 -0.1209 0.1500 +v 0.4176 -0.1224 0.1500 +v 0.4259 -0.1266 0.1500 +v 0.4326 -0.1332 0.1500 +v 0.4368 -0.1428 0.1500 +v 0.4383 -0.1508 0.1500 +v 0.4255 -0.1332 0.1645 +v 0.4255 -0.1428 0.1645 +v 0.4255 -0.1428 0.1819 +v 0.4255 -0.1332 0.1819 +v 0.4259 -0.1279 0.1819 +v 0.4173 -0.1236 0.1849 +v 0.4314 -0.1332 0.1799 +v 0.3799 -0.1601 0.1645 +v 0.3799 -0.1601 0.1868 +v 0.3842 -0.1684 0.1645 +v 0.3842 -0.1684 0.1868 +v 0.3908 -0.1750 0.1645 +v 0.3908 -0.1750 0.1868 +v 0.3991 -0.1793 0.1645 +v 0.3991 -0.1793 0.1868 +v 0.4084 -0.1807 0.1645 +v 0.4084 -0.1807 0.1868 +v 0.4176 -0.1793 0.1835 +v 0.4176 -0.1793 0.1645 +v 0.4259 -0.1750 0.1806 +v 0.4259 -0.1750 0.1645 +v 0.4326 -0.1684 0.1782 +v 0.4326 -0.1684 0.1645 +v 0.4145 -0.1588 0.1859 +v 0.4145 -0.1684 0.1859 +v 0.4145 -0.1684 0.1645 +v 0.4145 -0.1588 0.1645 +v 0.4368 -0.1588 0.1780 +v 0.4368 -0.1588 0.1645 +v 0.3799 -0.1601 0.1500 +v 0.3842 -0.1684 0.1500 +v 0.3908 -0.1750 0.1500 +v 0.3991 -0.1793 0.1500 +v 0.4084 -0.1807 0.1500 +v 0.4176 -0.1793 0.1500 +v 0.4259 -0.1750 0.1500 +v 0.4326 -0.1684 0.1500 +v 0.4368 -0.1588 0.1500 +v 0.4255 -0.1684 0.1645 +v 0.4255 -0.1588 0.1819 +v 0.4255 -0.1588 0.1645 +v 0.4255 -0.1684 0.1819 +v 0.4173 -0.1780 0.1849 +v 0.4259 -0.1737 0.1819 +v 0.4314 -0.1684 0.1799 +v 0.3797 -0.1508 0.1881 +v 0.3908 -0.1508 0.1881 +v 0.3809 -0.1424 0.1881 +v 0.4255 -0.1508 0.1819 +v 0.4145 -0.1508 0.1859 +v 0.4084 -0.1508 0.1881 +v 0.4084 -0.1795 0.1881 +v 0.3991 -0.1780 0.1881 +v 0.3991 -0.1508 0.1881 +v 0.3908 -0.1737 0.1881 +v 0.4084 -0.1222 0.1881 +v 0.3991 -0.1236 0.1881 +v 0.3908 -0.1279 0.1881 +v 0.3809 -0.1592 0.1881 +v 0.3846 -0.1344 0.1881 +v 0.3846 -0.1672 0.1881 +v 0.4083 -0.1508 0.1500 +v 0.4252 -0.1380 0.1786 +v 0.4281 -0.1380 0.1777 +v 0.4281 -0.1344 0.1777 +v 0.4252 -0.1344 0.1786 +v 0.4281 -0.1380 0.1699 +v 0.4252 -0.1380 0.1689 +v 0.4252 -0.1344 0.1689 +v 0.4281 -0.1344 0.1699 +v 0.4239 -0.1380 0.1693 +v 0.4239 -0.1344 0.1693 +v 0.4239 -0.1380 0.1782 +v 0.4239 -0.1344 0.1782 +v 0.4298 -0.1344 0.1750 +v 0.4292 -0.1363 0.1761 +v 0.4301 -0.1353 0.1747 +v 0.4298 -0.1344 0.1726 +v 0.4301 -0.1353 0.1729 +v 0.4292 -0.1363 0.1715 +v 0.4288 -0.1380 0.1709 +v 0.4288 -0.1380 0.1766 +v 0.4313 -0.1363 0.1715 +v 0.4313 -0.1380 0.1710 +v 0.4313 -0.1353 0.1729 +v 0.4313 -0.1353 0.1747 +v 0.4313 -0.1363 0.1761 +v 0.4313 -0.1380 0.1766 +v 0.4278 -0.1338 0.1773 +v 0.4252 -0.1338 0.1782 +v 0.4294 -0.1338 0.1751 +v 0.4294 -0.1338 0.1724 +v 0.4278 -0.1338 0.1702 +v 0.4252 -0.1338 0.1694 +v 0.4239 -0.1338 0.1696 +v 0.4239 -0.1338 0.1778 +v 0.4159 -0.1339 0.1758 +v 0.4159 -0.1339 0.1717 +v 0.4159 -0.1347 0.1713 +v 0.4159 -0.1347 0.1761 +v 0.4159 -0.1380 0.1713 +v 0.4159 -0.1380 0.1761 +v 0.4441 -0.1364 0.1716 +v 0.4441 -0.1380 0.1711 +v 0.4441 -0.1354 0.1730 +v 0.4441 -0.1354 0.1746 +v 0.4441 -0.1364 0.1760 +v 0.4441 -0.1380 0.1765 +v 0.4956 -0.1368 0.1721 +v 0.4956 -0.1380 0.1717 +v 0.4449 -0.1380 0.1712 +v 0.4449 -0.1365 0.1717 +v 0.4956 -0.1360 0.1731 +v 0.4449 -0.1355 0.1730 +v 0.4956 -0.1360 0.1744 +v 0.4449 -0.1355 0.1746 +v 0.4956 -0.1368 0.1754 +v 0.4449 -0.1365 0.1759 +v 0.4956 -0.1380 0.1758 +v 0.4449 -0.1380 0.1764 +v 0.4252 -0.1415 0.1786 +v 0.4281 -0.1415 0.1777 +v 0.4281 -0.1415 0.1699 +v 0.4252 -0.1415 0.1689 +v 0.4239 -0.1415 0.1693 +v 0.4239 -0.1415 0.1782 +v 0.4298 -0.1415 0.1750 +v 0.4301 -0.1407 0.1747 +v 0.4292 -0.1397 0.1761 +v 0.4298 -0.1415 0.1726 +v 0.4301 -0.1407 0.1729 +v 0.4292 -0.1397 0.1715 +v 0.4313 -0.1396 0.1715 +v 0.4313 -0.1407 0.1729 +v 0.4313 -0.1407 0.1747 +v 0.4313 -0.1396 0.1761 +v 0.4252 -0.1421 0.1782 +v 0.4278 -0.1421 0.1773 +v 0.4294 -0.1421 0.1751 +v 0.4294 -0.1421 0.1724 +v 0.4278 -0.1421 0.1702 +v 0.4252 -0.1421 0.1694 +v 0.4239 -0.1421 0.1696 +v 0.4239 -0.1421 0.1778 +v 0.4159 -0.1416 0.1758 +v 0.4159 -0.1409 0.1761 +v 0.4159 -0.1409 0.1713 +v 0.4159 -0.1416 0.1717 +v 0.4441 -0.1395 0.1716 +v 0.4441 -0.1405 0.1730 +v 0.4441 -0.1405 0.1746 +v 0.4441 -0.1395 0.1760 +v 0.4956 -0.1392 0.1721 +v 0.4449 -0.1395 0.1717 +v 0.4956 -0.1399 0.1731 +v 0.4449 -0.1404 0.1730 +v 0.4956 -0.1399 0.1744 +v 0.4449 -0.1404 0.1746 +v 0.4956 -0.1392 0.1754 +v 0.4449 -0.1395 0.1759 +v 0.4249 -0.1338 0.1738 +v 0.4249 -0.1421 0.1738 +v 0.4960 -0.1380 0.1722 +v 0.4960 -0.1370 0.1725 +v 0.4960 -0.1380 0.1738 +v 0.4960 -0.1365 0.1733 +v 0.4960 -0.1365 0.1743 +v 0.4960 -0.1370 0.1751 +v 0.4960 -0.1380 0.1754 +v 0.4960 -0.1389 0.1751 +v 0.4960 -0.1395 0.1743 +v 0.4960 -0.1395 0.1733 +v 0.4960 -0.1389 0.1725 +v 0.4252 -0.1637 0.1786 +v 0.4281 -0.1637 0.1777 +v 0.4281 -0.1601 0.1777 +v 0.4252 -0.1601 0.1786 +v 0.4281 -0.1637 0.1699 +v 0.4252 -0.1637 0.1689 +v 0.4252 -0.1601 0.1689 +v 0.4281 -0.1601 0.1699 +v 0.4239 -0.1637 0.1693 +v 0.4239 -0.1601 0.1693 +v 0.4239 -0.1637 0.1782 +v 0.4239 -0.1601 0.1782 +v 0.4298 -0.1601 0.1750 +v 0.4292 -0.1620 0.1761 +v 0.4301 -0.1609 0.1747 +v 0.4298 -0.1601 0.1726 +v 0.4301 -0.1609 0.1729 +v 0.4292 -0.1620 0.1715 +v 0.4288 -0.1637 0.1709 +v 0.4288 -0.1637 0.1766 +v 0.4313 -0.1620 0.1715 +v 0.4313 -0.1637 0.1710 +v 0.4313 -0.1610 0.1729 +v 0.4313 -0.1610 0.1747 +v 0.4313 -0.1620 0.1761 +v 0.4313 -0.1637 0.1766 +v 0.4278 -0.1595 0.1773 +v 0.4252 -0.1595 0.1782 +v 0.4294 -0.1595 0.1751 +v 0.4294 -0.1595 0.1724 +v 0.4278 -0.1595 0.1702 +v 0.4252 -0.1595 0.1694 +v 0.4239 -0.1595 0.1696 +v 0.4239 -0.1595 0.1778 +v 0.4159 -0.1596 0.1758 +v 0.4159 -0.1596 0.1717 +v 0.4159 -0.1604 0.1713 +v 0.4159 -0.1604 0.1761 +v 0.4159 -0.1637 0.1713 +v 0.4159 -0.1637 0.1761 +v 0.4441 -0.1621 0.1716 +v 0.4441 -0.1637 0.1711 +v 0.4441 -0.1611 0.1730 +v 0.4441 -0.1611 0.1746 +v 0.4441 -0.1621 0.1760 +v 0.4441 -0.1637 0.1765 +v 0.4956 -0.1624 0.1721 +v 0.4956 -0.1637 0.1717 +v 0.4449 -0.1637 0.1712 +v 0.4449 -0.1621 0.1717 +v 0.4956 -0.1617 0.1731 +v 0.4449 -0.1612 0.1730 +v 0.4956 -0.1617 0.1744 +v 0.4449 -0.1612 0.1746 +v 0.4956 -0.1624 0.1754 +v 0.4449 -0.1621 0.1759 +v 0.4956 -0.1637 0.1758 +v 0.4449 -0.1637 0.1764 +v 0.4252 -0.1672 0.1786 +v 0.4281 -0.1672 0.1777 +v 0.4281 -0.1672 0.1699 +v 0.4252 -0.1672 0.1689 +v 0.4239 -0.1672 0.1693 +v 0.4239 -0.1672 0.1782 +v 0.4298 -0.1672 0.1750 +v 0.4301 -0.1664 0.1747 +v 0.4292 -0.1653 0.1761 +v 0.4298 -0.1672 0.1726 +v 0.4301 -0.1664 0.1729 +v 0.4292 -0.1653 0.1715 +v 0.4313 -0.1653 0.1715 +v 0.4313 -0.1664 0.1729 +v 0.4313 -0.1664 0.1747 +v 0.4313 -0.1653 0.1761 +v 0.4252 -0.1678 0.1782 +v 0.4278 -0.1678 0.1773 +v 0.4294 -0.1678 0.1751 +v 0.4294 -0.1678 0.1724 +v 0.4278 -0.1678 0.1702 +v 0.4252 -0.1678 0.1694 +v 0.4239 -0.1678 0.1696 +v 0.4239 -0.1678 0.1778 +v 0.4159 -0.1673 0.1758 +v 0.4159 -0.1666 0.1761 +v 0.4159 -0.1666 0.1713 +v 0.4159 -0.1673 0.1717 +v 0.4441 -0.1652 0.1716 +v 0.4441 -0.1662 0.1730 +v 0.4441 -0.1662 0.1746 +v 0.4441 -0.1652 0.1760 +v 0.4956 -0.1649 0.1721 +v 0.4449 -0.1652 0.1717 +v 0.4956 -0.1656 0.1731 +v 0.4449 -0.1661 0.1730 +v 0.4956 -0.1656 0.1744 +v 0.4449 -0.1661 0.1746 +v 0.4956 -0.1649 0.1754 +v 0.4449 -0.1652 0.1759 +v 0.4249 -0.1595 0.1738 +v 0.4249 -0.1678 0.1738 +v 0.4960 -0.1637 0.1722 +v 0.4960 -0.1627 0.1725 +v 0.4960 -0.1637 0.1738 +v 0.4960 -0.1622 0.1733 +v 0.4960 -0.1622 0.1743 +v 0.4960 -0.1627 0.1751 +v 0.4960 -0.1637 0.1754 +v 0.4960 -0.1646 0.1751 +v 0.4960 -0.1652 0.1743 +v 0.4960 -0.1652 0.1733 +v 0.4960 -0.1646 0.1725 +v 0.2573 0.1548 0.1929 +v 0.2558 0.1455 0.1929 +v 0.2558 0.1455 0.2153 +v 0.2573 0.1548 0.2153 +v 0.2616 0.1631 0.1929 +v 0.2616 0.1631 0.2153 +v 0.2682 0.1698 0.1929 +v 0.2682 0.1698 0.2153 +v 0.2765 0.1740 0.1929 +v 0.2765 0.1740 0.2153 +v 0.2858 0.1755 0.1929 +v 0.2858 0.1755 0.2153 +v 0.2950 0.1740 0.2119 +v 0.2950 0.1740 0.1929 +v 0.3034 0.1698 0.2090 +v 0.3034 0.1698 0.1929 +v 0.3100 0.1631 0.2067 +v 0.3100 0.1631 0.1929 +v 0.2919 0.1536 0.2143 +v 0.2919 0.1536 0.1929 +v 0.2919 0.1631 0.1929 +v 0.2919 0.1631 0.2143 +v 0.3157 0.1455 0.2059 +v 0.3157 0.1455 0.1929 +v 0.3142 0.1536 0.1929 +v 0.3142 0.1536 0.2065 +v 0.2573 0.1548 0.1772 +v 0.2558 0.1455 0.1772 +v 0.2616 0.1631 0.1772 +v 0.2682 0.1698 0.1772 +v 0.2765 0.1740 0.1772 +v 0.2858 0.1755 0.1772 +v 0.2950 0.1740 0.1772 +v 0.3034 0.1698 0.1772 +v 0.3100 0.1631 0.1772 +v 0.3142 0.1536 0.1772 +v 0.3157 0.1455 0.1772 +v 0.3029 0.1631 0.1929 +v 0.3029 0.1536 0.1929 +v 0.3029 0.1536 0.2104 +v 0.3029 0.1631 0.2104 +v 0.3033 0.1685 0.2103 +v 0.2947 0.1728 0.2134 +v 0.3088 0.1631 0.2084 +v 0.2573 0.1363 0.1929 +v 0.2573 0.1363 0.2153 +v 0.2616 0.1280 0.1929 +v 0.2616 0.1280 0.2153 +v 0.2682 0.1213 0.1929 +v 0.2682 0.1213 0.2153 +v 0.2765 0.1171 0.1929 +v 0.2765 0.1171 0.2153 +v 0.2858 0.1156 0.1929 +v 0.2858 0.1156 0.2153 +v 0.2950 0.1171 0.2119 +v 0.2950 0.1171 0.1929 +v 0.3034 0.1213 0.2090 +v 0.3034 0.1213 0.1929 +v 0.3100 0.1280 0.2067 +v 0.3100 0.1280 0.1929 +v 0.2919 0.1375 0.2143 +v 0.2919 0.1280 0.2143 +v 0.2919 0.1280 0.1929 +v 0.2919 0.1375 0.1929 +v 0.3142 0.1375 0.2065 +v 0.3142 0.1375 0.1929 +v 0.2573 0.1363 0.1772 +v 0.2616 0.1280 0.1772 +v 0.2682 0.1213 0.1772 +v 0.2765 0.1171 0.1772 +v 0.2858 0.1156 0.1772 +v 0.2950 0.1171 0.1772 +v 0.3034 0.1213 0.1772 +v 0.3100 0.1280 0.1772 +v 0.3142 0.1375 0.1772 +v 0.3029 0.1280 0.1929 +v 0.3029 0.1375 0.2104 +v 0.3029 0.1375 0.1929 +v 0.3029 0.1280 0.2104 +v 0.2947 0.1183 0.2134 +v 0.3033 0.1226 0.2103 +v 0.3088 0.1280 0.2084 +v 0.2571 0.1455 0.2165 +v 0.2682 0.1455 0.2165 +v 0.2583 0.1540 0.2165 +v 0.3029 0.1455 0.2104 +v 0.2919 0.1455 0.2143 +v 0.2858 0.1169 0.2165 +v 0.2858 0.1455 0.2165 +v 0.2765 0.1184 0.2165 +v 0.2765 0.1455 0.2165 +v 0.2682 0.1226 0.2165 +v 0.2858 0.1742 0.2165 +v 0.2765 0.1727 0.2165 +v 0.2682 0.1685 0.2165 +v 0.2583 0.1371 0.2165 +v 0.2620 0.1619 0.2165 +v 0.2620 0.1292 0.2165 +v 0.2857 0.1455 0.1772 +v 0.3026 0.1584 0.2071 +v 0.3055 0.1584 0.2061 +v 0.3055 0.1620 0.2061 +v 0.3026 0.1620 0.2071 +v 0.3055 0.1584 0.1983 +v 0.3026 0.1584 0.1974 +v 0.3026 0.1620 0.1974 +v 0.3055 0.1620 0.1983 +v 0.3013 0.1584 0.1977 +v 0.3013 0.1620 0.1977 +v 0.3013 0.1584 0.2067 +v 0.3013 0.1620 0.2067 +v 0.3072 0.1620 0.2034 +v 0.3066 0.1601 0.2045 +v 0.3075 0.1611 0.2031 +v 0.3072 0.1620 0.2011 +v 0.3075 0.1611 0.2013 +v 0.3066 0.1601 0.1999 +v 0.3062 0.1584 0.1994 +v 0.3062 0.1584 0.2051 +v 0.3088 0.1601 0.1999 +v 0.3088 0.1584 0.1994 +v 0.3088 0.1611 0.2013 +v 0.3088 0.1611 0.2031 +v 0.3088 0.1601 0.2045 +v 0.3088 0.1584 0.2050 +v 0.3052 0.1625 0.2058 +v 0.3026 0.1625 0.2066 +v 0.3068 0.1625 0.2036 +v 0.3068 0.1625 0.2009 +v 0.3052 0.1625 0.1987 +v 0.3026 0.1625 0.1978 +v 0.3013 0.1625 0.1981 +v 0.3013 0.1625 0.2063 +v 0.2933 0.1624 0.2042 +v 0.2933 0.1624 0.2001 +v 0.2933 0.1616 0.1998 +v 0.2933 0.1616 0.2046 +v 0.2933 0.1584 0.1998 +v 0.2933 0.1584 0.2046 +v 0.3215 0.1600 0.2001 +v 0.3215 0.1584 0.1995 +v 0.3215 0.1609 0.2014 +v 0.3215 0.1609 0.2030 +v 0.3215 0.1600 0.2044 +v 0.3215 0.1584 0.2049 +v 0.3730 0.1596 0.2006 +v 0.3730 0.1584 0.2002 +v 0.3223 0.1584 0.1997 +v 0.3223 0.1599 0.2001 +v 0.3730 0.1603 0.2016 +v 0.3223 0.1608 0.2014 +v 0.3730 0.1603 0.2029 +v 0.3223 0.1608 0.2030 +v 0.3730 0.1596 0.2039 +v 0.3223 0.1599 0.2043 +v 0.3730 0.1584 0.2043 +v 0.3223 0.1584 0.2048 +v 0.3026 0.1548 0.2071 +v 0.3055 0.1548 0.2061 +v 0.3055 0.1548 0.1983 +v 0.3026 0.1548 0.1974 +v 0.3013 0.1548 0.1977 +v 0.3013 0.1548 0.2067 +v 0.3072 0.1548 0.2034 +v 0.3075 0.1557 0.2031 +v 0.3066 0.1567 0.2045 +v 0.3072 0.1548 0.2011 +v 0.3075 0.1557 0.2013 +v 0.3066 0.1567 0.1999 +v 0.3088 0.1567 0.1999 +v 0.3088 0.1557 0.2013 +v 0.3088 0.1557 0.2031 +v 0.3088 0.1567 0.2045 +v 0.3026 0.1542 0.2066 +v 0.3052 0.1542 0.2058 +v 0.3068 0.1542 0.2036 +v 0.3068 0.1542 0.2009 +v 0.3052 0.1542 0.1987 +v 0.3026 0.1542 0.1978 +v 0.3013 0.1542 0.1981 +v 0.3013 0.1542 0.2063 +v 0.2933 0.1547 0.2042 +v 0.2933 0.1555 0.2046 +v 0.2933 0.1555 0.1998 +v 0.2933 0.1547 0.2001 +v 0.3215 0.1568 0.2001 +v 0.3215 0.1558 0.2014 +v 0.3215 0.1558 0.2030 +v 0.3215 0.1568 0.2044 +v 0.3730 0.1572 0.2006 +v 0.3223 0.1569 0.2001 +v 0.3730 0.1564 0.2016 +v 0.3223 0.1559 0.2014 +v 0.3730 0.1564 0.2029 +v 0.3223 0.1559 0.2030 +v 0.3730 0.1572 0.2039 +v 0.3223 0.1569 0.2043 +v 0.3023 0.1625 0.2022 +v 0.3023 0.1542 0.2022 +v 0.3734 0.1584 0.2006 +v 0.3734 0.1593 0.2009 +v 0.3734 0.1584 0.2022 +v 0.3734 0.1599 0.2017 +v 0.3734 0.1599 0.2027 +v 0.3734 0.1593 0.2035 +v 0.3734 0.1584 0.2038 +v 0.3734 0.1575 0.2035 +v 0.3734 0.1569 0.2027 +v 0.3734 0.1569 0.2017 +v 0.3734 0.1575 0.2009 +v 0.3026 0.1327 0.2071 +v 0.3055 0.1327 0.2061 +v 0.3055 0.1363 0.2061 +v 0.3026 0.1363 0.2071 +v 0.3055 0.1327 0.1983 +v 0.3026 0.1327 0.1974 +v 0.3026 0.1363 0.1974 +v 0.3055 0.1363 0.1983 +v 0.3013 0.1327 0.1977 +v 0.3013 0.1363 0.1977 +v 0.3013 0.1327 0.2067 +v 0.3013 0.1363 0.2067 +v 0.3072 0.1363 0.2034 +v 0.3066 0.1344 0.2045 +v 0.3075 0.1354 0.2031 +v 0.3072 0.1363 0.2011 +v 0.3075 0.1354 0.2013 +v 0.3066 0.1344 0.1999 +v 0.3062 0.1327 0.1994 +v 0.3062 0.1327 0.2051 +v 0.3088 0.1344 0.1999 +v 0.3088 0.1327 0.1994 +v 0.3088 0.1354 0.2013 +v 0.3088 0.1354 0.2031 +v 0.3088 0.1344 0.2045 +v 0.3088 0.1327 0.2050 +v 0.3052 0.1369 0.2058 +v 0.3026 0.1369 0.2066 +v 0.3068 0.1369 0.2036 +v 0.3068 0.1369 0.2009 +v 0.3052 0.1369 0.1987 +v 0.3026 0.1369 0.1978 +v 0.3013 0.1369 0.1981 +v 0.3013 0.1369 0.2063 +v 0.2933 0.1367 0.2042 +v 0.2933 0.1367 0.2001 +v 0.2933 0.1360 0.1998 +v 0.2933 0.1360 0.2046 +v 0.2933 0.1327 0.1998 +v 0.2933 0.1327 0.2046 +v 0.3215 0.1343 0.2001 +v 0.3215 0.1327 0.1995 +v 0.3215 0.1353 0.2014 +v 0.3215 0.1353 0.2030 +v 0.3215 0.1343 0.2044 +v 0.3215 0.1327 0.2049 +v 0.3730 0.1339 0.2006 +v 0.3730 0.1327 0.2002 +v 0.3223 0.1327 0.1997 +v 0.3223 0.1342 0.2001 +v 0.3730 0.1347 0.2016 +v 0.3223 0.1352 0.2014 +v 0.3730 0.1347 0.2029 +v 0.3223 0.1352 0.2030 +v 0.3730 0.1339 0.2039 +v 0.3223 0.1342 0.2043 +v 0.3730 0.1327 0.2043 +v 0.3223 0.1327 0.2048 +v 0.3026 0.1291 0.2071 +v 0.3055 0.1291 0.2061 +v 0.3055 0.1291 0.1983 +v 0.3026 0.1291 0.1974 +v 0.3013 0.1291 0.1977 +v 0.3013 0.1291 0.2067 +v 0.3072 0.1291 0.2034 +v 0.3075 0.1300 0.2031 +v 0.3066 0.1310 0.2045 +v 0.3072 0.1291 0.2011 +v 0.3075 0.1300 0.2013 +v 0.3066 0.1310 0.1999 +v 0.3088 0.1310 0.1999 +v 0.3088 0.1300 0.2013 +v 0.3088 0.1300 0.2031 +v 0.3088 0.1310 0.2045 +v 0.3026 0.1286 0.2066 +v 0.3052 0.1286 0.2058 +v 0.3068 0.1286 0.2036 +v 0.3068 0.1286 0.2009 +v 0.3052 0.1286 0.1987 +v 0.3026 0.1286 0.1978 +v 0.3013 0.1286 0.1981 +v 0.3013 0.1286 0.2063 +v 0.2933 0.1290 0.2042 +v 0.2933 0.1298 0.2046 +v 0.2933 0.1298 0.1998 +v 0.2933 0.1290 0.2001 +v 0.3215 0.1311 0.2001 +v 0.3215 0.1302 0.2014 +v 0.3215 0.1302 0.2030 +v 0.3215 0.1311 0.2044 +v 0.3730 0.1315 0.2006 +v 0.3223 0.1312 0.2001 +v 0.3730 0.1308 0.2016 +v 0.3223 0.1303 0.2014 +v 0.3730 0.1308 0.2029 +v 0.3223 0.1303 0.2030 +v 0.3730 0.1315 0.2039 +v 0.3223 0.1312 0.2043 +v 0.3023 0.1369 0.2022 +v 0.3023 0.1286 0.2022 +v 0.3734 0.1327 0.2006 +v 0.3734 0.1336 0.2009 +v 0.3734 0.1327 0.2022 +v 0.3734 0.1342 0.2017 +v 0.3734 0.1342 0.2027 +v 0.3734 0.1336 0.2035 +v 0.3734 0.1327 0.2038 +v 0.3734 0.1318 0.2035 +v 0.3734 0.1312 0.2027 +v 0.3734 0.1312 0.2017 +v 0.3734 0.1318 0.2009 +v 0.3799 0.1594 0.1645 +v 0.3784 0.1502 0.1645 +v 0.3784 0.1502 0.1868 +v 0.3799 0.1594 0.1868 +v 0.3842 0.1677 0.1645 +v 0.3842 0.1677 0.1868 +v 0.3908 0.1744 0.1645 +v 0.3908 0.1744 0.1868 +v 0.3991 0.1786 0.1645 +v 0.3991 0.1786 0.1868 +v 0.4084 0.1801 0.1645 +v 0.4084 0.1801 0.1868 +v 0.4176 0.1786 0.1835 +v 0.4176 0.1786 0.1645 +v 0.4259 0.1744 0.1806 +v 0.4259 0.1744 0.1645 +v 0.4326 0.1677 0.1782 +v 0.4326 0.1677 0.1645 +v 0.4145 0.1582 0.1859 +v 0.4145 0.1582 0.1645 +v 0.4145 0.1677 0.1645 +v 0.4145 0.1677 0.1859 +v 0.4383 0.1502 0.1775 +v 0.4383 0.1502 0.1645 +v 0.4368 0.1582 0.1645 +v 0.4368 0.1582 0.1780 +v 0.3799 0.1594 0.1500 +v 0.3784 0.1502 0.1500 +v 0.3842 0.1677 0.1500 +v 0.3908 0.1744 0.1500 +v 0.3991 0.1786 0.1500 +v 0.4084 0.1801 0.1500 +v 0.4176 0.1786 0.1500 +v 0.4259 0.1744 0.1500 +v 0.4326 0.1677 0.1500 +v 0.4368 0.1582 0.1500 +v 0.4383 0.1502 0.1500 +v 0.4255 0.1677 0.1645 +v 0.4255 0.1582 0.1645 +v 0.4255 0.1582 0.1819 +v 0.4255 0.1677 0.1819 +v 0.4259 0.1731 0.1819 +v 0.4173 0.1774 0.1849 +v 0.4314 0.1677 0.1799 +v 0.3799 0.1409 0.1645 +v 0.3799 0.1409 0.1868 +v 0.3842 0.1326 0.1645 +v 0.3842 0.1326 0.1868 +v 0.3908 0.1260 0.1645 +v 0.3908 0.1260 0.1868 +v 0.3991 0.1217 0.1645 +v 0.3991 0.1217 0.1868 +v 0.4084 0.1202 0.1645 +v 0.4084 0.1202 0.1868 +v 0.4176 0.1217 0.1835 +v 0.4176 0.1217 0.1645 +v 0.4259 0.1260 0.1806 +v 0.4259 0.1260 0.1645 +v 0.4326 0.1326 0.1782 +v 0.4326 0.1326 0.1645 +v 0.4145 0.1421 0.1859 +v 0.4145 0.1326 0.1859 +v 0.4145 0.1326 0.1645 +v 0.4145 0.1421 0.1645 +v 0.4368 0.1421 0.1780 +v 0.4368 0.1421 0.1645 +v 0.3799 0.1409 0.1500 +v 0.3842 0.1326 0.1500 +v 0.3908 0.1260 0.1500 +v 0.3991 0.1217 0.1500 +v 0.4084 0.1202 0.1500 +v 0.4176 0.1217 0.1500 +v 0.4259 0.1260 0.1500 +v 0.4326 0.1326 0.1500 +v 0.4368 0.1421 0.1500 +v 0.4255 0.1326 0.1645 +v 0.4255 0.1421 0.1819 +v 0.4255 0.1421 0.1645 +v 0.4255 0.1326 0.1819 +v 0.4173 0.1229 0.1849 +v 0.4259 0.1272 0.1819 +v 0.4314 0.1326 0.1799 +v 0.3797 0.1502 0.1881 +v 0.3908 0.1502 0.1881 +v 0.3809 0.1586 0.1881 +v 0.4255 0.1502 0.1819 +v 0.4145 0.1502 0.1859 +v 0.4084 0.1215 0.1881 +v 0.4084 0.1502 0.1881 +v 0.3991 0.1230 0.1881 +v 0.3991 0.1502 0.1881 +v 0.3908 0.1272 0.1881 +v 0.4084 0.1788 0.1881 +v 0.3991 0.1773 0.1881 +v 0.3908 0.1731 0.1881 +v 0.3809 0.1417 0.1881 +v 0.3846 0.1665 0.1881 +v 0.3846 0.1338 0.1881 +v 0.4083 0.1502 0.1500 +v 0.4252 0.1630 0.1786 +v 0.4281 0.1630 0.1777 +v 0.4281 0.1666 0.1777 +v 0.4252 0.1666 0.1786 +v 0.4281 0.1630 0.1699 +v 0.4252 0.1630 0.1689 +v 0.4252 0.1666 0.1689 +v 0.4281 0.1666 0.1699 +v 0.4239 0.1630 0.1693 +v 0.4239 0.1666 0.1693 +v 0.4239 0.1630 0.1782 +v 0.4239 0.1666 0.1782 +v 0.4298 0.1666 0.1750 +v 0.4292 0.1647 0.1761 +v 0.4301 0.1657 0.1747 +v 0.4298 0.1666 0.1726 +v 0.4301 0.1657 0.1729 +v 0.4292 0.1647 0.1715 +v 0.4288 0.1630 0.1709 +v 0.4288 0.1630 0.1766 +v 0.4313 0.1647 0.1715 +v 0.4313 0.1630 0.1710 +v 0.4313 0.1657 0.1729 +v 0.4313 0.1657 0.1747 +v 0.4313 0.1647 0.1761 +v 0.4313 0.1630 0.1766 +v 0.4278 0.1671 0.1773 +v 0.4252 0.1671 0.1782 +v 0.4294 0.1671 0.1751 +v 0.4294 0.1671 0.1724 +v 0.4278 0.1671 0.1702 +v 0.4252 0.1671 0.1694 +v 0.4239 0.1671 0.1696 +v 0.4239 0.1671 0.1778 +v 0.4159 0.1670 0.1758 +v 0.4159 0.1670 0.1717 +v 0.4159 0.1663 0.1713 +v 0.4159 0.1663 0.1761 +v 0.4159 0.1630 0.1713 +v 0.4159 0.1630 0.1761 +v 0.4441 0.1646 0.1716 +v 0.4441 0.1630 0.1711 +v 0.4441 0.1656 0.1730 +v 0.4441 0.1656 0.1746 +v 0.4441 0.1646 0.1760 +v 0.4441 0.1630 0.1765 +v 0.4956 0.1642 0.1721 +v 0.4956 0.1630 0.1717 +v 0.4449 0.1630 0.1712 +v 0.4449 0.1645 0.1717 +v 0.4956 0.1650 0.1731 +v 0.4449 0.1655 0.1730 +v 0.4956 0.1650 0.1744 +v 0.4449 0.1655 0.1746 +v 0.4956 0.1642 0.1754 +v 0.4449 0.1645 0.1759 +v 0.4956 0.1630 0.1758 +v 0.4449 0.1630 0.1764 +v 0.4252 0.1594 0.1786 +v 0.4281 0.1594 0.1777 +v 0.4281 0.1594 0.1699 +v 0.4252 0.1594 0.1689 +v 0.4239 0.1594 0.1693 +v 0.4239 0.1594 0.1782 +v 0.4298 0.1594 0.1750 +v 0.4301 0.1603 0.1747 +v 0.4292 0.1613 0.1761 +v 0.4298 0.1594 0.1726 +v 0.4301 0.1603 0.1729 +v 0.4292 0.1613 0.1715 +v 0.4313 0.1613 0.1715 +v 0.4313 0.1603 0.1729 +v 0.4313 0.1603 0.1747 +v 0.4313 0.1613 0.1761 +v 0.4252 0.1589 0.1782 +v 0.4278 0.1589 0.1773 +v 0.4294 0.1589 0.1751 +v 0.4294 0.1589 0.1724 +v 0.4278 0.1589 0.1702 +v 0.4252 0.1589 0.1694 +v 0.4239 0.1589 0.1696 +v 0.4239 0.1589 0.1778 +v 0.4159 0.1593 0.1758 +v 0.4159 0.1601 0.1761 +v 0.4159 0.1601 0.1713 +v 0.4159 0.1593 0.1717 +v 0.4441 0.1614 0.1716 +v 0.4441 0.1605 0.1730 +v 0.4441 0.1605 0.1746 +v 0.4441 0.1614 0.1760 +v 0.4956 0.1618 0.1721 +v 0.4449 0.1615 0.1717 +v 0.4956 0.1610 0.1731 +v 0.4449 0.1606 0.1730 +v 0.4956 0.1610 0.1744 +v 0.4449 0.1606 0.1746 +v 0.4956 0.1618 0.1754 +v 0.4449 0.1615 0.1759 +v 0.4249 0.1671 0.1738 +v 0.4249 0.1589 0.1738 +v 0.4960 0.1630 0.1722 +v 0.4960 0.1639 0.1725 +v 0.4960 0.1630 0.1738 +v 0.4960 0.1645 0.1733 +v 0.4960 0.1645 0.1743 +v 0.4960 0.1639 0.1751 +v 0.4960 0.1630 0.1754 +v 0.4960 0.1621 0.1751 +v 0.4960 0.1615 0.1743 +v 0.4960 0.1615 0.1733 +v 0.4960 0.1621 0.1725 +v 0.4252 0.1373 0.1786 +v 0.4281 0.1373 0.1777 +v 0.4281 0.1409 0.1777 +v 0.4252 0.1409 0.1786 +v 0.4281 0.1373 0.1699 +v 0.4252 0.1373 0.1689 +v 0.4252 0.1409 0.1689 +v 0.4281 0.1409 0.1699 +v 0.4239 0.1373 0.1693 +v 0.4239 0.1409 0.1693 +v 0.4239 0.1373 0.1782 +v 0.4239 0.1409 0.1782 +v 0.4298 0.1409 0.1750 +v 0.4292 0.1390 0.1761 +v 0.4301 0.1400 0.1747 +v 0.4298 0.1409 0.1726 +v 0.4301 0.1400 0.1729 +v 0.4292 0.1390 0.1715 +v 0.4288 0.1373 0.1709 +v 0.4288 0.1373 0.1766 +v 0.4313 0.1390 0.1715 +v 0.4313 0.1373 0.1710 +v 0.4313 0.1400 0.1729 +v 0.4313 0.1400 0.1747 +v 0.4313 0.1390 0.1761 +v 0.4313 0.1373 0.1766 +v 0.4278 0.1415 0.1773 +v 0.4252 0.1415 0.1782 +v 0.4294 0.1415 0.1751 +v 0.4294 0.1415 0.1724 +v 0.4278 0.1415 0.1702 +v 0.4252 0.1415 0.1694 +v 0.4239 0.1415 0.1696 +v 0.4239 0.1415 0.1778 +v 0.4159 0.1414 0.1758 +v 0.4159 0.1414 0.1717 +v 0.4159 0.1406 0.1713 +v 0.4159 0.1406 0.1761 +v 0.4159 0.1373 0.1713 +v 0.4159 0.1373 0.1761 +v 0.4441 0.1389 0.1716 +v 0.4441 0.1373 0.1711 +v 0.4441 0.1399 0.1730 +v 0.4441 0.1399 0.1746 +v 0.4441 0.1389 0.1760 +v 0.4441 0.1373 0.1765 +v 0.4956 0.1385 0.1721 +v 0.4956 0.1373 0.1717 +v 0.4449 0.1373 0.1712 +v 0.4449 0.1388 0.1717 +v 0.4956 0.1393 0.1731 +v 0.4449 0.1398 0.1730 +v 0.4956 0.1393 0.1744 +v 0.4449 0.1398 0.1746 +v 0.4956 0.1385 0.1754 +v 0.4449 0.1388 0.1759 +v 0.4956 0.1373 0.1758 +v 0.4449 0.1373 0.1764 +v 0.4252 0.1338 0.1786 +v 0.4281 0.1338 0.1777 +v 0.4281 0.1338 0.1699 +v 0.4252 0.1338 0.1689 +v 0.4239 0.1338 0.1693 +v 0.4239 0.1338 0.1782 +v 0.4298 0.1338 0.1750 +v 0.4301 0.1346 0.1747 +v 0.4292 0.1356 0.1761 +v 0.4298 0.1338 0.1726 +v 0.4301 0.1346 0.1729 +v 0.4292 0.1356 0.1715 +v 0.4313 0.1357 0.1715 +v 0.4313 0.1346 0.1729 +v 0.4313 0.1346 0.1747 +v 0.4313 0.1357 0.1761 +v 0.4252 0.1332 0.1782 +v 0.4278 0.1332 0.1773 +v 0.4294 0.1332 0.1751 +v 0.4294 0.1332 0.1724 +v 0.4278 0.1332 0.1702 +v 0.4252 0.1332 0.1694 +v 0.4239 0.1332 0.1696 +v 0.4239 0.1332 0.1778 +v 0.4159 0.1336 0.1758 +v 0.4159 0.1344 0.1761 +v 0.4159 0.1344 0.1713 +v 0.4159 0.1336 0.1717 +v 0.4441 0.1357 0.1716 +v 0.4441 0.1348 0.1730 +v 0.4441 0.1348 0.1746 +v 0.4441 0.1357 0.1760 +v 0.4956 0.1361 0.1721 +v 0.4449 0.1358 0.1717 +v 0.4956 0.1354 0.1731 +v 0.4449 0.1349 0.1730 +v 0.4956 0.1354 0.1744 +v 0.4449 0.1349 0.1746 +v 0.4956 0.1361 0.1754 +v 0.4449 0.1358 0.1759 +v 0.4249 0.1415 0.1738 +v 0.4249 0.1332 0.1738 +v 0.4960 0.1373 0.1722 +v 0.4960 0.1383 0.1725 +v 0.4960 0.1373 0.1738 +v 0.4960 0.1388 0.1733 +v 0.4960 0.1388 0.1743 +v 0.4960 0.1383 0.1751 +v 0.4960 0.1373 0.1754 +v 0.4960 0.1364 0.1751 +v 0.4960 0.1358 0.1743 +v 0.4960 0.1358 0.1733 +v 0.4960 0.1364 0.1725 +v -0.1122 -0.1560 0.1645 +v -0.1107 -0.1468 0.1645 +v -0.1107 -0.1468 0.1868 +v -0.1122 -0.1560 0.1868 +v -0.1165 -0.1643 0.1645 +v -0.1165 -0.1643 0.1868 +v -0.1231 -0.1710 0.1645 +v -0.1231 -0.1710 0.1868 +v -0.1314 -0.1752 0.1645 +v -0.1314 -0.1752 0.1868 +v -0.1407 -0.1767 0.1645 +v -0.1407 -0.1767 0.1868 +v -0.1499 -0.1752 0.1835 +v -0.1499 -0.1752 0.1645 +v -0.1583 -0.1710 0.1806 +v -0.1583 -0.1710 0.1645 +v -0.1649 -0.1643 0.1782 +v -0.1649 -0.1643 0.1645 +v -0.1468 -0.1548 0.1859 +v -0.1468 -0.1548 0.1645 +v -0.1468 -0.1643 0.1645 +v -0.1468 -0.1643 0.1859 +v -0.1706 -0.1468 0.1775 +v -0.1706 -0.1468 0.1645 +v -0.1691 -0.1548 0.1645 +v -0.1691 -0.1548 0.1780 +v -0.1122 -0.1560 0.1500 +v -0.1107 -0.1468 0.1500 +v -0.1165 -0.1643 0.1500 +v -0.1231 -0.1710 0.1500 +v -0.1314 -0.1752 0.1500 +v -0.1407 -0.1767 0.1500 +v -0.1499 -0.1752 0.1500 +v -0.1583 -0.1710 0.1500 +v -0.1649 -0.1643 0.1500 +v -0.1691 -0.1548 0.1500 +v -0.1706 -0.1468 0.1500 +v -0.1579 -0.1643 0.1645 +v -0.1579 -0.1548 0.1645 +v -0.1579 -0.1548 0.1819 +v -0.1579 -0.1643 0.1819 +v -0.1582 -0.1697 0.1819 +v -0.1496 -0.1740 0.1849 +v -0.1637 -0.1643 0.1799 +v -0.1122 -0.1375 0.1645 +v -0.1122 -0.1375 0.1868 +v -0.1165 -0.1292 0.1645 +v -0.1165 -0.1292 0.1868 +v -0.1231 -0.1226 0.1645 +v -0.1231 -0.1226 0.1868 +v -0.1314 -0.1183 0.1645 +v -0.1314 -0.1183 0.1868 +v -0.1407 -0.1168 0.1645 +v -0.1407 -0.1168 0.1868 +v -0.1499 -0.1183 0.1835 +v -0.1499 -0.1183 0.1645 +v -0.1583 -0.1226 0.1806 +v -0.1583 -0.1226 0.1645 +v -0.1649 -0.1292 0.1782 +v -0.1649 -0.1292 0.1645 +v -0.1468 -0.1387 0.1859 +v -0.1468 -0.1292 0.1859 +v -0.1468 -0.1292 0.1645 +v -0.1468 -0.1387 0.1645 +v -0.1691 -0.1387 0.1780 +v -0.1691 -0.1387 0.1645 +v -0.1122 -0.1375 0.1500 +v -0.1165 -0.1292 0.1500 +v -0.1231 -0.1226 0.1500 +v -0.1314 -0.1183 0.1500 +v -0.1407 -0.1168 0.1500 +v -0.1499 -0.1183 0.1500 +v -0.1583 -0.1226 0.1500 +v -0.1649 -0.1292 0.1500 +v -0.1691 -0.1387 0.1500 +v -0.1579 -0.1292 0.1645 +v -0.1579 -0.1387 0.1819 +v -0.1579 -0.1387 0.1645 +v -0.1579 -0.1292 0.1819 +v -0.1496 -0.1195 0.1849 +v -0.1582 -0.1238 0.1819 +v -0.1637 -0.1292 0.1799 +v -0.1120 -0.1468 0.1881 +v -0.1231 -0.1468 0.1881 +v -0.1132 -0.1552 0.1881 +v -0.1579 -0.1468 0.1819 +v -0.1468 -0.1468 0.1859 +v -0.1407 -0.1468 0.1881 +v -0.1407 -0.1181 0.1881 +v -0.1314 -0.1196 0.1881 +v -0.1314 -0.1468 0.1881 +v -0.1231 -0.1238 0.1881 +v -0.1407 -0.1754 0.1881 +v -0.1314 -0.1739 0.1881 +v -0.1231 -0.1697 0.1881 +v -0.1132 -0.1383 0.1881 +v -0.1169 -0.1631 0.1881 +v -0.1169 -0.1304 0.1881 +v -0.1406 -0.1468 0.1500 +v -0.1575 -0.1596 0.1786 +v -0.1604 -0.1596 0.1777 +v -0.1604 -0.1632 0.1777 +v -0.1575 -0.1632 0.1786 +v -0.1604 -0.1596 0.1699 +v -0.1575 -0.1596 0.1689 +v -0.1575 -0.1632 0.1689 +v -0.1604 -0.1632 0.1699 +v -0.1562 -0.1596 0.1693 +v -0.1562 -0.1632 0.1693 +v -0.1562 -0.1596 0.1782 +v -0.1562 -0.1632 0.1782 +v -0.1621 -0.1632 0.1750 +v -0.1615 -0.1613 0.1761 +v -0.1624 -0.1623 0.1747 +v -0.1621 -0.1632 0.1726 +v -0.1624 -0.1623 0.1729 +v -0.1615 -0.1613 0.1715 +v -0.1611 -0.1596 0.1709 +v -0.1611 -0.1596 0.1766 +v -0.1637 -0.1613 0.1715 +v -0.1637 -0.1596 0.1710 +v -0.1637 -0.1623 0.1729 +v -0.1637 -0.1623 0.1747 +v -0.1637 -0.1613 0.1761 +v -0.1637 -0.1596 0.1766 +v -0.1601 -0.1637 0.1773 +v -0.1575 -0.1637 0.1782 +v -0.1617 -0.1637 0.1751 +v -0.1617 -0.1637 0.1724 +v -0.1601 -0.1637 0.1702 +v -0.1575 -0.1637 0.1694 +v -0.1562 -0.1637 0.1696 +v -0.1562 -0.1637 0.1778 +v -0.1482 -0.1636 0.1758 +v -0.1482 -0.1636 0.1717 +v -0.1482 -0.1629 0.1713 +v -0.1482 -0.1629 0.1761 +v -0.1482 -0.1596 0.1713 +v -0.1482 -0.1596 0.1761 +v -0.1764 -0.1612 0.1716 +v -0.1764 -0.1596 0.1711 +v -0.1764 -0.1622 0.1730 +v -0.1764 -0.1622 0.1746 +v -0.1764 -0.1612 0.1760 +v -0.1764 -0.1596 0.1765 +v -0.2279 -0.1608 0.1721 +v -0.2279 -0.1596 0.1717 +v -0.1772 -0.1596 0.1712 +v -0.1772 -0.1611 0.1717 +v -0.2279 -0.1616 0.1731 +v -0.1772 -0.1621 0.1730 +v -0.2279 -0.1616 0.1744 +v -0.1772 -0.1621 0.1746 +v -0.2279 -0.1608 0.1754 +v -0.1772 -0.1611 0.1759 +v -0.2279 -0.1596 0.1758 +v -0.1772 -0.1596 0.1764 +v -0.1575 -0.1560 0.1786 +v -0.1604 -0.1560 0.1777 +v -0.1604 -0.1560 0.1699 +v -0.1575 -0.1560 0.1689 +v -0.1562 -0.1560 0.1693 +v -0.1562 -0.1560 0.1782 +v -0.1621 -0.1560 0.1750 +v -0.1624 -0.1569 0.1747 +v -0.1615 -0.1579 0.1761 +v -0.1621 -0.1560 0.1726 +v -0.1624 -0.1569 0.1729 +v -0.1615 -0.1579 0.1715 +v -0.1637 -0.1579 0.1715 +v -0.1637 -0.1569 0.1729 +v -0.1637 -0.1569 0.1747 +v -0.1637 -0.1579 0.1761 +v -0.1575 -0.1555 0.1782 +v -0.1601 -0.1555 0.1773 +v -0.1617 -0.1555 0.1751 +v -0.1617 -0.1555 0.1724 +v -0.1601 -0.1555 0.1702 +v -0.1575 -0.1555 0.1694 +v -0.1562 -0.1555 0.1696 +v -0.1562 -0.1555 0.1778 +v -0.1482 -0.1559 0.1758 +v -0.1482 -0.1567 0.1761 +v -0.1482 -0.1567 0.1713 +v -0.1482 -0.1559 0.1717 +v -0.1764 -0.1580 0.1716 +v -0.1764 -0.1571 0.1730 +v -0.1764 -0.1571 0.1746 +v -0.1764 -0.1580 0.1760 +v -0.2279 -0.1584 0.1721 +v -0.1772 -0.1581 0.1717 +v -0.2279 -0.1576 0.1731 +v -0.1772 -0.1572 0.1730 +v -0.2279 -0.1576 0.1744 +v -0.1772 -0.1572 0.1746 +v -0.2279 -0.1584 0.1754 +v -0.1772 -0.1581 0.1759 +v -0.1572 -0.1637 0.1738 +v -0.1572 -0.1555 0.1738 +v -0.2284 -0.1596 0.1722 +v -0.2284 -0.1605 0.1725 +v -0.2284 -0.1596 0.1738 +v -0.2284 -0.1611 0.1733 +v -0.2284 -0.1611 0.1743 +v -0.2284 -0.1605 0.1751 +v -0.2284 -0.1596 0.1754 +v -0.2284 -0.1587 0.1751 +v -0.2284 -0.1581 0.1743 +v -0.2284 -0.1581 0.1733 +v -0.2284 -0.1587 0.1725 +v -0.1575 -0.1339 0.1786 +v -0.1604 -0.1339 0.1777 +v -0.1604 -0.1375 0.1777 +v -0.1575 -0.1375 0.1786 +v -0.1604 -0.1339 0.1699 +v -0.1575 -0.1339 0.1689 +v -0.1575 -0.1375 0.1689 +v -0.1604 -0.1375 0.1699 +v -0.1562 -0.1339 0.1693 +v -0.1562 -0.1375 0.1693 +v -0.1562 -0.1339 0.1782 +v -0.1562 -0.1375 0.1782 +v -0.1621 -0.1375 0.1750 +v -0.1615 -0.1356 0.1761 +v -0.1624 -0.1366 0.1747 +v -0.1621 -0.1375 0.1726 +v -0.1624 -0.1366 0.1729 +v -0.1615 -0.1356 0.1715 +v -0.1611 -0.1339 0.1709 +v -0.1611 -0.1339 0.1766 +v -0.1637 -0.1356 0.1715 +v -0.1637 -0.1339 0.1710 +v -0.1637 -0.1366 0.1729 +v -0.1637 -0.1366 0.1747 +v -0.1637 -0.1356 0.1761 +v -0.1637 -0.1339 0.1766 +v -0.1601 -0.1381 0.1773 +v -0.1575 -0.1381 0.1782 +v -0.1617 -0.1381 0.1751 +v -0.1617 -0.1381 0.1724 +v -0.1601 -0.1381 0.1702 +v -0.1575 -0.1381 0.1694 +v -0.1562 -0.1381 0.1696 +v -0.1562 -0.1381 0.1778 +v -0.1482 -0.1380 0.1758 +v -0.1482 -0.1380 0.1717 +v -0.1482 -0.1372 0.1713 +v -0.1482 -0.1372 0.1761 +v -0.1482 -0.1339 0.1713 +v -0.1482 -0.1339 0.1761 +v -0.1764 -0.1355 0.1716 +v -0.1764 -0.1339 0.1711 +v -0.1764 -0.1365 0.1730 +v -0.1764 -0.1365 0.1746 +v -0.1764 -0.1355 0.1760 +v -0.1764 -0.1339 0.1765 +v -0.2279 -0.1351 0.1721 +v -0.2279 -0.1339 0.1717 +v -0.1772 -0.1339 0.1712 +v -0.1772 -0.1354 0.1717 +v -0.2279 -0.1359 0.1731 +v -0.1772 -0.1364 0.1730 +v -0.2279 -0.1359 0.1744 +v -0.1772 -0.1364 0.1746 +v -0.2279 -0.1351 0.1754 +v -0.1772 -0.1354 0.1759 +v -0.2279 -0.1339 0.1758 +v -0.1772 -0.1339 0.1764 +v -0.1575 -0.1304 0.1786 +v -0.1604 -0.1304 0.1777 +v -0.1604 -0.1304 0.1699 +v -0.1575 -0.1304 0.1689 +v -0.1562 -0.1304 0.1693 +v -0.1562 -0.1304 0.1782 +v -0.1621 -0.1304 0.1750 +v -0.1624 -0.1312 0.1747 +v -0.1615 -0.1322 0.1761 +v -0.1621 -0.1304 0.1726 +v -0.1624 -0.1312 0.1729 +v -0.1615 -0.1322 0.1715 +v -0.1637 -0.1323 0.1715 +v -0.1637 -0.1312 0.1729 +v -0.1637 -0.1312 0.1747 +v -0.1637 -0.1323 0.1761 +v -0.1575 -0.1298 0.1782 +v -0.1601 -0.1298 0.1773 +v -0.1617 -0.1298 0.1751 +v -0.1617 -0.1298 0.1724 +v -0.1601 -0.1298 0.1702 +v -0.1575 -0.1298 0.1694 +v -0.1562 -0.1298 0.1696 +v -0.1562 -0.1298 0.1778 +v -0.1482 -0.1302 0.1758 +v -0.1482 -0.1310 0.1761 +v -0.1482 -0.1310 0.1713 +v -0.1482 -0.1302 0.1717 +v -0.1764 -0.1323 0.1716 +v -0.1764 -0.1314 0.1730 +v -0.1764 -0.1314 0.1746 +v -0.1764 -0.1323 0.1760 +v -0.2279 -0.1327 0.1721 +v -0.1772 -0.1324 0.1717 +v -0.2279 -0.1320 0.1731 +v -0.1772 -0.1315 0.1730 +v -0.2279 -0.1320 0.1744 +v -0.1772 -0.1315 0.1746 +v -0.2279 -0.1327 0.1754 +v -0.1772 -0.1324 0.1759 +v -0.1572 -0.1381 0.1738 +v -0.1572 -0.1298 0.1738 +v -0.2284 -0.1339 0.1722 +v -0.2284 -0.1348 0.1725 +v -0.2284 -0.1339 0.1738 +v -0.2284 -0.1354 0.1733 +v -0.2284 -0.1354 0.1743 +v -0.2284 -0.1348 0.1751 +v -0.2284 -0.1339 0.1754 +v -0.2284 -0.1330 0.1751 +v -0.2284 -0.1324 0.1743 +v -0.2284 -0.1324 0.1733 +v -0.2284 -0.1330 0.1725 +v 0.0132 -0.1607 0.1929 +v 0.0147 -0.1515 0.1929 +v 0.0147 -0.1515 0.2153 +v 0.0132 -0.1607 0.2153 +v 0.0090 -0.1691 0.1929 +v 0.0090 -0.1691 0.2153 +v 0.0024 -0.1757 0.1929 +v 0.0024 -0.1757 0.2153 +v -0.0060 -0.1799 0.1929 +v -0.0060 -0.1799 0.2153 +v -0.0152 -0.1814 0.1929 +v -0.0152 -0.1814 0.2153 +v -0.0245 -0.1799 0.2119 +v -0.0245 -0.1799 0.1929 +v -0.0328 -0.1757 0.2090 +v -0.0328 -0.1757 0.1929 +v -0.0394 -0.1691 0.2067 +v -0.0394 -0.1691 0.1929 +v -0.0214 -0.1595 0.2143 +v -0.0214 -0.1595 0.1929 +v -0.0214 -0.1691 0.1929 +v -0.0214 -0.1691 0.2143 +v -0.0452 -0.1515 0.2059 +v -0.0452 -0.1515 0.1929 +v -0.0437 -0.1595 0.1929 +v -0.0437 -0.1595 0.2065 +v 0.0132 -0.1607 0.1772 +v 0.0147 -0.1515 0.1772 +v 0.0090 -0.1691 0.1772 +v 0.0024 -0.1757 0.1772 +v -0.0060 -0.1799 0.1772 +v -0.0152 -0.1814 0.1772 +v -0.0245 -0.1799 0.1772 +v -0.0328 -0.1757 0.1772 +v -0.0394 -0.1691 0.1772 +v -0.0437 -0.1595 0.1772 +v -0.0452 -0.1515 0.1772 +v -0.0324 -0.1691 0.1929 +v -0.0324 -0.1595 0.1929 +v -0.0324 -0.1595 0.2104 +v -0.0324 -0.1691 0.2104 +v -0.0327 -0.1744 0.2103 +v -0.0241 -0.1787 0.2134 +v -0.0382 -0.1691 0.2084 +v 0.0132 -0.1422 0.1929 +v 0.0132 -0.1422 0.2153 +v 0.0090 -0.1339 0.1929 +v 0.0090 -0.1339 0.2153 +v 0.0024 -0.1273 0.1929 +v 0.0024 -0.1273 0.2153 +v -0.0060 -0.1230 0.1929 +v -0.0060 -0.1230 0.2153 +v -0.0152 -0.1216 0.1929 +v -0.0152 -0.1216 0.2153 +v -0.0245 -0.1230 0.2119 +v -0.0245 -0.1230 0.1929 +v -0.0328 -0.1273 0.2090 +v -0.0328 -0.1273 0.1929 +v -0.0394 -0.1339 0.2067 +v -0.0394 -0.1339 0.1929 +v -0.0214 -0.1435 0.2143 +v -0.0214 -0.1339 0.2143 +v -0.0214 -0.1339 0.1929 +v -0.0214 -0.1435 0.1929 +v -0.0437 -0.1435 0.2065 +v -0.0437 -0.1435 0.1929 +v 0.0132 -0.1422 0.1772 +v 0.0090 -0.1339 0.1772 +v 0.0024 -0.1273 0.1772 +v -0.0060 -0.1230 0.1772 +v -0.0152 -0.1216 0.1772 +v -0.0245 -0.1230 0.1772 +v -0.0328 -0.1273 0.1772 +v -0.0394 -0.1339 0.1772 +v -0.0437 -0.1435 0.1772 +v -0.0324 -0.1339 0.1929 +v -0.0324 -0.1435 0.2104 +v -0.0324 -0.1435 0.1929 +v -0.0324 -0.1339 0.2104 +v -0.0241 -0.1243 0.2134 +v -0.0327 -0.1286 0.2103 +v -0.0382 -0.1339 0.2084 +v 0.0134 -0.1515 0.2165 +v 0.0024 -0.1515 0.2165 +v 0.0122 -0.1599 0.2165 +v -0.0324 -0.1515 0.2104 +v -0.0214 -0.1515 0.2143 +v -0.0152 -0.1515 0.2165 +v -0.0152 -0.1228 0.2165 +v -0.0060 -0.1243 0.2165 +v -0.0060 -0.1515 0.2165 +v 0.0024 -0.1286 0.2165 +v -0.0152 -0.1801 0.2165 +v -0.0060 -0.1787 0.2165 +v 0.0024 -0.1744 0.2165 +v 0.0122 -0.1431 0.2165 +v 0.0085 -0.1679 0.2165 +v 0.0085 -0.1351 0.2165 +v -0.0151 -0.1515 0.1772 +v -0.0321 -0.1643 0.2071 +v -0.0349 -0.1643 0.2061 +v -0.0349 -0.1679 0.2061 +v -0.0321 -0.1679 0.2071 +v -0.0349 -0.1643 0.1983 +v -0.0321 -0.1643 0.1974 +v -0.0321 -0.1679 0.1974 +v -0.0349 -0.1679 0.1983 +v -0.0307 -0.1643 0.1977 +v -0.0307 -0.1679 0.1977 +v -0.0307 -0.1643 0.2067 +v -0.0307 -0.1679 0.2067 +v -0.0367 -0.1679 0.2034 +v -0.0361 -0.1660 0.2045 +v -0.0369 -0.1670 0.2031 +v -0.0367 -0.1679 0.2011 +v -0.0369 -0.1670 0.2013 +v -0.0361 -0.1660 0.1999 +v -0.0357 -0.1643 0.1994 +v -0.0357 -0.1643 0.2051 +v -0.0382 -0.1660 0.1999 +v -0.0382 -0.1643 0.1994 +v -0.0382 -0.1670 0.2013 +v -0.0382 -0.1670 0.2031 +v -0.0382 -0.1660 0.2045 +v -0.0382 -0.1643 0.2050 +v -0.0347 -0.1685 0.2058 +v -0.0321 -0.1685 0.2066 +v -0.0363 -0.1685 0.2036 +v -0.0363 -0.1685 0.2009 +v -0.0347 -0.1685 0.1987 +v -0.0321 -0.1685 0.1978 +v -0.0307 -0.1685 0.1981 +v -0.0307 -0.1685 0.2063 +v -0.0227 -0.1684 0.2042 +v -0.0227 -0.1684 0.2001 +v -0.0227 -0.1676 0.1998 +v -0.0227 -0.1676 0.2046 +v -0.0227 -0.1643 0.1998 +v -0.0227 -0.1643 0.2046 +v -0.0510 -0.1659 0.2001 +v -0.0510 -0.1643 0.1995 +v -0.0510 -0.1669 0.2014 +v -0.0510 -0.1669 0.2030 +v -0.0510 -0.1659 0.2044 +v -0.0510 -0.1643 0.2049 +v -0.1024 -0.1655 0.2006 +v -0.1024 -0.1643 0.2002 +v -0.0518 -0.1643 0.1997 +v -0.0518 -0.1658 0.2001 +v -0.1024 -0.1663 0.2016 +v -0.0518 -0.1668 0.2014 +v -0.1024 -0.1663 0.2029 +v -0.0518 -0.1668 0.2030 +v -0.1024 -0.1655 0.2039 +v -0.0518 -0.1658 0.2043 +v -0.1024 -0.1643 0.2043 +v -0.0518 -0.1643 0.2048 +v -0.0321 -0.1608 0.2071 +v -0.0349 -0.1608 0.2061 +v -0.0349 -0.1608 0.1983 +v -0.0321 -0.1608 0.1974 +v -0.0307 -0.1608 0.1977 +v -0.0307 -0.1608 0.2067 +v -0.0367 -0.1608 0.2034 +v -0.0369 -0.1616 0.2031 +v -0.0361 -0.1626 0.2045 +v -0.0367 -0.1608 0.2011 +v -0.0369 -0.1616 0.2013 +v -0.0361 -0.1626 0.1999 +v -0.0382 -0.1627 0.1999 +v -0.0382 -0.1616 0.2013 +v -0.0382 -0.1616 0.2031 +v -0.0382 -0.1627 0.2045 +v -0.0321 -0.1602 0.2066 +v -0.0347 -0.1602 0.2058 +v -0.0363 -0.1602 0.2036 +v -0.0363 -0.1602 0.2009 +v -0.0347 -0.1602 0.1987 +v -0.0321 -0.1602 0.1978 +v -0.0307 -0.1602 0.1981 +v -0.0307 -0.1602 0.2063 +v -0.0227 -0.1607 0.2042 +v -0.0227 -0.1614 0.2046 +v -0.0227 -0.1614 0.1998 +v -0.0227 -0.1607 0.2001 +v -0.0510 -0.1628 0.2001 +v -0.0510 -0.1618 0.2014 +v -0.0510 -0.1618 0.2030 +v -0.0510 -0.1628 0.2044 +v -0.1024 -0.1631 0.2006 +v -0.0518 -0.1628 0.2001 +v -0.1024 -0.1624 0.2016 +v -0.0518 -0.1619 0.2014 +v -0.1024 -0.1624 0.2029 +v -0.0518 -0.1619 0.2030 +v -0.1024 -0.1631 0.2039 +v -0.0518 -0.1628 0.2043 +v -0.0317 -0.1685 0.2022 +v -0.0317 -0.1602 0.2022 +v -0.1029 -0.1643 0.2006 +v -0.1029 -0.1653 0.2009 +v -0.1029 -0.1643 0.2022 +v -0.1029 -0.1658 0.2017 +v -0.1029 -0.1658 0.2027 +v -0.1029 -0.1653 0.2035 +v -0.1029 -0.1643 0.2038 +v -0.1029 -0.1634 0.2035 +v -0.1029 -0.1628 0.2027 +v -0.1029 -0.1628 0.2017 +v -0.1029 -0.1634 0.2009 +v -0.0321 -0.1386 0.2071 +v -0.0349 -0.1386 0.2061 +v -0.0349 -0.1422 0.2061 +v -0.0321 -0.1422 0.2071 +v -0.0349 -0.1386 0.1983 +v -0.0321 -0.1386 0.1974 +v -0.0321 -0.1422 0.1974 +v -0.0349 -0.1422 0.1983 +v -0.0307 -0.1386 0.1977 +v -0.0307 -0.1422 0.1977 +v -0.0307 -0.1386 0.2067 +v -0.0307 -0.1422 0.2067 +v -0.0367 -0.1422 0.2034 +v -0.0361 -0.1403 0.2045 +v -0.0369 -0.1414 0.2031 +v -0.0367 -0.1422 0.2011 +v -0.0369 -0.1414 0.2013 +v -0.0361 -0.1403 0.1999 +v -0.0357 -0.1386 0.1994 +v -0.0357 -0.1386 0.2051 +v -0.0382 -0.1403 0.1999 +v -0.0382 -0.1386 0.1994 +v -0.0382 -0.1413 0.2013 +v -0.0382 -0.1413 0.2031 +v -0.0382 -0.1403 0.2045 +v -0.0382 -0.1386 0.2050 +v -0.0347 -0.1428 0.2058 +v -0.0321 -0.1428 0.2066 +v -0.0363 -0.1428 0.2036 +v -0.0363 -0.1428 0.2009 +v -0.0347 -0.1428 0.1987 +v -0.0321 -0.1428 0.1978 +v -0.0307 -0.1428 0.1981 +v -0.0307 -0.1428 0.2063 +v -0.0227 -0.1427 0.2042 +v -0.0227 -0.1427 0.2001 +v -0.0227 -0.1419 0.1998 +v -0.0227 -0.1419 0.2046 +v -0.0227 -0.1386 0.1998 +v -0.0227 -0.1386 0.2046 +v -0.0510 -0.1402 0.2001 +v -0.0510 -0.1386 0.1995 +v -0.0510 -0.1412 0.2014 +v -0.0510 -0.1412 0.2030 +v -0.0510 -0.1402 0.2044 +v -0.0510 -0.1386 0.2049 +v -0.1024 -0.1399 0.2006 +v -0.1024 -0.1386 0.2002 +v -0.0518 -0.1386 0.1997 +v -0.0518 -0.1402 0.2001 +v -0.1024 -0.1406 0.2016 +v -0.0518 -0.1411 0.2014 +v -0.1024 -0.1406 0.2029 +v -0.0518 -0.1411 0.2030 +v -0.1024 -0.1399 0.2039 +v -0.0518 -0.1402 0.2043 +v -0.1024 -0.1386 0.2043 +v -0.0518 -0.1386 0.2048 +v -0.0321 -0.1351 0.2071 +v -0.0349 -0.1351 0.2061 +v -0.0349 -0.1351 0.1983 +v -0.0321 -0.1351 0.1974 +v -0.0307 -0.1351 0.1977 +v -0.0307 -0.1351 0.2067 +v -0.0367 -0.1351 0.2034 +v -0.0369 -0.1359 0.2031 +v -0.0361 -0.1370 0.2045 +v -0.0367 -0.1351 0.2011 +v -0.0369 -0.1359 0.2013 +v -0.0361 -0.1370 0.1999 +v -0.0382 -0.1370 0.1999 +v -0.0382 -0.1359 0.2013 +v -0.0382 -0.1359 0.2031 +v -0.0382 -0.1370 0.2045 +v -0.0321 -0.1345 0.2066 +v -0.0347 -0.1345 0.2058 +v -0.0363 -0.1345 0.2036 +v -0.0363 -0.1345 0.2009 +v -0.0347 -0.1345 0.1987 +v -0.0321 -0.1345 0.1978 +v -0.0307 -0.1345 0.1981 +v -0.0307 -0.1345 0.2063 +v -0.0227 -0.1350 0.2042 +v -0.0227 -0.1357 0.2046 +v -0.0227 -0.1357 0.1998 +v -0.0227 -0.1350 0.2001 +v -0.0510 -0.1371 0.2001 +v -0.0510 -0.1361 0.2014 +v -0.0510 -0.1361 0.2030 +v -0.0510 -0.1371 0.2044 +v -0.1024 -0.1374 0.2006 +v -0.0518 -0.1371 0.2001 +v -0.1024 -0.1367 0.2016 +v -0.0518 -0.1362 0.2014 +v -0.1024 -0.1367 0.2029 +v -0.0518 -0.1362 0.2030 +v -0.1024 -0.1374 0.2039 +v -0.0518 -0.1371 0.2043 +v -0.0317 -0.1428 0.2022 +v -0.0317 -0.1345 0.2022 +v -0.1029 -0.1386 0.2006 +v -0.1029 -0.1396 0.2009 +v -0.1029 -0.1386 0.2022 +v -0.1029 -0.1401 0.2017 +v -0.1029 -0.1401 0.2027 +v -0.1029 -0.1396 0.2035 +v -0.1029 -0.1386 0.2038 +v -0.1029 -0.1377 0.2035 +v -0.1029 -0.1371 0.2027 +v -0.1029 -0.1371 0.2017 +v -0.1029 -0.1377 0.2009 +v 0.0132 0.1427 0.1929 +v 0.0147 0.1520 0.1929 +v 0.0147 0.1520 0.2153 +v 0.0132 0.1427 0.2153 +v 0.0090 0.1344 0.1929 +v 0.0090 0.1344 0.2153 +v 0.0024 0.1277 0.1929 +v 0.0024 0.1277 0.2153 +v -0.0060 0.1235 0.1929 +v -0.0060 0.1235 0.2153 +v -0.0152 0.1220 0.1929 +v -0.0152 0.1220 0.2153 +v -0.0245 0.1235 0.2119 +v -0.0245 0.1235 0.1929 +v -0.0328 0.1277 0.2090 +v -0.0328 0.1277 0.1929 +v -0.0394 0.1344 0.2067 +v -0.0394 0.1344 0.1929 +v -0.0214 0.1439 0.2143 +v -0.0214 0.1439 0.1929 +v -0.0214 0.1344 0.1929 +v -0.0214 0.1344 0.2143 +v -0.0452 0.1520 0.2059 +v -0.0452 0.1520 0.1929 +v -0.0437 0.1439 0.1929 +v -0.0437 0.1439 0.2065 +v 0.0132 0.1427 0.1772 +v 0.0147 0.1520 0.1772 +v 0.0090 0.1344 0.1772 +v 0.0024 0.1277 0.1772 +v -0.0060 0.1235 0.1772 +v -0.0152 0.1220 0.1772 +v -0.0245 0.1235 0.1772 +v -0.0328 0.1277 0.1772 +v -0.0394 0.1344 0.1772 +v -0.0437 0.1439 0.1772 +v -0.0452 0.1520 0.1772 +v -0.0324 0.1344 0.1929 +v -0.0324 0.1439 0.1929 +v -0.0324 0.1439 0.2104 +v -0.0324 0.1344 0.2104 +v -0.0327 0.1290 0.2103 +v -0.0241 0.1247 0.2134 +v -0.0382 0.1344 0.2084 +v 0.0132 0.1612 0.1929 +v 0.0132 0.1612 0.2153 +v 0.0090 0.1695 0.1929 +v 0.0090 0.1695 0.2153 +v 0.0024 0.1762 0.1929 +v 0.0024 0.1762 0.2153 +v -0.0060 0.1804 0.1929 +v -0.0060 0.1804 0.2153 +v -0.0152 0.1819 0.1929 +v -0.0152 0.1819 0.2153 +v -0.0245 0.1804 0.2119 +v -0.0245 0.1804 0.1929 +v -0.0328 0.1762 0.2090 +v -0.0328 0.1762 0.1929 +v -0.0394 0.1695 0.2067 +v -0.0394 0.1695 0.1929 +v -0.0214 0.1600 0.2143 +v -0.0214 0.1695 0.2143 +v -0.0214 0.1695 0.1929 +v -0.0214 0.1600 0.1929 +v -0.0437 0.1600 0.2065 +v -0.0437 0.1600 0.1929 +v 0.0132 0.1612 0.1772 +v 0.0090 0.1695 0.1772 +v 0.0024 0.1762 0.1772 +v -0.0060 0.1804 0.1772 +v -0.0152 0.1819 0.1772 +v -0.0245 0.1804 0.1772 +v -0.0328 0.1762 0.1772 +v -0.0394 0.1695 0.1772 +v -0.0437 0.1600 0.1772 +v -0.0324 0.1695 0.1929 +v -0.0324 0.1600 0.2104 +v -0.0324 0.1600 0.1929 +v -0.0324 0.1695 0.2104 +v -0.0241 0.1792 0.2134 +v -0.0327 0.1749 0.2103 +v -0.0382 0.1695 0.2084 +v 0.0134 0.1520 0.2165 +v 0.0024 0.1520 0.2165 +v 0.0122 0.1435 0.2165 +v -0.0324 0.1520 0.2104 +v -0.0214 0.1520 0.2143 +v -0.0152 0.1520 0.2165 +v -0.0152 0.1806 0.2165 +v -0.0060 0.1791 0.2165 +v -0.0060 0.1520 0.2165 +v 0.0024 0.1749 0.2165 +v -0.0152 0.1233 0.2165 +v -0.0060 0.1248 0.2165 +v 0.0024 0.1290 0.2165 +v 0.0122 0.1604 0.2165 +v 0.0085 0.1356 0.2165 +v 0.0085 0.1683 0.2165 +v -0.0151 0.1520 0.1772 +v -0.0321 0.1391 0.2071 +v -0.0349 0.1391 0.2061 +v -0.0349 0.1355 0.2061 +v -0.0321 0.1355 0.2071 +v -0.0349 0.1391 0.1983 +v -0.0321 0.1391 0.1974 +v -0.0321 0.1355 0.1974 +v -0.0349 0.1355 0.1983 +v -0.0307 0.1391 0.1977 +v -0.0307 0.1355 0.1977 +v -0.0307 0.1391 0.2067 +v -0.0307 0.1355 0.2067 +v -0.0367 0.1355 0.2034 +v -0.0361 0.1374 0.2045 +v -0.0369 0.1364 0.2031 +v -0.0367 0.1355 0.2011 +v -0.0369 0.1364 0.2013 +v -0.0361 0.1374 0.1999 +v -0.0357 0.1391 0.1994 +v -0.0357 0.1391 0.2051 +v -0.0382 0.1374 0.1999 +v -0.0382 0.1391 0.1994 +v -0.0382 0.1364 0.2013 +v -0.0382 0.1364 0.2031 +v -0.0382 0.1374 0.2045 +v -0.0382 0.1391 0.2050 +v -0.0347 0.1350 0.2058 +v -0.0321 0.1350 0.2066 +v -0.0363 0.1350 0.2036 +v -0.0363 0.1350 0.2009 +v -0.0347 0.1350 0.1987 +v -0.0321 0.1350 0.1978 +v -0.0307 0.1350 0.1981 +v -0.0307 0.1350 0.2063 +v -0.0227 0.1351 0.2042 +v -0.0227 0.1351 0.2001 +v -0.0227 0.1359 0.1998 +v -0.0227 0.1359 0.2046 +v -0.0227 0.1391 0.1998 +v -0.0227 0.1391 0.2046 +v -0.0510 0.1375 0.2001 +v -0.0510 0.1391 0.1995 +v -0.0510 0.1366 0.2014 +v -0.0510 0.1366 0.2030 +v -0.0510 0.1375 0.2044 +v -0.0510 0.1391 0.2049 +v -0.1024 0.1379 0.2006 +v -0.1024 0.1391 0.2002 +v -0.0518 0.1391 0.1997 +v -0.0518 0.1376 0.2001 +v -0.1024 0.1372 0.2016 +v -0.0518 0.1367 0.2014 +v -0.1024 0.1372 0.2029 +v -0.0518 0.1367 0.2030 +v -0.1024 0.1379 0.2039 +v -0.0518 0.1376 0.2043 +v -0.1024 0.1391 0.2043 +v -0.0518 0.1391 0.2048 +v -0.0321 0.1427 0.2071 +v -0.0349 0.1427 0.2061 +v -0.0349 0.1427 0.1983 +v -0.0321 0.1427 0.1974 +v -0.0307 0.1427 0.1977 +v -0.0307 0.1427 0.2067 +v -0.0367 0.1427 0.2034 +v -0.0369 0.1418 0.2031 +v -0.0361 0.1408 0.2045 +v -0.0367 0.1427 0.2011 +v -0.0369 0.1418 0.2013 +v -0.0361 0.1408 0.1999 +v -0.0382 0.1408 0.1999 +v -0.0382 0.1418 0.2013 +v -0.0382 0.1418 0.2031 +v -0.0382 0.1408 0.2045 +v -0.0321 0.1433 0.2066 +v -0.0347 0.1433 0.2058 +v -0.0363 0.1433 0.2036 +v -0.0363 0.1433 0.2009 +v -0.0347 0.1433 0.1987 +v -0.0321 0.1433 0.1978 +v -0.0307 0.1433 0.1981 +v -0.0307 0.1433 0.2063 +v -0.0227 0.1428 0.2042 +v -0.0227 0.1420 0.2046 +v -0.0227 0.1420 0.1998 +v -0.0227 0.1428 0.2001 +v -0.0510 0.1407 0.2001 +v -0.0510 0.1417 0.2014 +v -0.0510 0.1417 0.2030 +v -0.0510 0.1407 0.2044 +v -0.1024 0.1403 0.2006 +v -0.0518 0.1406 0.2001 +v -0.1024 0.1411 0.2016 +v -0.0518 0.1416 0.2014 +v -0.1024 0.1411 0.2029 +v -0.0518 0.1416 0.2030 +v -0.1024 0.1403 0.2039 +v -0.0518 0.1406 0.2043 +v -0.0317 0.1350 0.2022 +v -0.0317 0.1433 0.2022 +v -0.1029 0.1391 0.2006 +v -0.1029 0.1382 0.2009 +v -0.1029 0.1391 0.2022 +v -0.1029 0.1376 0.2017 +v -0.1029 0.1376 0.2027 +v -0.1029 0.1382 0.2035 +v -0.1029 0.1391 0.2038 +v -0.1029 0.1400 0.2035 +v -0.1029 0.1406 0.2027 +v -0.1029 0.1406 0.2017 +v -0.1029 0.1400 0.2009 +v -0.0321 0.1648 0.2071 +v -0.0349 0.1648 0.2061 +v -0.0349 0.1612 0.2061 +v -0.0321 0.1612 0.2071 +v -0.0349 0.1648 0.1983 +v -0.0321 0.1648 0.1974 +v -0.0321 0.1612 0.1974 +v -0.0349 0.1612 0.1983 +v -0.0307 0.1648 0.1977 +v -0.0307 0.1612 0.1977 +v -0.0307 0.1648 0.2067 +v -0.0307 0.1612 0.2067 +v -0.0367 0.1612 0.2034 +v -0.0361 0.1631 0.2045 +v -0.0369 0.1621 0.2031 +v -0.0367 0.1612 0.2011 +v -0.0369 0.1621 0.2013 +v -0.0361 0.1631 0.1999 +v -0.0357 0.1648 0.1994 +v -0.0357 0.1648 0.2051 +v -0.0382 0.1631 0.1999 +v -0.0382 0.1648 0.1994 +v -0.0382 0.1621 0.2013 +v -0.0382 0.1621 0.2031 +v -0.0382 0.1631 0.2045 +v -0.0382 0.1648 0.2050 +v -0.0347 0.1607 0.2058 +v -0.0321 0.1607 0.2066 +v -0.0363 0.1607 0.2036 +v -0.0363 0.1607 0.2009 +v -0.0347 0.1607 0.1987 +v -0.0321 0.1607 0.1978 +v -0.0307 0.1607 0.1981 +v -0.0307 0.1607 0.2063 +v -0.0227 0.1608 0.2042 +v -0.0227 0.1608 0.2001 +v -0.0227 0.1615 0.1998 +v -0.0227 0.1615 0.2046 +v -0.0227 0.1648 0.1998 +v -0.0227 0.1648 0.2046 +v -0.0510 0.1632 0.2001 +v -0.0510 0.1648 0.1995 +v -0.0510 0.1622 0.2014 +v -0.0510 0.1622 0.2030 +v -0.0510 0.1632 0.2044 +v -0.0510 0.1648 0.2049 +v -0.1024 0.1636 0.2006 +v -0.1024 0.1648 0.2002 +v -0.0518 0.1648 0.1997 +v -0.0518 0.1633 0.2001 +v -0.1024 0.1628 0.2016 +v -0.0518 0.1623 0.2014 +v -0.1024 0.1628 0.2029 +v -0.0518 0.1623 0.2030 +v -0.1024 0.1636 0.2039 +v -0.0518 0.1633 0.2043 +v -0.1024 0.1648 0.2043 +v -0.0518 0.1648 0.2048 +v -0.0321 0.1684 0.2071 +v -0.0349 0.1684 0.2061 +v -0.0349 0.1684 0.1983 +v -0.0321 0.1684 0.1974 +v -0.0307 0.1684 0.1977 +v -0.0307 0.1684 0.2067 +v -0.0367 0.1684 0.2034 +v -0.0369 0.1675 0.2031 +v -0.0361 0.1665 0.2045 +v -0.0367 0.1684 0.2011 +v -0.0369 0.1675 0.2013 +v -0.0361 0.1665 0.1999 +v -0.0382 0.1665 0.1999 +v -0.0382 0.1675 0.2013 +v -0.0382 0.1675 0.2031 +v -0.0382 0.1665 0.2045 +v -0.0321 0.1689 0.2066 +v -0.0347 0.1689 0.2058 +v -0.0363 0.1689 0.2036 +v -0.0363 0.1689 0.2009 +v -0.0347 0.1689 0.1987 +v -0.0321 0.1689 0.1978 +v -0.0307 0.1689 0.1981 +v -0.0307 0.1689 0.2063 +v -0.0227 0.1685 0.2042 +v -0.0227 0.1677 0.2046 +v -0.0227 0.1677 0.1998 +v -0.0227 0.1685 0.2001 +v -0.0510 0.1664 0.2001 +v -0.0510 0.1673 0.2014 +v -0.0510 0.1673 0.2030 +v -0.0510 0.1664 0.2044 +v -0.1024 0.1660 0.2006 +v -0.0518 0.1663 0.2001 +v -0.1024 0.1668 0.2016 +v -0.0518 0.1672 0.2014 +v -0.1024 0.1668 0.2029 +v -0.0518 0.1672 0.2030 +v -0.1024 0.1660 0.2039 +v -0.0518 0.1663 0.2043 +v -0.0317 0.1607 0.2022 +v -0.0317 0.1689 0.2022 +v -0.1029 0.1648 0.2006 +v -0.1029 0.1639 0.2009 +v -0.1029 0.1648 0.2022 +v -0.1029 0.1633 0.2017 +v -0.1029 0.1633 0.2027 +v -0.1029 0.1639 0.2035 +v -0.1029 0.1648 0.2038 +v -0.1029 0.1657 0.2035 +v -0.1029 0.1663 0.2027 +v -0.1029 0.1663 0.2017 +v -0.1029 0.1657 0.2009 +v -0.1134 0.1362 0.1645 +v -0.1119 0.1454 0.1645 +v -0.1119 0.1454 0.1868 +v -0.1134 0.1362 0.1868 +v -0.1176 0.1279 0.1645 +v -0.1176 0.1279 0.1868 +v -0.1242 0.1212 0.1645 +v -0.1242 0.1212 0.1868 +v -0.1326 0.1170 0.1645 +v -0.1326 0.1170 0.1868 +v -0.1418 0.1155 0.1645 +v -0.1418 0.1155 0.1868 +v -0.1511 0.1170 0.1835 +v -0.1511 0.1170 0.1645 +v -0.1594 0.1212 0.1806 +v -0.1594 0.1212 0.1645 +v -0.1660 0.1279 0.1782 +v -0.1660 0.1279 0.1645 +v -0.1480 0.1374 0.1859 +v -0.1480 0.1374 0.1645 +v -0.1480 0.1279 0.1645 +v -0.1480 0.1279 0.1859 +v -0.1717 0.1454 0.1775 +v -0.1717 0.1454 0.1645 +v -0.1703 0.1374 0.1645 +v -0.1703 0.1374 0.1780 +v -0.1134 0.1362 0.1500 +v -0.1119 0.1454 0.1500 +v -0.1176 0.1279 0.1500 +v -0.1242 0.1212 0.1500 +v -0.1326 0.1170 0.1500 +v -0.1418 0.1155 0.1500 +v -0.1511 0.1170 0.1500 +v -0.1594 0.1212 0.1500 +v -0.1660 0.1279 0.1500 +v -0.1703 0.1374 0.1500 +v -0.1717 0.1454 0.1500 +v -0.1590 0.1279 0.1645 +v -0.1590 0.1374 0.1645 +v -0.1590 0.1374 0.1819 +v -0.1590 0.1279 0.1819 +v -0.1593 0.1225 0.1819 +v -0.1507 0.1182 0.1849 +v -0.1648 0.1279 0.1799 +v -0.1134 0.1547 0.1645 +v -0.1134 0.1547 0.1868 +v -0.1176 0.1630 0.1645 +v -0.1176 0.1630 0.1868 +v -0.1242 0.1696 0.1645 +v -0.1242 0.1696 0.1868 +v -0.1326 0.1739 0.1645 +v -0.1326 0.1739 0.1868 +v -0.1418 0.1754 0.1645 +v -0.1418 0.1754 0.1868 +v -0.1511 0.1739 0.1835 +v -0.1511 0.1739 0.1645 +v -0.1594 0.1696 0.1806 +v -0.1594 0.1696 0.1645 +v -0.1660 0.1630 0.1782 +v -0.1660 0.1630 0.1645 +v -0.1480 0.1535 0.1859 +v -0.1480 0.1630 0.1859 +v -0.1480 0.1630 0.1645 +v -0.1480 0.1535 0.1645 +v -0.1703 0.1535 0.1780 +v -0.1703 0.1535 0.1645 +v -0.1134 0.1547 0.1500 +v -0.1176 0.1630 0.1500 +v -0.1242 0.1696 0.1500 +v -0.1326 0.1739 0.1500 +v -0.1418 0.1754 0.1500 +v -0.1511 0.1739 0.1500 +v -0.1594 0.1696 0.1500 +v -0.1660 0.1630 0.1500 +v -0.1703 0.1535 0.1500 +v -0.1590 0.1630 0.1645 +v -0.1590 0.1535 0.1819 +v -0.1590 0.1535 0.1645 +v -0.1590 0.1630 0.1819 +v -0.1507 0.1727 0.1849 +v -0.1593 0.1684 0.1819 +v -0.1648 0.1630 0.1799 +v -0.1132 0.1454 0.1881 +v -0.1242 0.1454 0.1881 +v -0.1143 0.1370 0.1881 +v -0.1590 0.1454 0.1819 +v -0.1480 0.1454 0.1859 +v -0.1418 0.1454 0.1881 +v -0.1418 0.1741 0.1881 +v -0.1326 0.1726 0.1881 +v -0.1326 0.1454 0.1881 +v -0.1242 0.1684 0.1881 +v -0.1418 0.1168 0.1881 +v -0.1326 0.1183 0.1881 +v -0.1242 0.1225 0.1881 +v -0.1143 0.1539 0.1881 +v -0.1181 0.1291 0.1881 +v -0.1181 0.1618 0.1881 +v -0.1417 0.1454 0.1500 +v -0.1587 0.1326 0.1786 +v -0.1615 0.1326 0.1777 +v -0.1615 0.1290 0.1777 +v -0.1587 0.1290 0.1786 +v -0.1615 0.1326 0.1699 +v -0.1587 0.1326 0.1689 +v -0.1587 0.1290 0.1689 +v -0.1615 0.1290 0.1699 +v -0.1573 0.1326 0.1693 +v -0.1573 0.1290 0.1693 +v -0.1573 0.1326 0.1782 +v -0.1573 0.1290 0.1782 +v -0.1633 0.1290 0.1750 +v -0.1627 0.1309 0.1761 +v -0.1635 0.1299 0.1747 +v -0.1633 0.1290 0.1726 +v -0.1635 0.1299 0.1729 +v -0.1627 0.1309 0.1715 +v -0.1623 0.1326 0.1709 +v -0.1623 0.1326 0.1766 +v -0.1648 0.1309 0.1715 +v -0.1648 0.1326 0.1710 +v -0.1648 0.1299 0.1729 +v -0.1648 0.1299 0.1747 +v -0.1648 0.1309 0.1761 +v -0.1648 0.1326 0.1766 +v -0.1613 0.1285 0.1773 +v -0.1587 0.1285 0.1782 +v -0.1629 0.1285 0.1751 +v -0.1629 0.1285 0.1724 +v -0.1613 0.1285 0.1702 +v -0.1587 0.1285 0.1694 +v -0.1573 0.1285 0.1696 +v -0.1573 0.1285 0.1778 +v -0.1493 0.1286 0.1758 +v -0.1493 0.1286 0.1717 +v -0.1493 0.1293 0.1713 +v -0.1493 0.1293 0.1761 +v -0.1493 0.1326 0.1713 +v -0.1493 0.1326 0.1761 +v -0.1776 0.1310 0.1716 +v -0.1776 0.1326 0.1711 +v -0.1776 0.1300 0.1730 +v -0.1776 0.1300 0.1746 +v -0.1776 0.1310 0.1760 +v -0.1776 0.1326 0.1765 +v -0.2290 0.1314 0.1721 +v -0.2290 0.1326 0.1717 +v -0.1784 0.1326 0.1712 +v -0.1784 0.1311 0.1717 +v -0.2290 0.1306 0.1731 +v -0.1784 0.1301 0.1730 +v -0.2290 0.1306 0.1744 +v -0.1784 0.1301 0.1746 +v -0.2290 0.1314 0.1754 +v -0.1784 0.1311 0.1759 +v -0.2290 0.1326 0.1758 +v -0.1784 0.1326 0.1764 +v -0.1587 0.1362 0.1786 +v -0.1615 0.1362 0.1777 +v -0.1615 0.1362 0.1699 +v -0.1587 0.1362 0.1689 +v -0.1573 0.1362 0.1693 +v -0.1573 0.1362 0.1782 +v -0.1633 0.1362 0.1750 +v -0.1635 0.1353 0.1747 +v -0.1627 0.1343 0.1761 +v -0.1633 0.1362 0.1726 +v -0.1635 0.1353 0.1729 +v -0.1627 0.1343 0.1715 +v -0.1648 0.1343 0.1715 +v -0.1648 0.1353 0.1729 +v -0.1648 0.1353 0.1747 +v -0.1648 0.1343 0.1761 +v -0.1587 0.1367 0.1782 +v -0.1613 0.1367 0.1773 +v -0.1629 0.1367 0.1751 +v -0.1629 0.1367 0.1724 +v -0.1613 0.1367 0.1702 +v -0.1587 0.1367 0.1694 +v -0.1573 0.1367 0.1696 +v -0.1573 0.1367 0.1778 +v -0.1493 0.1363 0.1758 +v -0.1493 0.1355 0.1761 +v -0.1493 0.1355 0.1713 +v -0.1493 0.1363 0.1717 +v -0.1776 0.1342 0.1716 +v -0.1776 0.1351 0.1730 +v -0.1776 0.1351 0.1746 +v -0.1776 0.1342 0.1760 +v -0.2290 0.1338 0.1721 +v -0.1784 0.1341 0.1717 +v -0.2290 0.1346 0.1731 +v -0.1784 0.1350 0.1730 +v -0.2290 0.1346 0.1744 +v -0.1784 0.1350 0.1746 +v -0.2290 0.1338 0.1754 +v -0.1784 0.1341 0.1759 +v -0.1583 0.1285 0.1738 +v -0.1583 0.1367 0.1738 +v -0.2295 0.1326 0.1722 +v -0.2295 0.1317 0.1725 +v -0.2295 0.1326 0.1738 +v -0.2295 0.1311 0.1733 +v -0.2295 0.1311 0.1743 +v -0.2295 0.1317 0.1751 +v -0.2295 0.1326 0.1754 +v -0.2295 0.1335 0.1751 +v -0.2295 0.1341 0.1743 +v -0.2295 0.1341 0.1733 +v -0.2295 0.1335 0.1725 +v -0.1587 0.1583 0.1786 +v -0.1615 0.1583 0.1777 +v -0.1615 0.1547 0.1777 +v -0.1587 0.1547 0.1786 +v -0.1615 0.1583 0.1699 +v -0.1587 0.1583 0.1689 +v -0.1587 0.1547 0.1689 +v -0.1615 0.1547 0.1699 +v -0.1573 0.1583 0.1693 +v -0.1573 0.1547 0.1693 +v -0.1573 0.1583 0.1782 +v -0.1573 0.1547 0.1782 +v -0.1633 0.1547 0.1750 +v -0.1627 0.1566 0.1761 +v -0.1635 0.1556 0.1747 +v -0.1633 0.1547 0.1726 +v -0.1635 0.1556 0.1729 +v -0.1627 0.1566 0.1715 +v -0.1623 0.1583 0.1709 +v -0.1623 0.1583 0.1766 +v -0.1648 0.1566 0.1715 +v -0.1648 0.1583 0.1710 +v -0.1648 0.1556 0.1729 +v -0.1648 0.1556 0.1747 +v -0.1648 0.1566 0.1761 +v -0.1648 0.1583 0.1766 +v -0.1613 0.1541 0.1773 +v -0.1587 0.1541 0.1782 +v -0.1629 0.1541 0.1751 +v -0.1629 0.1541 0.1724 +v -0.1613 0.1541 0.1702 +v -0.1587 0.1541 0.1694 +v -0.1573 0.1541 0.1696 +v -0.1573 0.1541 0.1778 +v -0.1493 0.1542 0.1758 +v -0.1493 0.1542 0.1717 +v -0.1493 0.1550 0.1713 +v -0.1493 0.1550 0.1761 +v -0.1493 0.1583 0.1713 +v -0.1493 0.1583 0.1761 +v -0.1776 0.1567 0.1716 +v -0.1776 0.1583 0.1711 +v -0.1776 0.1557 0.1730 +v -0.1776 0.1557 0.1746 +v -0.1776 0.1567 0.1760 +v -0.1776 0.1583 0.1765 +v -0.2290 0.1571 0.1721 +v -0.2290 0.1583 0.1717 +v -0.1784 0.1583 0.1712 +v -0.1784 0.1568 0.1717 +v -0.2290 0.1563 0.1731 +v -0.1784 0.1558 0.1730 +v -0.2290 0.1563 0.1744 +v -0.1784 0.1558 0.1746 +v -0.2290 0.1571 0.1754 +v -0.1784 0.1568 0.1759 +v -0.2290 0.1583 0.1758 +v -0.1784 0.1583 0.1764 +v -0.1587 0.1618 0.1786 +v -0.1615 0.1618 0.1777 +v -0.1615 0.1618 0.1699 +v -0.1587 0.1618 0.1689 +v -0.1573 0.1618 0.1693 +v -0.1573 0.1618 0.1782 +v -0.1633 0.1618 0.1750 +v -0.1635 0.1610 0.1747 +v -0.1627 0.1600 0.1761 +v -0.1633 0.1618 0.1726 +v -0.1635 0.1610 0.1729 +v -0.1627 0.1600 0.1715 +v -0.1648 0.1599 0.1715 +v -0.1648 0.1610 0.1729 +v -0.1648 0.1610 0.1747 +v -0.1648 0.1599 0.1761 +v -0.1587 0.1624 0.1782 +v -0.1613 0.1624 0.1773 +v -0.1629 0.1624 0.1751 +v -0.1629 0.1624 0.1724 +v -0.1613 0.1624 0.1702 +v -0.1587 0.1624 0.1694 +v -0.1573 0.1624 0.1696 +v -0.1573 0.1624 0.1778 +v -0.1493 0.1620 0.1758 +v -0.1493 0.1612 0.1761 +v -0.1493 0.1612 0.1713 +v -0.1493 0.1620 0.1717 +v -0.1776 0.1599 0.1716 +v -0.1776 0.1608 0.1730 +v -0.1776 0.1608 0.1746 +v -0.1776 0.1599 0.1760 +v -0.2290 0.1595 0.1721 +v -0.1784 0.1598 0.1717 +v -0.2290 0.1602 0.1731 +v -0.1784 0.1607 0.1730 +v -0.2290 0.1602 0.1744 +v -0.1784 0.1607 0.1746 +v -0.2290 0.1595 0.1754 +v -0.1784 0.1598 0.1759 +v -0.1583 0.1541 0.1738 +v -0.1583 0.1624 0.1738 +v -0.2295 0.1583 0.1722 +v -0.2295 0.1573 0.1725 +v -0.2295 0.1583 0.1738 +v -0.2295 0.1568 0.1733 +v -0.2295 0.1568 0.1743 +v -0.2295 0.1573 0.1751 +v -0.2295 0.1583 0.1754 +v -0.2295 0.1592 0.1751 +v -0.2295 0.1598 0.1743 +v -0.2295 0.1598 0.1733 +v -0.2295 0.1592 0.1725 +v -0.3350 -0.0002 0.3504 +v -0.3351 -0.0265 0.3504 +v -0.3351 0.0261 0.3504 +v -0.2904 -0.0002 0.1500 +v -0.2633 -0.0002 0.1500 +v -0.2633 -0.0536 0.1500 +v -0.2905 -0.0256 0.1500 +v 0.5124 0.0012 0.1500 +v 0.5811 -0.0000 0.1500 +v 0.5811 -0.0174 0.1500 +v 0.5124 -0.0806 0.1500 +v -0.2905 0.0252 0.1500 +v -0.2633 0.0532 0.1500 +v -0.2339 0.0834 0.1500 +v -0.1720 0.0834 0.1500 +v -0.1272 0.0834 0.1500 +v -0.0822 0.0834 0.1500 +v -0.0822 0.1269 0.1500 +v -0.0096 0.1527 0.1500 +v -0.0096 0.1056 0.1500 +v -0.0096 0.0712 0.1500 +v -0.0096 -0.0002 0.1500 +v -0.0096 -0.0716 0.1500 +v -0.0096 -0.1060 0.1500 +v -0.0096 -0.1582 0.1500 +v -0.0822 -0.1273 0.1500 +v -0.0822 -0.0838 0.1500 +v -0.1272 -0.0838 0.1500 +v -0.1720 -0.0838 0.1500 +v -0.2339 -0.0838 0.1500 +v 0.4193 -0.0806 0.1500 +v 0.3412 -0.0806 0.1500 +v 0.3412 -0.1448 0.1500 +v 0.2772 -0.1448 0.1500 +v 0.2772 -0.0587 0.1500 +v 0.2772 -0.0000 0.1500 +v 0.2772 0.0586 0.1500 +v 0.2772 0.1447 0.1500 +v 0.3412 0.1447 0.1500 +v 0.3412 0.0830 0.1500 +v 0.4193 0.0830 0.1500 +v 0.5124 0.0830 0.1500 +v 0.5811 0.0173 0.1500 +v 0.3412 0.0012 0.1500 +v 0.4193 0.0012 0.1500 +v -0.0822 -0.0002 0.1500 +v -0.1272 -0.0002 0.1500 +v -0.1720 -0.0002 0.1500 +v -0.2339 -0.0002 0.1500 +v -0.0998 -0.0001 0.5490 +v 0.5235 -0.0002 0.5051 +# 6403 vertices + +vn -0.0000 -1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.6731 0.0000 0.7395 +vn -0.1609 0.0000 0.9870 +vn -0.8137 0.0000 0.5812 +vn -0.9996 0.0000 -0.0286 +vn -0.9827 0.0000 -0.1849 +vn -0.9416 0.0000 -0.3368 +vn -0.4938 0.0000 -0.8696 +vn 0.0144 0.0000 -0.9999 +vn 0.2363 0.0000 -0.9717 +vn 0.6162 0.0000 -0.7876 +vn 0.8744 0.0000 -0.4852 +vn 0.9978 0.0000 -0.0664 +vn 0.9848 0.0000 0.1737 +vn 0.6327 -0.6891 0.3532 +vn 0.6194 -0.6981 0.3590 +vn 0.5468 -0.6454 0.5333 +vn 0.6137 -0.5842 0.5311 +vn -0.1156 -0.6957 0.7090 +vn -0.1155 -0.6962 0.7085 +vn -0.6173 -0.6564 0.4337 +vn -0.6180 -0.6505 0.4414 +vn -0.6867 -0.7011 0.1922 +vn -0.6784 -0.7020 0.2169 +vn -0.7060 -0.6977 -0.1218 +vn -0.7023 -0.6962 -0.1484 +vn -0.5407 -0.7057 -0.4578 +vn -0.5491 -0.7004 -0.4560 +vn -0.1672 -0.7057 -0.6885 +vn -0.2193 -0.6947 -0.6851 +vn 0.1439 -0.6680 -0.7301 +vn 0.2349 -0.6691 -0.7051 +vn 0.4682 -0.6879 -0.5545 +vn 0.4732 -0.6849 -0.5541 +vn 0.6410 -0.6846 -0.3471 +vn 0.6132 -0.6294 -0.4773 +vn 0.7220 -0.6882 -0.0712 +vn 0.7259 -0.6878 -0.0065 +vn 0.5313 0.6529 0.5399 +vn 0.5264 0.6233 0.5783 +vn 0.6408 0.6889 0.3389 +vn 0.6528 0.6935 0.3048 +vn -0.1155 0.6962 0.7085 +vn -0.1156 0.6957 0.7090 +vn -0.6802 0.6976 0.2251 +vn -0.6833 0.7038 0.1942 +vn -0.6197 0.6549 0.4325 +vn -0.6320 0.6451 0.4295 +vn -0.7039 0.6939 -0.1517 +vn -0.7047 0.6988 -0.1227 +vn -0.5553 0.7051 -0.4410 +vn -0.5483 0.7015 -0.4553 +vn -0.2040 0.7039 -0.6804 +vn -0.1635 0.7010 -0.6942 +vn 0.3027 0.6203 -0.7236 +vn 0.1611 0.6803 -0.7150 +vn 0.4145 0.6833 -0.6011 +vn 0.4309 0.6855 -0.5869 +vn 0.6115 0.6784 -0.4073 +vn 0.6606 0.6720 -0.3348 +vn 0.7416 0.6707 0.0163 +vn 0.7164 0.6949 -0.0624 +vn 0.3090 0.0000 0.9511 +vn 0.3090 0.0000 -0.9511 +vn -0.2398 0.0000 -0.9708 +vn -0.4388 -0.0121 -0.8985 +vn -0.5713 0.1596 -0.8050 +vn -0.4650 0.0121 0.8852 +vn -0.2879 0.0000 0.9577 +vn -0.6063 0.1472 0.7815 +vn 0.8943 0.3506 0.2781 +vn 0.7930 0.3045 0.5276 +vn 0.8258 0.0293 0.5632 +vn 0.9490 0.1711 0.2647 +vn 0.8977 0.3468 -0.2719 +vn 0.9490 0.1711 -0.2647 +vn 0.8090 -0.0000 -0.5878 +vn 0.7851 0.2939 -0.5452 +vn 0.8258 0.0293 -0.5632 +vn 0.8090 -0.0000 0.5878 +vn 0.8090 0.0000 0.5878 +vn 0.0114 0.3066 -0.9518 +vn 0.0125 0.8062 -0.5915 +vn 0.0126 0.8067 -0.5908 +vn 0.0119 0.8065 -0.5912 +vn 0.0115 0.8058 -0.5921 +vn 0.0136 0.9999 -0.0000 +vn 0.0126 0.9999 -0.0000 +vn 0.0136 0.9999 0.0000 +vn 0.0125 0.8062 0.5915 +vn 0.0115 0.8058 0.5921 +vn 0.0119 0.8065 0.5912 +vn 0.0126 0.8067 0.5908 +vn 0.0114 0.3066 0.9518 +vn 0.2463 0.6038 0.7582 +vn 0.0361 0.6225 0.7818 +vn 0.0221 0.6110 0.7913 +vn 0.7985 0.4891 0.3510 +vn 0.6866 0.5741 0.4462 +vn 0.7953 0.5191 -0.3131 +vn 0.6449 0.6038 -0.4686 +vn 0.0255 0.6227 -0.7820 +vn 0.0395 0.6115 -0.7903 +vn 0.2463 0.6038 -0.7582 +vn -0.1635 0.5589 -0.8130 +vn -0.1520 0.5353 -0.8309 +vn -0.2257 0.5530 0.8020 +vn -0.2450 0.5251 0.8150 +vn -0.9633 0.2683 -0.0000 +vn -0.9685 0.2489 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0678 0.3064 -0.9495 +vn 0.0676 0.3063 -0.9495 +vn 0.0683 0.8053 -0.5889 +vn 0.0680 0.8053 -0.5890 +vn 0.0685 0.9976 -0.0000 +vn 0.0685 0.9976 0.0000 +vn 0.0682 0.8053 0.5889 +vn 0.0685 0.8052 0.5890 +vn 0.0677 0.3064 0.9495 +vn 0.0679 0.3063 0.9495 +vn 0.0096 0.3089 -0.9510 +vn 0.0096 0.3090 -0.9510 +vn 0.0684 0.3065 -0.9494 +vn 0.0686 0.3066 -0.9494 +vn 0.0096 0.8089 -0.5878 +vn 0.0096 0.8090 -0.5878 +vn 0.0689 0.8054 -0.5887 +vn 0.0692 0.8054 -0.5886 +vn 0.0097 1.0000 0.0000 +vn 0.0693 0.9976 0.0000 +vn 0.0097 0.8089 0.5878 +vn 0.0097 0.8090 0.5878 +vn 0.0691 0.8054 0.5887 +vn 0.0687 0.8055 0.5886 +vn 0.0096 0.3089 0.9510 +vn 0.0096 0.3090 0.9510 +vn 0.0685 0.3065 0.9494 +vn 0.0683 0.3066 0.9494 +vn -0.5884 -0.1495 -0.7946 +vn -0.5894 -0.1573 0.7924 +vn 0.8943 -0.3506 0.2781 +vn 0.9490 -0.1711 0.2647 +vn 0.8258 -0.0293 0.5632 +vn 0.7930 -0.3045 0.5276 +vn 0.8977 -0.3468 -0.2719 +vn 0.9490 -0.1711 -0.2647 +vn 0.8258 -0.0293 -0.5632 +vn 0.7851 -0.2939 -0.5452 +vn 0.0114 -0.3066 -0.9518 +vn 0.0125 -0.8062 -0.5915 +vn 0.0115 -0.8058 -0.5921 +vn 0.0119 -0.8065 -0.5912 +vn 0.0126 -0.8067 -0.5908 +vn 0.0136 -0.9999 0.0000 +vn 0.0126 -0.9999 0.0000 +vn 0.0125 -0.8062 0.5915 +vn 0.0126 -0.8067 0.5908 +vn 0.0119 -0.8065 0.5912 +vn 0.0115 -0.8058 0.5921 +vn 0.0114 -0.3066 0.9518 +vn 0.2463 -0.6037 0.7582 +vn 0.0221 -0.6110 0.7913 +vn 0.0361 -0.6225 0.7818 +vn 0.6866 -0.5741 0.4462 +vn 0.7985 -0.4891 0.3510 +vn 0.7953 -0.5191 -0.3131 +vn 0.6449 -0.6038 -0.4686 +vn 0.0255 -0.6227 -0.7820 +vn 0.2463 -0.6038 -0.7582 +vn 0.0395 -0.6115 -0.7903 +vn -0.1635 -0.5589 -0.8130 +vn -0.1520 -0.5353 -0.8309 +vn -0.2450 -0.5251 0.8150 +vn -0.2257 -0.5530 0.8020 +vn -0.9633 -0.2683 0.0000 +vn -0.9685 -0.2489 0.0000 +vn 0.0678 -0.3064 -0.9495 +vn 0.0676 -0.3063 -0.9495 +vn 0.0683 -0.8053 -0.5889 +vn 0.0680 -0.8053 -0.5890 +vn 0.0685 -0.9976 0.0000 +vn 0.0682 -0.8053 0.5889 +vn 0.0685 -0.8052 0.5890 +vn 0.0677 -0.3064 0.9495 +vn 0.0679 -0.3063 0.9495 +vn 0.0096 -0.3089 -0.9510 +vn 0.0686 -0.3066 -0.9494 +vn 0.0684 -0.3065 -0.9494 +vn 0.0096 -0.3090 -0.9510 +vn 0.0096 -0.8089 -0.5878 +vn 0.0692 -0.8054 -0.5886 +vn 0.0689 -0.8054 -0.5887 +vn 0.0096 -0.8090 -0.5878 +vn 0.0097 -1.0000 0.0000 +vn 0.0693 -0.9976 0.0000 +vn 0.0097 -0.8089 0.5878 +vn 0.0687 -0.8055 0.5886 +vn 0.0690 -0.8054 0.5887 +vn 0.0097 -0.8090 0.5878 +vn 0.0096 -0.3089 0.9510 +vn 0.0683 -0.3066 0.9494 +vn 0.0685 -0.3065 0.9494 +vn 0.0096 -0.3090 0.9510 +vn -0.0000 1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7114 -0.0000 -0.7028 +vn 0.7114 0.4131 -0.5686 +vn 0.7114 0.6684 -0.2172 +vn 0.7114 0.6684 0.2172 +vn 0.7114 0.4131 0.5686 +vn 0.7114 0.0000 0.7028 +vn 0.7114 -0.4131 -0.5686 +vn 0.7114 -0.6684 -0.2172 +vn 0.7114 -0.6684 0.2172 +vn 0.7114 -0.4131 0.5686 +vn -0.6270 -0.0341 -0.7783 +vn -0.7480 0.2639 -0.6090 +vn -0.6900 -0.2089 -0.6930 +vn -0.7735 -0.3433 -0.5328 +vn -0.7612 -0.4295 -0.4859 +vn -0.5998 -0.8001 0.0000 +vn -0.7629 -0.3648 0.5338 +vn -0.7528 -0.2648 0.6026 +vn -0.7763 -0.4337 0.4575 +vn -0.6339 0.0344 0.7726 +vn -0.6955 0.2099 0.6871 +vn -0.7772 0.3408 0.5290 +vn -0.7644 0.4284 0.4818 +vn -0.5998 0.8001 -0.0000 +vn -0.7592 0.3670 -0.5375 +vn -0.7732 0.4348 -0.4617 +vn 0.0126 0.9999 0.0000 +vn 0.2463 0.6037 0.7582 +vn -0.9633 0.2683 0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.5998 0.8001 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.9923 0.0740 0.0997 +vn -0.9925 0.0743 0.0967 +vn -0.9922 0.0777 0.0974 +vn -0.9920 0.0764 0.1000 +vn 0.9826 0.1825 0.0351 +vn 0.9447 0.3220 0.0620 +vn 0.9861 0.1633 0.0314 +vn 0.4682 0.8677 0.1671 +vn 0.3004 0.9366 0.1803 +vn 0.3068 0.9346 0.1800 +vn 0.0994 0.9771 0.1881 +vn 0.0999 0.9771 0.1881 +vn -0.0087 0.9819 0.1891 +vn -0.0088 0.9819 0.1891 +vn -0.1179 0.9750 0.1885 +vn -0.1194 0.9748 0.1884 +vn -0.2524 0.9458 0.2042 +vn -0.2509 0.9463 0.2038 +vn -0.5048 0.8384 0.2057 +vn -0.5073 0.8369 0.2056 +vn -0.7935 0.5809 0.1814 +vn -0.8024 0.5690 0.1799 +vn -0.9605 0.2452 0.1314 +vn -0.9648 0.2296 0.1286 +vn 0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn -0.9930 0.0744 0.0917 +vn -0.9962 0.0000 0.0873 +vn -0.9961 0.0000 0.0885 +vn -0.9927 0.0776 0.0926 +vn -0.9677 0.2186 0.1256 +vn -0.9914 0.0842 0.1003 +vn 1.0000 -0.0000 -0.0018 +vn 1.0000 -0.0000 0.0015 +vn 1.0000 0.0036 0.0021 +vn 1.0000 0.0008 -0.0023 +vn 0.0008 -1.0000 -0.0001 +vn 0.0003 -1.0000 0.0000 +vn 0.0026 -1.0000 -0.0006 +vn 0.0031 -1.0000 -0.0008 +vn 0.5878 -0.8090 0.0000 +vn 0.9480 -0.3182 0.0000 +vn 0.9485 0.3169 -0.0000 +vn 0.5878 0.8090 -0.0000 +vn -0.0041 1.0000 0.0033 +vn -0.0016 1.0000 0.0040 +vn -0.0135 0.9999 0.0007 +vn -0.0160 0.9999 -0.0000 +vn 0.0151 -0.9999 -0.0004 +vn 0.0210 -0.9998 -0.0020 +vn 0.0225 -0.9997 -0.0025 +vn 0.5878 -0.8090 -0.0000 +vn 0.9470 -0.3213 -0.0000 +vn 0.9456 0.3254 0.0000 +vn 0.5878 0.8090 0.0000 +vn -0.0049 1.0000 0.0039 +vn -0.0019 1.0000 0.0048 +vn -0.0162 0.9999 0.0008 +vn -0.0192 0.9998 0.0000 +vn -0.9915 0.0842 0.0988 +vn 0.9891 0.1445 0.0278 +vn 0.3129 0.9327 0.1796 +vn 0.1003 0.9770 0.1881 +vn -0.0089 0.9819 0.1891 +vn -0.1214 0.9747 0.1877 +vn -0.2499 0.9468 0.2027 +vn -0.5096 0.8355 0.2055 +vn -0.8107 0.5576 0.1784 +vn -0.9959 0.0000 0.0907 +vn -0.9920 0.0836 0.0944 +vn 1.0000 0.0013 0.0031 +vn 1.0000 -0.0012 0.0013 +vn 1.0000 -0.0029 0.0000 +vn -0.7006 0.1989 0.6853 +vn -0.7030 0.1523 0.6947 +vn -0.6772 0.0437 0.7345 +vn -0.6703 0.0334 0.7413 +vn 0.7073 -0.0000 0.7070 +vn 0.7070 0.0000 0.7072 +vn 0.7080 0.0002 0.7063 +vn 0.7084 0.0000 0.7058 +vn 0.6509 0.1938 0.7340 +vn 0.6743 0.1115 0.7300 +vn 0.5185 0.4278 0.7404 +vn 0.4910 0.4492 0.7464 +vn 0.2215 0.6517 0.7254 +vn 0.1772 0.6664 0.7242 +vn 0.0625 0.6351 0.7699 +vn 0.0626 0.6340 0.7708 +vn -0.0056 0.6367 0.7711 +vn -0.0057 0.6367 0.7711 +vn -0.0782 0.6324 0.7707 +vn -0.0787 0.6323 0.7707 +vn -0.1643 0.6088 0.7761 +vn -0.1626 0.6106 0.7751 +vn -0.3231 0.5878 0.7417 +vn -0.3816 0.5675 0.7296 +vn -0.5261 0.3751 0.7632 +vn -0.5417 0.3542 0.7623 +vn -0.6703 0.0576 0.7398 +vn -0.6705 0.0576 0.7397 +vn -0.6722 0.0577 0.7382 +vn -0.6723 0.0578 0.7380 +vn -0.6754 0.0000 0.7375 +vn -0.6755 0.0000 0.7373 +vn 0.7070 -0.0000 0.7072 +vn 0.6736 0.0678 0.7360 +vn 0.7033 -0.0075 0.7109 +vn 0.0433 -0.7200 0.6926 +vn 0.0602 -0.6755 0.7349 +vn 0.2477 -0.7448 0.6196 +vn 0.2341 -0.7622 0.6035 +vn 0.6021 -0.4660 0.6482 +vn 0.5879 -0.4654 0.6617 +vn 0.6519 0.0077 0.7583 +vn 0.6475 0.0137 0.7619 +vn 0.5642 0.4167 0.7128 +vn 0.5821 0.3996 0.7082 +vn 0.2356 0.6402 0.7312 +vn 0.1870 0.6549 0.7322 +vn 0.0013 0.7090 0.7052 +vn -0.0011 0.7054 0.7088 +vn 0.5526 -0.4248 0.7170 +vn 0.5599 -0.4156 0.7168 +vn 0.6532 0.0084 0.7571 +vn 0.6535 0.0126 0.7568 +vn 0.1919 -0.6994 0.6885 +vn 0.2572 -0.6526 0.7127 +vn 0.5381 0.4211 0.7301 +vn 0.5676 0.3977 0.7208 +vn 0.2378 0.6598 0.7129 +vn 0.2049 0.6707 0.7129 +vn 0.0028 0.7114 0.7027 +vn -0.0013 0.7050 0.7092 +vn 0.0331 -0.7148 0.6985 +vn 0.0418 -0.6911 0.7215 +vn -0.5713 -0.1596 -0.8050 +vn -0.4388 0.0121 -0.8985 +vn -0.4650 -0.0121 0.8852 +vn -0.6063 -0.1472 0.7815 +vn 0.8090 0.0000 -0.5878 +vn 0.0136 -0.9999 -0.0000 +vn 0.0126 -0.9999 -0.0000 +vn 0.2463 -0.6038 0.7582 +vn -0.9633 -0.2683 -0.0000 +vn -0.9685 -0.2489 -0.0000 +vn 0.0097 -1.0000 -0.0000 +vn 0.0693 -0.9976 -0.0000 +vn 0.0691 -0.8054 0.5887 +vn -0.5884 0.1495 -0.7946 +vn -0.5894 0.1573 0.7924 +vn -0.9685 0.2489 0.0000 +vn 0.0690 0.8054 0.5887 +vn -0.0000 1.0000 0.0000 +vn 0.7114 0.0000 -0.7028 +vn 0.7114 -0.0000 0.7028 +vn -0.7480 -0.2639 -0.6090 +vn -0.6270 0.0341 -0.7783 +vn -0.6900 0.2089 -0.6930 +vn -0.7612 0.4295 -0.4859 +vn -0.7735 0.3433 -0.5328 +vn -0.7629 0.3648 0.5338 +vn -0.7763 0.4337 0.4575 +vn -0.7528 0.2648 0.6026 +vn -0.6339 -0.0344 0.7726 +vn -0.6955 -0.2099 0.6871 +vn -0.7644 -0.4284 0.4818 +vn -0.7772 -0.3408 0.5290 +vn -0.5998 -0.8001 -0.0000 +vn -0.7592 -0.3670 -0.5375 +vn -0.7732 -0.4348 -0.4617 +vn 0.2463 0.6037 -0.7582 +vn 1.0000 0.0000 -0.0002 +vn 1.0000 -0.0000 0.0000 +vn 1.0000 -0.0001 -0.0001 +vn 1.0000 -0.0002 -0.0001 +vn 1.0000 -0.0002 0.0001 +vn 1.0000 -0.0001 0.0001 +vn 1.0000 -0.0000 0.0002 +vn 1.0000 0.0001 0.0001 +vn 1.0000 0.0002 0.0001 +vn 1.0000 0.0002 -0.0001 +vn 1.0000 0.0001 -0.0001 +vn -0.9923 -0.0740 0.0997 +vn -0.9920 -0.0764 0.1000 +vn -0.9922 -0.0777 0.0974 +vn -0.9925 -0.0743 0.0967 +vn 0.9826 -0.1825 0.0351 +vn 0.9861 -0.1633 0.0314 +vn 0.9447 -0.3220 0.0620 +vn 0.4682 -0.8677 0.1671 +vn 0.3068 -0.9346 0.1800 +vn 0.3004 -0.9366 0.1803 +vn 0.0999 -0.9771 0.1881 +vn 0.0994 -0.9771 0.1881 +vn -0.0088 -0.9819 0.1891 +vn -0.0087 -0.9819 0.1891 +vn -0.1179 -0.9750 0.1885 +vn -0.1194 -0.9748 0.1884 +vn -0.2509 -0.9463 0.2038 +vn -0.2524 -0.9458 0.2042 +vn -0.5073 -0.8369 0.2056 +vn -0.5048 -0.8384 0.2057 +vn -0.7935 -0.5809 0.1814 +vn -0.8024 -0.5690 0.1799 +vn -0.9605 -0.2452 0.1314 +vn -0.9648 -0.2296 0.1286 +vn -0.9930 -0.0744 0.0917 +vn -0.9927 -0.0776 0.0926 +vn -0.9677 -0.2186 0.1256 +vn -0.9914 -0.0842 0.1003 +vn 1.0000 -0.0008 -0.0023 +vn 1.0000 -0.0036 0.0021 +vn 0.0008 1.0000 -0.0001 +vn 0.0031 1.0000 -0.0008 +vn 0.0026 1.0000 -0.0006 +vn 0.0003 1.0000 0.0000 +vn 0.9480 0.3182 0.0000 +vn 0.9485 -0.3169 0.0000 +vn -0.0041 -1.0000 0.0033 +vn -0.0160 -0.9999 0.0000 +vn -0.0135 -0.9999 0.0007 +vn -0.0016 -1.0000 0.0040 +vn 0.0151 0.9999 -0.0004 +vn 0.0225 0.9997 -0.0025 +vn 0.0210 0.9998 -0.0020 +vn 0.9470 0.3213 -0.0000 +vn 0.9456 -0.3254 0.0000 +vn -0.0049 -1.0000 0.0039 +vn -0.0192 -0.9998 0.0000 +vn -0.0162 -0.9999 0.0008 +vn -0.0019 -1.0000 0.0048 +vn -0.9915 -0.0842 0.0988 +vn 0.9891 -0.1445 0.0278 +vn 0.3129 -0.9327 0.1796 +vn 0.1003 -0.9770 0.1881 +vn -0.0089 -0.9819 0.1891 +vn -0.1214 -0.9747 0.1877 +vn -0.2499 -0.9468 0.2027 +vn -0.5096 -0.8355 0.2055 +vn -0.8107 -0.5576 0.1784 +vn -0.9920 -0.0836 0.0944 +vn 1.0000 0.0029 0.0000 +vn 1.0000 0.0012 0.0013 +vn 1.0000 -0.0013 0.0031 +vn -0.7005 -0.1989 0.6853 +vn -0.6702 -0.0334 0.7414 +vn -0.6772 -0.0436 0.7345 +vn -0.7030 -0.1523 0.6947 +vn 0.7080 -0.0002 0.7063 +vn 0.6509 -0.1938 0.7340 +vn 0.4910 -0.4492 0.7464 +vn 0.5185 -0.4278 0.7404 +vn 0.6743 -0.1115 0.7300 +vn 0.1772 -0.6664 0.7242 +vn 0.2215 -0.6517 0.7254 +vn 0.0626 -0.6340 0.7708 +vn 0.0625 -0.6351 0.7699 +vn -0.0057 -0.6367 0.7711 +vn -0.0056 -0.6367 0.7711 +vn -0.0787 -0.6323 0.7707 +vn -0.0782 -0.6324 0.7707 +vn -0.1626 -0.6106 0.7751 +vn -0.1643 -0.6088 0.7761 +vn -0.3816 -0.5675 0.7296 +vn -0.3231 -0.5878 0.7417 +vn -0.5417 -0.3542 0.7623 +vn -0.5261 -0.3751 0.7632 +vn -0.6705 -0.0577 0.7397 +vn -0.6703 -0.0576 0.7399 +vn -0.6723 -0.0578 0.7380 +vn -0.6722 -0.0577 0.7382 +vn 0.6736 -0.0678 0.7360 +vn 0.7033 0.0075 0.7109 +vn 0.0433 0.7200 0.6926 +vn 0.2341 0.7622 0.6035 +vn 0.2477 0.7448 0.6196 +vn 0.0602 0.6755 0.7349 +vn 0.5879 0.4654 0.6617 +vn 0.6022 0.4660 0.6482 +vn 0.6475 -0.0137 0.7619 +vn 0.6519 -0.0077 0.7583 +vn 0.5821 -0.3996 0.7082 +vn 0.5642 -0.4167 0.7128 +vn 0.1870 -0.6549 0.7322 +vn 0.2356 -0.6402 0.7312 +vn -0.0011 -0.7054 0.7088 +vn 0.0013 -0.7090 0.7052 +vn 0.5526 0.4248 0.7170 +vn 0.6535 -0.0126 0.7568 +vn 0.6532 -0.0084 0.7571 +vn 0.5599 0.4156 0.7168 +vn 0.1919 0.6994 0.6885 +vn 0.2572 0.6526 0.7127 +vn 0.5676 -0.3977 0.7208 +vn 0.5381 -0.4211 0.7301 +vn 0.2049 -0.6707 0.7129 +vn 0.2378 -0.6598 0.7129 +vn -0.0013 -0.7050 0.7092 +vn 0.0028 -0.7114 0.7027 +vn 0.0331 0.7148 0.6985 +vn 0.0418 0.6911 0.7215 +vn -0.9511 -0.3090 0.0000 +vn -0.9511 -0.3090 -0.0000 +vn -0.8090 -0.5878 0.0000 +vn -0.5878 -0.8090 0.0000 +vn -0.3090 -0.9511 0.0000 +vn 0.3090 -0.9511 0.0000 +vn 0.8090 -0.5878 -0.0000 +vn 0.8090 -0.5878 0.0000 +vn 0.9511 -0.3090 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.9511 0.3090 0.0000 +vn 0.8090 0.5878 -0.0000 +vn 0.8090 0.5878 0.0000 +vn 0.3090 0.9511 -0.0000 +vn -0.3090 0.9511 -0.0000 +vn -0.5878 0.8090 0.0000 +vn -0.5878 0.8090 -0.0000 +vn -0.8090 0.5878 0.0000 +vn -0.9511 0.3090 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.5633 -0.1816 0.8060 +vn -0.5621 -0.1849 0.8061 +vn -0.5916 -0.0013 0.8062 +vn -0.5917 0.0009 0.8062 +vn -0.4800 -0.3467 0.8059 +vn -0.4772 -0.3501 0.8060 +vn -0.3496 -0.4780 0.8058 +vn -0.3454 -0.4808 0.8060 +vn -0.1848 -0.5627 0.8058 +vn -0.1799 -0.5640 0.8059 +vn -0.0017 -0.5922 0.8058 +vn 0.0030 -0.5919 0.8060 +vn 0.1817 -0.5635 0.8059 +vn 0.1852 -0.5621 0.8061 +vn 0.3472 -0.4792 0.8061 +vn 0.3490 -0.4777 0.8062 +vn 0.4785 -0.3480 0.8062 +vn 0.4789 -0.3472 0.8063 +vn 0.5627 -0.1825 0.8063 +vn 0.5625 -0.1833 0.8062 +vn 0.5916 0.0009 0.8062 +vn 0.5918 -0.0015 0.8061 +vn 0.5624 0.1842 0.8061 +vn 0.5639 0.1807 0.8058 +vn 0.4777 0.3492 0.8061 +vn 0.4809 0.3457 0.8057 +vn 0.3464 0.4799 0.8060 +vn 0.3508 0.4774 0.8056 +vn 0.1811 0.5634 0.8061 +vn 0.1861 0.5624 0.8057 +vn -0.0016 0.5917 0.8061 +vn 0.0029 0.5922 0.8058 +vn -0.1840 0.5623 0.8062 +vn -0.1808 0.5637 0.8059 +vn -0.3483 0.4781 0.8063 +vn -0.3466 0.4796 0.8061 +vn -0.4785 0.3478 0.8063 +vn -0.4786 0.3478 0.8062 +vn -0.5626 0.1828 0.8062 +vn -0.5626 0.1828 0.8063 +vn -0.3090 0.0000 0.9511 +vn -0.3090 0.0000 -0.9511 +vn 0.2398 0.0000 -0.9708 +vn 0.4388 0.0121 -0.8985 +vn 0.5713 -0.1596 -0.8051 +vn 0.4650 -0.0121 0.8852 +vn 0.2879 0.0000 0.9577 +vn 0.6063 -0.1472 0.7815 +vn -0.8943 -0.3506 0.2781 +vn -0.7930 -0.3045 0.5276 +vn -0.8258 -0.0293 0.5632 +vn -0.9490 -0.1711 0.2648 +vn -0.8977 -0.3468 -0.2719 +vn -0.9490 -0.1711 -0.2648 +vn -0.8090 -0.0000 -0.5878 +vn -0.7851 -0.2939 -0.5452 +vn -0.8258 -0.0293 -0.5632 +vn -0.8090 0.0000 -0.5878 +vn -0.8090 -0.0000 0.5878 +vn -0.8090 0.0000 0.5878 +vn -0.0114 -0.3066 -0.9518 +vn -0.0125 -0.8062 -0.5915 +vn -0.0126 -0.8067 -0.5908 +vn -0.0119 -0.8065 -0.5912 +vn -0.0115 -0.8058 -0.5921 +vn -0.0136 -0.9999 0.0000 +vn -0.0126 -0.9999 0.0000 +vn -0.0125 -0.8062 0.5915 +vn -0.0115 -0.8058 0.5921 +vn -0.0119 -0.8065 0.5912 +vn -0.0126 -0.8067 0.5908 +vn -0.0114 -0.3066 0.9518 +vn -0.2463 -0.6038 0.7581 +vn -0.0361 -0.6225 0.7818 +vn -0.0221 -0.6110 0.7913 +vn -0.7985 -0.4891 0.3511 +vn -0.6865 -0.5741 0.4462 +vn -0.7953 -0.5191 -0.3131 +vn -0.6449 -0.6038 -0.4686 +vn -0.0255 -0.6227 -0.7820 +vn -0.0394 -0.6115 -0.7903 +vn -0.2463 -0.6038 -0.7581 +vn 0.1635 -0.5589 -0.8130 +vn 0.1520 -0.5353 -0.8309 +vn 0.2258 -0.5530 0.8020 +vn 0.2450 -0.5251 0.8150 +vn 0.9633 -0.2685 -0.0000 +vn 0.9685 -0.2490 -0.0000 +vn 0.9685 -0.2490 0.0000 +vn -0.0678 -0.3064 -0.9495 +vn -0.0676 -0.3063 -0.9495 +vn -0.0683 -0.8053 -0.5889 +vn -0.0680 -0.8053 -0.5890 +vn -0.0686 -0.9976 0.0000 +vn -0.0682 -0.8053 0.5889 +vn -0.0685 -0.8052 0.5890 +vn -0.0677 -0.3064 0.9495 +vn -0.0679 -0.3063 0.9495 +vn -0.0096 -0.3089 -0.9510 +vn -0.0096 -0.3090 -0.9510 +vn -0.0684 -0.3065 -0.9494 +vn -0.0686 -0.3066 -0.9494 +vn -0.0096 -0.8089 -0.5878 +vn -0.0096 -0.8090 -0.5878 +vn -0.0689 -0.8054 -0.5887 +vn -0.0692 -0.8054 -0.5886 +vn -0.0097 -1.0000 0.0000 +vn -0.0693 -0.9976 0.0000 +vn -0.0097 -0.8089 0.5878 +vn -0.0097 -0.8090 0.5878 +vn -0.0691 -0.8054 0.5887 +vn -0.0687 -0.8055 0.5886 +vn -0.0096 -0.3089 0.9510 +vn -0.0096 -0.3090 0.9510 +vn -0.0685 -0.3065 0.9494 +vn -0.0683 -0.3066 0.9494 +vn 0.5884 0.1496 -0.7946 +vn 0.5893 0.1573 0.7924 +vn -0.8943 0.3506 0.2781 +vn -0.9490 0.1711 0.2648 +vn -0.8258 0.0293 0.5632 +vn -0.7930 0.3045 0.5276 +vn -0.8977 0.3468 -0.2719 +vn -0.9490 0.1711 -0.2648 +vn -0.8258 0.0293 -0.5632 +vn -0.7851 0.2939 -0.5452 +vn -0.0114 0.3066 -0.9518 +vn -0.0125 0.8062 -0.5915 +vn -0.0115 0.8058 -0.5921 +vn -0.0119 0.8065 -0.5912 +vn -0.0126 0.8067 -0.5908 +vn -0.0136 0.9999 0.0000 +vn -0.0126 0.9999 0.0000 +vn -0.0125 0.8062 0.5915 +vn -0.0126 0.8067 0.5908 +vn -0.0119 0.8065 0.5912 +vn -0.0115 0.8058 0.5921 +vn -0.0114 0.3066 0.9518 +vn -0.2463 0.6038 0.7581 +vn -0.0221 0.6110 0.7913 +vn -0.0361 0.6225 0.7818 +vn -0.6865 0.5741 0.4462 +vn -0.7985 0.4891 0.3511 +vn -0.7953 0.5191 -0.3131 +vn -0.6449 0.6038 -0.4686 +vn -0.0255 0.6227 -0.7820 +vn -0.2463 0.6038 -0.7581 +vn -0.0394 0.6115 -0.7903 +vn 0.1635 0.5589 -0.8130 +vn 0.1520 0.5353 -0.8309 +vn 0.2450 0.5251 0.8150 +vn 0.2258 0.5530 0.8020 +vn 0.9633 0.2685 0.0000 +vn 0.9685 0.2490 0.0000 +vn -0.0678 0.3064 -0.9495 +vn -0.0676 0.3063 -0.9495 +vn -0.0683 0.8053 -0.5889 +vn -0.0680 0.8053 -0.5890 +vn -0.0685 0.9976 0.0000 +vn -0.0682 0.8053 0.5889 +vn -0.0685 0.8052 0.5890 +vn -0.0677 0.3064 0.9495 +vn -0.0679 0.3063 0.9495 +vn -0.0096 0.3089 -0.9510 +vn -0.0686 0.3066 -0.9494 +vn -0.0684 0.3065 -0.9494 +vn -0.0096 0.3090 -0.9510 +vn -0.0096 0.8089 -0.5878 +vn -0.0692 0.8054 -0.5886 +vn -0.0689 0.8054 -0.5887 +vn -0.0096 0.8090 -0.5878 +vn -0.0097 1.0000 0.0000 +vn -0.0693 0.9976 0.0000 +vn -0.0097 0.8089 0.5878 +vn -0.0687 0.8055 0.5886 +vn -0.0691 0.8054 0.5887 +vn -0.0097 0.8090 0.5878 +vn -0.0096 0.3089 0.9510 +vn -0.0683 0.3066 0.9494 +vn -0.0685 0.3065 0.9494 +vn -0.0096 0.3090 0.9510 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 -0.0000 -0.0001 +vn -1.0000 -0.0001 -0.0000 +vn -1.0000 -0.0001 0.0000 +vn -1.0000 -0.0000 0.0001 +vn -1.0000 0.0000 0.0001 +vn -1.0000 0.0001 0.0000 +vn -1.0000 0.0001 -0.0000 +vn -1.0000 0.0000 -0.0001 +vn -0.7113 0.0000 -0.7028 +vn -0.7114 -0.4131 -0.5686 +vn -0.7114 -0.6684 -0.2172 +vn -0.7114 -0.6684 0.2172 +vn -0.7114 -0.4131 0.5686 +vn -0.7114 -0.0000 0.7028 +vn -0.7114 0.4131 -0.5686 +vn -0.7114 0.6684 -0.2172 +vn -0.7114 0.6684 0.2172 +vn -0.7114 0.4131 0.5686 +vn 0.6270 0.0341 -0.7783 +vn 0.7479 -0.2639 -0.6091 +vn 0.6900 0.2090 -0.6930 +vn 0.7735 0.3433 -0.5328 +vn 0.7612 0.4296 -0.4858 +vn 0.5998 0.8001 0.0000 +vn 0.7628 0.3648 0.5338 +vn 0.7528 0.2648 0.6027 +vn 0.7763 0.4338 0.4574 +vn 0.6339 -0.0344 0.7726 +vn 0.6955 -0.2100 0.6871 +vn 0.7772 -0.3408 0.5290 +vn 0.7644 -0.4285 0.4817 +vn 0.5998 -0.8002 -0.0000 +vn 0.5998 -0.8002 0.0000 +vn 0.7592 -0.3671 -0.5375 +vn 0.7732 -0.4349 -0.4616 +vn -0.9826 -0.1825 0.0351 +vn -0.9861 -0.1633 0.0314 +vn -1.0000 0.0000 0.0000 +vn -0.9447 -0.3220 0.0620 +vn -0.4682 -0.8677 0.1671 +vn -0.3449 -0.9215 0.1787 +vn -0.3487 -0.9201 0.1783 +vn -0.1477 -0.9682 0.2019 +vn -0.1483 -0.9682 0.2013 +vn 0.0094 -0.9789 0.2041 +vn 0.0095 -0.9789 0.2041 +vn 0.1423 -0.9686 0.2039 +vn 0.1459 -0.9681 0.2036 +vn 0.2887 -0.9302 0.2265 +vn 0.2893 -0.9303 0.2256 +vn 0.5410 -0.8110 0.2228 +vn 0.5458 -0.8078 0.2226 +vn 0.8180 -0.5431 0.1892 +vn 0.8283 -0.5283 0.1869 +vn 0.9477 -0.2876 0.1386 +vn 0.9459 -0.2922 0.1411 +vn 0.9844 -0.1458 0.0981 +vn 0.9962 0.0000 0.0873 +vn 0.9957 0.0000 0.0921 +vn 0.9803 -0.1670 0.1057 +vn -1.0000 0.0000 -0.0017 +vn -1.0000 0.0000 0.0013 +vn -1.0000 -0.0023 0.0020 +vn -1.0000 -0.0006 -0.0023 +vn -0.0151 0.9999 -0.0004 +vn -0.0136 0.9999 -0.0000 +vn -0.0210 0.9998 -0.0020 +vn -0.0225 0.9997 -0.0025 +vn -0.9470 0.3212 -0.0000 +vn -0.9456 -0.3253 0.0000 +vn 0.0049 -1.0000 0.0039 +vn 0.0019 -1.0000 0.0048 +vn 0.0162 -0.9999 0.0008 +vn 0.0192 -0.9998 0.0000 +vn -0.9891 -0.1443 0.0278 +vn -0.3519 -0.9192 0.1770 +vn -0.1481 -0.9686 0.1998 +vn 0.0096 -0.9789 0.2041 +vn 0.1511 -0.9677 0.2018 +vn 0.2913 -0.9302 0.2231 +vn 0.5504 -0.8048 0.2223 +vn 0.8377 -0.5140 0.1846 +vn 0.9291 -0.3361 0.1541 +vn 0.9945 0.0000 0.1047 +vn 0.9648 -0.2310 0.1258 +vn -1.0000 -0.0012 0.0033 +vn -1.0000 0.0012 0.0013 +vn -1.0000 0.0029 0.0000 +vn -0.7073 0.0000 0.7069 +vn -0.7071 0.0000 0.7071 +vn -0.7081 -0.0001 0.7061 +vn -0.7084 0.0000 0.7058 +vn -0.6465 -0.1611 0.7457 +vn -0.6517 -0.1001 0.7518 +vn -0.5185 -0.4279 0.7403 +vn -0.4910 -0.4492 0.7464 +vn -0.2418 -0.6393 0.7300 +vn -0.2110 -0.6471 0.7327 +vn -0.0857 -0.6029 0.7932 +vn -0.0884 -0.6013 0.7941 +vn 0.0057 -0.6063 0.7952 +vn 0.0059 -0.6063 0.7952 +vn 0.0919 -0.6007 0.7941 +vn 0.0942 -0.6001 0.7944 +vn 0.1788 -0.5622 0.8074 +vn 0.1814 -0.5625 0.8067 +vn 0.3289 -0.5445 0.7716 +vn 0.3988 -0.5219 0.7540 +vn 0.5280 -0.3454 0.7758 +vn 0.5523 -0.3151 0.7718 +vn 0.7026 -0.2598 0.6625 +vn 0.7038 -0.2683 0.6578 +vn 0.6990 -0.1653 0.6957 +vn 0.6935 -0.1761 0.6986 +vn 0.6799 0.0000 0.7333 +vn 0.6755 0.0000 0.7373 +vn -0.5526 0.4248 0.7170 +vn -0.5599 0.4156 0.7168 +vn -0.6531 -0.0084 0.7572 +vn -0.6534 -0.0126 0.7569 +vn -0.1919 0.6994 0.6885 +vn -0.2572 0.6526 0.7127 +vn -0.5381 -0.4211 0.7301 +vn -0.5676 -0.3977 0.7208 +vn -0.2378 -0.6598 0.7128 +vn -0.2050 -0.6707 0.7128 +vn -0.0028 -0.7114 0.7027 +vn 0.0013 -0.7050 0.7092 +vn -0.6891 -0.0074 0.7247 +vn -0.7055 0.0032 0.7087 +vn -0.0331 0.7148 0.6985 +vn -0.0418 0.6912 0.7215 +vn -0.9515 -0.3076 0.0000 +vn -0.3087 -0.9511 0.0000 +vn -0.6324 -0.2061 0.7467 +vn -0.6340 -0.2024 0.7464 +vn -0.6653 -0.0000 0.7466 +vn -0.6651 -0.0000 0.7467 +vn -0.5371 -0.3924 0.7467 +vn -0.5404 -0.3888 0.7462 +vn -0.3894 -0.5393 0.7467 +vn -0.3940 -0.5366 0.7462 +vn -0.2036 -0.6333 0.7467 +vn -0.2087 -0.6321 0.7463 +vn -0.0000 -0.6652 0.7467 +vn -0.0000 -0.6654 0.7465 +vn 0.9515 -0.3076 0.0000 +vn 0.3087 -0.9511 0.0000 +vn 0.6324 -0.2061 0.7467 +vn 0.6651 0.0000 0.7467 +vn 0.6653 0.0000 0.7466 +vn 0.6340 -0.2024 0.7464 +vn 0.5371 -0.3924 0.7467 +vn 0.5404 -0.3888 0.7462 +vn 0.3894 -0.5393 0.7466 +vn 0.3941 -0.5366 0.7461 +vn 0.2036 -0.6333 0.7467 +vn 0.2087 -0.6321 0.7463 +vn 0.9515 0.3076 0.0000 +vn 0.9515 0.3076 -0.0000 +vn 0.3087 0.9511 -0.0000 +vn 0.6324 0.2061 0.7467 +vn 0.6340 0.2024 0.7464 +vn 0.5371 0.3924 0.7467 +vn 0.5403 0.3888 0.7462 +vn 0.3894 0.5393 0.7467 +vn 0.3941 0.5366 0.7461 +vn 0.2036 0.6333 0.7467 +vn 0.2087 0.6321 0.7463 +vn -0.0000 0.6652 0.7467 +vn -0.0000 0.6654 0.7465 +vn -0.9515 0.3076 -0.0000 +vn -0.8090 0.5878 -0.0000 +vn -0.3087 0.9511 0.0000 +vn -0.3087 0.9511 -0.0000 +vn -0.6324 0.2061 0.7467 +vn -0.6340 0.2024 0.7464 +vn -0.5371 0.3924 0.7467 +vn -0.5403 0.3888 0.7462 +vn -0.3894 0.5393 0.7466 +vn -0.3941 0.5366 0.7461 +vn -0.2036 0.6333 0.7467 +vn -0.2087 0.6321 0.7463 +vn 0.5713 0.1596 -0.8051 +vn 0.4388 -0.0121 -0.8985 +vn 0.4650 0.0121 0.8852 +vn 0.6063 0.1472 0.7815 +vn 0.9633 0.2685 -0.0000 +vn 0.9685 0.2490 -0.0000 +vn -0.0686 0.9976 0.0000 +vn 0.5884 -0.1496 -0.7946 +vn 0.5893 -0.1573 0.7924 +vn 0.9633 -0.2685 0.0000 +vn -0.0685 -0.9976 -0.0000 +vn -0.0685 -0.9976 0.0000 +vn -0.0097 -1.0000 -0.0000 +vn -0.0693 -0.9976 -0.0000 +vn -0.7113 -0.0000 -0.7028 +vn -0.7114 0.0000 0.7028 +vn 0.7479 0.2639 -0.6091 +vn 0.6270 -0.0341 -0.7783 +vn 0.6900 -0.2090 -0.6930 +vn 0.7612 -0.4296 -0.4858 +vn 0.7735 -0.3433 -0.5328 +vn 0.5998 -0.8001 0.0000 +vn 0.7628 -0.3648 0.5338 +vn 0.7763 -0.4338 0.4574 +vn 0.7528 -0.2648 0.6027 +vn 0.6339 0.0344 0.7726 +vn 0.6955 0.2100 0.6871 +vn 0.7644 0.4285 0.4817 +vn 0.7772 0.3408 0.5290 +vn 0.5998 0.8002 -0.0000 +vn 0.5998 0.8002 0.0000 +vn 0.7592 0.3671 -0.5375 +vn 0.7732 0.4349 -0.4616 +vn -0.9826 0.1825 0.0351 +vn -0.9861 0.1633 0.0314 +vn -0.9447 0.3220 0.0620 +vn -0.4682 0.8677 0.1671 +vn -0.3487 0.9201 0.1783 +vn -0.3449 0.9215 0.1787 +vn -0.1483 0.9682 0.2013 +vn -0.1477 0.9682 0.2019 +vn 0.0095 0.9789 0.2041 +vn 0.0094 0.9789 0.2041 +vn 0.1423 0.9686 0.2039 +vn 0.1459 0.9681 0.2036 +vn 0.2893 0.9303 0.2256 +vn 0.2887 0.9302 0.2265 +vn 0.5458 0.8078 0.2226 +vn 0.5410 0.8110 0.2228 +vn 0.8180 0.5431 0.1892 +vn 0.8283 0.5283 0.1869 +vn 0.9477 0.2876 0.1386 +vn 0.9459 0.2922 0.1411 +vn 0.9844 0.1458 0.0981 +vn 0.9803 0.1670 0.1057 +vn -1.0000 0.0006 -0.0023 +vn -1.0000 0.0023 0.0020 +vn -0.0151 -0.9999 -0.0004 +vn -0.0225 -0.9997 -0.0025 +vn -0.0210 -0.9998 -0.0020 +vn -0.0136 -0.9999 -0.0000 +vn -0.5878 -0.8090 -0.0000 +vn -0.9470 -0.3212 -0.0000 +vn -0.9456 0.3253 0.0000 +vn 0.0049 1.0000 0.0039 +vn 0.0192 0.9998 0.0000 +vn 0.0162 0.9999 0.0008 +vn 0.0019 1.0000 0.0048 +vn -0.9891 0.1443 0.0278 +vn -0.3519 0.9192 0.1770 +vn -0.1481 0.9686 0.1998 +vn 0.0096 0.9789 0.2041 +vn 0.1511 0.9677 0.2018 +vn 0.2913 0.9302 0.2231 +vn 0.5504 0.8048 0.2223 +vn 0.8377 0.5140 0.1846 +vn 0.9291 0.3361 0.1541 +vn 0.9648 0.2310 0.1258 +vn -1.0000 -0.0029 0.0000 +vn -1.0000 -0.0012 0.0013 +vn -1.0000 0.0012 0.0033 +vn -0.7081 0.0001 0.7061 +vn -0.6465 0.1611 0.7457 +vn -0.4910 0.4492 0.7464 +vn -0.5185 0.4279 0.7403 +vn -0.6517 0.1001 0.7518 +vn -0.2110 0.6471 0.7327 +vn -0.2418 0.6393 0.7300 +vn -0.0884 0.6013 0.7941 +vn -0.0857 0.6029 0.7932 +vn 0.0059 0.6063 0.7952 +vn 0.0057 0.6063 0.7952 +vn 0.0942 0.6001 0.7944 +vn 0.0919 0.6007 0.7941 +vn 0.1814 0.5625 0.8067 +vn 0.1788 0.5622 0.8074 +vn 0.3988 0.5219 0.7540 +vn 0.3289 0.5445 0.7716 +vn 0.5523 0.3151 0.7718 +vn 0.5280 0.3454 0.7758 +vn 0.7038 0.2683 0.6578 +vn 0.7026 0.2598 0.6625 +vn 0.6935 0.1761 0.6986 +vn 0.6990 0.1653 0.6957 +vn -0.5526 -0.4248 0.7170 +vn -0.6534 0.0126 0.7569 +vn -0.6531 0.0084 0.7572 +vn -0.5599 -0.4156 0.7168 +vn -0.1919 -0.6994 0.6885 +vn -0.2572 -0.6526 0.7127 +vn -0.5676 0.3977 0.7208 +vn -0.5381 0.4211 0.7301 +vn -0.2050 0.6707 0.7128 +vn -0.2378 0.6598 0.7128 +vn 0.0013 0.7050 0.7092 +vn -0.0028 0.7114 0.7027 +vn -0.6891 0.0074 0.7247 +vn -0.7055 -0.0032 0.7087 +vn -0.0331 -0.7148 0.6985 +vn -0.0418 -0.6912 0.7215 +vn -0.0126 -0.9999 -0.0000 +vn -0.2463 -0.6038 0.7582 +vn -0.7984 -0.4892 0.3510 +vn -0.2463 -0.6038 -0.7582 +vn 0.5884 0.1495 -0.7946 +vn 0.5894 0.1573 0.7924 +vn -0.2463 0.6037 0.7582 +vn -0.7984 0.4892 0.3510 +vn -0.2463 0.6038 -0.7582 +vn -0.7113 0.0000 -0.7029 +vn -0.7113 -0.4131 -0.5686 +vn -0.7113 -0.6684 -0.2172 +vn -0.7113 -0.6684 0.2172 +vn -0.7113 -0.4131 0.5686 +vn -0.7113 -0.0000 0.7029 +vn -0.7113 0.4131 -0.5686 +vn -0.7113 0.6684 0.2172 +vn -0.7113 0.4131 0.5686 +vn 0.7479 -0.2639 -0.6090 +vn 0.6899 0.2090 -0.6930 +vn 0.7528 0.2648 0.6026 +vn 0.7644 -0.4284 0.4818 +vn -0.2463 -0.6037 0.7582 +vn -0.2463 -0.6037 -0.7582 +vn -0.2463 0.6037 -0.7582 +vn 0.9923 -0.0740 0.0997 +vn 0.9925 -0.0743 0.0967 +vn 0.9922 -0.0777 0.0974 +vn 0.9920 -0.0764 0.1000 +vn -0.3004 -0.9366 0.1803 +vn -0.3068 -0.9346 0.1800 +vn -0.0994 -0.9771 0.1881 +vn -0.0999 -0.9771 0.1881 +vn 0.0087 -0.9819 0.1891 +vn 0.0088 -0.9819 0.1891 +vn 0.1179 -0.9750 0.1885 +vn 0.1194 -0.9748 0.1884 +vn 0.2524 -0.9458 0.2042 +vn 0.2509 -0.9463 0.2038 +vn 0.5048 -0.8384 0.2057 +vn 0.5073 -0.8369 0.2056 +vn 0.7935 -0.5809 0.1814 +vn 0.8024 -0.5690 0.1799 +vn 0.9605 -0.2452 0.1314 +vn 0.9648 -0.2295 0.1286 +vn 0.9930 -0.0744 0.0917 +vn 0.9961 0.0000 0.0885 +vn 0.9927 -0.0776 0.0926 +vn 0.9677 -0.2186 0.1256 +vn 0.9914 -0.0842 0.1003 +vn -1.0000 0.0000 -0.0018 +vn -1.0000 0.0000 0.0015 +vn -1.0000 -0.0036 0.0021 +vn -1.0000 -0.0008 -0.0023 +vn -0.0008 1.0000 -0.0001 +vn -0.0003 1.0000 0.0000 +vn -0.0026 1.0000 -0.0006 +vn -0.0031 1.0000 -0.0008 +vn -0.9480 0.3182 0.0000 +vn -0.9485 -0.3169 0.0000 +vn 0.0041 -1.0000 0.0033 +vn 0.0016 -1.0000 0.0040 +vn 0.0135 -0.9999 0.0007 +vn 0.0160 -0.9999 0.0000 +vn 0.9915 -0.0842 0.0988 +vn -0.9891 -0.1446 0.0278 +vn -0.3129 -0.9327 0.1796 +vn -0.1003 -0.9770 0.1881 +vn 0.0089 -0.9819 0.1891 +vn 0.1214 -0.9747 0.1877 +vn 0.2499 -0.9468 0.2027 +vn 0.5096 -0.8355 0.2055 +vn 0.8107 -0.5575 0.1784 +vn 0.9959 0.0000 0.0907 +vn 0.9920 -0.0836 0.0944 +vn -1.0000 -0.0013 0.0031 +vn 0.7005 -0.1989 0.6853 +vn 0.7030 -0.1523 0.6947 +vn 0.6772 -0.0436 0.7345 +vn 0.6703 -0.0334 0.7413 +vn -0.7080 -0.0002 0.7062 +vn -0.6510 -0.1938 0.7339 +vn -0.6744 -0.1116 0.7299 +vn -0.2215 -0.6517 0.7254 +vn -0.1772 -0.6664 0.7242 +vn -0.0625 -0.6351 0.7699 +vn -0.0626 -0.6340 0.7708 +vn 0.0056 -0.6367 0.7711 +vn 0.0057 -0.6367 0.7711 +vn 0.0782 -0.6324 0.7707 +vn 0.0787 -0.6323 0.7707 +vn 0.1643 -0.6088 0.7761 +vn 0.1626 -0.6106 0.7751 +vn 0.3231 -0.5878 0.7417 +vn 0.3816 -0.5675 0.7296 +vn 0.5261 -0.3751 0.7632 +vn 0.5417 -0.3542 0.7623 +vn 0.6703 -0.0576 0.7398 +vn 0.6705 -0.0576 0.7397 +vn 0.6722 -0.0577 0.7381 +vn 0.6724 -0.0578 0.7380 +vn 0.6753 0.0000 0.7375 +vn -0.7071 0.0000 0.7072 +vn -0.6737 -0.0678 0.7359 +vn -0.7033 0.0075 0.7108 +vn -0.0433 0.7200 0.6926 +vn -0.0602 0.6755 0.7349 +vn -0.2478 0.7448 0.6196 +vn -0.2341 0.7622 0.6035 +vn -0.6022 0.4661 0.6481 +vn -0.5879 0.4654 0.6616 +vn -0.6519 -0.0077 0.7582 +vn -0.6475 -0.0137 0.7619 +vn -0.5642 -0.4167 0.7128 +vn -0.5821 -0.3996 0.7082 +vn -0.2356 -0.6402 0.7312 +vn -0.1870 -0.6549 0.7322 +vn -0.0013 -0.7090 0.7052 +vn 0.0011 -0.7054 0.7088 +vn -0.5526 0.4249 0.7170 +vn -0.5677 -0.3977 0.7208 +vn -0.2049 -0.6707 0.7128 +vn -0.7071 -0.0000 0.7071 +vn -0.2463 0.6038 0.7582 +vn 0.5884 -0.1495 -0.7946 +vn 0.5894 -0.1573 0.7924 +vn -0.7113 -0.0000 -0.7029 +vn -0.7113 0.0000 0.7029 +vn 0.7479 0.2639 -0.6090 +vn 0.6899 -0.2090 -0.6930 +vn 0.7528 -0.2648 0.6026 +vn 0.7644 0.4284 0.4818 +vn 0.7644 0.4285 0.4818 +vn 0.9923 0.0740 0.0997 +vn 0.9920 0.0764 0.1000 +vn 0.9922 0.0777 0.0974 +vn 0.9925 0.0743 0.0967 +vn -0.3068 0.9346 0.1800 +vn -0.3004 0.9366 0.1803 +vn -0.0999 0.9771 0.1881 +vn -0.0994 0.9771 0.1881 +vn 0.0088 0.9819 0.1891 +vn 0.0087 0.9819 0.1891 +vn 0.1179 0.9750 0.1885 +vn 0.1194 0.9748 0.1884 +vn 0.2509 0.9463 0.2038 +vn 0.2524 0.9458 0.2042 +vn 0.5073 0.8369 0.2056 +vn 0.5048 0.8384 0.2057 +vn 0.7935 0.5809 0.1814 +vn 0.8024 0.5690 0.1799 +vn 0.9605 0.2452 0.1314 +vn 0.9648 0.2295 0.1286 +vn 0.9930 0.0744 0.0917 +vn 0.9927 0.0776 0.0926 +vn 0.9677 0.2186 0.1256 +vn 0.9914 0.0842 0.1003 +vn -1.0000 0.0008 -0.0023 +vn -1.0000 0.0036 0.0021 +vn -0.0008 -1.0000 -0.0001 +vn -0.0031 -1.0000 -0.0008 +vn -0.0026 -1.0000 -0.0006 +vn -0.0003 -1.0000 0.0000 +vn -0.9480 -0.3182 0.0000 +vn -0.9485 0.3169 -0.0000 +vn 0.0041 1.0000 0.0033 +vn 0.0160 0.9999 -0.0000 +vn 0.0135 0.9999 0.0007 +vn 0.0016 1.0000 0.0040 +vn 0.9915 0.0842 0.0988 +vn -0.9891 0.1446 0.0278 +vn -0.3129 0.9327 0.1796 +vn -0.1003 0.9770 0.1881 +vn 0.0089 0.9819 0.1891 +vn 0.1214 0.9747 0.1877 +vn 0.2499 0.9468 0.2027 +vn 0.5096 0.8355 0.2055 +vn 0.8107 0.5575 0.1784 +vn 0.9920 0.0836 0.0944 +vn -1.0000 0.0013 0.0031 +vn 0.7005 0.1989 0.6853 +vn 0.6703 0.0334 0.7413 +vn 0.6772 0.0436 0.7345 +vn 0.7030 0.1523 0.6947 +vn -0.7080 0.0002 0.7062 +vn -0.6510 0.1938 0.7339 +vn -0.6744 0.1116 0.7299 +vn -0.1772 0.6664 0.7242 +vn -0.2215 0.6517 0.7254 +vn -0.0626 0.6340 0.7708 +vn -0.0625 0.6351 0.7699 +vn 0.0057 0.6367 0.7711 +vn 0.0056 0.6367 0.7711 +vn 0.0787 0.6323 0.7707 +vn 0.0782 0.6324 0.7707 +vn 0.1626 0.6106 0.7751 +vn 0.1643 0.6088 0.7761 +vn 0.3816 0.5675 0.7296 +vn 0.3231 0.5878 0.7417 +vn 0.5417 0.3542 0.7623 +vn 0.5261 0.3751 0.7632 +vn 0.6705 0.0576 0.7397 +vn 0.6703 0.0576 0.7398 +vn 0.6724 0.0578 0.7380 +vn 0.6722 0.0577 0.7381 +vn -0.6737 0.0678 0.7359 +vn -0.7033 -0.0075 0.7108 +vn -0.0433 -0.7200 0.6926 +vn -0.2341 -0.7622 0.6035 +vn -0.2478 -0.7448 0.6196 +vn -0.0602 -0.6755 0.7349 +vn -0.5879 -0.4654 0.6616 +vn -0.6022 -0.4661 0.6481 +vn -0.6475 0.0137 0.7619 +vn -0.6519 0.0077 0.7582 +vn -0.5821 0.3996 0.7082 +vn -0.5642 0.4167 0.7128 +vn -0.1870 0.6549 0.7322 +vn -0.2356 0.6402 0.7312 +vn 0.0011 0.7054 0.7088 +vn -0.0013 0.7090 0.7052 +vn -0.5526 -0.4249 0.7170 +vn -0.5677 0.3977 0.7208 +vn -0.2049 0.6707 0.7128 +vn 0.9511 0.3090 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.3090 0.9511 0.0000 +vn -0.9511 0.3090 -0.0000 +vn 0.9511 -0.3090 0.0000 +vn 0.5634 0.1817 0.8060 +vn 0.5621 0.1849 0.8061 +vn 0.5916 0.0013 0.8062 +vn 0.5917 -0.0009 0.8062 +vn 0.4800 0.3467 0.8059 +vn 0.4772 0.3501 0.8060 +vn 0.3496 0.4780 0.8058 +vn 0.3454 0.4808 0.8059 +vn 0.1848 0.5627 0.8058 +vn 0.1799 0.5640 0.8059 +vn 0.0017 0.5922 0.8058 +vn -0.0030 0.5919 0.8060 +vn -0.1817 0.5635 0.8059 +vn -0.1852 0.5621 0.8061 +vn -0.3472 0.4793 0.8061 +vn -0.3491 0.4777 0.8062 +vn -0.4785 0.3480 0.8062 +vn -0.4790 0.3473 0.8062 +vn -0.5627 0.1825 0.8062 +vn -0.5626 0.1833 0.8062 +vn -0.5916 -0.0009 0.8062 +vn -0.5919 0.0015 0.8060 +vn -0.5623 -0.1842 0.8061 +vn -0.5638 -0.1807 0.8059 +vn -0.4777 -0.3492 0.8061 +vn -0.4809 -0.3457 0.8057 +vn -0.3463 -0.4799 0.8061 +vn -0.3508 -0.4774 0.8056 +vn -0.1811 -0.5634 0.8061 +vn -0.1861 -0.5624 0.8057 +vn 0.0016 -0.5917 0.8061 +vn -0.0029 -0.5922 0.8058 +vn 0.1840 -0.5623 0.8062 +vn 0.1808 -0.5637 0.8059 +vn 0.3483 -0.4781 0.8063 +vn 0.3467 -0.4796 0.8061 +vn 0.4785 -0.3477 0.8063 +vn 0.4785 -0.3478 0.8063 +vn 0.5627 -0.1828 0.8062 +vn 0.5626 -0.1828 0.8062 +vn -1.0000 0.0039 0.0000 +vn -0.7162 -0.6979 0.0000 +vn -0.0004 -1.0000 0.0000 +vn -0.3668 -0.9303 0.0000 +vn -0.5590 -0.8292 0.0000 +vn -0.6355 -0.7721 0.0000 +vn -0.4395 -0.8982 0.0000 +vn -0.2272 -0.9738 0.0000 +vn 0.2272 -0.9738 0.0000 +vn 0.4395 -0.8982 0.0000 +vn 0.6257 -0.7801 0.0000 +vn 0.7801 -0.6257 0.0000 +vn 0.8982 -0.4395 0.0000 +vn 0.9738 -0.2272 0.0000 +vn 0.9738 0.2272 0.0000 +vn 0.8982 0.4395 0.0000 +vn 0.7801 0.6257 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.8347 -0.5507 0.0000 +vn 0.9718 -0.2358 0.0000 +vn 0.9496 -0.3134 0.0000 +vn -0.7162 -0.6979 -0.0000 +vn 0.8888 -0.4583 0.0000 +vn -0.0002 -1.0000 0.0000 +vn -0.0001 -1.0000 0.0000 +vn 0.9848 -0.1738 0.0000 +vn 0.9397 -0.3421 0.0000 +vn -0.9659 -0.2588 0.0000 +vn 0.7660 -0.6428 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.1736 -0.9848 0.0000 +vn -0.1737 -0.9848 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.7660 -0.6428 0.0000 +vn -0.5540 -0.8325 0.0000 +vn -1.0000 0.0044 0.0000 +vn -0.5540 -0.8325 -0.0000 +vn -0.3921 0.0000 -0.9199 +vn -0.3920 0.0015 -0.9200 +vn -0.3920 0.0016 -0.9199 +vn -0.3922 0.0000 -0.9199 +vn -0.4520 -0.8920 0.0000 +vn -0.3590 -0.9333 -0.0000 +vn -0.1467 -0.9892 0.0000 +vn -0.3590 -0.9333 0.0000 +vn -0.9975 -0.0709 0.0000 +vn -0.3346 -0.9424 0.0000 +vn -0.0709 -0.9975 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.9424 -0.3346 0.0000 +vn 0.8624 -0.5063 0.0000 +vn -0.9999 -0.0087 0.0139 +vn -0.9999 0.0000 0.0125 +vn -0.9992 0.0000 0.0389 +vn 0.0709 -0.9975 0.0000 +vn -0.0689 -0.9976 0.0022 +vn -0.0671 -0.9977 0.0000 +vn 0.0693 -0.9976 0.0022 +vn -0.9982 -0.0594 0.0035 +vn -0.9977 -0.0675 0.0051 +vn 0.0000 -0.3647 -0.9311 +vn 0.9976 -0.0685 0.0041 +vn 0.9982 -0.0599 0.0045 +vn -0.3308 -0.9437 0.0051 +vn -0.3303 -0.9438 0.0128 +vn 0.3330 -0.9429 0.0049 +vn 0.3351 -0.9421 0.0133 +vn -0.7158 -0.6982 0.0140 +vn -0.7063 -0.7075 0.0237 +vn -0.9507 -0.3098 0.0123 +vn -0.9439 -0.3298 0.0182 +vn 0.7058 -0.7083 0.0135 +vn 0.7176 -0.6960 0.0242 +vn 0.9431 -0.3322 0.0128 +vn 0.9505 -0.3101 0.0174 +vn -0.0000 -0.3647 -0.9311 +vn -0.9496 -0.3135 -0.0000 +vn -0.8072 -0.5903 -0.0000 +vn -0.5903 -0.8072 -0.0000 +vn -0.3135 -0.9496 -0.0000 +vn -0.0800 -0.9968 -0.0000 +vn 0.0800 -0.9968 -0.0000 +vn 0.3135 -0.9496 -0.0000 +vn 0.5903 -0.8072 -0.0000 +vn 0.8071 -0.5903 -0.0000 +vn 0.9496 -0.3135 -0.0000 +vn -1.0000 -0.0039 0.0000 +vn -0.7162 0.6979 -0.0000 +vn -0.7162 0.6979 0.0000 +vn -0.0004 1.0000 0.0000 +vn -0.3668 0.9303 0.0000 +vn -0.5590 0.8292 0.0000 +vn -0.6355 0.7721 0.0000 +vn -0.4395 0.8982 0.0000 +vn -0.2272 0.9738 0.0000 +vn 0.2272 0.9738 0.0000 +vn 0.4395 0.8982 0.0000 +vn 0.6257 0.7801 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.8347 0.5508 0.0000 +vn 0.9496 0.3134 0.0000 +vn 0.9718 0.2358 0.0000 +vn 0.8888 0.4583 -0.0000 +vn 0.8888 0.4583 0.0000 +vn 0.9718 0.2358 -0.0000 +vn -0.0002 1.0000 0.0000 +vn -0.0001 1.0000 0.0000 +vn -0.0003 1.0000 -0.0000 +vn 0.9848 0.1738 0.0000 +vn 0.9397 0.3421 0.0000 +vn 0.7660 0.6428 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.1736 0.9848 0.0000 +vn -0.1736 0.9848 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.7660 0.6428 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.5540 0.8325 0.0000 +vn -0.5540 0.8325 -0.0000 +vn -1.0000 -0.0044 0.0000 +vn -0.3920 -0.0016 -0.9200 +vn -0.3920 -0.0015 -0.9200 +vn -0.4520 0.8920 0.0000 +vn -0.1467 0.9892 0.0000 +vn -0.3590 0.9333 -0.0000 +vn -0.3590 0.9333 0.0000 +vn -0.9975 0.0709 0.0000 +vn -0.3346 0.9424 0.0000 +vn -0.0709 0.9975 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.9424 0.3346 0.0000 +vn 0.8624 0.5063 0.0000 +vn -0.9999 0.0087 0.0139 +vn 0.0709 0.9975 0.0000 +vn 0.0693 0.9976 0.0022 +vn -0.0671 0.9977 0.0000 +vn -0.0689 0.9976 0.0022 +vn -0.9977 0.0675 0.0051 +vn -0.9982 0.0594 0.0035 +vn 0.0000 0.3647 -0.9311 +vn 0.9982 0.0599 0.0045 +vn 0.9976 0.0685 0.0041 +vn -0.3308 0.9437 0.0051 +vn -0.3303 0.9438 0.0128 +vn 0.3330 0.9429 0.0049 +vn 0.3351 0.9421 0.0133 +vn -0.7158 0.6982 0.0140 +vn -0.7063 0.7075 0.0237 +vn -0.9507 0.3098 0.0123 +vn -0.9439 0.3297 0.0182 +vn 0.7058 0.7083 0.0135 +vn 0.7176 0.6960 0.0242 +vn 0.9431 0.3322 0.0128 +vn 0.9505 0.3101 0.0174 +vn -0.0000 0.3647 -0.9311 +vn -0.9496 0.3135 0.0000 +vn -0.9496 0.3135 -0.0000 +vn -0.8072 0.5903 -0.0000 +vn -0.5903 0.8072 -0.0000 +vn -0.5903 0.8072 0.0000 +vn -0.3135 0.9496 0.0000 +vn -0.0800 0.9968 0.0000 +vn 0.0800 0.9968 0.0000 +vn 0.0800 0.9968 -0.0000 +vn 0.3135 0.9496 -0.0000 +vn 0.5903 0.8072 -0.0000 +vn 0.8071 0.5903 -0.0000 +vn 0.9496 0.3135 -0.0000 +vn 0.9496 0.3135 0.0000 +vn -0.9496 -0.3135 0.0000 +vn -0.8072 -0.5903 0.0000 +vn -0.5903 -0.8072 0.0000 +vn -0.3135 -0.9496 0.0000 +vn -0.0800 -0.9968 0.0000 +vn 0.0800 -0.9968 0.0000 +vn 0.3135 -0.9496 0.0000 +vn 0.5903 -0.8072 0.0000 +vn 0.8071 -0.5903 0.0000 +vn 0.9496 -0.3135 0.0000 +vn 0.8071 0.5903 0.0000 +vn 0.5903 0.8072 0.0000 +vn 0.3135 0.9496 0.0000 +vn -0.8072 0.5903 0.0000 +vn 0.8072 0.5903 0.0000 +vn 0.8072 -0.5903 -0.0000 +vn 0.8072 -0.5903 0.0000 +vn 0.9659 0.2588 -0.0000 +vn 0.9659 0.2588 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.8660 0.5000 -0.0000 +vn -0.9659 0.2588 -0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.2588 -0.9659 0.0000 +vn 0.2588 -0.9659 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.9659 -0.2588 0.0000 +vn 0.6073 0.0000 0.7945 +vn 0.5259 0.3036 0.7945 +vn 0.4134 0.2387 0.8787 +vn 0.4773 0.0000 0.8787 +vn 0.3036 0.5259 0.7945 +vn 0.2387 0.4134 0.8787 +vn -0.0000 0.6073 0.7945 +vn 0.0000 0.4773 0.8787 +vn -0.3036 0.5259 0.7945 +vn -0.2387 0.4134 0.8787 +vn -0.5259 0.3036 0.7945 +vn -0.4134 0.2387 0.8787 +vn -0.6073 0.0000 0.7945 +vn -0.4773 0.0000 0.8787 +vn -0.5259 -0.3036 0.7945 +vn -0.4134 -0.2387 0.8787 +vn -0.3036 -0.5259 0.7945 +vn -0.2387 -0.4134 0.8787 +vn -0.0000 -0.6073 0.7945 +vn 0.0000 -0.4773 0.8787 +vn 0.3036 -0.5259 0.7945 +vn 0.2387 -0.4134 0.8787 +vn 0.5259 -0.3037 0.7945 +vn 0.4134 -0.2387 0.8787 +vn 0.5882 -0.0000 -0.8087 +vn 0.5094 0.2941 -0.8087 +vn 0.5094 0.2941 0.8087 +vn 0.5882 0.0000 0.8087 +vn 0.2941 0.5094 -0.8087 +vn 0.2941 0.5094 0.8087 +vn -0.0000 0.5882 -0.8087 +vn -0.0000 0.5882 0.8087 +vn -0.2941 0.5094 -0.8087 +vn -0.2941 0.5094 0.8087 +vn -0.5094 0.2941 -0.8087 +vn -0.5094 0.2941 0.8087 +vn -0.5882 -0.0000 -0.8087 +vn -0.5882 0.0000 0.8087 +vn -0.5094 -0.2941 -0.8087 +vn -0.5094 -0.2941 0.8087 +vn -0.2941 -0.5094 -0.8087 +vn -0.2941 -0.5094 0.8087 +vn 0.0000 -0.5882 -0.8087 +vn -0.0000 -0.5882 0.8087 +vn 0.2941 -0.5094 -0.8087 +vn 0.2941 -0.5093 0.8088 +vn 0.5094 -0.2941 -0.8087 +vn 0.5094 -0.2941 0.8087 +vn -0.9659 0.2588 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.2588 0.9659 -0.0000 +vn 0.5259 -0.3036 0.7945 +vn -0.0000 -0.5882 -0.8087 +vn 0.2941 -0.5094 0.8087 +vn 0.6529 -0.7575 -0.0000 +vn 0.6526 -0.7577 0.0013 +vn -0.9704 0.2414 0.0000 +vn -0.9073 0.4205 0.0000 +vn -0.9871 0.1604 0.0000 +vn -0.9658 0.2593 0.0000 +vn -0.9999 0.0147 0.0000 +vn -0.9738 -0.2272 0.0000 +vn -0.8982 -0.4395 0.0000 +vn -0.7801 -0.6257 0.0000 +vn -0.6257 -0.7801 0.0000 +vn -0.0100 -0.9999 0.0000 +vn 0.1890 -0.9820 0.0000 +vn 0.3929 -0.9196 0.0000 +vn 0.4055 -0.9141 0.0000 +vn 0.5059 -0.8626 0.0000 +vn 0.6802 -0.7330 0.0000 +vn 0.0642 -0.9979 0.0000 +vn 0.0643 -0.9979 0.0002 +vn 0.1281 -0.9918 0.0000 +vn 0.1281 -0.9918 0.0003 +vn 0.6528 -0.7576 0.0005 +vn 0.6522 -0.7580 0.0032 +vn 0.0640 -0.9980 0.0003 +vn 0.1281 -0.9918 0.0006 +vn 0.5172 -0.8559 0.0000 +vn 0.3271 -0.9450 0.0000 +vn 0.1776 -0.4808 -0.8587 +vn 0.2728 -0.1040 -0.9564 +vn 0.2443 -0.1677 -0.9551 +vn 0.1837 -0.5307 -0.8274 +vn 0.3674 0.0000 -0.9301 +vn -0.8071 -0.5904 -0.0000 +vn 0.5903 -0.8071 -0.0000 +vn 0.8071 -0.5904 -0.0000 +vn 0.6529 0.7575 0.0000 +vn 0.6526 0.7577 0.0013 +vn -0.9704 -0.2414 0.0000 +vn -0.9871 -0.1604 0.0000 +vn -0.9073 -0.4205 0.0000 +vn -0.9658 -0.2593 0.0000 +vn -0.9999 -0.0147 0.0000 +vn -0.9738 0.2272 0.0000 +vn -0.8982 0.4395 0.0000 +vn -0.7801 0.6257 0.0000 +vn -0.6257 0.7801 0.0000 +vn -0.0100 0.9999 0.0000 +vn 0.1890 0.9820 0.0000 +vn 0.3929 0.9196 0.0000 +vn 0.4055 0.9141 0.0000 +vn 0.5059 0.8626 0.0000 +vn 0.6802 0.7330 0.0000 +vn 0.0643 0.9979 0.0002 +vn 0.0642 0.9979 0.0000 +vn 0.1281 0.9918 0.0003 +vn 0.1281 0.9918 0.0000 +vn 0.6522 0.7580 0.0032 +vn 0.6528 0.7576 0.0005 +vn 0.0640 0.9980 0.0003 +vn 0.1281 0.9918 0.0006 +vn 0.5172 0.8559 0.0000 +vn 0.3271 0.9450 0.0000 +vn 0.1776 0.4808 -0.8587 +vn 0.1837 0.5307 -0.8274 +vn 0.2443 0.1677 -0.9551 +vn 0.2728 0.1040 -0.9564 +vn -0.8071 0.5904 0.0000 +vn 0.5903 0.8071 0.0000 +vn 0.8071 0.5904 0.0000 +vn 0.8072 0.5903 -0.0000 +vn -0.3135 0.9496 -0.0000 +vn -0.5903 0.8071 0.0000 +vn -0.8071 0.5903 0.0000 +vn -0.8071 -0.5903 0.0000 +vn -0.5904 -0.8071 0.0000 +vn 0.5903 -0.8071 0.0000 +vn 0.8071 -0.5904 0.0000 +vn -0.9659 -0.2588 -0.0000 +vn 0.5260 0.3036 0.7945 +vn -0.0000 0.4773 0.8787 +vn -0.5259 0.3037 0.7945 +vn -0.6073 -0.0000 0.7945 +vn -0.4773 -0.0000 0.8787 +vn -0.5259 -0.3037 0.7945 +vn -0.0000 -0.4773 0.8787 +vn 0.5095 0.2941 -0.8087 +vn 0.0000 0.5882 -0.8087 +vn 0.0000 0.5882 0.8087 +vn -0.5095 0.2941 -0.8087 +vn -0.5883 0.0000 -0.8087 +vn -0.5883 -0.0000 0.8087 +vn -0.5095 -0.2941 -0.8087 +vn 0.5095 -0.2941 -0.8087 +vn 0.2588 -0.9659 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.3037 0.5259 0.7945 +vn 0.5882 0.0000 -0.8087 +vn 0.9144 0.3788 0.1429 +vn 0.9221 0.3819 0.0627 +vn 0.9210 0.3814 0.0788 +vn 0.3780 0.9126 -0.1555 +vn 0.5063 0.8612 -0.0446 +vn 0.3813 0.9205 -0.0857 +vn -0.3593 0.8673 -0.3445 +vn -0.3592 0.8673 -0.3445 +vn -0.8688 0.3599 -0.3401 +vn -0.9144 -0.3788 -0.1429 +vn -0.3780 -0.9126 0.1555 +vn -0.3813 -0.9205 0.0857 +vn -0.4470 -0.8935 0.0440 +vn 0.3592 -0.8673 0.3445 +vn 0.3763 -0.9084 0.1822 +vn 0.3773 -0.9109 0.1671 +vn 0.8688 -0.3599 0.3401 +vn 0.9114 -0.3774 0.1641 +vn 0.9088 -0.3764 0.1803 +vn 0.9239 0.3826 0.0000 +vn 0.5530 0.8332 -0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.4719 -0.8817 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9239 -0.3826 0.0000 +vn -0.9239 -0.3827 -0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.3827 -0.9239 -0.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.9239 -0.3827 -0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.5565 -0.8309 0.0000 +vn 0.9144 -0.3787 0.1429 +vn 0.9210 -0.3814 0.0788 +vn 0.9221 -0.3819 0.0627 +vn 0.3780 -0.9127 -0.1555 +vn 0.3813 -0.9205 -0.0857 +vn 0.5063 -0.8612 -0.0446 +vn -0.3593 -0.8673 -0.3445 +vn -0.3592 -0.8673 -0.3445 +vn -0.8688 -0.3598 -0.3400 +vn -0.8688 -0.3599 -0.3401 +vn -0.9144 0.3787 -0.1429 +vn -0.9144 0.3788 -0.1429 +vn -0.3780 0.9126 0.1555 +vn -0.4470 0.8935 0.0440 +vn -0.3813 0.9205 0.0857 +vn 0.3592 0.8673 0.3445 +vn 0.3773 0.9109 0.1671 +vn 0.3763 0.9084 0.1822 +vn 0.8688 0.3598 0.3401 +vn 0.9088 0.3764 0.1803 +vn 0.9114 0.3774 0.1641 +vn 0.9239 -0.3826 -0.0000 +vn 0.5530 -0.8332 -0.0000 +vn -0.4719 0.8817 0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.9239 0.3827 0.0000 +vn -0.5565 0.8309 0.0000 +vn -0.3557 -0.9346 0.0001 +vn -0.4950 -0.8689 0.0000 +vn 0.2301 -0.9732 0.0002 +vn 0.2302 -0.9732 -0.0001 +vn 0.2302 -0.9732 -0.0000 +vn 0.7027 0.7115 0.0000 +vn 0.7027 0.7115 -0.0000 +vn -0.6225 -0.7826 0.0000 +vn -0.4950 0.8689 0.0000 +vn -0.3557 0.9346 0.0000 +vn -0.4950 0.8689 -0.0000 +vn 0.2302 0.9732 0.0000 +vn 0.7027 -0.7115 -0.0000 +vn 0.7027 -0.7115 0.0000 +vn -0.6225 0.7826 -0.0002 +vn 0.0493 0.0000 -0.9988 +vn 0.0685 0.0125 -0.9976 +vn 0.0699 -0.0119 -0.9975 +vn 0.0993 -0.0021 -0.9951 +vn 0.0999 0.0009 -0.9950 +vn 0.1001 -0.0009 -0.9950 +vn 0.0985 0.0000 -0.9951 +vn 0.0940 -0.0091 -0.9955 +vn 0.0581 0.0873 -0.9945 +vn 0.0719 0.0525 -0.9960 +vn 0.0008 0.1277 -0.9918 +vn -0.0067 0.1274 -0.9918 +vn -0.0712 0.1229 -0.9899 +vn -0.0670 0.1214 -0.9903 +vn -0.1652 0.0844 -0.9826 +vn -0.1328 0.0788 -0.9880 +vn -0.2215 0.0342 -0.9746 +vn -0.2349 0.0071 -0.9720 +vn -0.1226 -0.0885 -0.9885 +vn -0.1384 -0.0832 -0.9869 +vn -0.0663 -0.1221 -0.9903 +vn -0.0663 -0.1234 -0.9901 +vn -0.0087 -0.1230 -0.9924 +vn -0.0073 -0.1282 -0.9917 +vn 0.0674 -0.0710 -0.9952 +vn 0.0715 -0.0514 -0.9961 +vn 0.9239 0.3827 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn -0.3827 0.9239 -0.0000 +vn -0.9239 0.3827 -0.0000 +vn -0.3827 0.0000 0.9239 +vn -0.9239 -0.0000 0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.9239 0.0000 -0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 -0.0000 0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.9239 -0.0000 -0.3827 +vn -0.3826 0.0000 -0.9239 +vn -0.3826 -0.0000 0.9239 +vn -0.3826 0.0000 0.9239 +vn 0.3827 -0.0000 0.9239 +vn -0.9107 -0.3772 0.1685 +vn -0.9213 -0.3816 0.0744 +vn -0.9199 -0.3810 0.0927 +vn -0.3794 -0.9161 -0.1299 +vn -0.5066 -0.8614 -0.0370 +vn -0.3817 -0.9215 -0.0717 +vn 0.3605 -0.8703 -0.3355 +vn 0.8657 -0.3585 -0.3492 +vn 0.8657 -0.3586 -0.3492 +vn 0.9107 0.3772 -0.1685 +vn 0.3794 0.9161 0.1299 +vn 0.3817 0.9215 0.0717 +vn 0.4472 0.8937 0.0365 +vn -0.3605 0.8703 0.3355 +vn -0.3765 0.9091 0.1785 +vn -0.3777 0.9118 0.1611 +vn -0.8657 0.3586 0.3492 +vn -0.9104 0.3771 0.1702 +vn -0.9081 0.3761 0.1841 +vn -0.9239 -0.3826 -0.0000 +vn -0.5530 -0.8332 0.0000 +vn 0.4719 0.8817 -0.0000 +vn -0.9239 0.3826 0.0000 +vn 0.5565 0.8309 -0.0000 +vn -0.9107 0.3772 0.1685 +vn -0.9199 0.3810 0.0927 +vn -0.9213 0.3816 0.0744 +vn -0.3794 0.9161 -0.1299 +vn -0.3817 0.9215 -0.0717 +vn -0.5066 0.8614 -0.0370 +vn 0.3605 0.8703 -0.3355 +vn 0.8657 0.3586 -0.3492 +vn 0.9107 -0.3772 -0.1685 +vn 0.3794 -0.9161 0.1299 +vn 0.4472 -0.8937 0.0365 +vn 0.3817 -0.9215 0.0717 +vn -0.3605 -0.8703 0.3355 +vn -0.3777 -0.9118 0.1611 +vn -0.3765 -0.9091 0.1785 +vn -0.8657 -0.3586 0.3492 +vn -0.9081 -0.3761 0.1841 +vn -0.9104 -0.3771 0.1702 +vn -0.5530 0.8332 0.0000 +vn 0.4719 -0.8817 0.0000 +vn -0.9239 -0.3826 0.0000 +vn 0.5565 -0.8309 0.0000 +vn 0.3557 0.9346 0.0001 +vn 0.4950 0.8689 0.0000 +vn -0.4602 0.8878 0.0001 +vn -0.4602 0.8878 -0.0001 +vn -0.4602 0.8878 0.0002 +vn -0.7027 -0.7115 0.0000 +vn 0.6225 0.7826 0.0000 +vn 0.4949 -0.8689 0.0000 +vn 0.3557 -0.9346 0.0000 +vn 0.4950 -0.8689 -0.0000 +vn -0.4602 -0.8878 0.0000 +vn -0.7027 0.7115 0.0000 +vn 0.6225 -0.7826 -0.0002 +vn -0.1160 0.0000 -0.9932 +vn -0.1595 -0.0300 -0.9867 +vn -0.1666 0.0267 -0.9857 +vn 0.9234 0.3839 0.0000 +vn 0.8767 0.4809 0.0038 +vn 0.8793 0.4763 0.0036 +vn -0.2361 0.0114 -0.9717 +vn -0.2368 -0.0051 -0.9716 +vn -0.2395 0.0053 -0.9709 +vn -0.2305 0.0000 -0.9731 +vn -0.2235 0.0353 -0.9741 +vn -0.1086 -0.0939 -0.9896 +vn -0.1220 -0.0905 -0.9884 +vn -0.0008 -0.1277 -0.9918 +vn -0.0057 -0.1289 -0.9916 +vn 0.0712 -0.1229 -0.9899 +vn 0.0670 -0.1214 -0.9903 +vn 0.1652 -0.0844 -0.9826 +vn 0.1328 -0.0788 -0.9880 +vn 0.2214 -0.0342 -0.9746 +vn 0.2349 -0.0071 -0.9720 +vn 0.1226 0.0885 -0.9885 +vn 0.1384 0.0832 -0.9869 +vn 0.0663 0.1221 -0.9903 +vn 0.0663 0.1234 -0.9901 +vn -0.0037 0.1312 -0.9914 +vn -0.0059 0.1282 -0.9917 +vn -0.1542 0.0913 -0.9838 +vn -0.1199 0.0873 -0.9889 +vn -0.9238 0.3828 0.0000 +vn -0.9238 -0.3828 -0.0000 +vn -0.9238 -0.3828 0.0000 +vn -0.9238 0.0000 -0.3828 +vn -0.9238 0.0000 0.3828 +vn 0.3826 0.0000 -0.9239 +vn 0.3826 0.0000 0.9239 +vn 0.8788 0.4771 0.0000 +vn 0.3013 0.9535 0.0000 +vn -0.3014 0.9535 0.0000 +vn -0.8788 0.4773 0.0000 +vn -0.8788 -0.4773 -0.0000 +vn -0.3014 -0.9535 -0.0000 +vn 0.3013 -0.9535 -0.0000 +vn 0.8788 -0.4771 -0.0000 +vn 0.2999 0.9539 0.0109 +vn 0.3852 0.9228 0.0073 +vn 0.3836 0.9235 0.0073 +vn 0.2972 0.9548 0.0110 +vn -0.3002 0.9538 0.0076 +vn -0.3864 0.9223 0.0106 +vn -0.3839 0.9233 0.0105 +vn -0.2985 0.9544 0.0075 +vn -0.8795 0.4759 0.0000 +vn -0.9249 0.3803 0.0030 +vn -0.9235 0.3836 0.0029 +vn -0.8788 0.4772 -0.0000 +vn -0.9235 -0.3836 0.0029 +vn -0.9249 -0.3802 0.0030 +vn -0.8795 -0.4759 0.0001 +vn -0.8788 -0.4773 0.0000 +vn -0.3839 -0.9233 0.0106 +vn -0.3865 -0.9222 0.0107 +vn -0.3002 -0.9538 0.0077 +vn -0.2985 -0.9544 0.0076 +vn 0.3001 -0.9539 0.0077 +vn 0.3864 -0.9223 0.0107 +vn 0.3839 -0.9233 0.0106 +vn 0.2985 -0.9544 0.0076 +vn 0.9234 -0.3839 0.0001 +vn 0.8793 -0.4763 0.0036 +vn 0.8767 -0.4810 0.0038 +vn -0.0193 0.9998 -0.0000 +vn 0.2783 0.9605 -0.0000 +vn 0.5656 0.8247 -0.0000 +vn 0.7878 0.6160 0.0000 +vn 0.9665 0.2567 0.0000 +vn 0.9838 0.1795 0.0000 +vn 0.3090 0.9511 0.0000 +vn 0.8243 0.5661 0.0000 +vn 0.9555 0.2949 0.0000 +vn 0.3306 -0.0048 0.9438 +vn 0.3295 -0.0064 0.9441 +vn 0.3365 -0.0013 0.9417 +vn 0.3383 -0.0001 0.9410 +vn 0.3270 -0.0063 0.9450 +vn -0.0193 -0.9998 0.0000 +vn 0.2783 -0.9605 0.0000 +vn 0.5656 -0.8247 0.0000 +vn 0.7878 -0.6160 0.0000 +vn 0.9838 -0.1795 0.0000 +vn 0.9665 -0.2567 0.0000 +vn 0.8243 -0.5661 0.0000 +vn 0.9555 -0.2949 0.0000 +vn 0.3306 0.0048 0.9438 +vn 0.3381 0.0002 0.9411 +vn 0.3365 0.0013 0.9417 +vn 0.3295 0.0064 0.9441 +vn 0.3270 0.0063 0.9450 +vn 0.3332 0.0000 0.9429 +vn 0.3332 -0.0000 0.9428 +vn 0.3378 0.0000 0.9412 +vn 0.3379 -0.0001 0.9412 +vn 0.1718 -0.0000 0.9851 +vn 0.1722 0.0002 0.9851 +vn 0.3294 0.0004 0.9442 +vn 0.3295 -0.0000 0.9442 +vn 0.3381 0.0000 0.9411 +vn 0.1722 -0.0002 0.9851 +vn 0.3294 -0.0004 0.9442 +vn -0.7104 -0.0058 0.7038 +vn -0.7101 -0.0069 0.7040 +vn -0.7114 0.1955 0.6750 +vn -0.7009 0.2343 0.6737 +vn -0.6513 0.4189 0.6327 +vn -0.6117 0.4648 0.6401 +vn -0.4911 0.6112 0.6208 +vn -0.4273 0.6393 0.6393 +vn -0.2416 0.6862 0.6862 +vn -0.2095 0.6914 0.6914 +vn 0.1011 0.7035 0.7035 +vn 0.1373 0.7004 0.7004 +vn 0.4194 0.6299 0.6537 +vn 0.4434 0.6191 0.6482 +vn 0.6091 0.5458 0.5754 +vn 0.5938 0.5575 0.5801 +vn 0.6939 0.5191 0.4990 +vn 0.6954 0.5207 0.4952 +vn -0.6888 -0.2376 0.6849 +vn -0.7189 -0.1983 0.6662 +vn -0.6007 -0.4607 0.6534 +vn -0.6667 -0.4175 0.6174 +vn -0.4314 -0.6334 0.6424 +vn -0.5083 -0.6090 0.6090 +vn -0.2095 -0.6914 0.6914 +vn -0.2416 -0.6862 0.6862 +vn 0.1372 -0.7004 0.7004 +vn 0.1011 -0.7035 0.7035 +vn 0.4452 -0.6171 0.6489 +vn 0.4210 -0.6300 0.6525 +vn 0.5941 -0.5542 0.5830 +vn 0.6123 -0.5469 0.5709 +vn 0.6894 -0.5245 0.4997 +vn 0.6902 -0.5311 0.4915 +vn -0.2447 0.0000 -0.9696 +vn -0.2291 0.2868 -0.9302 +vn -0.0758 0.4201 -0.9043 +vn -0.2709 0.0000 0.9626 +vn -0.0978 0.4106 0.9065 +vn -0.2629 0.2756 0.9246 +vn 0.9490 0.1711 0.2648 +vn 0.9490 0.1711 -0.2648 +vn 0.2464 0.6038 0.7582 +vn 0.2464 0.6037 0.7582 +vn 0.0361 0.6226 0.7817 +vn 0.7984 0.4892 0.3510 +vn 0.6865 0.5741 0.4462 +vn 0.7953 0.5192 -0.3131 +vn 0.2464 0.6037 -0.7582 +vn 0.2464 0.6038 -0.7582 +vn -0.1948 0.5277 -0.8268 +vn -0.2240 0.5396 0.8116 +vn -0.0758 -0.4201 -0.9043 +vn -0.2315 -0.2880 -0.9292 +vn -0.2710 -0.2798 0.9210 +vn -0.0978 -0.4106 0.9065 +vn 0.9490 -0.1711 0.2648 +vn 0.9490 -0.1711 -0.2648 +vn 0.0137 -0.9999 0.0000 +vn 0.2464 -0.6038 0.7581 +vn 0.0361 -0.6226 0.7817 +vn 0.6865 -0.5741 0.4462 +vn 0.7984 -0.4892 0.3510 +vn 0.7953 -0.5192 -0.3131 +vn 0.2464 -0.6038 -0.7581 +vn -0.1994 -0.5307 -0.8238 +vn -0.2426 -0.5339 0.8100 +vn 0.0686 -0.3065 -0.9494 +vn -0.0060 1.0000 0.0000 +vn -0.0059 1.0000 0.0000 +vn -0.0247 -0.9997 0.0000 +vn -0.0252 -0.9997 0.0000 +vn 0.7112 -0.0000 -0.7030 +vn 0.7113 0.4132 -0.5687 +vn 0.7113 0.6685 -0.2172 +vn 0.7113 0.6685 0.2172 +vn 0.7112 0.4132 0.5687 +vn 0.7112 0.0000 0.7030 +vn 0.7113 -0.4132 -0.5687 +vn 0.7113 -0.6685 -0.2172 +vn 0.7113 -0.6685 0.2172 +vn 0.7113 -0.4132 0.5687 +vn 0.7112 -0.4132 0.5687 +vn -0.2496 0.0000 -0.9683 +vn -0.2467 0.2190 -0.9440 +vn -0.2605 -0.2090 -0.9426 +vn -0.2588 -0.4207 -0.8695 +vn -0.0585 -0.9983 0.0000 +vn -0.2600 -0.2125 0.9419 +vn -0.2536 -0.4152 0.8736 +vn -0.2538 0.0000 0.9672 +vn -0.2558 0.2153 0.9424 +vn -0.2450 0.4224 0.8727 +vn -0.0140 0.9999 0.0000 +vn -0.2323 0.4175 -0.8785 +vn 0.0137 0.9999 0.0000 +vn 0.0119 0.8064 0.5912 +vn 0.2463 0.6038 0.7581 +vn 0.2463 0.6038 -0.7581 +vn -0.1948 0.5278 -0.8268 +vn 0.0119 -0.8064 0.5912 +vn 0.2464 -0.6038 -0.7582 +vn 0.7112 0.4132 -0.5687 +vn 0.7112 -0.4132 -0.5687 +vn -0.0193 0.9998 0.0000 +vn 0.2783 0.9605 0.0000 +vn 0.3381 -0.0002 0.9411 +vn 0.3379 0.0001 0.9412 +vn -0.7101 -0.0069 0.7041 +vn -0.7113 0.1955 0.6751 +vn -0.7008 0.2343 0.6737 +vn -0.6117 0.4649 0.6401 +vn 0.4434 0.6190 0.6482 +vn 0.5938 0.5575 0.5802 +vn 0.6939 0.5191 0.4991 +vn 0.6954 0.5207 0.4953 +vn -0.6888 -0.2376 0.6850 +vn -0.7189 -0.1983 0.6663 +vn -0.6007 -0.4608 0.6534 +vn 0.4452 -0.6170 0.6489 +vn 0.4210 -0.6300 0.6526 +vn 0.5941 -0.5542 0.5831 +vn 0.6123 -0.5469 0.5710 +vn 0.6893 -0.5245 0.4997 +vn 0.6902 -0.5311 0.4916 +vn 0.7930 0.3044 0.5276 +vn 0.9490 0.1710 0.2647 +vn 0.9490 0.1710 -0.2647 +vn 0.8089 0.0000 -0.5879 +vn 0.8089 0.0000 0.5879 +vn 0.6866 0.5740 0.4463 +vn 0.6450 0.6037 -0.4686 +vn 0.0686 0.9976 0.0000 +vn 0.9490 -0.1710 0.2647 +vn 0.9490 -0.1710 -0.2647 +vn 0.6866 -0.5740 0.4463 +vn 0.6450 -0.6037 -0.4686 +vn 0.2464 -0.6037 -0.7582 +vn 0.0686 -0.9976 0.0000 +vn -0.0251 -0.9997 0.0000 +vn 0.7113 -0.0000 -0.7029 +vn 0.7113 0.4131 -0.5686 +vn 0.7113 0.4131 0.5686 +vn 0.7113 0.0000 0.7029 +vn 0.7113 -0.4131 -0.5686 +vn 0.7113 -0.4131 0.5686 +vn 0.8089 -0.0000 -0.5879 +vn 0.8089 -0.0000 0.5879 +vn 0.7930 -0.3044 0.5276 +vn 0.2464 -0.6037 0.7582 +vn 0.0361 -0.6225 0.7817 +vn -0.2468 0.2190 -0.9440 +vn -0.2606 -0.2090 -0.9426 +vn -0.2539 0.0000 0.9672 +vn -0.2559 0.2153 0.9424 +vn 0.5656 0.8247 0.0000 +vn 0.3295 -0.0065 0.9441 +vn 0.3383 0.0001 0.9410 +vn 0.3332 0.0000 0.9428 +vn 0.3381 -0.0000 0.9411 +vn 0.1718 0.0000 0.9851 +vn 0.3295 0.0000 0.9442 +vn 0.3331 0.0000 0.9429 +vn -0.7008 0.2343 0.6738 +vn 0.8943 0.3507 0.2781 +vn 0.8976 0.3469 -0.2719 +vn 0.0125 0.8067 0.5908 +vn 0.7984 0.4893 0.3510 +vn 0.7952 0.5193 -0.3131 +vn 0.6449 0.6037 -0.4686 +vn 0.8943 -0.3507 0.2781 +vn 0.8976 -0.3469 -0.2719 +vn 0.2464 -0.6038 0.7582 +vn 0.7983 -0.4893 0.3510 +vn 0.7952 -0.5193 -0.3131 +vn 1.0000 -0.0000 -0.0001 +vn 1.0000 0.0000 -0.0001 +vn 1.0000 0.0001 -0.0000 +vn 1.0000 0.0001 0.0000 +vn 1.0000 0.0000 0.0001 +vn 1.0000 -0.0000 0.0001 +vn 1.0000 -0.0001 0.0000 +vn 1.0000 -0.0001 -0.0000 +vn 0.7113 -0.0000 0.7029 +vn 0.2464 0.6038 0.7581 +vn 0.2464 0.6038 -0.7581 +vn 0.0686 0.3065 -0.9494 +vn 0.0692 0.8055 -0.5886 +vn 0.0125 -0.8067 0.5908 +vn 0.6449 -0.6037 -0.4686 +vn -0.2426 -0.5338 0.8100 +vn 0.7113 0.4132 0.5687 +vn 0.7112 -0.0000 0.7030 +vn 0.9837 -0.1795 0.0000 +vn -0.7114 0.1955 0.6751 +vn -0.4910 0.6112 0.6208 +vn 0.4434 0.6190 0.6483 +vn 0.6090 0.5458 0.5755 +vn 0.5938 0.5574 0.5802 +vn 0.6954 0.5208 0.4952 +vn 0.6902 -0.5310 0.4916 +vn -0.0759 0.4201 -0.9043 +vn -0.2630 0.2756 0.9246 +vn 0.8943 0.3505 0.2781 +vn 0.7931 0.3045 0.5276 +vn 0.8258 0.0294 0.5632 +vn 0.9490 0.1712 0.2648 +vn 0.8977 0.3467 -0.2719 +vn 0.9490 0.1712 -0.2648 +vn 0.8258 0.0294 -0.5632 +vn 0.7985 0.4890 0.3511 +vn 0.6866 0.5740 0.4462 +vn 0.7954 0.5189 -0.3131 +vn 0.0394 0.6115 -0.7903 +vn -0.0759 -0.4201 -0.9043 +vn 0.8943 -0.3505 0.2781 +vn 0.9490 -0.1712 0.2648 +vn 0.8258 -0.0294 0.5632 +vn 0.7931 -0.3044 0.5276 +vn 0.8977 -0.3467 -0.2719 +vn 0.9490 -0.1712 -0.2648 +vn 0.8258 -0.0294 -0.5632 +vn 0.6866 -0.5739 0.4462 +vn 0.7985 -0.4890 0.3511 +vn 0.7954 -0.5189 -0.3131 +vn 0.2463 -0.6037 -0.7582 +vn 0.0394 -0.6115 -0.7903 +vn -0.2467 0.2191 -0.9440 +vn -0.2536 -0.4153 0.8736 +vn -0.2323 0.4176 -0.8785 +vn 0.3090 -0.9511 -0.0000 +vn 0.0193 -0.9998 -0.0000 +vn -0.2783 -0.9605 -0.0000 +vn -0.5656 -0.8247 0.0000 +vn -0.7878 -0.6160 0.0000 +vn -0.9665 -0.2567 0.0000 +vn -0.9838 -0.1795 0.0000 +vn -0.8243 -0.5661 0.0000 +vn -0.9555 -0.2949 0.0000 +vn -0.3306 0.0048 0.9438 +vn -0.3295 0.0064 0.9441 +vn -0.3365 0.0013 0.9417 +vn -0.3383 0.0001 0.9410 +vn -0.3270 0.0063 0.9450 +vn 0.0193 0.9998 0.0000 +vn -0.2783 0.9605 -0.0000 +vn -0.5656 0.8247 -0.0000 +vn -0.7878 0.6160 0.0000 +vn -0.9838 0.1795 0.0000 +vn -0.9665 0.2567 0.0000 +vn -0.8243 0.5661 0.0000 +vn -0.9555 0.2949 0.0000 +vn -0.3306 -0.0048 0.9438 +vn -0.3381 -0.0002 0.9411 +vn -0.3365 -0.0013 0.9417 +vn -0.3295 -0.0064 0.9441 +vn -0.3270 -0.0063 0.9450 +vn -0.3332 0.0000 0.9429 +vn -0.3332 0.0000 0.9428 +vn -0.3378 0.0000 0.9412 +vn -0.3379 0.0001 0.9412 +vn -0.1718 0.0000 0.9851 +vn -0.1722 -0.0002 0.9851 +vn -0.3294 -0.0004 0.9442 +vn -0.3295 0.0000 0.9442 +vn -0.3381 -0.0000 0.9411 +vn -0.1722 0.0002 0.9851 +vn -0.3294 0.0004 0.9442 +vn 0.7105 0.0058 0.7037 +vn 0.7102 0.0069 0.7040 +vn 0.7114 -0.1956 0.6750 +vn 0.7009 -0.2344 0.6736 +vn 0.6514 -0.4189 0.6327 +vn 0.6117 -0.4649 0.6401 +vn 0.4911 -0.6112 0.6208 +vn 0.4273 -0.6393 0.6393 +vn 0.2416 -0.6862 0.6862 +vn 0.2095 -0.6914 0.6914 +vn -0.1011 -0.7035 0.7035 +vn -0.1373 -0.7004 0.7004 +vn -0.4194 -0.6299 0.6537 +vn -0.4434 -0.6190 0.6482 +vn -0.6090 -0.5458 0.5755 +vn -0.5938 -0.5575 0.5802 +vn -0.6939 -0.5191 0.4990 +vn -0.6954 -0.5208 0.4952 +vn 0.6888 0.2376 0.6849 +vn 0.7189 0.1983 0.6662 +vn 0.6007 0.4608 0.6534 +vn 0.6667 0.4176 0.6174 +vn 0.4314 0.6334 0.6424 +vn 0.5083 0.6090 0.6090 +vn 0.2095 0.6914 0.6914 +vn 0.2416 0.6862 0.6862 +vn -0.1372 0.7004 0.7004 +vn -0.1011 0.7035 0.7035 +vn -0.4452 0.6170 0.6489 +vn -0.4210 0.6300 0.6526 +vn -0.5941 0.5542 0.5831 +vn -0.6123 0.5469 0.5710 +vn -0.6894 0.5245 0.4997 +vn -0.6902 0.5311 0.4915 +vn 0.2447 0.0000 -0.9696 +vn 0.2291 -0.2868 -0.9302 +vn 0.0758 -0.4201 -0.9043 +vn 0.2709 0.0000 0.9626 +vn 0.0978 -0.4106 0.9065 +vn 0.2630 -0.2756 0.9246 +vn -0.9490 -0.1711 0.2647 +vn -0.9490 -0.1711 -0.2647 +vn -0.7851 -0.2940 -0.5452 +vn -0.7953 -0.5192 -0.3131 +vn -0.6449 -0.6038 -0.4685 +vn 0.1948 -0.5277 -0.8268 +vn 0.2240 -0.5396 0.8116 +vn -0.0690 -0.8054 0.5887 +vn 0.0758 0.4201 -0.9043 +vn 0.2315 0.2880 -0.9292 +vn 0.2710 0.2798 0.9210 +vn 0.0978 0.4106 0.9065 +vn -0.9490 0.1711 0.2647 +vn -0.7930 0.3046 0.5276 +vn -0.9490 0.1711 -0.2647 +vn -0.7851 0.2940 -0.5452 +vn -0.0361 0.6226 0.7817 +vn -0.6865 0.5742 0.4462 +vn -0.7953 0.5192 -0.3131 +vn -0.6449 0.6038 -0.4685 +vn 0.1994 0.5307 -0.8238 +vn 0.2426 0.5339 0.8100 +vn -0.0680 0.8052 -0.5890 +vn -0.0684 0.8052 0.5890 +vn -0.0690 0.8054 0.5887 +vn 0.0060 -1.0000 0.0000 +vn 0.0059 -1.0000 0.0000 +vn 0.0247 0.9997 0.0000 +vn 0.0252 0.9997 0.0000 +vn -0.7114 0.0000 -0.7028 +vn -0.7114 -0.4131 -0.5685 +vn -0.7115 -0.6683 -0.2172 +vn -0.7115 -0.6683 0.2172 +vn -0.7114 -0.4131 0.5685 +vn -0.7114 0.4131 -0.5685 +vn -0.7115 0.6683 -0.2172 +vn -0.7115 0.6683 0.2171 +vn -0.7114 0.4131 0.5685 +vn 0.2496 0.0000 -0.9683 +vn 0.2467 -0.2190 -0.9440 +vn 0.2606 0.2090 -0.9426 +vn 0.2588 0.4207 -0.8695 +vn 0.0585 0.9983 0.0000 +vn 0.2600 0.2125 0.9419 +vn 0.2536 0.4152 0.8736 +vn 0.2538 0.0000 0.9672 +vn 0.2558 -0.2153 0.9424 +vn 0.2450 -0.4224 0.8727 +vn 0.0140 -0.9999 0.0000 +vn 0.2323 -0.4175 -0.8785 +vn 0.2629 -0.2756 0.9246 +vn -0.7930 -0.3046 0.5276 +vn -0.8258 -0.0293 0.5631 +vn -0.8091 0.0000 -0.5877 +vn -0.8091 -0.0000 0.5877 +vn -0.8091 0.0000 0.5877 +vn -0.0395 -0.6115 -0.7903 +vn -0.8258 0.0293 0.5631 +vn -0.0395 0.6115 -0.7903 +vn -0.0692 0.8055 -0.5886 +vn -0.7114 -0.6683 -0.2172 +vn -0.7114 -0.6683 0.2172 +vn -0.7115 0.6683 0.2172 +vn 0.2468 -0.2191 -0.9440 +vn 0.2539 0.0000 0.9672 +vn 0.2559 -0.2153 0.9424 +vn 0.2323 -0.4176 -0.8785 +vn 0.0193 -0.9998 0.0000 +vn -0.2783 -0.9605 0.0000 +vn 0.0193 0.9998 -0.0000 +vn -0.5656 0.8247 0.0000 +vn -0.3332 -0.0000 0.9428 +vn 0.7114 -0.1955 0.6750 +vn 0.7009 -0.2343 0.6737 +vn 0.4911 -0.6112 0.6207 +vn 0.0978 -0.4107 0.9065 +vn -0.0137 -0.9999 0.0000 +vn -0.0361 -0.6226 0.7817 +vn -0.6865 -0.5742 0.4462 +vn 0.1948 -0.5278 -0.8268 +vn -0.0684 -0.8052 0.5890 +vn -0.0686 -0.3065 -0.9494 +vn 0.2468 -0.2190 -0.9440 +vn -0.0125 -0.8067 0.5908 +vn -0.0125 0.8067 0.5908 +vn -0.0686 0.3065 -0.9494 +vn -0.7114 0.6683 0.2172 +vn -0.3381 0.0002 0.9411 +vn -0.2783 0.9605 0.0000 +vn -0.3295 -0.0000 0.9442 +vn -0.3379 -0.0001 0.9412 +vn 0.7105 0.0057 0.7037 +vn 0.7114 -0.1955 0.6751 +vn 0.7008 -0.2343 0.6737 +vn 0.6513 -0.4189 0.6327 +vn 0.6117 -0.4648 0.6401 +vn -0.6939 -0.5192 0.4990 +vn 0.6887 0.2376 0.6850 +vn 0.7188 0.1983 0.6663 +vn 0.6007 0.4607 0.6534 +vn 0.6667 0.4175 0.6174 +vn -0.5941 0.5541 0.5831 +vn -0.6894 0.5245 0.4996 +vn -0.6902 0.5312 0.4914 +vn -0.8258 -0.0293 -0.5631 +vn -0.0361 -0.6225 0.7817 +vn -0.6865 -0.5742 0.4461 +vn -0.6448 -0.6039 -0.4685 +vn -0.0693 -0.8055 -0.5886 +vn 0.0978 0.4107 0.9065 +vn -0.8258 0.0293 -0.5631 +vn -0.0137 0.9999 0.0000 +vn -0.0119 0.8064 0.5912 +vn -0.6864 0.5742 0.4461 +vn -0.7952 0.5192 -0.3131 +vn -0.6448 0.6039 -0.4685 +vn 0.2605 0.2090 -0.9426 +vn -0.0119 -0.8064 0.5912 +vn -0.0692 -0.8055 -0.5886 +vn -0.6865 0.5742 0.4461 +vn -0.3331 0.0000 0.9429 +vn 0.7104 0.0058 0.7038 +vn 0.7101 0.0069 0.7040 +vn 0.4910 -0.6112 0.6208 +vn -0.6091 -0.5458 0.5755 +vn -0.6939 -0.5191 0.4991 +vn -0.6954 -0.5207 0.4952 +vn 0.6666 0.4175 0.6174 +vn -0.4452 0.6171 0.6489 +vn -0.4210 0.6300 0.6525 +vn -0.6893 0.5245 0.4997 +vn 0.0759 -0.4201 -0.9043 +vn -0.7985 -0.4891 0.3510 +vn -0.6866 -0.5741 0.4462 +vn 0.0759 0.4201 -0.9043 +vn -0.8977 0.3467 -0.2719 +vn -0.6866 0.5740 0.4462 +vn -0.7985 0.4891 0.3510 +vn -0.7953 0.5190 -0.3131 +vn -0.6449 0.6037 -0.4686 +vn 0.2426 0.5338 0.8100 +vn -0.7112 0.0000 -0.7030 +vn -0.7112 -0.4132 -0.5687 +vn -0.7113 -0.6685 -0.2172 +vn -0.7113 -0.6685 0.2172 +vn -0.7112 -0.4132 0.5687 +vn -0.7112 -0.0000 0.7030 +vn -0.7113 0.4132 -0.5687 +vn -0.7113 0.6685 -0.2172 +vn -0.7113 0.6685 0.2172 +vn -0.7113 0.4132 0.5687 +vn 0.2467 -0.2191 -0.9440 +vn -0.0681 -0.8053 -0.5890 +vn -0.0688 -0.8055 0.5887 +vn -0.7113 -0.4132 -0.5687 +vn -0.7113 -0.4132 0.5687 +vn -0.7112 0.4132 -0.5687 +vn -0.7112 0.4132 0.5687 +vn -0.2394 -0.6844 0.6886 +vn -0.2924 -0.6755 0.6769 +vn -0.3873 -0.5928 0.7061 +vn -0.3827 -0.5872 0.7133 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.5716 -0.2435 0.7836 +vn -0.6183 -0.1701 0.7673 +vn -0.2618 -0.5858 0.7670 +vn -0.3272 -0.5284 0.7834 +vn -0.3926 0.5904 0.7052 +vn -0.3918 0.5887 0.7071 +vn -0.2872 0.6753 0.6793 +vn -0.2370 0.6863 0.6876 +vn -0.6184 0.1701 0.7673 +vn -0.5715 0.2435 0.7836 +vn -0.3275 0.5283 0.7834 +vn -0.2622 0.5854 0.7672 +vn -0.7799 -0.6259 0.0025 +vn -0.7808 -0.6248 0.0027 +vn -0.7592 -0.6509 0.0001 +vn -0.7586 -0.6515 0.0000 +vn -0.7592 0.6509 0.0012 +vn -0.7586 0.6515 0.0013 +vn -0.7800 0.6258 0.0001 +vn -0.7812 0.6242 0.0000 +vn -0.7586 0.6515 0.0000 +vn -0.3920 0.0017 -0.9200 +vn -0.3919 -0.0017 -0.9200 +# 2459 vertex normals + +vt 0.7998 0.3708 0.0000 +vt 0.7897 0.3434 0.0000 +vt 0.8366 0.3487 0.0000 +vt 0.8367 0.3705 0.0000 +vt 0.7884 0.3426 0.0000 +vt 0.7895 0.3412 0.0000 +vt 0.8372 0.3472 0.0000 +vt 0.8381 0.3484 0.0000 +vt 0.8383 0.3703 0.0000 +vt 0.8379 0.3714 0.0000 +vt 0.8369 0.3721 0.0000 +vt 0.8005 0.3730 0.0000 +vt 0.7989 0.3720 0.0000 +vt 0.7976 0.3710 0.0000 +vt 0.7880 0.3442 0.0000 +vt 0.8266 0.3548 0.0000 +vt 0.8276 0.3547 0.0000 +vt 0.8274 0.3553 0.0000 +vt 0.8266 0.3553 0.0000 +vt 0.8266 0.3552 0.0000 +vt 0.8273 0.3553 0.0000 +vt 0.7880 0.3744 0.0000 +vt 0.7901 0.3744 0.0000 +vt 0.7901 0.3768 0.0000 +vt 0.7880 0.3768 0.0000 +vt 0.8381 0.3744 0.0000 +vt 0.8381 0.3768 0.0000 +vt 0.8274 0.3477 0.0000 +vt 0.8273 0.3477 0.0000 +vt 0.8274 0.3482 0.0000 +vt 0.8273 0.3482 0.0000 +vt 0.8301 0.3540 0.0000 +vt 0.8294 0.3540 0.0000 +vt 0.7907 0.3831 0.0000 +vt 0.7880 0.3831 0.0000 +vt 0.7880 0.3807 0.0000 +vt 0.7907 0.3807 0.0000 +vt 0.7880 0.3895 0.0000 +vt 0.7900 0.3895 0.0000 +vt 0.7900 0.3919 0.0000 +vt 0.7880 0.3919 0.0000 +vt 0.8166 0.3895 0.0000 +vt 0.8166 0.3919 0.0000 +vt 0.8194 0.3895 0.0000 +vt 0.8194 0.3919 0.0000 +vt 0.8105 0.3974 0.0000 +vt 0.8116 0.3961 0.0000 +vt 0.8133 0.3982 0.0000 +vt 0.8117 0.3986 0.0000 +vt 0.7902 0.3780 0.0000 +vt 0.8377 0.3780 0.0000 +vt 0.8437 0.3897 0.0000 +vt 0.8449 0.3908 0.0000 +vt 0.8424 0.3920 0.0000 +vt 0.8423 0.3903 0.0000 +vt 0.8267 0.3819 0.0000 +vt 0.8269 0.3831 0.0000 +vt 0.8049 0.3831 0.0000 +vt 0.8048 0.3819 0.0000 +vt 0.8228 0.3898 0.0000 +vt 0.8228 0.3915 0.0000 +vt 0.8213 0.3910 0.0000 +vt 0.8219 0.3895 0.0000 +vt 0.8247 0.3854 0.0000 +vt 0.8256 0.3868 0.0000 +vt 0.8235 0.3876 0.0000 +vt 0.8235 0.3859 0.0000 +vt 0.8268 0.3795 0.0000 +vt 0.8269 0.3807 0.0000 +vt 0.7904 0.3795 0.0000 +vt 0.7898 0.3853 0.0000 +vt 0.7902 0.3870 0.0000 +vt 0.7880 0.3860 0.0000 +vt 0.7887 0.3845 0.0000 +vt 0.7987 0.3831 0.0000 +vt 0.7986 0.3814 0.0000 +vt 0.8011 0.3815 0.0000 +vt 0.8003 0.3830 0.0000 +vt 0.7880 0.3978 0.0000 +vt 0.7885 0.3962 0.0000 +vt 0.8093 0.3951 0.0000 +vt 0.8091 0.3967 0.0000 +vt 0.8171 0.3931 0.0000 +vt 0.8187 0.3931 0.0000 +vt 0.8036 0.3815 0.0000 +vt 0.8044 0.3830 0.0000 +vt 0.8016 0.3831 0.0000 +vt 0.8019 0.3814 0.0000 +vt 0.8261 0.3456 0.0000 +vt 0.8261 0.3457 0.0000 +vt 0.8251 0.3457 0.0000 +vt 0.8252 0.3456 0.0000 +vt 0.8179 0.3536 0.0000 +vt 0.8179 0.3537 0.0000 +vt 0.8274 0.3478 0.0000 +vt 0.8179 0.3532 0.0000 +vt 0.8341 0.3489 0.0000 +vt 0.8341 0.3488 0.0000 +vt 0.8294 0.3541 0.0000 +vt 0.8301 0.3541 0.0000 +vt 0.8348 0.3489 0.0000 +vt 0.8238 0.3570 0.0000 +vt 0.8238 0.3569 0.0000 +vt 0.8226 0.3434 0.0000 +vt 0.8226 0.3433 0.0000 +vt 0.8230 0.3434 0.0000 +vt 0.7938 0.3533 0.0000 +vt 0.3139 0.2409 0.0000 +vt 0.3139 0.2399 0.0000 +vt 0.3151 0.2399 0.0000 +vt 0.3151 0.2409 0.0000 +vt 0.3011 0.1481 0.0000 +vt 0.3011 0.1491 0.0000 +vt 0.2999 0.1491 0.0000 +vt 0.2999 0.1481 0.0000 +vt 0.3011 0.1496 0.0000 +vt 0.2999 0.1496 0.0000 +vt 0.3139 0.2414 0.0000 +vt 0.3151 0.2414 0.0000 +vt 0.1616 0.2493 0.0000 +vt 0.1616 0.2483 0.0000 +vt 0.1623 0.2489 0.0000 +vt 0.1619 0.2494 0.0000 +vt 0.1616 0.2501 0.0000 +vt 0.1619 0.2500 0.0000 +vt 0.1629 0.2510 0.0000 +vt 0.1616 0.2510 0.0000 +vt 0.1623 0.2505 0.0000 +vt 0.1629 0.2507 0.0000 +vt 0.1629 0.2483 0.0000 +vt 0.1629 0.2487 0.0000 +vt 0.9244 0.0897 0.0000 +vt 0.9236 0.0897 0.0000 +vt 0.9236 0.0892 0.0000 +vt 0.9245 0.0892 0.0000 +vt 0.0584 0.1512 0.0000 +vt 0.0588 0.1512 0.0000 +vt 0.0588 0.1517 0.0000 +vt 0.0581 0.1517 0.0000 +vt 0.0584 0.1506 0.0000 +vt 0.0588 0.1506 0.0000 +vt 0.0581 0.1501 0.0000 +vt 0.0588 0.1501 0.0000 +vt 0.9179 0.1677 0.0000 +vt 0.9181 0.1683 0.0000 +vt 0.9172 0.1683 0.0000 +vt 0.9172 0.1678 0.0000 +vt 0.3153 0.2400 0.0000 +vt 0.3153 0.2409 0.0000 +vt 0.1614 0.2492 0.0000 +vt 0.1614 0.2485 0.0000 +vt 0.1614 0.2502 0.0000 +vt 0.1614 0.2509 0.0000 +vt 0.2997 0.1491 0.0000 +vt 0.2997 0.1482 0.0000 +vt 0.2997 0.1496 0.0000 +vt 0.3153 0.2414 0.0000 +vt 0.2498 0.1387 0.0000 +vt 0.2484 0.1387 0.0000 +vt 0.2483 0.1384 0.0000 +vt 0.2499 0.1384 0.0000 +vt 0.2483 0.1378 0.0000 +vt 0.2499 0.1378 0.0000 +vt 0.9192 0.0897 0.0000 +vt 0.9192 0.0892 0.0000 +vt 0.0632 0.1512 0.0000 +vt 0.0632 0.1517 0.0000 +vt 0.0632 0.1506 0.0000 +vt 0.0632 0.1502 0.0000 +vt 0.9128 0.1683 0.0000 +vt 0.9128 0.1678 0.0000 +vt 0.9013 0.0896 0.0000 +vt 0.9013 0.0892 0.0000 +vt 0.9189 0.0892 0.0000 +vt 0.9189 0.0897 0.0000 +vt 0.0811 0.1511 0.0000 +vt 0.0811 0.1515 0.0000 +vt 0.0635 0.1516 0.0000 +vt 0.0635 0.1512 0.0000 +vt 0.0811 0.1507 0.0000 +vt 0.0635 0.1506 0.0000 +vt 0.0811 0.1503 0.0000 +vt 0.0635 0.1502 0.0000 +vt 0.8949 0.1683 0.0000 +vt 0.8949 0.1679 0.0000 +vt 0.9125 0.1678 0.0000 +vt 0.9125 0.1683 0.0000 +vt 0.3127 0.2409 0.0000 +vt 0.3127 0.2399 0.0000 +vt 0.3023 0.1481 0.0000 +vt 0.3023 0.1491 0.0000 +vt 0.3023 0.1496 0.0000 +vt 0.3127 0.2414 0.0000 +vt 0.1641 0.2493 0.0000 +vt 0.1638 0.2494 0.0000 +vt 0.1635 0.2489 0.0000 +vt 0.1641 0.2483 0.0000 +vt 0.1641 0.2501 0.0000 +vt 0.1638 0.2500 0.0000 +vt 0.1635 0.2505 0.0000 +vt 0.1641 0.2510 0.0000 +vt 0.9244 0.0886 0.0000 +vt 0.9236 0.0886 0.0000 +vt 0.0570 0.1702 0.0000 +vt 0.0573 0.1707 0.0000 +vt 0.0566 0.1707 0.0000 +vt 0.0566 0.1702 0.0000 +vt 0.0570 0.1696 0.0000 +vt 0.0566 0.1696 0.0000 +vt 0.0566 0.1691 0.0000 +vt 0.0573 0.1691 0.0000 +vt 0.9179 0.1689 0.0000 +vt 0.9172 0.1689 0.0000 +vt 0.3125 0.2409 0.0000 +vt 0.3125 0.2400 0.0000 +vt 0.1643 0.2485 0.0000 +vt 0.1643 0.2492 0.0000 +vt 0.1643 0.2502 0.0000 +vt 0.1643 0.2509 0.0000 +vt 0.3025 0.1482 0.0000 +vt 0.3025 0.1491 0.0000 +vt 0.3025 0.1496 0.0000 +vt 0.3125 0.2414 0.0000 +vt 0.2498 0.1369 0.0000 +vt 0.2499 0.1372 0.0000 +vt 0.2483 0.1372 0.0000 +vt 0.2484 0.1369 0.0000 +vt 0.9192 0.0886 0.0000 +vt 0.0521 0.1702 0.0000 +vt 0.0521 0.1706 0.0000 +vt 0.0521 0.1696 0.0000 +vt 0.0521 0.1691 0.0000 +vt 0.9128 0.1689 0.0000 +vt 0.9013 0.0887 0.0000 +vt 0.9189 0.0886 0.0000 +vt 0.0342 0.1701 0.0000 +vt 0.0518 0.1701 0.0000 +vt 0.0518 0.1706 0.0000 +vt 0.0342 0.1704 0.0000 +vt 0.0342 0.1696 0.0000 +vt 0.0518 0.1696 0.0000 +vt 0.0342 0.1693 0.0000 +vt 0.0518 0.1691 0.0000 +vt 0.9125 0.1689 0.0000 +vt 0.8949 0.1688 0.0000 +vt 0.2229 0.2018 0.0000 +vt 0.2226 0.2027 0.0000 +vt 0.2213 0.2017 0.0000 +vt 0.2218 0.2033 0.0000 +vt 0.2209 0.2033 0.0000 +vt 0.2201 0.2027 0.0000 +vt 0.2198 0.2018 0.0000 +vt 0.2199 0.2014 0.0000 +vt 0.2228 0.2014 0.0000 +vt 0.3024 0.1241 0.0000 +vt 0.3027 0.1250 0.0000 +vt 0.3012 0.1251 0.0000 +vt 0.3026 0.1255 0.0000 +vt 0.2997 0.1255 0.0000 +vt 0.2997 0.1250 0.0000 +vt 0.2999 0.1241 0.0000 +vt 0.3007 0.1235 0.0000 +vt 0.3017 0.1235 0.0000 +vt 0.4660 0.1356 0.0000 +vt 0.4661 0.1353 0.0000 +vt 0.4665 0.1356 0.0000 +vt 0.4664 0.1351 0.0000 +vt 0.4667 0.1351 0.0000 +vt 0.4670 0.1353 0.0000 +vt 0.4671 0.1356 0.0000 +vt 0.4670 0.1360 0.0000 +vt 0.4667 0.1362 0.0000 +vt 0.4664 0.1362 0.0000 +vt 0.4661 0.1360 0.0000 +vt 0.7531 0.0237 0.0000 +vt 0.7532 0.0239 0.0000 +vt 0.7527 0.0239 0.0000 +vt 0.7528 0.0237 0.0000 +vt 0.7523 0.0238 0.0000 +vt 0.7525 0.0236 0.0000 +vt 0.0813 0.1511 0.0000 +vt 0.0813 0.1507 0.0000 +vt 0.2863 0.0997 0.0000 +vt 0.2862 0.0995 0.0000 +vt 0.2866 0.0994 0.0000 +vt 0.2866 0.0996 0.0000 +vt 0.2870 0.0995 0.0000 +vt 0.2869 0.0997 0.0000 +vt 0.7534 0.0235 0.0000 +vt 0.7535 0.0237 0.0000 +vt 0.4460 0.2387 0.0000 +vt 0.4460 0.2385 0.0000 +vt 0.4464 0.2385 0.0000 +vt 0.4464 0.2387 0.0000 +vt 0.0341 0.1697 0.0000 +vt 0.0341 0.1700 0.0000 +vt 0.3646 0.0695 0.0000 +vt 0.3646 0.0693 0.0000 +vt 0.3651 0.0694 0.0000 +vt 0.3650 0.0696 0.0000 +vt 0.3643 0.0696 0.0000 +vt 0.3642 0.0694 0.0000 +vt 0.3011 0.1506 0.0000 +vt 0.3005 0.1504 0.0000 +vt 0.3017 0.1504 0.0000 +vt 0.2476 0.1365 0.0000 +vt 0.2477 0.1363 0.0000 +vt 0.3019 0.1262 0.0000 +vt 0.3005 0.1262 0.0000 +vt 0.2505 0.1363 0.0000 +vt 0.2507 0.1365 0.0000 +vt 0.3139 0.2424 0.0000 +vt 0.3133 0.2422 0.0000 +vt 0.3145 0.2422 0.0000 +vt 0.2507 0.1390 0.0000 +vt 0.2505 0.1392 0.0000 +vt 0.2206 0.2006 0.0000 +vt 0.2220 0.2006 0.0000 +vt 0.2477 0.1392 0.0000 +vt 0.2476 0.1390 0.0000 +vt 0.2626 0.1866 0.0000 +vt 0.2626 0.1856 0.0000 +vt 0.2639 0.1856 0.0000 +vt 0.2639 0.1866 0.0000 +vt 0.3278 0.2285 0.0000 +vt 0.3278 0.2295 0.0000 +vt 0.3265 0.2295 0.0000 +vt 0.3265 0.2285 0.0000 +vt 0.3278 0.2299 0.0000 +vt 0.3265 0.2299 0.0000 +vt 0.2626 0.1871 0.0000 +vt 0.2639 0.1871 0.0000 +vt 0.2062 0.2272 0.0000 +vt 0.2062 0.2263 0.0000 +vt 0.2068 0.2268 0.0000 +vt 0.2065 0.2273 0.0000 +vt 0.2062 0.2280 0.0000 +vt 0.2065 0.2279 0.0000 +vt 0.2074 0.2290 0.0000 +vt 0.2062 0.2290 0.0000 +vt 0.2068 0.2284 0.0000 +vt 0.2074 0.2286 0.0000 +vt 0.2074 0.2263 0.0000 +vt 0.2074 0.2266 0.0000 +vt 0.8925 0.1918 0.0000 +vt 0.8917 0.1918 0.0000 +vt 0.8917 0.1912 0.0000 +vt 0.8926 0.1912 0.0000 +vt 0.9479 0.1040 0.0000 +vt 0.9484 0.1040 0.0000 +vt 0.9484 0.1045 0.0000 +vt 0.9476 0.1045 0.0000 +vt 0.9479 0.1034 0.0000 +vt 0.9484 0.1034 0.0000 +vt 0.9476 0.1029 0.0000 +vt 0.9484 0.1029 0.0000 +vt 0.0693 0.2024 0.0000 +vt 0.0694 0.2030 0.0000 +vt 0.0686 0.2030 0.0000 +vt 0.0686 0.2024 0.0000 +vt 0.2641 0.1857 0.0000 +vt 0.2641 0.1866 0.0000 +vt 0.2060 0.2272 0.0000 +vt 0.2060 0.2264 0.0000 +vt 0.2060 0.2281 0.0000 +vt 0.2060 0.2289 0.0000 +vt 0.3263 0.2295 0.0000 +vt 0.3263 0.2286 0.0000 +vt 0.3263 0.2299 0.0000 +vt 0.2641 0.1871 0.0000 +vt 0.2082 0.1911 0.0000 +vt 0.2068 0.1911 0.0000 +vt 0.2067 0.1909 0.0000 +vt 0.2083 0.1909 0.0000 +vt 0.2067 0.1902 0.0000 +vt 0.2083 0.1902 0.0000 +vt 0.8873 0.1918 0.0000 +vt 0.8873 0.1912 0.0000 +vt 0.9528 0.1040 0.0000 +vt 0.9528 0.1045 0.0000 +vt 0.9528 0.1034 0.0000 +vt 0.9528 0.1030 0.0000 +vt 0.0641 0.2030 0.0000 +vt 0.0641 0.2024 0.0000 +vt 0.8694 0.1916 0.0000 +vt 0.8694 0.1912 0.0000 +vt 0.8870 0.1912 0.0000 +vt 0.8870 0.1917 0.0000 +vt 0.9707 0.1039 0.0000 +vt 0.9707 0.1043 0.0000 +vt 0.9531 0.1044 0.0000 +vt 0.9531 0.1040 0.0000 +vt 0.9707 0.1035 0.0000 +vt 0.9531 0.1034 0.0000 +vt 0.9707 0.1031 0.0000 +vt 0.9531 0.1030 0.0000 +vt 0.0462 0.2030 0.0000 +vt 0.0462 0.2026 0.0000 +vt 0.0638 0.2025 0.0000 +vt 0.0638 0.2030 0.0000 +vt 0.2614 0.1866 0.0000 +vt 0.2614 0.1856 0.0000 +vt 0.3290 0.2285 0.0000 +vt 0.3290 0.2295 0.0000 +vt 0.3290 0.2299 0.0000 +vt 0.2614 0.1871 0.0000 +vt 0.2086 0.2272 0.0000 +vt 0.2083 0.2273 0.0000 +vt 0.2080 0.2268 0.0000 +vt 0.2086 0.2263 0.0000 +vt 0.2086 0.2280 0.0000 +vt 0.2083 0.2279 0.0000 +vt 0.2080 0.2284 0.0000 +vt 0.2086 0.2290 0.0000 +vt 0.8925 0.1906 0.0000 +vt 0.8917 0.1906 0.0000 +vt 0.0386 0.2035 0.0000 +vt 0.0389 0.2040 0.0000 +vt 0.0382 0.2040 0.0000 +vt 0.0382 0.2035 0.0000 +vt 0.0386 0.2029 0.0000 +vt 0.0382 0.2029 0.0000 +vt 0.0382 0.2024 0.0000 +vt 0.0389 0.2024 0.0000 +vt 0.0693 0.2036 0.0000 +vt 0.0686 0.2036 0.0000 +vt 0.2612 0.1866 0.0000 +vt 0.2612 0.1857 0.0000 +vt 0.2088 0.2264 0.0000 +vt 0.2088 0.2272 0.0000 +vt 0.2088 0.2281 0.0000 +vt 0.2088 0.2289 0.0000 +vt 0.3292 0.2286 0.0000 +vt 0.3292 0.2295 0.0000 +vt 0.3292 0.2299 0.0000 +vt 0.2612 0.1871 0.0000 +vt 0.2082 0.1894 0.0000 +vt 0.2083 0.1896 0.0000 +vt 0.2067 0.1896 0.0000 +vt 0.2068 0.1894 0.0000 +vt 0.8873 0.1907 0.0000 +vt 0.0338 0.2035 0.0000 +vt 0.0338 0.2040 0.0000 +vt 0.0338 0.2029 0.0000 +vt 0.0338 0.2025 0.0000 +vt 0.0641 0.2035 0.0000 +vt 0.8694 0.1908 0.0000 +vt 0.8870 0.1907 0.0000 +vt 0.0159 0.2034 0.0000 +vt 0.0335 0.2035 0.0000 +vt 0.0335 0.2039 0.0000 +vt 0.0159 0.2038 0.0000 +vt 0.0159 0.2030 0.0000 +vt 0.0335 0.2029 0.0000 +vt 0.0159 0.2026 0.0000 +vt 0.0335 0.2025 0.0000 +vt 0.0638 0.2035 0.0000 +vt 0.0462 0.2034 0.0000 +vt 0.2506 0.1717 0.0000 +vt 0.2503 0.1726 0.0000 +vt 0.2491 0.1716 0.0000 +vt 0.2496 0.1732 0.0000 +vt 0.2486 0.1732 0.0000 +vt 0.2479 0.1726 0.0000 +vt 0.2476 0.1717 0.0000 +vt 0.2476 0.1713 0.0000 +vt 0.2505 0.1713 0.0000 +vt 0.1813 0.2323 0.0000 +vt 0.1815 0.2332 0.0000 +vt 0.1800 0.2333 0.0000 +vt 0.1814 0.2337 0.0000 +vt 0.1786 0.2337 0.0000 +vt 0.1785 0.2332 0.0000 +vt 0.1788 0.2323 0.0000 +vt 0.1795 0.2318 0.0000 +vt 0.1805 0.2318 0.0000 +vt 0.4351 0.2106 0.0000 +vt 0.4352 0.2103 0.0000 +vt 0.4357 0.2106 0.0000 +vt 0.4355 0.2101 0.0000 +vt 0.4358 0.2101 0.0000 +vt 0.4361 0.2103 0.0000 +vt 0.4362 0.2106 0.0000 +vt 0.4361 0.2109 0.0000 +vt 0.4358 0.2111 0.0000 +vt 0.4355 0.2111 0.0000 +vt 0.4352 0.2109 0.0000 +vt 0.5814 0.0707 0.0000 +vt 0.5816 0.0707 0.0000 +vt 0.5816 0.0711 0.0000 +vt 0.5814 0.0711 0.0000 +vt 0.5814 0.0715 0.0000 +vt 0.5812 0.0713 0.0000 +vt 0.9709 0.1039 0.0000 +vt 0.9709 0.1036 0.0000 +vt 0.4687 0.1813 0.0000 +vt 0.4686 0.1811 0.0000 +vt 0.4691 0.1810 0.0000 +vt 0.4691 0.1813 0.0000 +vt 0.4695 0.1811 0.0000 +vt 0.4694 0.1813 0.0000 +vt 0.5812 0.0704 0.0000 +vt 0.5814 0.0703 0.0000 +vt 0.4634 0.0784 0.0000 +vt 0.4634 0.0782 0.0000 +vt 0.4638 0.0782 0.0000 +vt 0.4638 0.0784 0.0000 +vt 0.0157 0.2030 0.0000 +vt 0.0157 0.2034 0.0000 +vt 0.6288 0.2606 0.0000 +vt 0.6288 0.2604 0.0000 +vt 0.6292 0.2605 0.0000 +vt 0.6291 0.2607 0.0000 +vt 0.6285 0.2607 0.0000 +vt 0.6284 0.2605 0.0000 +vt 0.3278 0.2309 0.0000 +vt 0.3272 0.2308 0.0000 +vt 0.3284 0.2308 0.0000 +vt 0.2060 0.1890 0.0000 +vt 0.2061 0.1888 0.0000 +vt 0.1807 0.2344 0.0000 +vt 0.1793 0.2344 0.0000 +vt 0.2089 0.1888 0.0000 +vt 0.2091 0.1890 0.0000 +vt 0.2626 0.1880 0.0000 +vt 0.2620 0.1879 0.0000 +vt 0.2632 0.1879 0.0000 +vt 0.2091 0.1915 0.0000 +vt 0.2089 0.1917 0.0000 +vt 0.2484 0.1705 0.0000 +vt 0.2498 0.1705 0.0000 +vt 0.2061 0.1917 0.0000 +vt 0.2060 0.1915 0.0000 +vt 0.6033 0.2264 0.0000 +vt 0.6054 0.2264 0.0000 +vt 0.6054 0.2291 0.0000 +vt 0.6033 0.2291 0.0000 +vt 0.7564 0.2147 0.0000 +vt 0.7552 0.2147 0.0000 +vt 0.7552 0.2127 0.0000 +vt 0.7564 0.2127 0.0000 +vt 0.7699 0.1367 0.0000 +vt 0.7699 0.1347 0.0000 +vt 0.7709 0.1347 0.0000 +vt 0.7709 0.1367 0.0000 +vt 0.7640 0.1367 0.0000 +vt 0.7630 0.1367 0.0000 +vt 0.7633 0.1347 0.0000 +vt 0.7644 0.1347 0.0000 +vt 0.8517 0.0627 0.0000 +vt 0.8525 0.0626 0.0000 +vt 0.8525 0.0646 0.0000 +vt 0.8517 0.0647 0.0000 +vt 0.8598 0.0625 0.0000 +vt 0.8598 0.0645 0.0000 +vt 0.8619 0.0625 0.0000 +vt 0.8619 0.0645 0.0000 +vt 0.8639 0.0625 0.0000 +vt 0.8638 0.0646 0.0000 +vt 0.8728 0.0630 0.0000 +vt 0.8727 0.0650 0.0000 +vt 0.9131 0.2224 0.0000 +vt 0.9131 0.2206 0.0000 +vt 0.9151 0.2206 0.0000 +vt 0.9151 0.2224 0.0000 +vt 0.9132 0.2187 0.0000 +vt 0.9152 0.2188 0.0000 +vt 0.7578 0.2147 0.0000 +vt 0.7574 0.2127 0.0000 +vt 0.7598 0.2127 0.0000 +vt 0.7601 0.2147 0.0000 +vt 0.7140 0.1220 0.0000 +vt 0.7167 0.1220 0.0000 +vt 0.7165 0.1232 0.0000 +vt 0.7140 0.1232 0.0000 +vt 0.7188 0.1220 0.0000 +vt 0.7171 0.1196 0.0000 +vt 0.7189 0.1196 0.0000 +vt 0.7186 0.1246 0.0000 +vt 0.7176 0.1270 0.0000 +vt 0.7161 0.1257 0.0000 +vt 0.7161 0.1283 0.0000 +vt 0.7145 0.1289 0.0000 +vt 0.7140 0.1273 0.0000 +vt 0.7034 0.1307 0.0000 +vt 0.7032 0.1290 0.0000 +vt 0.7011 0.1308 0.0000 +vt 0.7011 0.1292 0.0000 +vt 0.6988 0.1307 0.0000 +vt 0.6990 0.1291 0.0000 +vt 0.6911 0.1296 0.0000 +vt 0.6916 0.1280 0.0000 +vt 0.6903 0.1292 0.0000 +vt 0.6900 0.1282 0.0000 +vt 0.6900 0.1235 0.0000 +vt 0.6900 0.1223 0.0000 +vt 0.6916 0.1251 0.0000 +vt 0.6900 0.1251 0.0000 +vt 0.6916 0.1223 0.0000 +vt 0.6990 0.1223 0.0000 +vt 0.6990 0.1251 0.0000 +vt 0.7011 0.1223 0.0000 +vt 0.7011 0.1251 0.0000 +vt 0.7032 0.1223 0.0000 +vt 0.7032 0.1251 0.0000 +vt 0.6221 0.2255 0.0000 +vt 0.6222 0.2267 0.0000 +vt 0.6204 0.2267 0.0000 +vt 0.6202 0.2255 0.0000 +vt 0.5946 0.2215 0.0000 +vt 0.5949 0.2207 0.0000 +vt 0.5970 0.2217 0.0000 +vt 0.5956 0.2204 0.0000 +vt 0.6031 0.2194 0.0000 +vt 0.6033 0.2208 0.0000 +vt 0.6054 0.2192 0.0000 +vt 0.6054 0.2206 0.0000 +vt 0.6077 0.2194 0.0000 +vt 0.6075 0.2208 0.0000 +vt 0.6182 0.2212 0.0000 +vt 0.6178 0.2225 0.0000 +vt 0.6199 0.2218 0.0000 +vt 0.6199 0.2241 0.0000 +vt 0.6212 0.2230 0.0000 +vt 0.6221 0.2251 0.0000 +vt 0.5970 0.2264 0.0000 +vt 0.5968 0.2291 0.0000 +vt 0.6178 0.2255 0.0000 +vt 0.6178 0.2267 0.0000 +vt 0.6075 0.2264 0.0000 +vt 0.6075 0.2236 0.0000 +vt 0.6075 0.2291 0.0000 +vt 0.6054 0.2236 0.0000 +vt 0.6033 0.2236 0.0000 +vt 0.6054 0.2318 0.0000 +vt 0.6033 0.2318 0.0000 +vt 0.7528 0.2147 0.0000 +vt 0.7501 0.2147 0.0000 +vt 0.7501 0.2127 0.0000 +vt 0.7528 0.2127 0.0000 +vt 0.7567 0.2091 0.0000 +vt 0.7564 0.2091 0.0000 +vt 0.7652 0.1367 0.0000 +vt 0.7655 0.1347 0.0000 +vt 0.7671 0.1367 0.0000 +vt 0.7671 0.1347 0.0000 +vt 0.7687 0.1347 0.0000 +vt 0.7686 0.1367 0.0000 +vt 0.7140 0.1169 0.0000 +vt 0.7175 0.1169 0.0000 +vt 0.7140 0.1196 0.0000 +vt 0.7187 0.1232 0.0000 +vt 0.7191 0.1169 0.0000 +vt 0.6900 0.1181 0.0000 +vt 0.6900 0.1169 0.0000 +vt 0.6916 0.1196 0.0000 +vt 0.6900 0.1196 0.0000 +vt 0.6900 0.1213 0.0000 +vt 0.6900 0.1270 0.0000 +vt 0.6916 0.1169 0.0000 +vt 0.6990 0.1169 0.0000 +vt 0.6990 0.1196 0.0000 +vt 0.7011 0.1169 0.0000 +vt 0.7011 0.1196 0.0000 +vt 0.7032 0.1169 0.0000 +vt 0.7032 0.1196 0.0000 +vt 0.6224 0.2291 0.0000 +vt 0.6227 0.2318 0.0000 +vt 0.6213 0.2318 0.0000 +vt 0.6208 0.2291 0.0000 +vt 0.3693 0.1820 0.0000 +vt 0.3709 0.1830 0.0000 +vt 0.3703 0.1838 0.0000 +vt 0.3693 0.1842 0.0000 +vt 0.3677 0.1830 0.0000 +vt 0.3683 0.1838 0.0000 +vt 0.2337 0.2437 0.0000 +vt 0.2337 0.2427 0.0000 +vt 0.2353 0.2427 0.0000 +vt 0.2353 0.2449 0.0000 +vt 0.5968 0.2236 0.0000 +vt 0.5970 0.2318 0.0000 +vt 0.6178 0.2291 0.0000 +vt 0.6178 0.2318 0.0000 +vt 0.6075 0.2318 0.0000 +vt 0.5963 0.2225 0.0000 +vt 0.5963 0.2248 0.0000 +vt 0.5954 0.2255 0.0000 +vt 0.5955 0.2273 0.0000 +vt 0.5964 0.2279 0.0000 +vt 0.5963 0.2302 0.0000 +vt 0.5954 0.2309 0.0000 +vt 0.2369 0.2437 0.0000 +vt 0.2369 0.2427 0.0000 +vt 0.7699 0.1311 0.0000 +vt 0.7687 0.1311 0.0000 +vt 0.7753 0.1311 0.0000 +vt 0.7753 0.1347 0.0000 +vt 0.7741 0.1347 0.0000 +vt 0.7741 0.1311 0.0000 +vt 0.5945 0.2318 0.0000 +vt 0.5945 0.2309 0.0000 +vt 0.5945 0.2272 0.0000 +vt 0.5945 0.2264 0.0000 +vt 0.5945 0.2255 0.0000 +vt 0.5945 0.2218 0.0000 +vt 0.5954 0.2218 0.0000 +vt 0.2234 0.2246 0.0000 +vt 0.2234 0.2257 0.0000 +vt 0.2198 0.2257 0.0000 +vt 0.2198 0.2246 0.0000 +vt 0.2234 0.2265 0.0000 +vt 0.2198 0.2265 0.0000 +vt 0.3299 0.2048 0.0000 +vt 0.3299 0.2058 0.0000 +vt 0.3263 0.2058 0.0000 +vt 0.3263 0.2048 0.0000 +vt 0.3299 0.2068 0.0000 +vt 0.3263 0.2068 0.0000 +vt 0.3577 0.1467 0.0000 +vt 0.3577 0.1475 0.0000 +vt 0.3541 0.1475 0.0000 +vt 0.3541 0.1467 0.0000 +vt 0.3577 0.1486 0.0000 +vt 0.3541 0.1486 0.0000 +vt 0.3161 0.1815 0.0000 +vt 0.3161 0.1825 0.0000 +vt 0.3125 0.1825 0.0000 +vt 0.3125 0.1815 0.0000 +vt 0.3161 0.1833 0.0000 +vt 0.3125 0.1833 0.0000 +vt 0.3713 0.1583 0.0000 +vt 0.3713 0.1593 0.0000 +vt 0.3677 0.1593 0.0000 +vt 0.3677 0.1583 0.0000 +vt 0.3713 0.1603 0.0000 +vt 0.3677 0.1603 0.0000 +vt 0.2373 0.2194 0.0000 +vt 0.2373 0.2202 0.0000 +vt 0.2337 0.2202 0.0000 +vt 0.2337 0.2194 0.0000 +vt 0.2373 0.2212 0.0000 +vt 0.2337 0.2212 0.0000 +vt 0.7552 0.2091 0.0000 +vt 0.7709 0.1311 0.0000 +vt 0.7640 0.1311 0.0000 +vt 0.7651 0.1311 0.0000 +vt 0.8524 0.0683 0.0000 +vt 0.8516 0.0684 0.0000 +vt 0.8598 0.0682 0.0000 +vt 0.8619 0.0682 0.0000 +vt 0.8638 0.0683 0.0000 +vt 0.8723 0.0687 0.0000 +vt 0.9188 0.2207 0.0000 +vt 0.9188 0.2224 0.0000 +vt 0.9190 0.2188 0.0000 +vt 0.7591 0.2091 0.0000 +vt 0.7501 0.2091 0.0000 +vt 0.7528 0.2091 0.0000 +vt 0.7655 0.1311 0.0000 +vt 0.7741 0.1367 0.0000 +vt 0.7725 0.1367 0.0000 +vt 0.7725 0.1347 0.0000 +vt 0.7753 0.1367 0.0000 +vt 0.6224 0.2252 0.0000 +vt 0.6224 0.2255 0.0000 +vt 0.7753 0.1309 0.0000 +vt 0.7744 0.1309 0.0000 +vt 0.5943 0.2216 0.0000 +vt 0.5947 0.2206 0.0000 +vt 0.5954 0.2202 0.0000 +vt 0.6031 0.2191 0.0000 +vt 0.6054 0.2189 0.0000 +vt 0.6077 0.2191 0.0000 +vt 0.6183 0.2209 0.0000 +vt 0.6199 0.2215 0.0000 +vt 0.6214 0.2228 0.0000 +vt 0.2116 0.0782 0.0000 +vt 0.2118 0.0785 0.0000 +vt 0.2094 0.0793 0.0000 +vt 0.2095 0.0789 0.0000 +vt 0.6225 0.2267 0.0000 +vt 0.6227 0.2291 0.0000 +vt 0.6229 0.2318 0.0000 +vt 0.5943 0.2264 0.0000 +vt 0.5943 0.2252 0.0000 +vt 0.5943 0.2220 0.0000 +vt 0.2237 0.2249 0.0000 +vt 0.2237 0.2257 0.0000 +vt 0.7020 0.0451 0.0000 +vt 0.7023 0.0450 0.0000 +vt 0.7025 0.0461 0.0000 +vt 0.7022 0.0461 0.0000 +vt 0.7024 0.0472 0.0000 +vt 0.7020 0.0470 0.0000 +vt 0.5965 0.2236 0.0000 +vt 0.5961 0.2246 0.0000 +vt 0.5953 0.2252 0.0000 +vt 0.3579 0.1474 0.0000 +vt 0.3579 0.1483 0.0000 +vt 0.5961 0.2281 0.0000 +vt 0.5965 0.2291 0.0000 +vt 0.2777 0.0998 0.0000 +vt 0.2778 0.0994 0.0000 +vt 0.2789 0.0994 0.0000 +vt 0.2788 0.0998 0.0000 +vt 0.5961 0.2300 0.0000 +vt 0.5953 0.2307 0.0000 +vt 0.2376 0.2201 0.0000 +vt 0.2376 0.2210 0.0000 +vt 0.5943 0.2274 0.0000 +vt 0.3163 0.1817 0.0000 +vt 0.3163 0.1826 0.0000 +vt 0.3955 0.1715 0.0000 +vt 0.3942 0.1715 0.0000 +vt 0.3942 0.1705 0.0000 +vt 0.3955 0.1705 0.0000 +vt 0.3955 0.1583 0.0000 +vt 0.3967 0.1583 0.0000 +vt 0.3967 0.1593 0.0000 +vt 0.3955 0.1593 0.0000 +vt 0.3967 0.1598 0.0000 +vt 0.3955 0.1598 0.0000 +vt 0.3955 0.1719 0.0000 +vt 0.3942 0.1719 0.0000 +vt 0.3322 0.0900 0.0000 +vt 0.3319 0.0901 0.0000 +vt 0.3315 0.0896 0.0000 +vt 0.3322 0.0891 0.0000 +vt 0.3322 0.0908 0.0000 +vt 0.3319 0.0907 0.0000 +vt 0.3309 0.0918 0.0000 +vt 0.3309 0.0914 0.0000 +vt 0.3315 0.0912 0.0000 +vt 0.3322 0.0918 0.0000 +vt 0.3309 0.0891 0.0000 +vt 0.3309 0.0894 0.0000 +vt 0.9362 0.1241 0.0000 +vt 0.9363 0.1246 0.0000 +vt 0.9354 0.1246 0.0000 +vt 0.9354 0.1241 0.0000 +vt 0.8492 0.1938 0.0000 +vt 0.8495 0.1943 0.0000 +vt 0.8488 0.1943 0.0000 +vt 0.8488 0.1938 0.0000 +vt 0.8492 0.1932 0.0000 +vt 0.8488 0.1932 0.0000 +vt 0.8488 0.1927 0.0000 +vt 0.8495 0.1927 0.0000 +vt 0.9549 0.0808 0.0000 +vt 0.9542 0.0808 0.0000 +vt 0.9542 0.0802 0.0000 +vt 0.9550 0.0802 0.0000 +vt 0.3940 0.1715 0.0000 +vt 0.3940 0.1706 0.0000 +vt 0.3324 0.0892 0.0000 +vt 0.3324 0.0900 0.0000 +vt 0.3324 0.0909 0.0000 +vt 0.3324 0.0917 0.0000 +vt 0.3969 0.1584 0.0000 +vt 0.3969 0.1593 0.0000 +vt 0.3969 0.1598 0.0000 +vt 0.3940 0.1719 0.0000 +vt 0.1637 0.2114 0.0000 +vt 0.1638 0.2117 0.0000 +vt 0.1622 0.2117 0.0000 +vt 0.1623 0.2114 0.0000 +vt 0.1638 0.2123 0.0000 +vt 0.1622 0.2123 0.0000 +vt 0.9310 0.1241 0.0000 +vt 0.9310 0.1246 0.0000 +vt 0.8444 0.1938 0.0000 +vt 0.8444 0.1942 0.0000 +vt 0.8444 0.1932 0.0000 +vt 0.8444 0.1927 0.0000 +vt 0.9497 0.0802 0.0000 +vt 0.9497 0.0808 0.0000 +vt 0.9131 0.1242 0.0000 +vt 0.9307 0.1241 0.0000 +vt 0.9307 0.1246 0.0000 +vt 0.9131 0.1246 0.0000 +vt 0.8265 0.1937 0.0000 +vt 0.8441 0.1937 0.0000 +vt 0.8441 0.1942 0.0000 +vt 0.8265 0.1940 0.0000 +vt 0.8265 0.1932 0.0000 +vt 0.8441 0.1932 0.0000 +vt 0.8265 0.1929 0.0000 +vt 0.8441 0.1927 0.0000 +vt 0.9318 0.0802 0.0000 +vt 0.9495 0.0802 0.0000 +vt 0.9495 0.0808 0.0000 +vt 0.9318 0.0807 0.0000 +vt 0.3967 0.1705 0.0000 +vt 0.3967 0.1715 0.0000 +vt 0.3942 0.1593 0.0000 +vt 0.3942 0.1583 0.0000 +vt 0.3942 0.1598 0.0000 +vt 0.3967 0.1719 0.0000 +vt 0.3297 0.0900 0.0000 +vt 0.3297 0.0891 0.0000 +vt 0.3304 0.0896 0.0000 +vt 0.3300 0.0901 0.0000 +vt 0.3297 0.0908 0.0000 +vt 0.3300 0.0907 0.0000 +vt 0.3297 0.0918 0.0000 +vt 0.3304 0.0912 0.0000 +vt 0.9362 0.1252 0.0000 +vt 0.9354 0.1252 0.0000 +vt 0.6353 0.0949 0.0000 +vt 0.6358 0.0949 0.0000 +vt 0.6358 0.0954 0.0000 +vt 0.6350 0.0954 0.0000 +vt 0.6353 0.0943 0.0000 +vt 0.6358 0.0943 0.0000 +vt 0.6350 0.0938 0.0000 +vt 0.6358 0.0938 0.0000 +vt 0.9549 0.0797 0.0000 +vt 0.9542 0.0797 0.0000 +vt 0.3969 0.1706 0.0000 +vt 0.3969 0.1715 0.0000 +vt 0.3295 0.0900 0.0000 +vt 0.3295 0.0892 0.0000 +vt 0.3295 0.0909 0.0000 +vt 0.3295 0.0917 0.0000 +vt 0.3940 0.1593 0.0000 +vt 0.3940 0.1584 0.0000 +vt 0.3940 0.1598 0.0000 +vt 0.3969 0.1719 0.0000 +vt 0.1637 0.2132 0.0000 +vt 0.1623 0.2132 0.0000 +vt 0.1622 0.2129 0.0000 +vt 0.1638 0.2129 0.0000 +vt 0.9310 0.1252 0.0000 +vt 0.6402 0.0949 0.0000 +vt 0.6402 0.0953 0.0000 +vt 0.6402 0.0943 0.0000 +vt 0.6402 0.0938 0.0000 +vt 0.9497 0.0797 0.0000 +vt 0.9131 0.1251 0.0000 +vt 0.9307 0.1252 0.0000 +vt 0.6581 0.0948 0.0000 +vt 0.6581 0.0952 0.0000 +vt 0.6405 0.0953 0.0000 +vt 0.6405 0.0948 0.0000 +vt 0.6581 0.0944 0.0000 +vt 0.6405 0.0943 0.0000 +vt 0.6581 0.0940 0.0000 +vt 0.6405 0.0938 0.0000 +vt 0.9318 0.0798 0.0000 +vt 0.9495 0.0797 0.0000 +vt 0.2090 0.2029 0.0000 +vt 0.2075 0.2030 0.0000 +vt 0.2087 0.2020 0.0000 +vt 0.2080 0.2014 0.0000 +vt 0.2070 0.2014 0.0000 +vt 0.2062 0.2020 0.0000 +vt 0.2060 0.2029 0.0000 +vt 0.2060 0.2034 0.0000 +vt 0.2089 0.2034 0.0000 +vt 0.2896 0.1256 0.0000 +vt 0.2884 0.1246 0.0000 +vt 0.2899 0.1247 0.0000 +vt 0.2898 0.1243 0.0000 +vt 0.2869 0.1243 0.0000 +vt 0.2869 0.1247 0.0000 +vt 0.2871 0.1256 0.0000 +vt 0.2879 0.1262 0.0000 +vt 0.2888 0.1262 0.0000 +vt 0.1944 0.1971 0.0000 +vt 0.1949 0.1971 0.0000 +vt 0.1945 0.1975 0.0000 +vt 0.1947 0.1977 0.0000 +vt 0.1951 0.1977 0.0000 +vt 0.1954 0.1975 0.0000 +vt 0.1955 0.1971 0.0000 +vt 0.1954 0.1968 0.0000 +vt 0.1951 0.1966 0.0000 +vt 0.1947 0.1966 0.0000 +vt 0.1945 0.1968 0.0000 +vt 0.6683 0.0580 0.0000 +vt 0.6683 0.0577 0.0000 +vt 0.6686 0.0576 0.0000 +vt 0.6686 0.0581 0.0000 +vt 0.6682 0.0574 0.0000 +vt 0.6684 0.0573 0.0000 +vt 0.8263 0.1936 0.0000 +vt 0.8263 0.1933 0.0000 +vt 0.4059 0.0894 0.0000 +vt 0.4056 0.0893 0.0000 +vt 0.4055 0.0891 0.0000 +vt 0.4060 0.0892 0.0000 +vt 0.4053 0.0894 0.0000 +vt 0.4052 0.0892 0.0000 +vt 0.6682 0.0583 0.0000 +vt 0.6684 0.0584 0.0000 +vt 0.4137 0.0893 0.0000 +vt 0.4133 0.0893 0.0000 +vt 0.4133 0.0891 0.0000 +vt 0.4137 0.0891 0.0000 +vt 0.6583 0.0944 0.0000 +vt 0.6583 0.0947 0.0000 +vt 0.2365 0.1158 0.0000 +vt 0.2362 0.1159 0.0000 +vt 0.2361 0.1157 0.0000 +vt 0.2365 0.1156 0.0000 +vt 0.2368 0.1159 0.0000 +vt 0.2369 0.1157 0.0000 +vt 0.3961 0.1606 0.0000 +vt 0.3955 0.1607 0.0000 +vt 0.3949 0.1606 0.0000 +vt 0.1614 0.2135 0.0000 +vt 0.1616 0.2137 0.0000 +vt 0.2877 0.1235 0.0000 +vt 0.2891 0.1235 0.0000 +vt 0.1644 0.2137 0.0000 +vt 0.1645 0.2135 0.0000 +vt 0.3961 0.1728 0.0000 +vt 0.3955 0.1729 0.0000 +vt 0.3949 0.1728 0.0000 +vt 0.1645 0.2111 0.0000 +vt 0.1644 0.2109 0.0000 +vt 0.2082 0.2041 0.0000 +vt 0.2068 0.2041 0.0000 +vt 0.1616 0.2109 0.0000 +vt 0.1614 0.2111 0.0000 +vt 0.3825 0.1834 0.0000 +vt 0.3812 0.1834 0.0000 +vt 0.3812 0.1824 0.0000 +vt 0.3825 0.1824 0.0000 +vt 0.2755 0.1460 0.0000 +vt 0.2767 0.1460 0.0000 +vt 0.2767 0.1470 0.0000 +vt 0.2755 0.1470 0.0000 +vt 0.2767 0.1474 0.0000 +vt 0.2755 0.1474 0.0000 +vt 0.3825 0.1839 0.0000 +vt 0.3812 0.1839 0.0000 +vt 0.1326 0.1454 0.0000 +vt 0.1323 0.1455 0.0000 +vt 0.1320 0.1450 0.0000 +vt 0.1326 0.1444 0.0000 +vt 0.1326 0.1462 0.0000 +vt 0.1323 0.1461 0.0000 +vt 0.1314 0.1472 0.0000 +vt 0.1314 0.1468 0.0000 +vt 0.1320 0.1466 0.0000 +vt 0.1326 0.1472 0.0000 +vt 0.1314 0.1444 0.0000 +vt 0.1314 0.1448 0.0000 +vt 0.7495 0.1394 0.0000 +vt 0.7496 0.1400 0.0000 +vt 0.7488 0.1400 0.0000 +vt 0.7488 0.1394 0.0000 +vt 0.7129 0.1393 0.0000 +vt 0.7132 0.1398 0.0000 +vt 0.7125 0.1398 0.0000 +vt 0.7125 0.1393 0.0000 +vt 0.7129 0.1387 0.0000 +vt 0.7125 0.1387 0.0000 +vt 0.7125 0.1382 0.0000 +vt 0.7132 0.1382 0.0000 +vt 0.8365 0.2639 0.0000 +vt 0.8358 0.2639 0.0000 +vt 0.8358 0.2633 0.0000 +vt 0.8367 0.2633 0.0000 +vt 0.3810 0.1834 0.0000 +vt 0.3810 0.1825 0.0000 +vt 0.1328 0.1446 0.0000 +vt 0.1328 0.1453 0.0000 +vt 0.1328 0.1463 0.0000 +vt 0.1328 0.1470 0.0000 +vt 0.2769 0.1461 0.0000 +vt 0.2769 0.1470 0.0000 +vt 0.2769 0.1474 0.0000 +vt 0.3810 0.1839 0.0000 +vt 0.2221 0.1761 0.0000 +vt 0.2222 0.1764 0.0000 +vt 0.2205 0.1764 0.0000 +vt 0.2207 0.1761 0.0000 +vt 0.2222 0.1770 0.0000 +vt 0.2205 0.1770 0.0000 +vt 0.7443 0.1395 0.0000 +vt 0.7443 0.1400 0.0000 +vt 0.7080 0.1393 0.0000 +vt 0.7080 0.1397 0.0000 +vt 0.7080 0.1387 0.0000 +vt 0.7080 0.1382 0.0000 +vt 0.8314 0.2633 0.0000 +vt 0.8313 0.2638 0.0000 +vt 0.7264 0.1396 0.0000 +vt 0.7440 0.1395 0.0000 +vt 0.7440 0.1400 0.0000 +vt 0.7264 0.1400 0.0000 +vt 0.6902 0.1392 0.0000 +vt 0.7078 0.1392 0.0000 +vt 0.7078 0.1397 0.0000 +vt 0.6902 0.1395 0.0000 +vt 0.6902 0.1387 0.0000 +vt 0.7078 0.1387 0.0000 +vt 0.6902 0.1384 0.0000 +vt 0.7078 0.1382 0.0000 +vt 0.8135 0.2632 0.0000 +vt 0.8311 0.2633 0.0000 +vt 0.8311 0.2638 0.0000 +vt 0.8135 0.2637 0.0000 +vt 0.3837 0.1824 0.0000 +vt 0.3837 0.1834 0.0000 +vt 0.2742 0.1470 0.0000 +vt 0.2742 0.1460 0.0000 +vt 0.2742 0.1474 0.0000 +vt 0.3837 0.1839 0.0000 +vt 0.1302 0.1454 0.0000 +vt 0.1302 0.1444 0.0000 +vt 0.1308 0.1450 0.0000 +vt 0.1305 0.1455 0.0000 +vt 0.1302 0.1462 0.0000 +vt 0.1305 0.1461 0.0000 +vt 0.1302 0.1472 0.0000 +vt 0.1308 0.1466 0.0000 +vt 0.7495 0.1406 0.0000 +vt 0.7488 0.1406 0.0000 +vt 0.9016 0.0808 0.0000 +vt 0.9020 0.0808 0.0000 +vt 0.9020 0.0813 0.0000 +vt 0.9013 0.0813 0.0000 +vt 0.9016 0.0802 0.0000 +vt 0.9020 0.0802 0.0000 +vt 0.9013 0.0797 0.0000 +vt 0.9020 0.0797 0.0000 +vt 0.8365 0.2628 0.0000 +vt 0.8358 0.2628 0.0000 +vt 0.3839 0.1825 0.0000 +vt 0.3839 0.1834 0.0000 +vt 0.1300 0.1453 0.0000 +vt 0.1300 0.1446 0.0000 +vt 0.1300 0.1463 0.0000 +vt 0.1300 0.1470 0.0000 +vt 0.2740 0.1470 0.0000 +vt 0.2740 0.1461 0.0000 +vt 0.2740 0.1474 0.0000 +vt 0.3839 0.1839 0.0000 +vt 0.2221 0.1779 0.0000 +vt 0.2207 0.1779 0.0000 +vt 0.2205 0.1776 0.0000 +vt 0.2222 0.1776 0.0000 +vt 0.7443 0.1406 0.0000 +vt 0.9065 0.0807 0.0000 +vt 0.9065 0.0812 0.0000 +vt 0.9065 0.0802 0.0000 +vt 0.9065 0.0797 0.0000 +vt 0.8313 0.2628 0.0000 +vt 0.7264 0.1404 0.0000 +vt 0.7440 0.1405 0.0000 +vt 0.9244 0.0807 0.0000 +vt 0.9244 0.0810 0.0000 +vt 0.9068 0.0812 0.0000 +vt 0.9068 0.0807 0.0000 +vt 0.9244 0.0802 0.0000 +vt 0.9068 0.0802 0.0000 +vt 0.9244 0.0799 0.0000 +vt 0.9068 0.0797 0.0000 +vt 0.8135 0.2629 0.0000 +vt 0.8311 0.2628 0.0000 +vt 0.2229 0.1897 0.0000 +vt 0.2213 0.1898 0.0000 +vt 0.2226 0.1888 0.0000 +vt 0.2218 0.1882 0.0000 +vt 0.2209 0.1882 0.0000 +vt 0.2201 0.1888 0.0000 +vt 0.2198 0.1897 0.0000 +vt 0.2199 0.1901 0.0000 +vt 0.2228 0.1901 0.0000 +vt 0.1813 0.2215 0.0000 +vt 0.1800 0.2204 0.0000 +vt 0.1815 0.2206 0.0000 +vt 0.1814 0.2201 0.0000 +vt 0.1786 0.2201 0.0000 +vt 0.1785 0.2206 0.0000 +vt 0.1788 0.2215 0.0000 +vt 0.1795 0.2220 0.0000 +vt 0.1805 0.2220 0.0000 +vt 0.2997 0.2043 0.0000 +vt 0.3002 0.2043 0.0000 +vt 0.2998 0.2046 0.0000 +vt 0.3000 0.2048 0.0000 +vt 0.3004 0.2048 0.0000 +vt 0.3006 0.2046 0.0000 +vt 0.3008 0.2043 0.0000 +vt 0.3006 0.2039 0.0000 +vt 0.3004 0.2037 0.0000 +vt 0.3000 0.2037 0.0000 +vt 0.2998 0.2039 0.0000 +vt 0.9659 0.2395 0.0000 +vt 0.9656 0.2395 0.0000 +vt 0.9655 0.2393 0.0000 +vt 0.9660 0.2393 0.0000 +vt 0.9653 0.2397 0.0000 +vt 0.9652 0.2395 0.0000 +vt 0.6900 0.1391 0.0000 +vt 0.6900 0.1388 0.0000 +vt 0.6284 0.2680 0.0000 +vt 0.6288 0.2680 0.0000 +vt 0.6288 0.2682 0.0000 +vt 0.6284 0.2682 0.0000 +vt 0.8133 0.2636 0.0000 +vt 0.8133 0.2633 0.0000 +vt 0.9662 0.2396 0.0000 +vt 0.9663 0.2395 0.0000 +vt 0.4524 0.2021 0.0000 +vt 0.4521 0.2021 0.0000 +vt 0.4521 0.2018 0.0000 +vt 0.4525 0.2019 0.0000 +vt 0.9245 0.0803 0.0000 +vt 0.9245 0.0806 0.0000 +vt 0.3815 0.2490 0.0000 +vt 0.3811 0.2491 0.0000 +vt 0.3810 0.2489 0.0000 +vt 0.3815 0.2488 0.0000 +vt 0.3818 0.2491 0.0000 +vt 0.3819 0.2489 0.0000 +vt 0.2761 0.1483 0.0000 +vt 0.2755 0.1484 0.0000 +vt 0.2749 0.1483 0.0000 +vt 0.2198 0.1783 0.0000 +vt 0.2200 0.1785 0.0000 +vt 0.1793 0.2193 0.0000 +vt 0.1807 0.2193 0.0000 +vt 0.2228 0.1785 0.0000 +vt 0.2229 0.1783 0.0000 +vt 0.3831 0.1847 0.0000 +vt 0.3825 0.1848 0.0000 +vt 0.3819 0.1847 0.0000 +vt 0.2229 0.1758 0.0000 +vt 0.2228 0.1756 0.0000 +vt 0.2220 0.1909 0.0000 +vt 0.2206 0.1909 0.0000 +vt 0.2200 0.1756 0.0000 +vt 0.2198 0.1758 0.0000 +vt 0.6033 0.2373 0.0000 +vt 0.6033 0.2346 0.0000 +vt 0.6054 0.2346 0.0000 +vt 0.6054 0.2373 0.0000 +vt 0.7438 0.2147 0.0000 +vt 0.7438 0.2127 0.0000 +vt 0.7450 0.2127 0.0000 +vt 0.7450 0.2147 0.0000 +vt 0.7807 0.1367 0.0000 +vt 0.7797 0.1367 0.0000 +vt 0.7797 0.1347 0.0000 +vt 0.7807 0.1347 0.0000 +vt 0.7866 0.1367 0.0000 +vt 0.7862 0.1347 0.0000 +vt 0.7873 0.1347 0.0000 +vt 0.7876 0.1367 0.0000 +vt 0.7787 0.1823 0.0000 +vt 0.7786 0.1843 0.0000 +vt 0.7778 0.1842 0.0000 +vt 0.7778 0.1822 0.0000 +vt 0.7705 0.1838 0.0000 +vt 0.7705 0.1818 0.0000 +vt 0.7684 0.1837 0.0000 +vt 0.7684 0.1817 0.0000 +vt 0.7665 0.1817 0.0000 +vt 0.7664 0.1837 0.0000 +vt 0.7576 0.1838 0.0000 +vt 0.7575 0.1818 0.0000 +vt 0.8716 0.2490 0.0000 +vt 0.8736 0.2489 0.0000 +vt 0.8736 0.2507 0.0000 +vt 0.8716 0.2507 0.0000 +vt 0.8717 0.2526 0.0000 +vt 0.8737 0.2526 0.0000 +vt 0.7423 0.2147 0.0000 +vt 0.7400 0.2147 0.0000 +vt 0.7404 0.2127 0.0000 +vt 0.7427 0.2127 0.0000 +vt 0.7140 0.1118 0.0000 +vt 0.7140 0.1106 0.0000 +vt 0.7165 0.1106 0.0000 +vt 0.7167 0.1118 0.0000 +vt 0.7188 0.1118 0.0000 +vt 0.7189 0.1141 0.0000 +vt 0.7171 0.1141 0.0000 +vt 0.7186 0.1091 0.0000 +vt 0.7161 0.1081 0.0000 +vt 0.7176 0.1068 0.0000 +vt 0.7161 0.1055 0.0000 +vt 0.7140 0.1064 0.0000 +vt 0.7145 0.1049 0.0000 +vt 0.7032 0.1047 0.0000 +vt 0.7034 0.1031 0.0000 +vt 0.7011 0.1046 0.0000 +vt 0.7011 0.1029 0.0000 +vt 0.6990 0.1047 0.0000 +vt 0.6988 0.1031 0.0000 +vt 0.6916 0.1057 0.0000 +vt 0.6911 0.1041 0.0000 +vt 0.6903 0.1045 0.0000 +vt 0.6900 0.1056 0.0000 +vt 0.6916 0.1087 0.0000 +vt 0.6900 0.1114 0.0000 +vt 0.6900 0.1102 0.0000 +vt 0.6900 0.1087 0.0000 +vt 0.6990 0.1087 0.0000 +vt 0.6990 0.1114 0.0000 +vt 0.6916 0.1114 0.0000 +vt 0.7011 0.1087 0.0000 +vt 0.7011 0.1114 0.0000 +vt 0.7032 0.1087 0.0000 +vt 0.7032 0.1114 0.0000 +vt 0.6221 0.2381 0.0000 +vt 0.6202 0.2381 0.0000 +vt 0.6204 0.2369 0.0000 +vt 0.6222 0.2369 0.0000 +vt 0.5946 0.2422 0.0000 +vt 0.5970 0.2420 0.0000 +vt 0.5949 0.2429 0.0000 +vt 0.5956 0.2433 0.0000 +vt 0.6033 0.2429 0.0000 +vt 0.6031 0.2443 0.0000 +vt 0.6054 0.2430 0.0000 +vt 0.6054 0.2444 0.0000 +vt 0.6075 0.2428 0.0000 +vt 0.6077 0.2442 0.0000 +vt 0.6178 0.2411 0.0000 +vt 0.6182 0.2425 0.0000 +vt 0.6199 0.2395 0.0000 +vt 0.6199 0.2419 0.0000 +vt 0.6212 0.2406 0.0000 +vt 0.6221 0.2385 0.0000 +vt 0.5970 0.2373 0.0000 +vt 0.5968 0.2346 0.0000 +vt 0.6178 0.2381 0.0000 +vt 0.6075 0.2400 0.0000 +vt 0.6075 0.2373 0.0000 +vt 0.6178 0.2369 0.0000 +vt 0.6075 0.2346 0.0000 +vt 0.6033 0.2400 0.0000 +vt 0.6054 0.2400 0.0000 +vt 0.7473 0.2147 0.0000 +vt 0.7473 0.2127 0.0000 +vt 0.7434 0.2091 0.0000 +vt 0.7438 0.2091 0.0000 +vt 0.7854 0.1367 0.0000 +vt 0.7851 0.1347 0.0000 +vt 0.7835 0.1367 0.0000 +vt 0.7820 0.1367 0.0000 +vt 0.7819 0.1347 0.0000 +vt 0.7835 0.1347 0.0000 +vt 0.7140 0.1141 0.0000 +vt 0.7187 0.1106 0.0000 +vt 0.6916 0.1141 0.0000 +vt 0.6900 0.1157 0.0000 +vt 0.6900 0.1141 0.0000 +vt 0.6900 0.1125 0.0000 +vt 0.6900 0.1068 0.0000 +vt 0.6990 0.1141 0.0000 +vt 0.7011 0.1141 0.0000 +vt 0.7032 0.1141 0.0000 +vt 0.6224 0.2346 0.0000 +vt 0.6208 0.2346 0.0000 +vt 0.3557 0.1936 0.0000 +vt 0.3547 0.1954 0.0000 +vt 0.3541 0.1946 0.0000 +vt 0.3541 0.1936 0.0000 +vt 0.3573 0.1946 0.0000 +vt 0.3557 0.1958 0.0000 +vt 0.3573 0.1936 0.0000 +vt 0.3693 0.1722 0.0000 +vt 0.3693 0.1700 0.0000 +vt 0.3709 0.1710 0.0000 +vt 0.3703 0.1719 0.0000 +vt 0.5968 0.2400 0.0000 +vt 0.6178 0.2346 0.0000 +vt 0.5963 0.2411 0.0000 +vt 0.5963 0.2389 0.0000 +vt 0.5954 0.2382 0.0000 +vt 0.5955 0.2364 0.0000 +vt 0.5964 0.2357 0.0000 +vt 0.5963 0.2334 0.0000 +vt 0.5954 0.2328 0.0000 +vt 0.3677 0.1710 0.0000 +vt 0.3683 0.1719 0.0000 +vt 0.7807 0.1311 0.0000 +vt 0.7819 0.1311 0.0000 +vt 0.7765 0.1311 0.0000 +vt 0.7765 0.1347 0.0000 +vt 0.5945 0.2327 0.0000 +vt 0.5945 0.2373 0.0000 +vt 0.5945 0.2365 0.0000 +vt 0.5945 0.2382 0.0000 +vt 0.5945 0.2419 0.0000 +vt 0.5954 0.2418 0.0000 +vt 0.3161 0.1949 0.0000 +vt 0.3125 0.1949 0.0000 +vt 0.3125 0.1939 0.0000 +vt 0.3161 0.1939 0.0000 +vt 0.3125 0.1931 0.0000 +vt 0.3161 0.1931 0.0000 +vt 0.2512 0.2197 0.0000 +vt 0.2476 0.2197 0.0000 +vt 0.2476 0.2187 0.0000 +vt 0.2512 0.2187 0.0000 +vt 0.2476 0.2177 0.0000 +vt 0.2512 0.2177 0.0000 +vt 0.2234 0.2149 0.0000 +vt 0.2198 0.2149 0.0000 +vt 0.2198 0.2141 0.0000 +vt 0.2234 0.2141 0.0000 +vt 0.2198 0.2130 0.0000 +vt 0.2234 0.2130 0.0000 +vt 0.3299 0.1717 0.0000 +vt 0.3263 0.1717 0.0000 +vt 0.3263 0.1707 0.0000 +vt 0.3299 0.1707 0.0000 +vt 0.3263 0.1699 0.0000 +vt 0.3299 0.1699 0.0000 +vt 0.3438 0.1835 0.0000 +vt 0.3402 0.1835 0.0000 +vt 0.3402 0.1825 0.0000 +vt 0.3438 0.1825 0.0000 +vt 0.3402 0.1815 0.0000 +vt 0.3438 0.1815 0.0000 +vt 0.3161 0.2065 0.0000 +vt 0.3125 0.2065 0.0000 +vt 0.3125 0.2057 0.0000 +vt 0.3161 0.2057 0.0000 +vt 0.3125 0.2047 0.0000 +vt 0.3161 0.2047 0.0000 +vt 0.7450 0.2091 0.0000 +vt 0.7797 0.1311 0.0000 +vt 0.7866 0.1311 0.0000 +vt 0.7855 0.1311 0.0000 +vt 0.7777 0.1879 0.0000 +vt 0.7785 0.1880 0.0000 +vt 0.7704 0.1875 0.0000 +vt 0.7683 0.1874 0.0000 +vt 0.7663 0.1874 0.0000 +vt 0.7578 0.1875 0.0000 +vt 0.8773 0.2507 0.0000 +vt 0.8773 0.2489 0.0000 +vt 0.8774 0.2525 0.0000 +vt 0.7411 0.2091 0.0000 +vt 0.7473 0.2091 0.0000 +vt 0.7851 0.1311 0.0000 +vt 0.7781 0.1347 0.0000 +vt 0.7781 0.1367 0.0000 +vt 0.7765 0.1367 0.0000 +vt 0.6224 0.2381 0.0000 +vt 0.6224 0.2385 0.0000 +vt 0.7762 0.1309 0.0000 +vt 0.5947 0.2431 0.0000 +vt 0.5943 0.2421 0.0000 +vt 0.5954 0.2435 0.0000 +vt 0.6031 0.2446 0.0000 +vt 0.6054 0.2447 0.0000 +vt 0.6077 0.2445 0.0000 +vt 0.6183 0.2428 0.0000 +vt 0.6199 0.2421 0.0000 +vt 0.6214 0.2408 0.0000 +vt 0.1947 0.0784 0.0000 +vt 0.1966 0.0791 0.0000 +vt 0.1966 0.0794 0.0000 +vt 0.1946 0.0787 0.0000 +vt 0.6225 0.2369 0.0000 +vt 0.6227 0.2346 0.0000 +vt 0.5943 0.2384 0.0000 +vt 0.5943 0.2373 0.0000 +vt 0.5943 0.2416 0.0000 +vt 0.3163 0.1938 0.0000 +vt 0.3163 0.1947 0.0000 +vt 0.3678 0.2325 0.0000 +vt 0.3688 0.2327 0.0000 +vt 0.3688 0.2330 0.0000 +vt 0.3677 0.2328 0.0000 +vt 0.3697 0.2325 0.0000 +vt 0.3699 0.2329 0.0000 +vt 0.5965 0.2400 0.0000 +vt 0.5961 0.2390 0.0000 +vt 0.5953 0.2384 0.0000 +vt 0.2237 0.2133 0.0000 +vt 0.2237 0.2142 0.0000 +vt 0.5961 0.2356 0.0000 +vt 0.5965 0.2346 0.0000 +vt 0.4177 0.2282 0.0000 +vt 0.4167 0.2282 0.0000 +vt 0.4166 0.2279 0.0000 +vt 0.4177 0.2279 0.0000 +vt 0.5961 0.2336 0.0000 +vt 0.5953 0.2330 0.0000 +vt 0.3163 0.2049 0.0000 +vt 0.3163 0.2058 0.0000 +vt 0.5943 0.2362 0.0000 +vt 0.3302 0.1706 0.0000 +vt 0.3302 0.1715 0.0000 +vt 0.9428 0.0893 0.0000 +vt 0.9386 0.0893 0.0000 +vt 0.9386 0.0881 0.0000 +vt 0.9428 0.0881 0.0000 +vt 0.9348 0.0893 0.0000 +vt 0.9348 0.0881 0.0000 +vt 0.9318 0.0893 0.0000 +vt 0.9318 0.0881 0.0000 +vt 0.6067 0.1138 0.0000 +vt 0.6105 0.1138 0.0000 +vt 0.6105 0.1150 0.0000 +vt 0.6067 0.1150 0.0000 +vt 0.6146 0.1138 0.0000 +vt 0.6146 0.1150 0.0000 +vt 0.6188 0.1138 0.0000 +vt 0.6188 0.1150 0.0000 +vt 0.6226 0.1138 0.0000 +vt 0.6226 0.1150 0.0000 +vt 0.7933 0.2895 0.0000 +vt 0.7903 0.2895 0.0000 +vt 0.7903 0.2883 0.0000 +vt 0.7933 0.2883 0.0000 +vt 0.7865 0.2895 0.0000 +vt 0.7865 0.2883 0.0000 +vt 0.7823 0.2895 0.0000 +vt 0.7823 0.2883 0.0000 +vt 0.7781 0.2895 0.0000 +vt 0.7781 0.2883 0.0000 +vt 0.7744 0.2895 0.0000 +vt 0.7744 0.2883 0.0000 +vt 0.2603 0.0601 0.0000 +vt 0.2573 0.0601 0.0000 +vt 0.2573 0.0589 0.0000 +vt 0.2603 0.0589 0.0000 +vt 0.2536 0.0601 0.0000 +vt 0.2536 0.0589 0.0000 +vt 0.2494 0.0601 0.0000 +vt 0.2494 0.0589 0.0000 +vt 0.2452 0.0601 0.0000 +vt 0.2452 0.0589 0.0000 +vt 0.2414 0.0601 0.0000 +vt 0.2414 0.0589 0.0000 +vt 0.2384 0.0601 0.0000 +vt 0.2384 0.0589 0.0000 +vt 0.9508 0.0893 0.0000 +vt 0.9470 0.0893 0.0000 +vt 0.9470 0.0881 0.0000 +vt 0.9508 0.0881 0.0000 +vt 0.7904 0.0428 0.0000 +vt 0.7945 0.0415 0.0000 +vt 0.7963 0.0555 0.0000 +vt 0.7870 0.0452 0.0000 +vt 0.7845 0.0487 0.0000 +vt 0.7832 0.0527 0.0000 +vt 0.7832 0.0569 0.0000 +vt 0.7844 0.0610 0.0000 +vt 0.7869 0.0644 0.0000 +vt 0.7903 0.0669 0.0000 +vt 0.7944 0.0682 0.0000 +vt 0.7986 0.0682 0.0000 +vt 0.8026 0.0669 0.0000 +vt 0.8061 0.0645 0.0000 +vt 0.8086 0.0611 0.0000 +vt 0.8099 0.0570 0.0000 +vt 0.8099 0.0528 0.0000 +vt 0.8086 0.0488 0.0000 +vt 0.8061 0.0453 0.0000 +vt 0.8027 0.0428 0.0000 +vt 0.7996 0.0488 0.0000 +vt 0.7987 0.0415 0.0000 +vt 0.7976 0.0482 0.0000 +vt 0.0271 0.0599 0.0000 +vt 0.0312 0.0600 0.0000 +vt 0.0295 0.0736 0.0000 +vt 0.0351 0.0613 0.0000 +vt 0.0385 0.0637 0.0000 +vt 0.0409 0.0671 0.0000 +vt 0.0421 0.0710 0.0000 +vt 0.0421 0.0751 0.0000 +vt 0.0408 0.0790 0.0000 +vt 0.0384 0.0824 0.0000 +vt 0.0350 0.0848 0.0000 +vt 0.0311 0.0860 0.0000 +vt 0.0270 0.0860 0.0000 +vt 0.0231 0.0847 0.0000 +vt 0.0197 0.0823 0.0000 +vt 0.0173 0.0790 0.0000 +vt 0.0160 0.0750 0.0000 +vt 0.0160 0.0709 0.0000 +vt 0.0173 0.0670 0.0000 +vt 0.0198 0.0636 0.0000 +vt 0.0243 0.0682 0.0000 +vt 0.0231 0.0612 0.0000 +vt 0.0260 0.0670 0.0000 +vt 0.0313 0.0596 0.0000 +vt 0.0270 0.0596 0.0000 +vt 0.0353 0.0610 0.0000 +vt 0.0387 0.0635 0.0000 +vt 0.0412 0.0669 0.0000 +vt 0.0425 0.0709 0.0000 +vt 0.0424 0.0752 0.0000 +vt 0.0411 0.0792 0.0000 +vt 0.0386 0.0826 0.0000 +vt 0.0352 0.0851 0.0000 +vt 0.0311 0.0864 0.0000 +vt 0.0269 0.0864 0.0000 +vt 0.0229 0.0850 0.0000 +vt 0.0195 0.0825 0.0000 +vt 0.0170 0.0791 0.0000 +vt 0.0157 0.0751 0.0000 +vt 0.0157 0.0708 0.0000 +vt 0.0170 0.0668 0.0000 +vt 0.0195 0.0634 0.0000 +vt 0.0230 0.0609 0.0000 +vt 0.3278 0.2421 0.0000 +vt 0.3278 0.2431 0.0000 +vt 0.3265 0.2431 0.0000 +vt 0.3265 0.2421 0.0000 +vt 0.4081 0.1607 0.0000 +vt 0.4081 0.1597 0.0000 +vt 0.4093 0.1597 0.0000 +vt 0.4093 0.1607 0.0000 +vt 0.4081 0.1593 0.0000 +vt 0.4093 0.1593 0.0000 +vt 0.3278 0.2416 0.0000 +vt 0.3265 0.2416 0.0000 +vt 0.1302 0.1600 0.0000 +vt 0.1302 0.1590 0.0000 +vt 0.1308 0.1596 0.0000 +vt 0.1305 0.1601 0.0000 +vt 0.1302 0.1608 0.0000 +vt 0.1305 0.1607 0.0000 +vt 0.1314 0.1618 0.0000 +vt 0.1302 0.1618 0.0000 +vt 0.1308 0.1612 0.0000 +vt 0.1314 0.1614 0.0000 +vt 0.1314 0.1590 0.0000 +vt 0.1314 0.1594 0.0000 +vt 0.7440 0.2883 0.0000 +vt 0.7447 0.2883 0.0000 +vt 0.7447 0.2889 0.0000 +vt 0.7439 0.2889 0.0000 +vt 0.1617 0.0704 0.0000 +vt 0.1622 0.0704 0.0000 +vt 0.1622 0.0709 0.0000 +vt 0.1614 0.0709 0.0000 +vt 0.1617 0.0698 0.0000 +vt 0.1622 0.0698 0.0000 +vt 0.1614 0.0693 0.0000 +vt 0.1622 0.0693 0.0000 +vt 0.8242 0.2404 0.0000 +vt 0.8241 0.2398 0.0000 +vt 0.8249 0.2398 0.0000 +vt 0.8249 0.2404 0.0000 +vt 0.3263 0.2430 0.0000 +vt 0.3263 0.2421 0.0000 +vt 0.1300 0.1599 0.0000 +vt 0.1300 0.1592 0.0000 +vt 0.1300 0.1609 0.0000 +vt 0.1300 0.1616 0.0000 +vt 0.4095 0.1597 0.0000 +vt 0.4095 0.1606 0.0000 +vt 0.4095 0.1593 0.0000 +vt 0.3263 0.2416 0.0000 +vt 0.5667 0.1680 0.0000 +vt 0.5653 0.1680 0.0000 +vt 0.5652 0.1677 0.0000 +vt 0.5669 0.1677 0.0000 +vt 0.5652 0.1671 0.0000 +vt 0.5669 0.1671 0.0000 +vt 0.7492 0.2883 0.0000 +vt 0.7492 0.2889 0.0000 +vt 0.1666 0.0704 0.0000 +vt 0.1666 0.0708 0.0000 +vt 0.1666 0.0698 0.0000 +vt 0.1666 0.0693 0.0000 +vt 0.8294 0.2398 0.0000 +vt 0.8294 0.2404 0.0000 +vt 0.7670 0.2885 0.0000 +vt 0.7670 0.2889 0.0000 +vt 0.7494 0.2889 0.0000 +vt 0.7494 0.2884 0.0000 +vt 0.1845 0.0703 0.0000 +vt 0.1845 0.0707 0.0000 +vt 0.1669 0.0708 0.0000 +vt 0.1669 0.0704 0.0000 +vt 0.1845 0.0699 0.0000 +vt 0.1669 0.0698 0.0000 +vt 0.1845 0.0695 0.0000 +vt 0.1669 0.0694 0.0000 +vt 0.8473 0.2398 0.0000 +vt 0.8473 0.2403 0.0000 +vt 0.8297 0.2403 0.0000 +vt 0.8297 0.2398 0.0000 +vt 0.3290 0.2421 0.0000 +vt 0.3290 0.2431 0.0000 +vt 0.4069 0.1607 0.0000 +vt 0.4069 0.1597 0.0000 +vt 0.4069 0.1593 0.0000 +vt 0.3290 0.2416 0.0000 +vt 0.1326 0.1600 0.0000 +vt 0.1323 0.1601 0.0000 +vt 0.1320 0.1596 0.0000 +vt 0.1326 0.1590 0.0000 +vt 0.1326 0.1608 0.0000 +vt 0.1323 0.1607 0.0000 +vt 0.1320 0.1612 0.0000 +vt 0.1326 0.1618 0.0000 +vt 0.7440 0.2895 0.0000 +vt 0.7447 0.2895 0.0000 +vt 0.9617 0.1492 0.0000 +vt 0.9620 0.1497 0.0000 +vt 0.9612 0.1497 0.0000 +vt 0.9612 0.1492 0.0000 +vt 0.9617 0.1486 0.0000 +vt 0.9612 0.1486 0.0000 +vt 0.9612 0.1481 0.0000 +vt 0.9620 0.1481 0.0000 +vt 0.8242 0.2393 0.0000 +vt 0.8249 0.2393 0.0000 +vt 0.3292 0.2421 0.0000 +vt 0.3292 0.2430 0.0000 +vt 0.1328 0.1592 0.0000 +vt 0.1328 0.1599 0.0000 +vt 0.1328 0.1609 0.0000 +vt 0.1328 0.1616 0.0000 +vt 0.4067 0.1606 0.0000 +vt 0.4067 0.1597 0.0000 +vt 0.4067 0.1593 0.0000 +vt 0.3292 0.2416 0.0000 +vt 0.5667 0.1662 0.0000 +vt 0.5669 0.1665 0.0000 +vt 0.5652 0.1665 0.0000 +vt 0.5653 0.1662 0.0000 +vt 0.7492 0.2894 0.0000 +vt 0.9568 0.1492 0.0000 +vt 0.9568 0.1496 0.0000 +vt 0.9568 0.1486 0.0000 +vt 0.9568 0.1481 0.0000 +vt 0.8294 0.2393 0.0000 +vt 0.7670 0.2893 0.0000 +vt 0.7494 0.2894 0.0000 +vt 0.9389 0.1491 0.0000 +vt 0.9565 0.1492 0.0000 +vt 0.9565 0.1496 0.0000 +vt 0.9389 0.1495 0.0000 +vt 0.9389 0.1487 0.0000 +vt 0.9565 0.1486 0.0000 +vt 0.9389 0.1483 0.0000 +vt 0.9565 0.1482 0.0000 +vt 0.8297 0.2393 0.0000 +vt 0.8473 0.2395 0.0000 +vt 0.2642 0.1374 0.0000 +vt 0.2639 0.1383 0.0000 +vt 0.2627 0.1372 0.0000 +vt 0.2632 0.1388 0.0000 +vt 0.2622 0.1388 0.0000 +vt 0.2615 0.1383 0.0000 +vt 0.2612 0.1374 0.0000 +vt 0.2613 0.1369 0.0000 +vt 0.2641 0.1369 0.0000 +vt 0.1813 0.2075 0.0000 +vt 0.1815 0.2084 0.0000 +vt 0.1800 0.2085 0.0000 +vt 0.1814 0.2089 0.0000 +vt 0.1786 0.2089 0.0000 +vt 0.1785 0.2084 0.0000 +vt 0.1788 0.2075 0.0000 +vt 0.1795 0.2069 0.0000 +vt 0.1805 0.2069 0.0000 +vt 0.4799 0.1472 0.0000 +vt 0.4800 0.1469 0.0000 +vt 0.4804 0.1472 0.0000 +vt 0.4803 0.1467 0.0000 +vt 0.4806 0.1467 0.0000 +vt 0.4809 0.1469 0.0000 +vt 0.4810 0.1472 0.0000 +vt 0.4809 0.1476 0.0000 +vt 0.4806 0.1478 0.0000 +vt 0.4803 0.1478 0.0000 +vt 0.4800 0.1476 0.0000 +vt 0.7418 0.0412 0.0000 +vt 0.7418 0.0415 0.0000 +vt 0.7414 0.0415 0.0000 +vt 0.7414 0.0412 0.0000 +vt 0.7410 0.0413 0.0000 +vt 0.7411 0.0411 0.0000 +vt 0.1847 0.0703 0.0000 +vt 0.1847 0.0699 0.0000 +vt 0.4754 0.2101 0.0000 +vt 0.4755 0.2103 0.0000 +vt 0.4750 0.2103 0.0000 +vt 0.4751 0.2101 0.0000 +vt 0.8474 0.2402 0.0000 +vt 0.8474 0.2399 0.0000 +vt 0.7420 0.0411 0.0000 +vt 0.7422 0.0413 0.0000 +vt 0.1944 0.2361 0.0000 +vt 0.1944 0.2358 0.0000 +vt 0.1948 0.2358 0.0000 +vt 0.1948 0.2361 0.0000 +vt 0.9387 0.1487 0.0000 +vt 0.9387 0.1491 0.0000 +vt 0.4266 0.2192 0.0000 +vt 0.4266 0.2190 0.0000 +vt 0.4270 0.2190 0.0000 +vt 0.4269 0.2193 0.0000 +vt 0.4263 0.2193 0.0000 +vt 0.4262 0.2191 0.0000 +vt 0.4081 0.1583 0.0000 +vt 0.4087 0.1585 0.0000 +vt 0.4075 0.1585 0.0000 +vt 0.5645 0.1659 0.0000 +vt 0.5646 0.1657 0.0000 +vt 0.1807 0.2096 0.0000 +vt 0.1793 0.2096 0.0000 +vt 0.5675 0.1657 0.0000 +vt 0.5676 0.1659 0.0000 +vt 0.3278 0.2407 0.0000 +vt 0.3284 0.2408 0.0000 +vt 0.3272 0.2408 0.0000 +vt 0.5676 0.1683 0.0000 +vt 0.5675 0.1685 0.0000 +vt 0.2620 0.1362 0.0000 +vt 0.2634 0.1362 0.0000 +vt 0.5646 0.1685 0.0000 +vt 0.5645 0.1683 0.0000 +vt 0.0687 0.0759 0.0000 +vt 0.0666 0.0761 0.0000 +vt 0.0666 0.0704 0.0000 +vt 0.0687 0.0704 0.0000 +vt 0.0167 0.1843 0.0000 +vt 0.0171 0.1823 0.0000 +vt 0.0188 0.1823 0.0000 +vt 0.0188 0.1843 0.0000 +vt 0.0157 0.1843 0.0000 +vt 0.0161 0.1823 0.0000 +vt 0.6736 0.2631 0.0000 +vt 0.6744 0.2630 0.0000 +vt 0.6744 0.2650 0.0000 +vt 0.6736 0.2651 0.0000 +vt 0.6821 0.2628 0.0000 +vt 0.6821 0.2648 0.0000 +vt 0.6842 0.2628 0.0000 +vt 0.6842 0.2648 0.0000 +vt 0.6861 0.2628 0.0000 +vt 0.6861 0.2649 0.0000 +vt 0.6924 0.2632 0.0000 +vt 0.6922 0.2652 0.0000 +vt 0.8792 0.2294 0.0000 +vt 0.8792 0.2276 0.0000 +vt 0.8812 0.2276 0.0000 +vt 0.8812 0.2294 0.0000 +vt 0.8794 0.2256 0.0000 +vt 0.8814 0.2256 0.0000 +vt 0.8627 0.1739 0.0000 +vt 0.8622 0.1719 0.0000 +vt 0.8649 0.1719 0.0000 +vt 0.8653 0.1739 0.0000 +vt 0.7635 0.1095 0.0000 +vt 0.7660 0.1083 0.0000 +vt 0.7654 0.1115 0.0000 +vt 0.7631 0.1116 0.0000 +vt 0.7645 0.1069 0.0000 +vt 0.7660 0.1054 0.0000 +vt 0.7676 0.1047 0.0000 +vt 0.7680 0.1065 0.0000 +vt 0.7755 0.1031 0.0000 +vt 0.7757 0.1049 0.0000 +vt 0.7778 0.1029 0.0000 +vt 0.7778 0.1047 0.0000 +vt 0.7801 0.1031 0.0000 +vt 0.7799 0.1048 0.0000 +vt 0.7878 0.1049 0.0000 +vt 0.7872 0.1065 0.0000 +vt 0.7885 0.1053 0.0000 +vt 0.7889 0.1064 0.0000 +vt 0.0773 0.0747 0.0000 +vt 0.0771 0.0754 0.0000 +vt 0.0750 0.0745 0.0000 +vt 0.0764 0.0758 0.0000 +vt 0.0688 0.0774 0.0000 +vt 0.0666 0.0776 0.0000 +vt 0.0643 0.0774 0.0000 +vt 0.0645 0.0759 0.0000 +vt 0.0570 0.0757 0.0000 +vt 0.0573 0.0742 0.0000 +vt 0.0553 0.0750 0.0000 +vt 0.0552 0.0724 0.0000 +vt 0.0540 0.0736 0.0000 +vt 0.0530 0.0713 0.0000 +vt 0.0752 0.0719 0.0000 +vt 0.0645 0.0704 0.0000 +vt 0.0666 0.0688 0.0000 +vt 0.0687 0.0688 0.0000 +vt 0.8606 0.1739 0.0000 +vt 0.8590 0.1739 0.0000 +vt 0.8590 0.1719 0.0000 +vt 0.8606 0.1719 0.0000 +vt 0.7680 0.1132 0.0000 +vt 0.7654 0.1132 0.0000 +vt 0.7680 0.1115 0.0000 +vt 0.7630 0.1132 0.0000 +vt 0.7889 0.1116 0.0000 +vt 0.7889 0.1132 0.0000 +vt 0.7872 0.1101 0.0000 +vt 0.7889 0.1101 0.0000 +vt 0.7889 0.1084 0.0000 +vt 0.7872 0.1132 0.0000 +vt 0.7799 0.1132 0.0000 +vt 0.7799 0.1116 0.0000 +vt 0.7778 0.1132 0.0000 +vt 0.7778 0.1116 0.0000 +vt 0.7757 0.1132 0.0000 +vt 0.7757 0.1116 0.0000 +vt 0.0527 0.0703 0.0000 +vt 0.0525 0.0688 0.0000 +vt 0.0547 0.0688 0.0000 +vt 0.0549 0.0705 0.0000 +vt 0.2508 0.2307 0.0000 +vt 0.2508 0.2317 0.0000 +vt 0.2492 0.2317 0.0000 +vt 0.2492 0.2295 0.0000 +vt 0.0750 0.0688 0.0000 +vt 0.0573 0.0705 0.0000 +vt 0.0573 0.0688 0.0000 +vt 0.0645 0.0688 0.0000 +vt 0.0765 0.0737 0.0000 +vt 0.0756 0.0731 0.0000 +vt 0.0756 0.0708 0.0000 +vt 0.0765 0.0701 0.0000 +vt 0.2476 0.2307 0.0000 +vt 0.2476 0.2317 0.0000 +vt 0.0236 0.1787 0.0000 +vt 0.0236 0.1823 0.0000 +vt 0.0220 0.1823 0.0000 +vt 0.0220 0.1787 0.0000 +vt 0.0774 0.0688 0.0000 +vt 0.0774 0.0701 0.0000 +vt 0.0774 0.0738 0.0000 +vt 0.3438 0.1699 0.0000 +vt 0.3438 0.1709 0.0000 +vt 0.3402 0.1709 0.0000 +vt 0.3402 0.1699 0.0000 +vt 0.3438 0.1717 0.0000 +vt 0.3402 0.1717 0.0000 +vt 0.6120 0.1234 0.0000 +vt 0.6120 0.1224 0.0000 +vt 0.6157 0.1224 0.0000 +vt 0.6157 0.1234 0.0000 +vt 0.6120 0.1214 0.0000 +vt 0.6157 0.1214 0.0000 +vt 0.3713 0.1467 0.0000 +vt 0.3713 0.1475 0.0000 +vt 0.3677 0.1475 0.0000 +vt 0.3677 0.1467 0.0000 +vt 0.3713 0.1486 0.0000 +vt 0.3677 0.1485 0.0000 +vt 0.0178 0.1787 0.0000 +vt 0.0188 0.1787 0.0000 +vt 0.0168 0.1787 0.0000 +vt 0.6744 0.2687 0.0000 +vt 0.6735 0.2688 0.0000 +vt 0.6820 0.2685 0.0000 +vt 0.6841 0.2685 0.0000 +vt 0.6860 0.2686 0.0000 +vt 0.6918 0.2689 0.0000 +vt 0.8850 0.2276 0.0000 +vt 0.8850 0.2294 0.0000 +vt 0.8851 0.2256 0.0000 +vt 0.8615 0.1682 0.0000 +vt 0.8641 0.1682 0.0000 +vt 0.8590 0.1683 0.0000 +vt 0.8606 0.1683 0.0000 +vt 0.0220 0.1843 0.0000 +vt 0.0204 0.1843 0.0000 +vt 0.0204 0.1823 0.0000 +vt 0.0236 0.1843 0.0000 +vt 0.0236 0.1784 0.0000 +vt 0.0223 0.1784 0.0000 +vt 0.0776 0.0745 0.0000 +vt 0.0773 0.0756 0.0000 +vt 0.0766 0.0760 0.0000 +vt 0.0688 0.0777 0.0000 +vt 0.0665 0.0779 0.0000 +vt 0.0643 0.0777 0.0000 +vt 0.0569 0.0761 0.0000 +vt 0.0552 0.0754 0.0000 +vt 0.0538 0.0739 0.0000 +vt 0.0528 0.0712 0.0000 +vt 0.4298 0.1467 0.0000 +vt 0.4297 0.1470 0.0000 +vt 0.4288 0.1473 0.0000 +vt 0.4288 0.1469 0.0000 +vt 0.0525 0.0703 0.0000 +vt 0.0522 0.0688 0.0000 +vt 0.0758 0.0729 0.0000 +vt 0.0755 0.0719 0.0000 +vt 0.7419 0.2552 0.0000 +vt 0.7420 0.2549 0.0000 +vt 0.7431 0.2549 0.0000 +vt 0.7430 0.2552 0.0000 +vt 0.0758 0.0709 0.0000 +vt 0.0766 0.0703 0.0000 +vt 0.3715 0.1474 0.0000 +vt 0.3715 0.1483 0.0000 +vt 0.0776 0.0735 0.0000 +vt 0.3441 0.1701 0.0000 +vt 0.3441 0.1711 0.0000 +vt 0.8181 0.1737 0.0000 +vt 0.8146 0.1737 0.0000 +vt 0.8146 0.1672 0.0000 +vt 0.8181 0.1672 0.0000 +vt 0.8114 0.1737 0.0000 +vt 0.8114 0.1672 0.0000 +vt 0.8090 0.1737 0.0000 +vt 0.8090 0.1672 0.0000 +vt 0.7556 0.2285 0.0000 +vt 0.7525 0.2285 0.0000 +vt 0.7525 0.2221 0.0000 +vt 0.7556 0.2221 0.0000 +vt 0.7490 0.2285 0.0000 +vt 0.7490 0.2221 0.0000 +vt 0.8257 0.0426 0.0000 +vt 0.8291 0.0415 0.0000 +vt 0.8308 0.0525 0.0000 +vt 0.8228 0.0446 0.0000 +vt 0.8208 0.0474 0.0000 +vt 0.8197 0.0507 0.0000 +vt 0.8197 0.0542 0.0000 +vt 0.0251 0.0964 0.0000 +vt 0.0286 0.0964 0.0000 +vt 0.0268 0.1072 0.0000 +vt 0.0318 0.0975 0.0000 +vt 0.0346 0.0995 0.0000 +vt 0.0366 0.1022 0.0000 +vt 0.0376 0.1055 0.0000 +vt 0.0286 0.0961 0.0000 +vt 0.0251 0.0961 0.0000 +vt 0.0320 0.0972 0.0000 +vt 0.0348 0.0993 0.0000 +vt 0.0368 0.1021 0.0000 +vt 0.0379 0.1055 0.0000 +vt 0.6876 0.0330 0.0000 +vt 0.6876 0.0395 0.0000 +vt 0.6841 0.0395 0.0000 +vt 0.6841 0.0330 0.0000 +vt 0.6810 0.0395 0.0000 +vt 0.6810 0.0330 0.0000 +vt 0.7400 0.2285 0.0000 +vt 0.7400 0.2221 0.0000 +vt 0.7424 0.2221 0.0000 +vt 0.7424 0.2285 0.0000 +vt 0.7455 0.2221 0.0000 +vt 0.7455 0.2285 0.0000 +vt 0.8289 0.0636 0.0000 +vt 0.8325 0.0636 0.0000 +vt 0.8256 0.0625 0.0000 +vt 0.8228 0.0604 0.0000 +vt 0.8207 0.0576 0.0000 +vt 0.0285 0.1179 0.0000 +vt 0.0318 0.1169 0.0000 +vt 0.0345 0.1149 0.0000 +vt 0.0365 0.1122 0.0000 +vt 0.0376 0.1089 0.0000 +vt 0.0319 0.1171 0.0000 +vt 0.0285 0.1182 0.0000 +vt 0.0347 0.1151 0.0000 +vt 0.0368 0.1123 0.0000 +vt 0.0379 0.1090 0.0000 +vt 0.6911 0.0330 0.0000 +vt 0.6911 0.0395 0.0000 +vt 0.6942 0.0330 0.0000 +vt 0.6942 0.0395 0.0000 +vt 0.6967 0.0330 0.0000 +vt 0.6967 0.0395 0.0000 +vt 0.8769 0.1216 0.0000 +vt 0.8738 0.1216 0.0000 +vt 0.8738 0.1151 0.0000 +vt 0.8769 0.1151 0.0000 +vt 0.8703 0.1216 0.0000 +vt 0.8703 0.1151 0.0000 +vt 0.8359 0.0625 0.0000 +vt 0.8387 0.0604 0.0000 +vt 0.8408 0.0576 0.0000 +vt 0.8418 0.0543 0.0000 +vt 0.8419 0.0508 0.0000 +vt 0.0250 0.1179 0.0000 +vt 0.0218 0.1169 0.0000 +vt 0.0190 0.1149 0.0000 +vt 0.0170 0.1121 0.0000 +vt 0.0160 0.1088 0.0000 +vt 0.0249 0.1182 0.0000 +vt 0.0216 0.1171 0.0000 +vt 0.0188 0.1151 0.0000 +vt 0.0168 0.1122 0.0000 +vt 0.0157 0.1089 0.0000 +vt 0.8216 0.1672 0.0000 +vt 0.8216 0.1737 0.0000 +vt 0.8247 0.1672 0.0000 +vt 0.8247 0.1737 0.0000 +vt 0.8613 0.1216 0.0000 +vt 0.8613 0.1151 0.0000 +vt 0.8638 0.1151 0.0000 +vt 0.8638 0.1216 0.0000 +vt 0.8669 0.1151 0.0000 +vt 0.8669 0.1216 0.0000 +vt 0.8326 0.0415 0.0000 +vt 0.8359 0.0426 0.0000 +vt 0.8387 0.0446 0.0000 +vt 0.8408 0.0475 0.0000 +vt 0.0218 0.0974 0.0000 +vt 0.0191 0.0994 0.0000 +vt 0.0171 0.1022 0.0000 +vt 0.0160 0.1054 0.0000 +vt 0.0217 0.0972 0.0000 +vt 0.0189 0.0992 0.0000 +vt 0.0168 0.1021 0.0000 +vt 0.0157 0.1054 0.0000 +vt 0.3416 0.2183 0.0000 +vt 0.3429 0.2183 0.0000 +vt 0.3429 0.2193 0.0000 +vt 0.3416 0.2193 0.0000 +vt 0.3825 0.1727 0.0000 +vt 0.3812 0.1727 0.0000 +vt 0.3812 0.1717 0.0000 +vt 0.3825 0.1717 0.0000 +vt 0.3812 0.1712 0.0000 +vt 0.3825 0.1712 0.0000 +vt 0.3416 0.2179 0.0000 +vt 0.3429 0.2179 0.0000 +vt 0.3986 0.0598 0.0000 +vt 0.3983 0.0599 0.0000 +vt 0.3979 0.0594 0.0000 +vt 0.3986 0.0589 0.0000 +vt 0.3986 0.0606 0.0000 +vt 0.3983 0.0605 0.0000 +vt 0.3973 0.0616 0.0000 +vt 0.3973 0.0612 0.0000 +vt 0.3979 0.0610 0.0000 +vt 0.3986 0.0616 0.0000 +vt 0.3973 0.0589 0.0000 +vt 0.3973 0.0592 0.0000 +vt 0.2080 0.0600 0.0000 +vt 0.2079 0.0595 0.0000 +vt 0.2088 0.0595 0.0000 +vt 0.2088 0.0600 0.0000 +vt 0.9178 0.1599 0.0000 +vt 0.9181 0.1604 0.0000 +vt 0.9174 0.1604 0.0000 +vt 0.9174 0.1599 0.0000 +vt 0.9178 0.1593 0.0000 +vt 0.9174 0.1593 0.0000 +vt 0.9174 0.1588 0.0000 +vt 0.9181 0.1588 0.0000 +vt 0.7324 0.2791 0.0000 +vt 0.7331 0.2791 0.0000 +vt 0.7331 0.2797 0.0000 +vt 0.7323 0.2797 0.0000 +vt 0.3431 0.2183 0.0000 +vt 0.3431 0.2192 0.0000 +vt 0.3988 0.0590 0.0000 +vt 0.3988 0.0598 0.0000 +vt 0.3988 0.0607 0.0000 +vt 0.3988 0.0615 0.0000 +vt 0.3810 0.1726 0.0000 +vt 0.3810 0.1717 0.0000 +vt 0.3810 0.1712 0.0000 +vt 0.3431 0.2179 0.0000 +vt 0.2359 0.1501 0.0000 +vt 0.2361 0.1504 0.0000 +vt 0.2344 0.1504 0.0000 +vt 0.2345 0.1501 0.0000 +vt 0.2361 0.1510 0.0000 +vt 0.2344 0.1510 0.0000 +vt 0.2132 0.0600 0.0000 +vt 0.2132 0.0595 0.0000 +vt 0.9129 0.1599 0.0000 +vt 0.9129 0.1604 0.0000 +vt 0.9129 0.1593 0.0000 +vt 0.9129 0.1589 0.0000 +vt 0.7376 0.2797 0.0000 +vt 0.7376 0.2791 0.0000 +vt 0.2311 0.0599 0.0000 +vt 0.2135 0.0600 0.0000 +vt 0.2135 0.0595 0.0000 +vt 0.2311 0.0595 0.0000 +vt 0.8950 0.1598 0.0000 +vt 0.9126 0.1599 0.0000 +vt 0.9126 0.1604 0.0000 +vt 0.8950 0.1602 0.0000 +vt 0.8950 0.1594 0.0000 +vt 0.9126 0.1594 0.0000 +vt 0.8950 0.1590 0.0000 +vt 0.9126 0.1589 0.0000 +vt 0.7554 0.2797 0.0000 +vt 0.7378 0.2797 0.0000 +vt 0.7378 0.2792 0.0000 +vt 0.7554 0.2793 0.0000 +vt 0.3404 0.2193 0.0000 +vt 0.3404 0.2183 0.0000 +vt 0.3837 0.1717 0.0000 +vt 0.3837 0.1727 0.0000 +vt 0.3837 0.1712 0.0000 +vt 0.3404 0.2179 0.0000 +vt 0.3961 0.0598 0.0000 +vt 0.3961 0.0589 0.0000 +vt 0.3967 0.0594 0.0000 +vt 0.3964 0.0599 0.0000 +vt 0.3961 0.0606 0.0000 +vt 0.3964 0.0605 0.0000 +vt 0.3961 0.0616 0.0000 +vt 0.3967 0.0610 0.0000 +vt 0.2080 0.0589 0.0000 +vt 0.2088 0.0589 0.0000 +vt 0.7020 0.2802 0.0000 +vt 0.7024 0.2802 0.0000 +vt 0.7024 0.2807 0.0000 +vt 0.7017 0.2807 0.0000 +vt 0.7020 0.2796 0.0000 +vt 0.7024 0.2796 0.0000 +vt 0.7017 0.2791 0.0000 +vt 0.7024 0.2791 0.0000 +vt 0.7324 0.2803 0.0000 +vt 0.7331 0.2803 0.0000 +vt 0.3402 0.2192 0.0000 +vt 0.3402 0.2183 0.0000 +vt 0.3959 0.0598 0.0000 +vt 0.3959 0.0590 0.0000 +vt 0.3959 0.0607 0.0000 +vt 0.3959 0.0615 0.0000 +vt 0.3839 0.1717 0.0000 +vt 0.3839 0.1726 0.0000 +vt 0.3839 0.1712 0.0000 +vt 0.3402 0.2179 0.0000 +vt 0.2359 0.1519 0.0000 +vt 0.2345 0.1519 0.0000 +vt 0.2344 0.1516 0.0000 +vt 0.2361 0.1516 0.0000 +vt 0.2132 0.0589 0.0000 +vt 0.7069 0.2802 0.0000 +vt 0.7069 0.2807 0.0000 +vt 0.7069 0.2796 0.0000 +vt 0.7069 0.2792 0.0000 +vt 0.7376 0.2802 0.0000 +vt 0.2311 0.0590 0.0000 +vt 0.2135 0.0589 0.0000 +vt 0.7248 0.2801 0.0000 +vt 0.7248 0.2805 0.0000 +vt 0.7072 0.2806 0.0000 +vt 0.7072 0.2802 0.0000 +vt 0.7248 0.2797 0.0000 +vt 0.7072 0.2796 0.0000 +vt 0.7248 0.2793 0.0000 +vt 0.7072 0.2792 0.0000 +vt 0.7554 0.2801 0.0000 +vt 0.7378 0.2802 0.0000 +vt 0.2771 0.1250 0.0000 +vt 0.2756 0.1251 0.0000 +vt 0.2768 0.1241 0.0000 +vt 0.2760 0.1235 0.0000 +vt 0.2751 0.1235 0.0000 +vt 0.2743 0.1241 0.0000 +vt 0.2740 0.1250 0.0000 +vt 0.2741 0.1255 0.0000 +vt 0.2770 0.1255 0.0000 +vt 0.1642 0.2256 0.0000 +vt 0.1630 0.2246 0.0000 +vt 0.1645 0.2247 0.0000 +vt 0.1644 0.2242 0.0000 +vt 0.1615 0.2242 0.0000 +vt 0.1614 0.2247 0.0000 +vt 0.1617 0.2256 0.0000 +vt 0.1625 0.2262 0.0000 +vt 0.1634 0.2262 0.0000 +vt 0.2612 0.2417 0.0000 +vt 0.2617 0.2417 0.0000 +vt 0.2613 0.2420 0.0000 +vt 0.2616 0.2422 0.0000 +vt 0.2619 0.2422 0.0000 +vt 0.2622 0.2420 0.0000 +vt 0.2623 0.2417 0.0000 +vt 0.2622 0.2414 0.0000 +vt 0.2619 0.2412 0.0000 +vt 0.2616 0.2412 0.0000 +vt 0.2613 0.2414 0.0000 +vt 0.2354 0.1078 0.0000 +vt 0.2351 0.1078 0.0000 +vt 0.2350 0.1076 0.0000 +vt 0.2355 0.1076 0.0000 +vt 0.2348 0.1080 0.0000 +vt 0.2347 0.1078 0.0000 +vt 0.8949 0.1598 0.0000 +vt 0.8949 0.1595 0.0000 +vt 0.6481 0.0463 0.0000 +vt 0.6482 0.0460 0.0000 +vt 0.6484 0.0460 0.0000 +vt 0.6483 0.0464 0.0000 +vt 0.6481 0.0457 0.0000 +vt 0.6483 0.0456 0.0000 +vt 0.2357 0.1080 0.0000 +vt 0.2358 0.1078 0.0000 +vt 0.9480 0.2793 0.0000 +vt 0.9477 0.2793 0.0000 +vt 0.9476 0.2791 0.0000 +vt 0.9481 0.2791 0.0000 +vt 0.7249 0.2797 0.0000 +vt 0.7249 0.2801 0.0000 +vt 0.4170 0.2358 0.0000 +vt 0.4167 0.2358 0.0000 +vt 0.4166 0.2356 0.0000 +vt 0.4170 0.2355 0.0000 +vt 0.4173 0.2358 0.0000 +vt 0.4174 0.2356 0.0000 +vt 0.3819 0.1704 0.0000 +vt 0.3825 0.1702 0.0000 +vt 0.3831 0.1704 0.0000 +vt 0.2337 0.1522 0.0000 +vt 0.2338 0.1524 0.0000 +vt 0.1622 0.2235 0.0000 +vt 0.1636 0.2235 0.0000 +vt 0.2367 0.1524 0.0000 +vt 0.2368 0.1522 0.0000 +vt 0.3410 0.2170 0.0000 +vt 0.3416 0.2169 0.0000 +vt 0.3422 0.2170 0.0000 +vt 0.2368 0.1498 0.0000 +vt 0.2367 0.1496 0.0000 +vt 0.2763 0.1262 0.0000 +vt 0.2749 0.1262 0.0000 +vt 0.2338 0.1496 0.0000 +vt 0.2337 0.1498 0.0000 +vt 0.0687 0.0616 0.0000 +vt 0.0687 0.0671 0.0000 +vt 0.0666 0.0671 0.0000 +vt 0.0666 0.0614 0.0000 +vt 0.0305 0.1843 0.0000 +vt 0.0284 0.1843 0.0000 +vt 0.0284 0.1823 0.0000 +vt 0.0301 0.1823 0.0000 +vt 0.0311 0.1823 0.0000 +vt 0.0315 0.1843 0.0000 +vt 0.9266 0.0240 0.0000 +vt 0.9266 0.0260 0.0000 +vt 0.9257 0.0259 0.0000 +vt 0.9258 0.0239 0.0000 +vt 0.9181 0.0254 0.0000 +vt 0.9181 0.0234 0.0000 +vt 0.9160 0.0253 0.0000 +vt 0.9160 0.0233 0.0000 +vt 0.9141 0.0233 0.0000 +vt 0.9141 0.0253 0.0000 +vt 0.9080 0.0255 0.0000 +vt 0.9079 0.0234 0.0000 +vt 0.8962 0.2256 0.0000 +vt 0.8983 0.2256 0.0000 +vt 0.8983 0.2274 0.0000 +vt 0.8962 0.2274 0.0000 +vt 0.8964 0.2294 0.0000 +vt 0.8985 0.2294 0.0000 +vt 0.8553 0.1739 0.0000 +vt 0.8526 0.1739 0.0000 +vt 0.8531 0.1719 0.0000 +vt 0.8557 0.1719 0.0000 +vt 0.7635 0.1169 0.0000 +vt 0.7631 0.1148 0.0000 +vt 0.7654 0.1149 0.0000 +vt 0.7660 0.1181 0.0000 +vt 0.7645 0.1196 0.0000 +vt 0.7660 0.1210 0.0000 +vt 0.7680 0.1200 0.0000 +vt 0.7676 0.1217 0.0000 +vt 0.7757 0.1216 0.0000 +vt 0.7755 0.1233 0.0000 +vt 0.7778 0.1218 0.0000 +vt 0.7778 0.1235 0.0000 +vt 0.7799 0.1216 0.0000 +vt 0.7801 0.1234 0.0000 +vt 0.7872 0.1199 0.0000 +vt 0.7878 0.1215 0.0000 +vt 0.7885 0.1211 0.0000 +vt 0.7889 0.1201 0.0000 +vt 0.0773 0.0628 0.0000 +vt 0.0750 0.0630 0.0000 +vt 0.0771 0.0621 0.0000 +vt 0.0764 0.0618 0.0000 +vt 0.0688 0.0601 0.0000 +vt 0.0666 0.0599 0.0000 +vt 0.0645 0.0616 0.0000 +vt 0.0643 0.0601 0.0000 +vt 0.0573 0.0633 0.0000 +vt 0.0570 0.0618 0.0000 +vt 0.0552 0.0651 0.0000 +vt 0.0553 0.0625 0.0000 +vt 0.0540 0.0639 0.0000 +vt 0.0530 0.0662 0.0000 +vt 0.0752 0.0656 0.0000 +vt 0.0645 0.0671 0.0000 +vt 0.8574 0.1739 0.0000 +vt 0.8574 0.1719 0.0000 +vt 0.7680 0.1149 0.0000 +vt 0.7872 0.1164 0.0000 +vt 0.7889 0.1148 0.0000 +vt 0.7889 0.1164 0.0000 +vt 0.7889 0.1180 0.0000 +vt 0.7799 0.1149 0.0000 +vt 0.7778 0.1149 0.0000 +vt 0.7757 0.1149 0.0000 +vt 0.0527 0.0672 0.0000 +vt 0.0549 0.0670 0.0000 +vt 0.3141 0.2280 0.0000 +vt 0.3141 0.2302 0.0000 +vt 0.3125 0.2292 0.0000 +vt 0.3131 0.2283 0.0000 +vt 0.0573 0.0670 0.0000 +vt 0.0765 0.0638 0.0000 +vt 0.0756 0.0644 0.0000 +vt 0.0756 0.0668 0.0000 +vt 0.0765 0.0674 0.0000 +vt 0.3157 0.2292 0.0000 +vt 0.3150 0.2283 0.0000 +vt 0.0252 0.1787 0.0000 +vt 0.0252 0.1823 0.0000 +vt 0.0774 0.0674 0.0000 +vt 0.0774 0.0637 0.0000 +vt 0.3299 0.1833 0.0000 +vt 0.3263 0.1833 0.0000 +vt 0.3263 0.1823 0.0000 +vt 0.3299 0.1823 0.0000 +vt 0.3263 0.1815 0.0000 +vt 0.3299 0.1815 0.0000 +vt 0.3299 0.1951 0.0000 +vt 0.3263 0.1951 0.0000 +vt 0.3263 0.1941 0.0000 +vt 0.3299 0.1941 0.0000 +vt 0.3263 0.1931 0.0000 +vt 0.3299 0.1931 0.0000 +vt 0.3577 0.1601 0.0000 +vt 0.3541 0.1601 0.0000 +vt 0.3541 0.1593 0.0000 +vt 0.3577 0.1593 0.0000 +vt 0.3541 0.1583 0.0000 +vt 0.3577 0.1583 0.0000 +vt 0.0284 0.1787 0.0000 +vt 0.0294 0.1787 0.0000 +vt 0.0304 0.1787 0.0000 +vt 0.9256 0.0296 0.0000 +vt 0.9265 0.0297 0.0000 +vt 0.9180 0.0291 0.0000 +vt 0.9159 0.0290 0.0000 +vt 0.9140 0.0290 0.0000 +vt 0.9082 0.0292 0.0000 +vt 0.9020 0.2274 0.0000 +vt 0.9020 0.2256 0.0000 +vt 0.9022 0.2294 0.0000 +vt 0.8538 0.1682 0.0000 +vt 0.8565 0.1682 0.0000 +vt 0.8574 0.1683 0.0000 +vt 0.0268 0.1823 0.0000 +vt 0.0268 0.1843 0.0000 +vt 0.0252 0.1843 0.0000 +vt 0.0249 0.1784 0.0000 +vt 0.0773 0.0619 0.0000 +vt 0.0776 0.0630 0.0000 +vt 0.0766 0.0615 0.0000 +vt 0.0688 0.0598 0.0000 +vt 0.0665 0.0596 0.0000 +vt 0.0643 0.0598 0.0000 +vt 0.0569 0.0615 0.0000 +vt 0.0552 0.0621 0.0000 +vt 0.0538 0.0636 0.0000 +vt 0.0528 0.0663 0.0000 +vt 0.4249 0.1467 0.0000 +vt 0.4257 0.1469 0.0000 +vt 0.4257 0.1473 0.0000 +vt 0.4249 0.1470 0.0000 +vt 0.0525 0.0672 0.0000 +vt 0.0758 0.0646 0.0000 +vt 0.0755 0.0656 0.0000 +vt 0.2288 0.1159 0.0000 +vt 0.2277 0.1159 0.0000 +vt 0.2277 0.1156 0.0000 +vt 0.2288 0.1156 0.0000 +vt 0.0758 0.0666 0.0000 +vt 0.0766 0.0672 0.0000 +vt 0.3579 0.1585 0.0000 +vt 0.3579 0.1594 0.0000 +vt 0.0776 0.0640 0.0000 +vt 0.3302 0.1822 0.0000 +vt 0.3302 0.1831 0.0000 +vt 0.2490 0.2429 0.0000 +vt 0.2490 0.2438 0.0000 +vt 0.2478 0.2438 0.0000 +vt 0.2478 0.2429 0.0000 +vt 0.3555 0.2079 0.0000 +vt 0.3555 0.2069 0.0000 +vt 0.3567 0.2069 0.0000 +vt 0.3567 0.2079 0.0000 +vt 0.3555 0.2065 0.0000 +vt 0.3567 0.2065 0.0000 +vt 0.2490 0.2424 0.0000 +vt 0.2478 0.2424 0.0000 +vt 0.1300 0.2442 0.0000 +vt 0.1300 0.2433 0.0000 +vt 0.1307 0.2438 0.0000 +vt 0.1303 0.2443 0.0000 +vt 0.1300 0.2450 0.0000 +vt 0.1303 0.2449 0.0000 +vt 0.1313 0.2460 0.0000 +vt 0.1300 0.2460 0.0000 +vt 0.1307 0.2454 0.0000 +vt 0.1313 0.2456 0.0000 +vt 0.1313 0.2433 0.0000 +vt 0.1313 0.2436 0.0000 +vt 0.0158 0.2113 0.0000 +vt 0.0166 0.2113 0.0000 +vt 0.0166 0.2119 0.0000 +vt 0.0157 0.2119 0.0000 +vt 0.9342 0.0336 0.0000 +vt 0.9347 0.0336 0.0000 +vt 0.9347 0.0340 0.0000 +vt 0.9339 0.0341 0.0000 +vt 0.9342 0.0329 0.0000 +vt 0.9347 0.0329 0.0000 +vt 0.9339 0.0324 0.0000 +vt 0.9347 0.0325 0.0000 +vt 0.1921 0.0704 0.0000 +vt 0.1920 0.0698 0.0000 +vt 0.1928 0.0698 0.0000 +vt 0.1928 0.0704 0.0000 +vt 0.2476 0.2438 0.0000 +vt 0.2476 0.2429 0.0000 +vt 0.1298 0.2441 0.0000 +vt 0.1298 0.2434 0.0000 +vt 0.1298 0.2451 0.0000 +vt 0.1298 0.2459 0.0000 +vt 0.3569 0.2069 0.0000 +vt 0.3569 0.2078 0.0000 +vt 0.3569 0.2065 0.0000 +vt 0.2476 0.2424 0.0000 +vt 0.1429 0.2423 0.0000 +vt 0.1415 0.2423 0.0000 +vt 0.1414 0.2420 0.0000 +vt 0.1430 0.2420 0.0000 +vt 0.1414 0.2414 0.0000 +vt 0.1430 0.2414 0.0000 +vt 0.0210 0.2114 0.0000 +vt 0.0210 0.2119 0.0000 +vt 0.9391 0.0335 0.0000 +vt 0.9391 0.0340 0.0000 +vt 0.9391 0.0330 0.0000 +vt 0.9391 0.0325 0.0000 +vt 0.1973 0.0698 0.0000 +vt 0.1973 0.0704 0.0000 +vt 0.0389 0.2115 0.0000 +vt 0.0389 0.2119 0.0000 +vt 0.0213 0.2119 0.0000 +vt 0.0213 0.2114 0.0000 +vt 0.9570 0.0335 0.0000 +vt 0.9570 0.0338 0.0000 +vt 0.9394 0.0340 0.0000 +vt 0.9394 0.0335 0.0000 +vt 0.9570 0.0330 0.0000 +vt 0.9394 0.0330 0.0000 +vt 0.9570 0.0327 0.0000 +vt 0.9394 0.0325 0.0000 +vt 0.2152 0.0698 0.0000 +vt 0.2152 0.0703 0.0000 +vt 0.1976 0.0704 0.0000 +vt 0.1976 0.0698 0.0000 +vt 0.2502 0.2429 0.0000 +vt 0.2502 0.2438 0.0000 +vt 0.3543 0.2079 0.0000 +vt 0.3543 0.2069 0.0000 +vt 0.3543 0.2065 0.0000 +vt 0.2502 0.2424 0.0000 +vt 0.1325 0.2442 0.0000 +vt 0.1322 0.2443 0.0000 +vt 0.1319 0.2438 0.0000 +vt 0.1325 0.2433 0.0000 +vt 0.1325 0.2450 0.0000 +vt 0.1322 0.2449 0.0000 +vt 0.1319 0.2454 0.0000 +vt 0.1325 0.2460 0.0000 +vt 0.0158 0.2125 0.0000 +vt 0.0166 0.2125 0.0000 +vt 0.9360 0.1162 0.0000 +vt 0.9363 0.1167 0.0000 +vt 0.9356 0.1167 0.0000 +vt 0.9356 0.1162 0.0000 +vt 0.9360 0.1156 0.0000 +vt 0.9356 0.1156 0.0000 +vt 0.9356 0.1151 0.0000 +vt 0.9363 0.1151 0.0000 +vt 0.1921 0.0693 0.0000 +vt 0.1928 0.0693 0.0000 +vt 0.2504 0.2429 0.0000 +vt 0.2504 0.2438 0.0000 +vt 0.1327 0.2434 0.0000 +vt 0.1327 0.2441 0.0000 +vt 0.1327 0.2451 0.0000 +vt 0.1327 0.2459 0.0000 +vt 0.3541 0.2078 0.0000 +vt 0.3541 0.2069 0.0000 +vt 0.3541 0.2065 0.0000 +vt 0.2504 0.2424 0.0000 +vt 0.1429 0.2405 0.0000 +vt 0.1430 0.2408 0.0000 +vt 0.1414 0.2408 0.0000 +vt 0.1415 0.2405 0.0000 +vt 0.0210 0.2125 0.0000 +vt 0.9312 0.1162 0.0000 +vt 0.9312 0.1167 0.0000 +vt 0.9312 0.1156 0.0000 +vt 0.9312 0.1152 0.0000 +vt 0.1973 0.0693 0.0000 +vt 0.0389 0.2123 0.0000 +vt 0.0213 0.2124 0.0000 +vt 0.9133 0.1162 0.0000 +vt 0.9309 0.1162 0.0000 +vt 0.9309 0.1167 0.0000 +vt 0.9133 0.1165 0.0000 +vt 0.9133 0.1157 0.0000 +vt 0.9309 0.1157 0.0000 +vt 0.9133 0.1154 0.0000 +vt 0.9309 0.1152 0.0000 +vt 0.1976 0.0694 0.0000 +vt 0.2152 0.0695 0.0000 +vt 0.2367 0.1725 0.0000 +vt 0.2365 0.1734 0.0000 +vt 0.2352 0.1724 0.0000 +vt 0.2357 0.1740 0.0000 +vt 0.2347 0.1740 0.0000 +vt 0.2340 0.1734 0.0000 +vt 0.2337 0.1725 0.0000 +vt 0.2338 0.1721 0.0000 +vt 0.2366 0.1721 0.0000 +vt 0.2639 0.1616 0.0000 +vt 0.2642 0.1624 0.0000 +vt 0.2627 0.1626 0.0000 +vt 0.2641 0.1629 0.0000 +vt 0.2613 0.1629 0.0000 +vt 0.2612 0.1624 0.0000 +vt 0.2615 0.1616 0.0000 +vt 0.2622 0.1610 0.0000 +vt 0.2632 0.1610 0.0000 +vt 0.7388 0.0240 0.0000 +vt 0.7389 0.0237 0.0000 +vt 0.7393 0.0240 0.0000 +vt 0.7392 0.0235 0.0000 +vt 0.7395 0.0235 0.0000 +vt 0.7398 0.0237 0.0000 +vt 0.7399 0.0240 0.0000 +vt 0.7398 0.0243 0.0000 +vt 0.7395 0.0245 0.0000 +vt 0.7392 0.0245 0.0000 +vt 0.7389 0.0243 0.0000 +vt 0.9799 0.1904 0.0000 +vt 0.9799 0.1902 0.0000 +vt 0.9803 0.1902 0.0000 +vt 0.9802 0.1904 0.0000 +vt 0.9807 0.1904 0.0000 +vt 0.9805 0.1905 0.0000 +vt 0.9572 0.0334 0.0000 +vt 0.9572 0.0331 0.0000 +vt 0.2744 0.2424 0.0000 +vt 0.2745 0.2427 0.0000 +vt 0.2740 0.2427 0.0000 +vt 0.2741 0.2424 0.0000 +vt 0.2153 0.0702 0.0000 +vt 0.2153 0.0699 0.0000 +vt 0.9796 0.1906 0.0000 +vt 0.9795 0.1904 0.0000 +vt 0.4564 0.2284 0.0000 +vt 0.4563 0.2282 0.0000 +vt 0.4568 0.2282 0.0000 +vt 0.4567 0.2284 0.0000 +vt 0.9131 0.1158 0.0000 +vt 0.9131 0.1161 0.0000 +vt 0.9399 0.2793 0.0000 +vt 0.9399 0.2791 0.0000 +vt 0.9403 0.2792 0.0000 +vt 0.9402 0.2794 0.0000 +vt 0.9396 0.2794 0.0000 +vt 0.9395 0.2792 0.0000 +vt 0.3555 0.2055 0.0000 +vt 0.3561 0.2057 0.0000 +vt 0.3549 0.2057 0.0000 +vt 0.1406 0.2402 0.0000 +vt 0.1408 0.2400 0.0000 +vt 0.2634 0.1637 0.0000 +vt 0.2620 0.1637 0.0000 +vt 0.1436 0.2400 0.0000 +vt 0.1438 0.2402 0.0000 +vt 0.2490 0.2414 0.0000 +vt 0.2496 0.2416 0.0000 +vt 0.2484 0.2416 0.0000 +vt 0.1438 0.2427 0.0000 +vt 0.1436 0.2429 0.0000 +vt 0.2345 0.1713 0.0000 +vt 0.2359 0.1713 0.0000 +vt 0.1408 0.2429 0.0000 +vt 0.1406 0.2427 0.0000 +vt 0.2755 0.1596 0.0000 +vt 0.2755 0.1606 0.0000 +vt 0.2742 0.1606 0.0000 +vt 0.2742 0.1596 0.0000 +vt 0.2883 0.1508 0.0000 +vt 0.2883 0.1498 0.0000 +vt 0.2895 0.1498 0.0000 +vt 0.2895 0.1508 0.0000 +vt 0.2883 0.1493 0.0000 +vt 0.2895 0.1493 0.0000 +vt 0.2755 0.1591 0.0000 +vt 0.2742 0.1591 0.0000 +vt 0.3311 0.0792 0.0000 +vt 0.3311 0.0782 0.0000 +vt 0.3318 0.0788 0.0000 +vt 0.3314 0.0793 0.0000 +vt 0.3311 0.0800 0.0000 +vt 0.3314 0.0799 0.0000 +vt 0.3324 0.0809 0.0000 +vt 0.3311 0.0809 0.0000 +vt 0.3318 0.0804 0.0000 +vt 0.3324 0.0806 0.0000 +vt 0.3324 0.0782 0.0000 +vt 0.3324 0.0786 0.0000 +vt 0.9438 0.1151 0.0000 +vt 0.9445 0.1151 0.0000 +vt 0.9445 0.1157 0.0000 +vt 0.9436 0.1157 0.0000 +vt 0.8323 0.2102 0.0000 +vt 0.8328 0.2102 0.0000 +vt 0.8328 0.2107 0.0000 +vt 0.8321 0.2107 0.0000 +vt 0.8323 0.2096 0.0000 +vt 0.8328 0.2096 0.0000 +vt 0.8321 0.2091 0.0000 +vt 0.8328 0.2091 0.0000 +vt 0.9256 0.1600 0.0000 +vt 0.9254 0.1594 0.0000 +vt 0.9263 0.1594 0.0000 +vt 0.9263 0.1600 0.0000 +vt 0.2740 0.1605 0.0000 +vt 0.2740 0.1596 0.0000 +vt 0.3309 0.0791 0.0000 +vt 0.3309 0.0783 0.0000 +vt 0.3309 0.0800 0.0000 +vt 0.3309 0.0808 0.0000 +vt 0.2897 0.1498 0.0000 +vt 0.2897 0.1507 0.0000 +vt 0.2897 0.1493 0.0000 +vt 0.2740 0.1591 0.0000 +vt 0.2634 0.1259 0.0000 +vt 0.2620 0.1259 0.0000 +vt 0.2619 0.1256 0.0000 +vt 0.2636 0.1256 0.0000 +vt 0.2619 0.1250 0.0000 +vt 0.2636 0.1250 0.0000 +vt 0.9490 0.1152 0.0000 +vt 0.9490 0.1157 0.0000 +vt 0.8372 0.2102 0.0000 +vt 0.8372 0.2107 0.0000 +vt 0.8372 0.2096 0.0000 +vt 0.8372 0.2092 0.0000 +vt 0.9307 0.1594 0.0000 +vt 0.9307 0.1600 0.0000 +vt 0.9668 0.1153 0.0000 +vt 0.9668 0.1157 0.0000 +vt 0.9492 0.1157 0.0000 +vt 0.9492 0.1152 0.0000 +vt 0.8551 0.2101 0.0000 +vt 0.8551 0.2105 0.0000 +vt 0.8375 0.2106 0.0000 +vt 0.8375 0.2102 0.0000 +vt 0.8551 0.2097 0.0000 +vt 0.8375 0.2097 0.0000 +vt 0.8551 0.2093 0.0000 +vt 0.8375 0.2092 0.0000 +vt 0.9486 0.1594 0.0000 +vt 0.9486 0.1598 0.0000 +vt 0.9310 0.1599 0.0000 +vt 0.9310 0.1594 0.0000 +vt 0.2767 0.1596 0.0000 +vt 0.2767 0.1606 0.0000 +vt 0.2871 0.1508 0.0000 +vt 0.2871 0.1498 0.0000 +vt 0.2871 0.1493 0.0000 +vt 0.2767 0.1591 0.0000 +vt 0.3336 0.0792 0.0000 +vt 0.3333 0.0793 0.0000 +vt 0.3330 0.0788 0.0000 +vt 0.3336 0.0782 0.0000 +vt 0.3336 0.0800 0.0000 +vt 0.3333 0.0799 0.0000 +vt 0.3330 0.0804 0.0000 +vt 0.3336 0.0809 0.0000 +vt 0.9438 0.1163 0.0000 +vt 0.9445 0.1163 0.0000 +vt 0.0825 0.1927 0.0000 +vt 0.0828 0.1932 0.0000 +vt 0.0821 0.1932 0.0000 +vt 0.0821 0.1927 0.0000 +vt 0.0825 0.1921 0.0000 +vt 0.0821 0.1921 0.0000 +vt 0.0821 0.1916 0.0000 +vt 0.0828 0.1916 0.0000 +vt 0.9256 0.1588 0.0000 +vt 0.9263 0.1588 0.0000 +vt 0.2769 0.1596 0.0000 +vt 0.2769 0.1605 0.0000 +vt 0.3338 0.0783 0.0000 +vt 0.3338 0.0791 0.0000 +vt 0.3338 0.0800 0.0000 +vt 0.3338 0.0808 0.0000 +vt 0.2869 0.1507 0.0000 +vt 0.2869 0.1498 0.0000 +vt 0.2869 0.1493 0.0000 +vt 0.2769 0.1591 0.0000 +vt 0.2634 0.1241 0.0000 +vt 0.2636 0.1244 0.0000 +vt 0.2619 0.1244 0.0000 +vt 0.2620 0.1241 0.0000 +vt 0.9490 0.1163 0.0000 +vt 0.0776 0.1927 0.0000 +vt 0.0776 0.1931 0.0000 +vt 0.0776 0.1921 0.0000 +vt 0.0776 0.1916 0.0000 +vt 0.9307 0.1589 0.0000 +vt 0.9668 0.1161 0.0000 +vt 0.9492 0.1162 0.0000 +vt 0.0597 0.1926 0.0000 +vt 0.0773 0.1927 0.0000 +vt 0.0773 0.1931 0.0000 +vt 0.0597 0.1930 0.0000 +vt 0.0597 0.1922 0.0000 +vt 0.0773 0.1921 0.0000 +vt 0.0597 0.1918 0.0000 +vt 0.0773 0.1917 0.0000 +vt 0.9310 0.1589 0.0000 +vt 0.9486 0.1590 0.0000 +vt 0.2367 0.1850 0.0000 +vt 0.2365 0.1859 0.0000 +vt 0.2352 0.1848 0.0000 +vt 0.2357 0.1864 0.0000 +vt 0.2347 0.1864 0.0000 +vt 0.2340 0.1859 0.0000 +vt 0.2337 0.1850 0.0000 +vt 0.2338 0.1845 0.0000 +vt 0.2366 0.1845 0.0000 +vt 0.1642 0.2365 0.0000 +vt 0.1645 0.2374 0.0000 +vt 0.1630 0.2375 0.0000 +vt 0.1644 0.2378 0.0000 +vt 0.1615 0.2378 0.0000 +vt 0.1614 0.2374 0.0000 +vt 0.1617 0.2365 0.0000 +vt 0.1625 0.2359 0.0000 +vt 0.1634 0.2359 0.0000 +vt 0.2740 0.2143 0.0000 +vt 0.2742 0.2140 0.0000 +vt 0.2746 0.2143 0.0000 +vt 0.2744 0.2138 0.0000 +vt 0.2748 0.2138 0.0000 +vt 0.2750 0.2140 0.0000 +vt 0.2751 0.2143 0.0000 +vt 0.2750 0.2146 0.0000 +vt 0.2748 0.2148 0.0000 +vt 0.2744 0.2148 0.0000 +vt 0.2742 0.2146 0.0000 +vt 0.0893 0.2304 0.0000 +vt 0.0892 0.2301 0.0000 +vt 0.0897 0.2301 0.0000 +vt 0.0896 0.2304 0.0000 +vt 0.0900 0.2303 0.0000 +vt 0.0899 0.2305 0.0000 +vt 0.8553 0.2101 0.0000 +vt 0.8553 0.2098 0.0000 +vt 0.2433 0.1079 0.0000 +vt 0.2432 0.1077 0.0000 +vt 0.2436 0.1076 0.0000 +vt 0.2436 0.1078 0.0000 +vt 0.2440 0.1077 0.0000 +vt 0.2439 0.1079 0.0000 +vt 0.0890 0.2305 0.0000 +vt 0.0889 0.2303 0.0000 +vt 0.4768 0.1813 0.0000 +vt 0.4768 0.1810 0.0000 +vt 0.4772 0.1810 0.0000 +vt 0.4772 0.1813 0.0000 +vt 0.0596 0.1922 0.0000 +vt 0.0596 0.1926 0.0000 +vt 0.4443 0.2021 0.0000 +vt 0.4443 0.2018 0.0000 +vt 0.4447 0.2019 0.0000 +vt 0.4446 0.2021 0.0000 +vt 0.4440 0.2022 0.0000 +vt 0.4439 0.2020 0.0000 +vt 0.2883 0.1484 0.0000 +vt 0.2889 0.1485 0.0000 +vt 0.2877 0.1485 0.0000 +vt 0.2612 0.1237 0.0000 +vt 0.2613 0.1235 0.0000 +vt 0.1636 0.2386 0.0000 +vt 0.1622 0.2386 0.0000 +vt 0.2642 0.1235 0.0000 +vt 0.2643 0.1237 0.0000 +vt 0.2755 0.1582 0.0000 +vt 0.2761 0.1583 0.0000 +vt 0.2749 0.1583 0.0000 +vt 0.2643 0.1262 0.0000 +vt 0.2642 0.1264 0.0000 +vt 0.2345 0.1838 0.0000 +vt 0.2359 0.1838 0.0000 +vt 0.2613 0.1264 0.0000 +vt 0.2612 0.1262 0.0000 +vt 0.5316 0.2857 0.0000 +vt 0.5295 0.2857 0.0000 +vt 0.5295 0.2830 0.0000 +vt 0.5316 0.2830 0.0000 +vt 0.7120 0.2449 0.0000 +vt 0.7108 0.2449 0.0000 +vt 0.7108 0.2429 0.0000 +vt 0.7120 0.2429 0.0000 +vt 0.8031 0.1324 0.0000 +vt 0.8031 0.1304 0.0000 +vt 0.8041 0.1304 0.0000 +vt 0.8041 0.1324 0.0000 +vt 0.7972 0.1324 0.0000 +vt 0.7962 0.1324 0.0000 +vt 0.7966 0.1304 0.0000 +vt 0.7976 0.1304 0.0000 +vt 0.8830 0.0417 0.0000 +vt 0.8839 0.0416 0.0000 +vt 0.8838 0.0436 0.0000 +vt 0.8830 0.0437 0.0000 +vt 0.8912 0.0415 0.0000 +vt 0.8912 0.0435 0.0000 +vt 0.8933 0.0415 0.0000 +vt 0.8932 0.0435 0.0000 +vt 0.8952 0.0415 0.0000 +vt 0.8952 0.0436 0.0000 +vt 0.9042 0.0420 0.0000 +vt 0.9040 0.0440 0.0000 +vt 0.1406 0.1422 0.0000 +vt 0.1406 0.1404 0.0000 +vt 0.1427 0.1404 0.0000 +vt 0.1427 0.1422 0.0000 +vt 0.1408 0.1386 0.0000 +vt 0.1428 0.1386 0.0000 +vt 0.7134 0.2449 0.0000 +vt 0.7130 0.2429 0.0000 +vt 0.7154 0.2429 0.0000 +vt 0.7158 0.2449 0.0000 +vt 0.7256 0.0601 0.0000 +vt 0.7230 0.0601 0.0000 +vt 0.7232 0.0589 0.0000 +vt 0.7256 0.0589 0.0000 +vt 0.7209 0.0601 0.0000 +vt 0.7226 0.0624 0.0000 +vt 0.7208 0.0624 0.0000 +vt 0.7211 0.0574 0.0000 +vt 0.7221 0.0551 0.0000 +vt 0.7235 0.0564 0.0000 +vt 0.7236 0.0538 0.0000 +vt 0.7252 0.0532 0.0000 +vt 0.7256 0.0548 0.0000 +vt 0.7363 0.0514 0.0000 +vt 0.7365 0.0530 0.0000 +vt 0.7386 0.0512 0.0000 +vt 0.7386 0.0529 0.0000 +vt 0.7409 0.0514 0.0000 +vt 0.7407 0.0530 0.0000 +vt 0.7486 0.0525 0.0000 +vt 0.7480 0.0541 0.0000 +vt 0.7493 0.0529 0.0000 +vt 0.7497 0.0539 0.0000 +vt 0.7497 0.0585 0.0000 +vt 0.7497 0.0597 0.0000 +vt 0.7480 0.0570 0.0000 +vt 0.7497 0.0570 0.0000 +vt 0.7480 0.0597 0.0000 +vt 0.7407 0.0597 0.0000 +vt 0.7407 0.0570 0.0000 +vt 0.7386 0.0597 0.0000 +vt 0.7386 0.0570 0.0000 +vt 0.7365 0.0597 0.0000 +vt 0.7365 0.0570 0.0000 +vt 0.5128 0.2865 0.0000 +vt 0.5127 0.2853 0.0000 +vt 0.5145 0.2853 0.0000 +vt 0.5147 0.2865 0.0000 +vt 0.5403 0.2906 0.0000 +vt 0.5400 0.2913 0.0000 +vt 0.5379 0.2904 0.0000 +vt 0.5393 0.2917 0.0000 +vt 0.5318 0.2927 0.0000 +vt 0.5316 0.2913 0.0000 +vt 0.5295 0.2928 0.0000 +vt 0.5295 0.2914 0.0000 +vt 0.5273 0.2926 0.0000 +vt 0.5274 0.2913 0.0000 +vt 0.5167 0.2909 0.0000 +vt 0.5171 0.2895 0.0000 +vt 0.5150 0.2903 0.0000 +vt 0.5150 0.2879 0.0000 +vt 0.5137 0.2890 0.0000 +vt 0.5128 0.2870 0.0000 +vt 0.5379 0.2857 0.0000 +vt 0.5381 0.2830 0.0000 +vt 0.5171 0.2865 0.0000 +vt 0.5171 0.2853 0.0000 +vt 0.5274 0.2857 0.0000 +vt 0.5274 0.2884 0.0000 +vt 0.5274 0.2830 0.0000 +vt 0.5295 0.2884 0.0000 +vt 0.5316 0.2884 0.0000 +vt 0.5295 0.2802 0.0000 +vt 0.5316 0.2802 0.0000 +vt 0.7084 0.2449 0.0000 +vt 0.7057 0.2449 0.0000 +vt 0.7057 0.2429 0.0000 +vt 0.7084 0.2429 0.0000 +vt 0.7123 0.2393 0.0000 +vt 0.7120 0.2393 0.0000 +vt 0.7984 0.1324 0.0000 +vt 0.7987 0.1304 0.0000 +vt 0.8003 0.1324 0.0000 +vt 0.8003 0.1304 0.0000 +vt 0.8019 0.1304 0.0000 +vt 0.8019 0.1324 0.0000 +vt 0.7256 0.0652 0.0000 +vt 0.7222 0.0652 0.0000 +vt 0.7256 0.0624 0.0000 +vt 0.7210 0.0589 0.0000 +vt 0.7205 0.0652 0.0000 +vt 0.7497 0.0640 0.0000 +vt 0.7497 0.0652 0.0000 +vt 0.7480 0.0624 0.0000 +vt 0.7497 0.0624 0.0000 +vt 0.7497 0.0608 0.0000 +vt 0.7497 0.0551 0.0000 +vt 0.7480 0.0652 0.0000 +vt 0.7407 0.0652 0.0000 +vt 0.7407 0.0624 0.0000 +vt 0.7386 0.0652 0.0000 +vt 0.7386 0.0624 0.0000 +vt 0.7365 0.0652 0.0000 +vt 0.7365 0.0624 0.0000 +vt 0.5125 0.2830 0.0000 +vt 0.5122 0.2802 0.0000 +vt 0.5136 0.2802 0.0000 +vt 0.5141 0.2830 0.0000 +vt 0.3279 0.2187 0.0000 +vt 0.3263 0.2177 0.0000 +vt 0.3269 0.2169 0.0000 +vt 0.3279 0.2165 0.0000 +vt 0.3295 0.2177 0.0000 +vt 0.3289 0.2169 0.0000 +vt 0.3573 0.1828 0.0000 +vt 0.3573 0.1838 0.0000 +vt 0.3557 0.1838 0.0000 +vt 0.3557 0.1816 0.0000 +vt 0.5381 0.2884 0.0000 +vt 0.5379 0.2802 0.0000 +vt 0.5171 0.2830 0.0000 +vt 0.5171 0.2802 0.0000 +vt 0.5274 0.2802 0.0000 +vt 0.5386 0.2896 0.0000 +vt 0.5386 0.2873 0.0000 +vt 0.5395 0.2866 0.0000 +vt 0.5394 0.2848 0.0000 +vt 0.5385 0.2841 0.0000 +vt 0.5386 0.2818 0.0000 +vt 0.5395 0.2812 0.0000 +vt 0.3541 0.1828 0.0000 +vt 0.3541 0.1838 0.0000 +vt 0.8031 0.1268 0.0000 +vt 0.8019 0.1268 0.0000 +vt 0.8085 0.1268 0.0000 +vt 0.8085 0.1304 0.0000 +vt 0.8073 0.1304 0.0000 +vt 0.8074 0.1268 0.0000 +vt 0.5404 0.2802 0.0000 +vt 0.5404 0.2812 0.0000 +vt 0.5404 0.2849 0.0000 +vt 0.5404 0.2857 0.0000 +vt 0.5404 0.2866 0.0000 +vt 0.5404 0.2903 0.0000 +vt 0.5395 0.2902 0.0000 +vt 0.2373 0.2078 0.0000 +vt 0.2373 0.2088 0.0000 +vt 0.2337 0.2088 0.0000 +vt 0.2337 0.2078 0.0000 +vt 0.2373 0.2096 0.0000 +vt 0.2337 0.2096 0.0000 +vt 0.3161 0.2163 0.0000 +vt 0.3161 0.2173 0.0000 +vt 0.3125 0.2173 0.0000 +vt 0.3125 0.2163 0.0000 +vt 0.3161 0.2182 0.0000 +vt 0.3125 0.2182 0.0000 +vt 0.2373 0.1962 0.0000 +vt 0.2373 0.1970 0.0000 +vt 0.2337 0.1970 0.0000 +vt 0.2337 0.1962 0.0000 +vt 0.2373 0.1980 0.0000 +vt 0.2337 0.1980 0.0000 +vt 0.2096 0.2363 0.0000 +vt 0.2096 0.2373 0.0000 +vt 0.2060 0.2373 0.0000 +vt 0.2060 0.2363 0.0000 +vt 0.2096 0.2382 0.0000 +vt 0.2060 0.2382 0.0000 +vt 0.3577 0.1699 0.0000 +vt 0.3577 0.1709 0.0000 +vt 0.3541 0.1709 0.0000 +vt 0.3541 0.1699 0.0000 +vt 0.3577 0.1719 0.0000 +vt 0.3541 0.1719 0.0000 +vt 0.2512 0.2062 0.0000 +vt 0.2512 0.2070 0.0000 +vt 0.2476 0.2070 0.0000 +vt 0.2476 0.2062 0.0000 +vt 0.2512 0.2080 0.0000 +vt 0.2476 0.2080 0.0000 +vt 0.7108 0.2393 0.0000 +vt 0.8042 0.1268 0.0000 +vt 0.7973 0.1268 0.0000 +vt 0.7983 0.1268 0.0000 +vt 0.8838 0.0473 0.0000 +vt 0.8829 0.0474 0.0000 +vt 0.8911 0.0472 0.0000 +vt 0.8932 0.0472 0.0000 +vt 0.8951 0.0473 0.0000 +vt 0.9037 0.0477 0.0000 +vt 0.1464 0.1405 0.0000 +vt 0.1464 0.1422 0.0000 +vt 0.1465 0.1386 0.0000 +vt 0.7147 0.2393 0.0000 +vt 0.7057 0.2393 0.0000 +vt 0.7084 0.2393 0.0000 +vt 0.7987 0.1268 0.0000 +vt 0.8073 0.1324 0.0000 +vt 0.8058 0.1324 0.0000 +vt 0.8058 0.1304 0.0000 +vt 0.8085 0.1324 0.0000 +vt 0.5125 0.2869 0.0000 +vt 0.5125 0.2865 0.0000 +vt 0.8085 0.1265 0.0000 +vt 0.8076 0.1265 0.0000 +vt 0.5406 0.2905 0.0000 +vt 0.5403 0.2915 0.0000 +vt 0.5395 0.2919 0.0000 +vt 0.5318 0.2930 0.0000 +vt 0.5295 0.2931 0.0000 +vt 0.5272 0.2929 0.0000 +vt 0.5166 0.2912 0.0000 +vt 0.5150 0.2906 0.0000 +vt 0.5135 0.2892 0.0000 +vt 0.7741 0.0942 0.0000 +vt 0.7743 0.0946 0.0000 +vt 0.7718 0.0953 0.0000 +vt 0.7719 0.0950 0.0000 +vt 0.5124 0.2853 0.0000 +vt 0.5122 0.2830 0.0000 +vt 0.5120 0.2802 0.0000 +vt 0.5406 0.2857 0.0000 +vt 0.5406 0.2868 0.0000 +vt 0.5406 0.2900 0.0000 +vt 0.2376 0.2080 0.0000 +vt 0.2376 0.2088 0.0000 +vt 0.3542 0.2442 0.0000 +vt 0.3541 0.2439 0.0000 +vt 0.3552 0.2437 0.0000 +vt 0.3552 0.2440 0.0000 +vt 0.3563 0.2438 0.0000 +vt 0.3561 0.2441 0.0000 +vt 0.5384 0.2884 0.0000 +vt 0.5388 0.2875 0.0000 +vt 0.5396 0.2868 0.0000 +vt 0.2376 0.1969 0.0000 +vt 0.2376 0.1978 0.0000 +vt 0.5388 0.2840 0.0000 +vt 0.5384 0.2830 0.0000 +vt 0.4067 0.2372 0.0000 +vt 0.4067 0.2369 0.0000 +vt 0.4078 0.2369 0.0000 +vt 0.4077 0.2372 0.0000 +vt 0.5388 0.2820 0.0000 +vt 0.5396 0.2814 0.0000 +vt 0.2514 0.2069 0.0000 +vt 0.2514 0.2077 0.0000 +vt 0.5406 0.2846 0.0000 +vt 0.2098 0.2366 0.0000 +vt 0.2098 0.2375 0.0000 +vt 0.2883 0.1620 0.0000 +vt 0.2895 0.1620 0.0000 +vt 0.2895 0.1630 0.0000 +vt 0.2883 0.1630 0.0000 +vt 0.3691 0.1963 0.0000 +vt 0.3679 0.1963 0.0000 +vt 0.3679 0.1953 0.0000 +vt 0.3691 0.1953 0.0000 +vt 0.3679 0.1949 0.0000 +vt 0.3691 0.1949 0.0000 +vt 0.2883 0.1615 0.0000 +vt 0.2895 0.1615 0.0000 +vt 0.2767 0.1369 0.0000 +vt 0.2764 0.1370 0.0000 +vt 0.2761 0.1365 0.0000 +vt 0.2767 0.1359 0.0000 +vt 0.2767 0.1377 0.0000 +vt 0.2764 0.1376 0.0000 +vt 0.2755 0.1387 0.0000 +vt 0.2755 0.1383 0.0000 +vt 0.2761 0.1381 0.0000 +vt 0.2767 0.1387 0.0000 +vt 0.2755 0.1359 0.0000 +vt 0.2755 0.1363 0.0000 +vt 0.9001 0.1829 0.0000 +vt 0.8999 0.1823 0.0000 +vt 0.9008 0.1823 0.0000 +vt 0.9008 0.1829 0.0000 +vt 0.9678 0.0699 0.0000 +vt 0.9681 0.0704 0.0000 +vt 0.9674 0.0704 0.0000 +vt 0.9674 0.0699 0.0000 +vt 0.9678 0.0693 0.0000 +vt 0.9674 0.0693 0.0000 +vt 0.9674 0.0688 0.0000 +vt 0.9681 0.0688 0.0000 +vt 0.1847 0.0793 0.0000 +vt 0.1839 0.0793 0.0000 +vt 0.1839 0.0787 0.0000 +vt 0.1848 0.0787 0.0000 +vt 0.2897 0.1620 0.0000 +vt 0.2897 0.1629 0.0000 +vt 0.2769 0.1361 0.0000 +vt 0.2769 0.1368 0.0000 +vt 0.2769 0.1378 0.0000 +vt 0.2769 0.1385 0.0000 +vt 0.3677 0.1962 0.0000 +vt 0.3677 0.1953 0.0000 +vt 0.3677 0.1949 0.0000 +vt 0.2897 0.1615 0.0000 +vt 0.1807 0.1949 0.0000 +vt 0.1809 0.1951 0.0000 +vt 0.1792 0.1951 0.0000 +vt 0.1793 0.1949 0.0000 +vt 0.1809 0.1957 0.0000 +vt 0.1792 0.1957 0.0000 +vt 0.9053 0.1828 0.0000 +vt 0.9053 0.1823 0.0000 +vt 0.9629 0.0699 0.0000 +vt 0.9629 0.0704 0.0000 +vt 0.9629 0.0693 0.0000 +vt 0.9629 0.0688 0.0000 +vt 0.1795 0.0787 0.0000 +vt 0.1795 0.0793 0.0000 +vt 0.9231 0.1827 0.0000 +vt 0.9055 0.1828 0.0000 +vt 0.9055 0.1823 0.0000 +vt 0.9231 0.1823 0.0000 +vt 0.9451 0.0698 0.0000 +vt 0.9627 0.0699 0.0000 +vt 0.9627 0.0703 0.0000 +vt 0.9451 0.0702 0.0000 +vt 0.9451 0.0694 0.0000 +vt 0.9627 0.0693 0.0000 +vt 0.9451 0.0690 0.0000 +vt 0.9627 0.0689 0.0000 +vt 0.1616 0.0787 0.0000 +vt 0.1792 0.0787 0.0000 +vt 0.1792 0.0793 0.0000 +vt 0.1616 0.0792 0.0000 +vt 0.2871 0.1630 0.0000 +vt 0.2871 0.1620 0.0000 +vt 0.3704 0.1953 0.0000 +vt 0.3704 0.1963 0.0000 +vt 0.3704 0.1949 0.0000 +vt 0.2871 0.1615 0.0000 +vt 0.2742 0.1369 0.0000 +vt 0.2742 0.1359 0.0000 +vt 0.2749 0.1365 0.0000 +vt 0.2745 0.1370 0.0000 +vt 0.2742 0.1377 0.0000 +vt 0.2745 0.1376 0.0000 +vt 0.2742 0.1387 0.0000 +vt 0.2749 0.1381 0.0000 +vt 0.9001 0.1817 0.0000 +vt 0.9008 0.1817 0.0000 +vt 0.8200 0.0945 0.0000 +vt 0.8204 0.0945 0.0000 +vt 0.8204 0.0950 0.0000 +vt 0.8197 0.0950 0.0000 +vt 0.8200 0.0939 0.0000 +vt 0.8204 0.0939 0.0000 +vt 0.8197 0.0934 0.0000 +vt 0.8204 0.0934 0.0000 +vt 0.1847 0.0782 0.0000 +vt 0.1839 0.0782 0.0000 +vt 0.2869 0.1629 0.0000 +vt 0.2869 0.1620 0.0000 +vt 0.2740 0.1368 0.0000 +vt 0.2740 0.1361 0.0000 +vt 0.2740 0.1378 0.0000 +vt 0.2740 0.1385 0.0000 +vt 0.3706 0.1953 0.0000 +vt 0.3706 0.1962 0.0000 +vt 0.3706 0.1949 0.0000 +vt 0.2869 0.1615 0.0000 +vt 0.1807 0.1966 0.0000 +vt 0.1793 0.1966 0.0000 +vt 0.1792 0.1964 0.0000 +vt 0.1809 0.1964 0.0000 +vt 0.9053 0.1817 0.0000 +vt 0.8248 0.0945 0.0000 +vt 0.8248 0.0949 0.0000 +vt 0.8248 0.0939 0.0000 +vt 0.8248 0.0934 0.0000 +vt 0.1795 0.0782 0.0000 +vt 0.9231 0.1819 0.0000 +vt 0.9055 0.1818 0.0000 +vt 0.8427 0.0944 0.0000 +vt 0.8427 0.0947 0.0000 +vt 0.8251 0.0949 0.0000 +vt 0.8251 0.0944 0.0000 +vt 0.8427 0.0939 0.0000 +vt 0.8251 0.0939 0.0000 +vt 0.8427 0.0936 0.0000 +vt 0.8251 0.0934 0.0000 +vt 0.1616 0.0784 0.0000 +vt 0.1792 0.0783 0.0000 +vt 0.2506 0.1596 0.0000 +vt 0.2491 0.1597 0.0000 +vt 0.2503 0.1587 0.0000 +vt 0.2496 0.1581 0.0000 +vt 0.2486 0.1581 0.0000 +vt 0.2479 0.1587 0.0000 +vt 0.2476 0.1596 0.0000 +vt 0.2476 0.1600 0.0000 +vt 0.2505 0.1600 0.0000 +vt 0.2087 0.2160 0.0000 +vt 0.2075 0.2149 0.0000 +vt 0.2090 0.2151 0.0000 +vt 0.2089 0.2146 0.0000 +vt 0.2060 0.2146 0.0000 +vt 0.2060 0.2151 0.0000 +vt 0.2062 0.2160 0.0000 +vt 0.2070 0.2165 0.0000 +vt 0.2080 0.2165 0.0000 +vt 0.4235 0.0787 0.0000 +vt 0.4240 0.0787 0.0000 +vt 0.4236 0.0791 0.0000 +vt 0.4239 0.0793 0.0000 +vt 0.4242 0.0793 0.0000 +vt 0.4245 0.0791 0.0000 +vt 0.4246 0.0787 0.0000 +vt 0.4245 0.0784 0.0000 +vt 0.4242 0.0782 0.0000 +vt 0.4239 0.0782 0.0000 +vt 0.4236 0.0784 0.0000 +vt 0.6978 0.0580 0.0000 +vt 0.6978 0.0577 0.0000 +vt 0.6980 0.0576 0.0000 +vt 0.6980 0.0581 0.0000 +vt 0.6976 0.0574 0.0000 +vt 0.6978 0.0573 0.0000 +vt 0.9449 0.0698 0.0000 +vt 0.9449 0.0694 0.0000 +vt 0.7024 0.0425 0.0000 +vt 0.7020 0.0425 0.0000 +vt 0.7020 0.0423 0.0000 +vt 0.7024 0.0423 0.0000 +vt 0.1614 0.0791 0.0000 +vt 0.1614 0.0788 0.0000 +vt 0.6977 0.0583 0.0000 +vt 0.6978 0.0584 0.0000 +vt 0.3728 0.0695 0.0000 +vt 0.3724 0.0695 0.0000 +vt 0.3724 0.0693 0.0000 +vt 0.3728 0.0693 0.0000 +vt 0.8429 0.0940 0.0000 +vt 0.8429 0.0943 0.0000 +vt 0.9741 0.2395 0.0000 +vt 0.9738 0.2396 0.0000 +vt 0.9737 0.2394 0.0000 +vt 0.9741 0.2393 0.0000 +vt 0.9744 0.2396 0.0000 +vt 0.9745 0.2394 0.0000 +vt 0.3685 0.1941 0.0000 +vt 0.3691 0.1939 0.0000 +vt 0.3697 0.1941 0.0000 +vt 0.1785 0.1970 0.0000 +vt 0.1786 0.1972 0.0000 +vt 0.2068 0.2139 0.0000 +vt 0.2082 0.2139 0.0000 +vt 0.1815 0.1972 0.0000 +vt 0.1816 0.1970 0.0000 +vt 0.2877 0.1607 0.0000 +vt 0.2883 0.1605 0.0000 +vt 0.2889 0.1607 0.0000 +vt 0.1816 0.1945 0.0000 +vt 0.1815 0.1943 0.0000 +vt 0.2498 0.1608 0.0000 +vt 0.2484 0.1608 0.0000 +vt 0.1786 0.1943 0.0000 +vt 0.1785 0.1945 0.0000 +vt 0.3011 0.1374 0.0000 +vt 0.3023 0.1374 0.0000 +vt 0.3023 0.1384 0.0000 +vt 0.3011 0.1384 0.0000 +vt 0.2626 0.1758 0.0000 +vt 0.2614 0.1758 0.0000 +vt 0.2614 0.1748 0.0000 +vt 0.2626 0.1748 0.0000 +vt 0.2614 0.1744 0.0000 +vt 0.2626 0.1744 0.0000 +vt 0.3011 0.1369 0.0000 +vt 0.3023 0.1369 0.0000 +vt 0.6288 0.2871 0.0000 +vt 0.6285 0.2872 0.0000 +vt 0.6282 0.2867 0.0000 +vt 0.6288 0.2861 0.0000 +vt 0.6288 0.2879 0.0000 +vt 0.6285 0.2878 0.0000 +vt 0.6276 0.2888 0.0000 +vt 0.6276 0.2885 0.0000 +vt 0.6282 0.2883 0.0000 +vt 0.6288 0.2888 0.0000 +vt 0.6276 0.2861 0.0000 +vt 0.6276 0.2865 0.0000 +vt 0.0647 0.1702 0.0000 +vt 0.0646 0.1696 0.0000 +vt 0.0655 0.1696 0.0000 +vt 0.0655 0.1702 0.0000 +vt 0.8923 0.1828 0.0000 +vt 0.8926 0.1833 0.0000 +vt 0.8919 0.1833 0.0000 +vt 0.8919 0.1828 0.0000 +vt 0.8923 0.1822 0.0000 +vt 0.8919 0.1822 0.0000 +vt 0.8919 0.1817 0.0000 +vt 0.8926 0.1817 0.0000 +vt 0.1213 0.1736 0.0000 +vt 0.1205 0.1736 0.0000 +vt 0.1205 0.1730 0.0000 +vt 0.1214 0.1730 0.0000 +vt 0.3025 0.1374 0.0000 +vt 0.3025 0.1383 0.0000 +vt 0.6290 0.2862 0.0000 +vt 0.6290 0.2870 0.0000 +vt 0.6290 0.2879 0.0000 +vt 0.6290 0.2887 0.0000 +vt 0.2612 0.1757 0.0000 +vt 0.2612 0.1748 0.0000 +vt 0.2612 0.1744 0.0000 +vt 0.3025 0.1369 0.0000 +vt 0.5300 0.1662 0.0000 +vt 0.5301 0.1665 0.0000 +vt 0.5284 0.1665 0.0000 +vt 0.5286 0.1662 0.0000 +vt 0.5301 0.1671 0.0000 +vt 0.5284 0.1671 0.0000 +vt 0.0699 0.1702 0.0000 +vt 0.0699 0.1696 0.0000 +vt 0.8875 0.1828 0.0000 +vt 0.8875 0.1833 0.0000 +vt 0.8875 0.1822 0.0000 +vt 0.8875 0.1818 0.0000 +vt 0.1161 0.1730 0.0000 +vt 0.1161 0.1735 0.0000 +vt 0.0878 0.1701 0.0000 +vt 0.0702 0.1702 0.0000 +vt 0.0702 0.1696 0.0000 +vt 0.0878 0.1696 0.0000 +vt 0.8696 0.1827 0.0000 +vt 0.8872 0.1828 0.0000 +vt 0.8872 0.1832 0.0000 +vt 0.8696 0.1831 0.0000 +vt 0.8696 0.1823 0.0000 +vt 0.8872 0.1822 0.0000 +vt 0.8696 0.1819 0.0000 +vt 0.8872 0.1818 0.0000 +vt 0.0982 0.1730 0.0000 +vt 0.1158 0.1730 0.0000 +vt 0.1158 0.1735 0.0000 +vt 0.0982 0.1734 0.0000 +vt 0.2999 0.1384 0.0000 +vt 0.2999 0.1374 0.0000 +vt 0.2639 0.1748 0.0000 +vt 0.2639 0.1758 0.0000 +vt 0.2639 0.1744 0.0000 +vt 0.2999 0.1369 0.0000 +vt 0.6263 0.2871 0.0000 +vt 0.6263 0.2861 0.0000 +vt 0.6270 0.2867 0.0000 +vt 0.6266 0.2872 0.0000 +vt 0.6263 0.2879 0.0000 +vt 0.6266 0.2878 0.0000 +vt 0.6263 0.2888 0.0000 +vt 0.6270 0.2883 0.0000 +vt 0.0647 0.1691 0.0000 +vt 0.0655 0.1691 0.0000 +vt 0.7785 0.2404 0.0000 +vt 0.7789 0.2404 0.0000 +vt 0.7789 0.2409 0.0000 +vt 0.7782 0.2409 0.0000 +vt 0.7785 0.2398 0.0000 +vt 0.7789 0.2398 0.0000 +vt 0.7782 0.2393 0.0000 +vt 0.7789 0.2393 0.0000 +vt 0.1213 0.1725 0.0000 +vt 0.1205 0.1725 0.0000 +vt 0.2997 0.1383 0.0000 +vt 0.2997 0.1374 0.0000 +vt 0.6261 0.2870 0.0000 +vt 0.6261 0.2862 0.0000 +vt 0.6261 0.2879 0.0000 +vt 0.6261 0.2887 0.0000 +vt 0.2641 0.1748 0.0000 +vt 0.2641 0.1757 0.0000 +vt 0.2641 0.1744 0.0000 +vt 0.2997 0.1369 0.0000 +vt 0.5300 0.1680 0.0000 +vt 0.5286 0.1680 0.0000 +vt 0.5284 0.1677 0.0000 +vt 0.5301 0.1677 0.0000 +vt 0.0699 0.1691 0.0000 +vt 0.7834 0.2404 0.0000 +vt 0.7834 0.2408 0.0000 +vt 0.7834 0.2398 0.0000 +vt 0.7834 0.2393 0.0000 +vt 0.1161 0.1725 0.0000 +vt 0.0878 0.1692 0.0000 +vt 0.0702 0.1691 0.0000 +vt 0.8013 0.2403 0.0000 +vt 0.8013 0.2407 0.0000 +vt 0.7836 0.2408 0.0000 +vt 0.7836 0.2404 0.0000 +vt 0.8013 0.2399 0.0000 +vt 0.7836 0.2398 0.0000 +vt 0.8013 0.2395 0.0000 +vt 0.7836 0.2394 0.0000 +vt 0.0982 0.1726 0.0000 +vt 0.1158 0.1725 0.0000 +vt 0.2899 0.1374 0.0000 +vt 0.2884 0.1375 0.0000 +vt 0.2896 0.1365 0.0000 +vt 0.2888 0.1359 0.0000 +vt 0.2879 0.1359 0.0000 +vt 0.2871 0.1365 0.0000 +vt 0.2869 0.1374 0.0000 +vt 0.2869 0.1379 0.0000 +vt 0.2898 0.1379 0.0000 +vt 0.2639 0.1507 0.0000 +vt 0.2627 0.1497 0.0000 +vt 0.2642 0.1498 0.0000 +vt 0.2641 0.1493 0.0000 +vt 0.2613 0.1493 0.0000 +vt 0.2612 0.1498 0.0000 +vt 0.2615 0.1507 0.0000 +vt 0.2622 0.1512 0.0000 +vt 0.2632 0.1512 0.0000 +vt 0.2869 0.2167 0.0000 +vt 0.2874 0.2167 0.0000 +vt 0.2870 0.2170 0.0000 +vt 0.2872 0.2172 0.0000 +vt 0.2876 0.2172 0.0000 +vt 0.2878 0.2170 0.0000 +vt 0.2880 0.2167 0.0000 +vt 0.2878 0.2163 0.0000 +vt 0.2876 0.2161 0.0000 +vt 0.2872 0.2161 0.0000 +vt 0.2870 0.2163 0.0000 +vt 0.0896 0.2386 0.0000 +vt 0.0893 0.2386 0.0000 +vt 0.0892 0.2383 0.0000 +vt 0.0897 0.2383 0.0000 +vt 0.0890 0.2387 0.0000 +vt 0.0889 0.2385 0.0000 +vt 0.8694 0.1827 0.0000 +vt 0.8694 0.1823 0.0000 +vt 0.0902 0.1916 0.0000 +vt 0.0905 0.1916 0.0000 +vt 0.0906 0.1918 0.0000 +vt 0.0901 0.1918 0.0000 +vt 0.0980 0.1734 0.0000 +vt 0.0980 0.1730 0.0000 +vt 0.0899 0.2387 0.0000 +vt 0.0900 0.2385 0.0000 +vt 0.1539 0.2402 0.0000 +vt 0.1536 0.2402 0.0000 +vt 0.1535 0.2400 0.0000 +vt 0.1539 0.2400 0.0000 +vt 0.8014 0.2399 0.0000 +vt 0.8014 0.2403 0.0000 +vt 0.4071 0.2448 0.0000 +vt 0.4068 0.2448 0.0000 +vt 0.4067 0.2446 0.0000 +vt 0.4071 0.2445 0.0000 +vt 0.4074 0.2448 0.0000 +vt 0.4075 0.2446 0.0000 +vt 0.2620 0.1736 0.0000 +vt 0.2626 0.1734 0.0000 +vt 0.2632 0.1736 0.0000 +vt 0.5277 0.1683 0.0000 +vt 0.5278 0.1685 0.0000 +vt 0.2620 0.1486 0.0000 +vt 0.2634 0.1486 0.0000 +vt 0.5307 0.1685 0.0000 +vt 0.5308 0.1683 0.0000 +vt 0.3005 0.1361 0.0000 +vt 0.3011 0.1359 0.0000 +vt 0.3017 0.1361 0.0000 +vt 0.5308 0.1659 0.0000 +vt 0.5307 0.1657 0.0000 +vt 0.2891 0.1386 0.0000 +vt 0.2877 0.1386 0.0000 +vt 0.5278 0.1657 0.0000 +vt 0.5277 0.1659 0.0000 +vt 0.5316 0.2748 0.0000 +vt 0.5316 0.2775 0.0000 +vt 0.5295 0.2775 0.0000 +vt 0.5295 0.2748 0.0000 +vt 0.6994 0.2449 0.0000 +vt 0.6994 0.2429 0.0000 +vt 0.7006 0.2429 0.0000 +vt 0.7006 0.2449 0.0000 +vt 0.8140 0.1324 0.0000 +vt 0.8129 0.1324 0.0000 +vt 0.8129 0.1304 0.0000 +vt 0.8140 0.1304 0.0000 +vt 0.8199 0.1324 0.0000 +vt 0.8195 0.1304 0.0000 +vt 0.8205 0.1304 0.0000 +vt 0.8209 0.1324 0.0000 +vt 0.8540 0.1035 0.0000 +vt 0.8539 0.1055 0.0000 +vt 0.8531 0.1054 0.0000 +vt 0.8531 0.1034 0.0000 +vt 0.8458 0.1050 0.0000 +vt 0.8458 0.1030 0.0000 +vt 0.8437 0.1050 0.0000 +vt 0.8437 0.1029 0.0000 +vt 0.8418 0.1029 0.0000 +vt 0.8418 0.1049 0.0000 +vt 0.8329 0.1051 0.0000 +vt 0.8328 0.1030 0.0000 +vt 0.8891 0.2394 0.0000 +vt 0.8911 0.2393 0.0000 +vt 0.8911 0.2411 0.0000 +vt 0.8891 0.2411 0.0000 +vt 0.8892 0.2430 0.0000 +vt 0.8913 0.2429 0.0000 +vt 0.6979 0.2449 0.0000 +vt 0.6956 0.2449 0.0000 +vt 0.6960 0.2429 0.0000 +vt 0.6983 0.2429 0.0000 +vt 0.7256 0.0703 0.0000 +vt 0.7256 0.0715 0.0000 +vt 0.7232 0.0715 0.0000 +vt 0.7230 0.0703 0.0000 +vt 0.7209 0.0703 0.0000 +vt 0.7208 0.0680 0.0000 +vt 0.7226 0.0680 0.0000 +vt 0.7211 0.0729 0.0000 +vt 0.7235 0.0740 0.0000 +vt 0.7221 0.0753 0.0000 +vt 0.7236 0.0766 0.0000 +vt 0.7256 0.0756 0.0000 +vt 0.7252 0.0772 0.0000 +vt 0.7365 0.0773 0.0000 +vt 0.7363 0.0790 0.0000 +vt 0.7386 0.0775 0.0000 +vt 0.7386 0.0792 0.0000 +vt 0.7407 0.0774 0.0000 +vt 0.7409 0.0790 0.0000 +vt 0.7480 0.0763 0.0000 +vt 0.7486 0.0779 0.0000 +vt 0.7493 0.0775 0.0000 +vt 0.7497 0.0765 0.0000 +vt 0.7480 0.0734 0.0000 +vt 0.7497 0.0706 0.0000 +vt 0.7497 0.0718 0.0000 +vt 0.7497 0.0734 0.0000 +vt 0.7407 0.0734 0.0000 +vt 0.7407 0.0706 0.0000 +vt 0.7480 0.0706 0.0000 +vt 0.7386 0.0734 0.0000 +vt 0.7386 0.0706 0.0000 +vt 0.7365 0.0734 0.0000 +vt 0.7365 0.0706 0.0000 +vt 0.5128 0.2739 0.0000 +vt 0.5147 0.2739 0.0000 +vt 0.5145 0.2751 0.0000 +vt 0.5127 0.2751 0.0000 +vt 0.5403 0.2699 0.0000 +vt 0.5379 0.2701 0.0000 +vt 0.5400 0.2691 0.0000 +vt 0.5393 0.2688 0.0000 +vt 0.5316 0.2692 0.0000 +vt 0.5318 0.2678 0.0000 +vt 0.5295 0.2690 0.0000 +vt 0.5295 0.2676 0.0000 +vt 0.5274 0.2692 0.0000 +vt 0.5273 0.2678 0.0000 +vt 0.5171 0.2709 0.0000 +vt 0.5167 0.2696 0.0000 +vt 0.5150 0.2726 0.0000 +vt 0.5150 0.2702 0.0000 +vt 0.5137 0.2714 0.0000 +vt 0.5128 0.2735 0.0000 +vt 0.5379 0.2748 0.0000 +vt 0.5381 0.2775 0.0000 +vt 0.5171 0.2739 0.0000 +vt 0.5274 0.2720 0.0000 +vt 0.5274 0.2748 0.0000 +vt 0.5171 0.2751 0.0000 +vt 0.5274 0.2775 0.0000 +vt 0.5316 0.2720 0.0000 +vt 0.5295 0.2720 0.0000 +vt 0.7029 0.2449 0.0000 +vt 0.7029 0.2429 0.0000 +vt 0.6990 0.2393 0.0000 +vt 0.6994 0.2393 0.0000 +vt 0.8187 0.1324 0.0000 +vt 0.8183 0.1304 0.0000 +vt 0.8167 0.1324 0.0000 +vt 0.8152 0.1324 0.0000 +vt 0.8152 0.1304 0.0000 +vt 0.8167 0.1304 0.0000 +vt 0.7256 0.0680 0.0000 +vt 0.7210 0.0715 0.0000 +vt 0.7480 0.0680 0.0000 +vt 0.7497 0.0664 0.0000 +vt 0.7497 0.0680 0.0000 +vt 0.7497 0.0696 0.0000 +vt 0.7497 0.0753 0.0000 +vt 0.7407 0.0680 0.0000 +vt 0.7386 0.0680 0.0000 +vt 0.7365 0.0680 0.0000 +vt 0.5125 0.2775 0.0000 +vt 0.5141 0.2775 0.0000 +vt 0.3418 0.2071 0.0000 +vt 0.3428 0.2053 0.0000 +vt 0.3434 0.2061 0.0000 +vt 0.3434 0.2071 0.0000 +vt 0.3402 0.2061 0.0000 +vt 0.3418 0.2050 0.0000 +vt 0.3402 0.2071 0.0000 +vt 0.3826 0.1583 0.0000 +vt 0.3826 0.1605 0.0000 +vt 0.3810 0.1595 0.0000 +vt 0.3817 0.1586 0.0000 +vt 0.5381 0.2720 0.0000 +vt 0.5171 0.2775 0.0000 +vt 0.5386 0.2709 0.0000 +vt 0.5386 0.2732 0.0000 +vt 0.5395 0.2739 0.0000 +vt 0.5394 0.2757 0.0000 +vt 0.5385 0.2763 0.0000 +vt 0.5386 0.2786 0.0000 +vt 0.5395 0.2793 0.0000 +vt 0.3842 0.1595 0.0000 +vt 0.3836 0.1586 0.0000 +vt 0.8140 0.1268 0.0000 +vt 0.8151 0.1268 0.0000 +vt 0.8097 0.1268 0.0000 +vt 0.8097 0.1304 0.0000 +vt 0.5404 0.2793 0.0000 +vt 0.5404 0.2748 0.0000 +vt 0.5404 0.2756 0.0000 +vt 0.5404 0.2739 0.0000 +vt 0.5404 0.2702 0.0000 +vt 0.5395 0.2703 0.0000 +vt 0.2512 0.1964 0.0000 +vt 0.2476 0.1964 0.0000 +vt 0.2476 0.1954 0.0000 +vt 0.2512 0.1954 0.0000 +vt 0.2476 0.1946 0.0000 +vt 0.2512 0.1946 0.0000 +vt 0.3438 0.1952 0.0000 +vt 0.3402 0.1952 0.0000 +vt 0.3402 0.1942 0.0000 +vt 0.3438 0.1942 0.0000 +vt 0.3402 0.1932 0.0000 +vt 0.3438 0.1932 0.0000 +vt 0.3438 0.1601 0.0000 +vt 0.3402 0.1601 0.0000 +vt 0.3402 0.1593 0.0000 +vt 0.3438 0.1593 0.0000 +vt 0.3402 0.1583 0.0000 +vt 0.3438 0.1583 0.0000 +vt 0.2512 0.1848 0.0000 +vt 0.2476 0.1848 0.0000 +vt 0.2476 0.1838 0.0000 +vt 0.2512 0.1838 0.0000 +vt 0.2476 0.1830 0.0000 +vt 0.2512 0.1830 0.0000 +vt 0.2373 0.2329 0.0000 +vt 0.2337 0.2329 0.0000 +vt 0.2337 0.2319 0.0000 +vt 0.2373 0.2319 0.0000 +vt 0.2337 0.2310 0.0000 +vt 0.2373 0.2310 0.0000 +vt 0.2234 0.2381 0.0000 +vt 0.2198 0.2381 0.0000 +vt 0.2198 0.2373 0.0000 +vt 0.2234 0.2373 0.0000 +vt 0.2198 0.2363 0.0000 +vt 0.2234 0.2362 0.0000 +vt 0.7006 0.2393 0.0000 +vt 0.8129 0.1268 0.0000 +vt 0.8198 0.1268 0.0000 +vt 0.8188 0.1268 0.0000 +vt 0.8530 0.1091 0.0000 +vt 0.8538 0.1092 0.0000 +vt 0.8457 0.1087 0.0000 +vt 0.8436 0.1087 0.0000 +vt 0.8417 0.1086 0.0000 +vt 0.8331 0.1087 0.0000 +vt 0.8948 0.2410 0.0000 +vt 0.8948 0.2393 0.0000 +vt 0.8950 0.2429 0.0000 +vt 0.6967 0.2393 0.0000 +vt 0.7029 0.2393 0.0000 +vt 0.8183 0.1268 0.0000 +vt 0.8113 0.1304 0.0000 +vt 0.8113 0.1324 0.0000 +vt 0.8097 0.1324 0.0000 +vt 0.5125 0.2739 0.0000 +vt 0.5125 0.2736 0.0000 +vt 0.8095 0.1265 0.0000 +vt 0.5403 0.2690 0.0000 +vt 0.5406 0.2700 0.0000 +vt 0.5395 0.2686 0.0000 +vt 0.5318 0.2675 0.0000 +vt 0.5295 0.2674 0.0000 +vt 0.5272 0.2675 0.0000 +vt 0.5166 0.2693 0.0000 +vt 0.5150 0.2699 0.0000 +vt 0.5135 0.2712 0.0000 +vt 0.7572 0.0944 0.0000 +vt 0.7590 0.0951 0.0000 +vt 0.7591 0.0955 0.0000 +vt 0.7570 0.0948 0.0000 +vt 0.5124 0.2751 0.0000 +vt 0.5122 0.2775 0.0000 +vt 0.5406 0.2736 0.0000 +vt 0.5406 0.2748 0.0000 +vt 0.5406 0.2704 0.0000 +vt 0.2514 0.1953 0.0000 +vt 0.2514 0.1962 0.0000 +vt 0.4592 0.1467 0.0000 +vt 0.4603 0.1469 0.0000 +vt 0.4603 0.1472 0.0000 +vt 0.4591 0.1470 0.0000 +vt 0.4612 0.1467 0.0000 +vt 0.4613 0.1470 0.0000 +vt 0.5384 0.2720 0.0000 +vt 0.5388 0.2730 0.0000 +vt 0.5396 0.2736 0.0000 +vt 0.3441 0.1585 0.0000 +vt 0.3441 0.1594 0.0000 +vt 0.5388 0.2765 0.0000 +vt 0.5384 0.2775 0.0000 +vt 0.4822 0.1239 0.0000 +vt 0.4812 0.1239 0.0000 +vt 0.4811 0.1235 0.0000 +vt 0.4822 0.1235 0.0000 +vt 0.5388 0.2785 0.0000 +vt 0.5396 0.2791 0.0000 +vt 0.2237 0.2365 0.0000 +vt 0.2237 0.2374 0.0000 +vt 0.5406 0.2759 0.0000 +vt 0.2514 0.1836 0.0000 +vt 0.2514 0.1846 0.0000 +vt 0.8774 0.2003 0.0000 +vt 0.8732 0.2003 0.0000 +vt 0.8732 0.1991 0.0000 +vt 0.8774 0.1991 0.0000 +vt 0.8694 0.2003 0.0000 +vt 0.8694 0.1991 0.0000 +vt 0.0666 0.1195 0.0000 +vt 0.0636 0.1195 0.0000 +vt 0.0636 0.1183 0.0000 +vt 0.0666 0.1183 0.0000 +vt 0.0598 0.1195 0.0000 +vt 0.0598 0.1183 0.0000 +vt 0.0556 0.1195 0.0000 +vt 0.0556 0.1183 0.0000 +vt 0.0514 0.1195 0.0000 +vt 0.0514 0.1183 0.0000 +vt 0.0476 0.1195 0.0000 +vt 0.0476 0.1183 0.0000 +vt 0.7145 0.2534 0.0000 +vt 0.7115 0.2534 0.0000 +vt 0.7115 0.2522 0.0000 +vt 0.7145 0.2522 0.0000 +vt 0.7077 0.2534 0.0000 +vt 0.7077 0.2522 0.0000 +vt 0.7036 0.2534 0.0000 +vt 0.7036 0.2522 0.0000 +vt 0.6994 0.2534 0.0000 +vt 0.6994 0.2522 0.0000 +vt 0.6956 0.2534 0.0000 +vt 0.6956 0.2522 0.0000 +vt 0.7817 0.2803 0.0000 +vt 0.7787 0.2803 0.0000 +vt 0.7787 0.2791 0.0000 +vt 0.7817 0.2791 0.0000 +vt 0.7749 0.2803 0.0000 +vt 0.7749 0.2791 0.0000 +vt 0.7707 0.2803 0.0000 +vt 0.7707 0.2791 0.0000 +vt 0.7665 0.2803 0.0000 +vt 0.7665 0.2791 0.0000 +vt 0.7628 0.2803 0.0000 +vt 0.7628 0.2791 0.0000 +vt 0.8883 0.2003 0.0000 +vt 0.8853 0.2003 0.0000 +vt 0.8853 0.1991 0.0000 +vt 0.8883 0.1991 0.0000 +vt 0.8816 0.2003 0.0000 +vt 0.8816 0.1991 0.0000 +vt 0.6198 0.2593 0.0000 +vt 0.6211 0.2633 0.0000 +vt 0.6070 0.2652 0.0000 +vt 0.6173 0.2559 0.0000 +vt 0.6139 0.2534 0.0000 +vt 0.6099 0.2520 0.0000 +vt 0.6056 0.2520 0.0000 +vt 0.6016 0.2533 0.0000 +vt 0.5981 0.2558 0.0000 +vt 0.5956 0.2592 0.0000 +vt 0.5943 0.2632 0.0000 +vt 0.5943 0.2675 0.0000 +vt 0.5956 0.2715 0.0000 +vt 0.5981 0.2749 0.0000 +vt 0.6015 0.2774 0.0000 +vt 0.6055 0.2788 0.0000 +vt 0.6097 0.2788 0.0000 +vt 0.6138 0.2775 0.0000 +vt 0.6172 0.2750 0.0000 +vt 0.6197 0.2716 0.0000 +vt 0.6137 0.2685 0.0000 +vt 0.6210 0.2676 0.0000 +vt 0.6144 0.2665 0.0000 +vt 0.7418 0.1293 0.0000 +vt 0.7377 0.1293 0.0000 +vt 0.7394 0.1157 0.0000 +vt 0.7338 0.1280 0.0000 +vt 0.7304 0.1256 0.0000 +vt 0.7280 0.1222 0.0000 +vt 0.7268 0.1183 0.0000 +vt 0.7268 0.1142 0.0000 +vt 0.7281 0.1102 0.0000 +vt 0.7305 0.1069 0.0000 +vt 0.7339 0.1045 0.0000 +vt 0.7378 0.1032 0.0000 +vt 0.7419 0.1033 0.0000 +vt 0.7458 0.1045 0.0000 +vt 0.7492 0.1070 0.0000 +vt 0.7516 0.1103 0.0000 +vt 0.7529 0.1143 0.0000 +vt 0.7529 0.1184 0.0000 +vt 0.7516 0.1223 0.0000 +vt 0.7491 0.1257 0.0000 +vt 0.7446 0.1211 0.0000 +vt 0.7458 0.1281 0.0000 +vt 0.7429 0.1223 0.0000 +vt 0.7377 0.1297 0.0000 +vt 0.7419 0.1297 0.0000 +vt 0.7336 0.1283 0.0000 +vt 0.7302 0.1258 0.0000 +vt 0.7277 0.1224 0.0000 +vt 0.7264 0.1184 0.0000 +vt 0.7265 0.1141 0.0000 +vt 0.7278 0.1101 0.0000 +vt 0.7303 0.1067 0.0000 +vt 0.7337 0.1042 0.0000 +vt 0.7378 0.1029 0.0000 +vt 0.7420 0.1029 0.0000 +vt 0.7460 0.1043 0.0000 +vt 0.7494 0.1068 0.0000 +vt 0.7519 0.1102 0.0000 +vt 0.7532 0.1142 0.0000 +vt 0.7532 0.1185 0.0000 +vt 0.7519 0.1225 0.0000 +vt 0.7494 0.1259 0.0000 +vt 0.7459 0.1284 0.0000 +vt 0.6453 0.2553 0.0000 +vt 0.6439 0.2477 0.0000 +vt 0.6467 0.2547 0.0000 +vt 0.2012 0.3615 0.0000 +vt 0.1850 0.3615 0.0000 +vt 0.1850 0.3492 0.0000 +vt 0.2012 0.3492 0.0000 +vt 0.1688 0.3615 0.0000 +vt 0.1688 0.3492 0.0000 +vt 0.1176 0.3615 0.0000 +vt 0.1176 0.3492 0.0000 +vt 0.1513 0.3492 0.0000 +vt 0.1513 0.3615 0.0000 +vt 0.8891 0.0952 0.0000 +vt 0.8891 0.0903 0.0000 +vt 0.8917 0.0903 0.0000 +vt 0.8917 0.0952 0.0000 +vt 0.1539 0.0752 0.0000 +vt 0.1406 0.0752 0.0000 +vt 0.1406 0.0703 0.0000 +vt 0.1539 0.0703 0.0000 +vt 0.7575 0.0683 0.0000 +vt 0.7575 0.0672 0.0000 +vt 0.7624 0.0672 0.0000 +vt 0.7624 0.0683 0.0000 +vt 0.8711 0.2272 0.0000 +vt 0.8698 0.2272 0.0000 +vt 0.8698 0.2223 0.0000 +vt 0.8711 0.2223 0.0000 +vt 0.8684 0.2272 0.0000 +vt 0.8684 0.2223 0.0000 +vt 0.8668 0.2272 0.0000 +vt 0.8668 0.2223 0.0000 +vt 0.8653 0.2272 0.0000 +vt 0.8653 0.2223 0.0000 +vt 0.8639 0.2272 0.0000 +vt 0.8639 0.2223 0.0000 +vt 0.8626 0.2272 0.0000 +vt 0.8626 0.2223 0.0000 +vt 0.5816 0.1984 0.0000 +vt 0.5805 0.1984 0.0000 +vt 0.5805 0.1935 0.0000 +vt 0.5816 0.1935 0.0000 +vt 0.5792 0.1984 0.0000 +vt 0.5792 0.1935 0.0000 +vt 0.5778 0.1984 0.0000 +vt 0.5778 0.1935 0.0000 +vt 0.5763 0.1984 0.0000 +vt 0.5763 0.1935 0.0000 +vt 0.5747 0.1984 0.0000 +vt 0.5747 0.1935 0.0000 +vt 0.5733 0.1984 0.0000 +vt 0.5733 0.1935 0.0000 +vt 0.5720 0.1984 0.0000 +vt 0.5720 0.1935 0.0000 +vt 0.5710 0.1984 0.0000 +vt 0.5710 0.1935 0.0000 +vt 0.5694 0.1984 0.0000 +vt 0.5694 0.1935 0.0000 +vt 0.5669 0.1984 0.0000 +vt 0.5669 0.1935 0.0000 +vt 0.5614 0.1984 0.0000 +vt 0.5614 0.1935 0.0000 +vt 0.5468 0.1984 0.0000 +vt 0.5468 0.1935 0.0000 +vt 0.6505 0.2418 0.0000 +vt 0.6385 0.2418 0.0000 +vt 0.6385 0.2393 0.0000 +vt 0.6533 0.2393 0.0000 +vt 0.1850 0.3324 0.0000 +vt 0.2012 0.3324 0.0000 +vt 0.1688 0.3324 0.0000 +vt 0.1176 0.3324 0.0000 +vt 0.1513 0.3324 0.0000 +vt 0.0294 0.3492 0.0000 +vt 0.0294 0.3324 0.0000 +vt 0.0661 0.3324 0.0000 +vt 0.0661 0.3492 0.0000 +vt 0.5614 0.1867 0.0000 +vt 0.5669 0.1867 0.0000 +vt 0.5468 0.1867 0.0000 +vt 0.5669 0.1844 0.0000 +vt 0.5614 0.1844 0.0000 +vt 0.5614 0.1822 0.0000 +vt 0.5669 0.1822 0.0000 +vt 0.5468 0.1844 0.0000 +vt 0.5468 0.1822 0.0000 +vt 0.0850 0.3615 0.0000 +vt 0.0850 0.3492 0.0000 +vt 0.0966 0.3492 0.0000 +vt 0.0966 0.3615 0.0000 +vt 0.0850 0.3324 0.0000 +vt 0.0966 0.3324 0.0000 +vt 0.7415 0.1544 0.0000 +vt 0.7214 0.1544 0.0000 +vt 0.7214 0.1481 0.0000 +vt 0.7415 0.1481 0.0000 +vt 0.0294 0.3249 0.0000 +vt 0.0294 0.3187 0.0000 +vt 0.0661 0.3187 0.0000 +vt 0.0661 0.3249 0.0000 +vt 0.0850 0.3249 0.0000 +vt 0.0966 0.3249 0.0000 +vt 0.9195 0.2905 0.0000 +vt 0.9195 0.2883 0.0000 +vt 0.9211 0.2883 0.0000 +vt 0.9211 0.2905 0.0000 +vt 0.6435 0.1663 0.0000 +vt 0.6435 0.1685 0.0000 +vt 0.6419 0.1685 0.0000 +vt 0.6419 0.1663 0.0000 +vt 0.6637 0.1663 0.0000 +vt 0.6637 0.1685 0.0000 +vt 0.6637 0.1708 0.0000 +vt 0.6435 0.1708 0.0000 +vt 0.8524 0.0419 0.0000 +vt 0.8624 0.0419 0.0000 +vt 0.8624 0.0478 0.0000 +vt 0.8563 0.0479 0.0000 +vt 0.9230 0.2883 0.0000 +vt 0.9230 0.2905 0.0000 +vt 0.9581 0.0881 0.0000 +vt 0.9598 0.0881 0.0000 +vt 0.9598 0.0904 0.0000 +vt 0.9581 0.0904 0.0000 +vt 0.9619 0.0881 0.0000 +vt 0.9619 0.0904 0.0000 +vt 0.9642 0.0881 0.0000 +vt 0.9642 0.0904 0.0000 +vt 0.9663 0.0881 0.0000 +vt 0.9663 0.0904 0.0000 +vt 0.9681 0.0881 0.0000 +vt 0.9681 0.0904 0.0000 +vt 0.6400 0.1663 0.0000 +vt 0.6400 0.1685 0.0000 +vt 0.7198 0.1606 0.0000 +vt 0.7178 0.1595 0.0000 +vt 0.7198 0.1544 0.0000 +vt 0.0753 0.1190 0.0000 +vt 0.0764 0.1170 0.0000 +vt 0.0823 0.1190 0.0000 +vt 0.7214 0.1606 0.0000 +vt 0.7415 0.1606 0.0000 +vt 0.7198 0.1484 0.0000 +vt 0.7164 0.1512 0.0000 +vt 0.7178 0.1495 0.0000 +vt 0.7156 0.1556 0.0000 +vt 0.7156 0.1534 0.0000 +vt 0.7164 0.1578 0.0000 +vt 0.0823 0.1206 0.0000 +vt 0.0750 0.1206 0.0000 +vt 0.0875 0.1190 0.0000 +vt 0.0875 0.1206 0.0000 +vt 0.0864 0.1170 0.0000 +vt 0.0847 0.1156 0.0000 +vt 0.0825 0.1148 0.0000 +vt 0.0803 0.1148 0.0000 +vt 0.0781 0.1156 0.0000 +vt 0.6144 0.1029 0.0000 +vt 0.6144 0.1045 0.0000 +vt 0.5980 0.1045 0.0000 +vt 0.5943 0.1029 0.0000 +vt 0.6079 0.1383 0.0000 +vt 0.6013 0.1319 0.0000 +vt 0.6036 0.1319 0.0000 +vt 0.5943 0.1115 0.0000 +vt 0.5980 0.1115 0.0000 +vt 0.5980 0.1235 0.0000 +vt 0.5943 0.1251 0.0000 +vt 0.2254 0.3702 0.0000 +vt 0.2254 0.3936 0.0000 +vt 0.2006 0.3936 0.0000 +vt 0.2006 0.3702 0.0000 +vt 0.2409 0.3701 0.0000 +vt 0.2409 0.3935 0.0000 +vt 0.2903 0.3701 0.0000 +vt 0.2903 0.3935 0.0000 +vt 0.2614 0.3935 0.0000 +vt 0.2614 0.3701 0.0000 +vt 0.5712 0.1521 0.0000 +vt 0.5809 0.1521 0.0000 +vt 0.5809 0.1685 0.0000 +vt 0.5712 0.1685 0.0000 +vt 0.2135 0.4264 0.0000 +vt 0.2005 0.4264 0.0000 +vt 0.2005 0.4068 0.0000 +vt 0.2135 0.4068 0.0000 +vt 0.2614 0.4264 0.0000 +vt 0.2409 0.4264 0.0000 +vt 0.2409 0.4018 0.0000 +vt 0.2614 0.4018 0.0000 +vt 0.3073 0.4264 0.0000 +vt 0.2903 0.4264 0.0000 +vt 0.2903 0.4018 0.0000 +vt 0.3073 0.4018 0.0000 +vt 0.5221 0.1521 0.0000 +vt 0.5221 0.1685 0.0000 +vt 0.5120 0.1685 0.0000 +vt 0.5120 0.1521 0.0000 +vt 0.8569 0.0519 0.0000 +vt 0.2006 0.4019 0.0000 +vt 0.2254 0.4019 0.0000 +vt 0.2255 0.4264 0.0000 +vt 0.2147 0.4264 0.0000 +vt 0.2147 0.4064 0.0000 +vt 0.5943 0.2007 0.0000 +vt 0.6107 0.1886 0.0000 +vt 0.6107 0.2092 0.0000 +vt 0.5999 0.2092 0.0000 +vt 0.2409 0.4336 0.0000 +vt 0.2255 0.4336 0.0000 +vt 0.9058 0.1181 0.0000 +vt 0.8950 0.1181 0.0000 +vt 0.8950 0.1151 0.0000 +vt 0.9058 0.1151 0.0000 +vt 0.2135 0.4336 0.0000 +vt 0.2005 0.4336 0.0000 +vt 0.2147 0.4336 0.0000 +vt 0.7504 0.2393 0.0000 +vt 0.7599 0.2393 0.0000 +vt 0.7599 0.2427 0.0000 +vt 0.7504 0.2427 0.0000 +vt 0.8790 0.0233 0.0000 +vt 0.8965 0.0233 0.0000 +vt 0.8965 0.0267 0.0000 +vt 0.8790 0.0267 0.0000 +vt 0.6729 0.0281 0.0000 +vt 0.6729 0.0352 0.0000 +vt 0.6678 0.0352 0.0000 +vt 0.6678 0.0257 0.0000 +vt 0.0844 0.2463 0.0000 +vt 0.0844 0.2497 0.0000 +vt 0.0834 0.2497 0.0000 +vt 0.0834 0.2463 0.0000 +vt 0.5499 0.2296 0.0000 +vt 0.5499 0.2176 0.0000 +vt 0.5509 0.2296 0.0000 +vt 0.5499 0.2106 0.0000 +vt 0.5335 0.2106 0.0000 +vt 0.5335 0.2057 0.0000 +vt 0.5509 0.2057 0.0000 +vt 0.6893 0.0281 0.0000 +vt 0.6719 0.0233 0.0000 +vt 0.6893 0.0233 0.0000 +vt 0.7696 0.2427 0.0000 +vt 0.7678 0.2427 0.0000 +vt 0.7678 0.2393 0.0000 +vt 0.7696 0.2393 0.0000 +vt 0.7709 0.2427 0.0000 +vt 0.7709 0.2393 0.0000 +vt 0.0816 0.2497 0.0000 +vt 0.0803 0.2497 0.0000 +vt 0.0803 0.2463 0.0000 +vt 0.0816 0.2463 0.0000 +vt 0.5550 0.2081 0.0000 +vt 0.9006 0.0267 0.0000 +vt 0.9006 0.0233 0.0000 +vt 0.8829 0.0952 0.0000 +vt 0.8829 0.0903 0.0000 +vt 0.6395 0.2433 0.0000 +vt 0.6613 0.2393 0.0000 +vt 0.6613 0.2418 0.0000 +vt 0.6490 0.2529 0.0000 +vt 0.6384 0.2444 0.0000 +vt 0.6376 0.2457 0.0000 +vt 0.6480 0.2539 0.0000 +vt 0.6437 0.2554 0.0000 +vt 0.6421 0.2553 0.0000 +vt 0.6371 0.2471 0.0000 +vt 0.6369 0.2486 0.0000 +vt 0.6376 0.2516 0.0000 +vt 0.6371 0.2502 0.0000 +vt 0.6395 0.2539 0.0000 +vt 0.6384 0.2529 0.0000 +vt 0.6407 0.2547 0.0000 +vt 0.5550 0.2176 0.0000 +vt 0.6879 0.0929 0.0000 +vt 0.6678 0.0929 0.0000 +vt 0.6678 0.0891 0.0000 +vt 0.6879 0.0891 0.0000 +vt 0.0294 0.3091 0.0000 +vt 0.0661 0.3091 0.0000 +vt 0.5614 0.1783 0.0000 +vt 0.5669 0.1783 0.0000 +vt 0.5468 0.1783 0.0000 +vt 0.3073 0.3701 0.0000 +vt 0.3073 0.3935 0.0000 +vt 0.6810 0.0448 0.0000 +vt 0.6875 0.0448 0.0000 +vt 0.6875 0.0472 0.0000 +vt 0.6810 0.0472 0.0000 +vt 0.6678 0.0431 0.0000 +vt 0.6729 0.0472 0.0000 +vt 0.6719 0.0472 0.0000 +vt 0.6701 0.0469 0.0000 +vt 0.6688 0.0461 0.0000 +vt 0.6680 0.0448 0.0000 +vt 0.5540 0.2286 0.0000 +vt 0.5527 0.2294 0.0000 +vt 0.5550 0.2255 0.0000 +vt 0.5547 0.2273 0.0000 +vt 0.5943 0.1817 0.0000 +vt 0.6107 0.1817 0.0000 +vt 0.6107 0.1837 0.0000 +vt 0.6042 0.1837 0.0000 +vt 0.5943 0.1887 0.0000 +vt 0.6042 0.1884 0.0000 +vt 0.6042 0.1861 0.0000 +vt 0.5725 0.0548 0.0000 +vt 0.5765 0.0548 0.0000 +vt 0.5765 0.0613 0.0000 +vt 0.5725 0.0613 0.0000 +vt 0.7256 0.0938 0.0000 +vt 0.7256 0.0897 0.0000 +vt 0.7321 0.0897 0.0000 +vt 0.7321 0.0938 0.0000 +vt 0.9778 0.0922 0.0000 +vt 0.9778 0.0881 0.0000 +vt 0.9801 0.0881 0.0000 +vt 0.9801 0.0922 0.0000 +vt 0.5797 0.0548 0.0000 +vt 0.5797 0.0613 0.0000 +vt 0.7256 0.0865 0.0000 +vt 0.7321 0.0865 0.0000 +vt 0.1958 0.1537 0.0000 +vt 0.1968 0.1537 0.0000 +vt 0.1968 0.1547 0.0000 +vt 0.1958 0.1547 0.0000 +vt 0.6774 0.0448 0.0000 +vt 0.6774 0.0424 0.0000 +vt 0.6810 0.0424 0.0000 +vt 0.7219 0.0882 0.0000 +vt 0.7220 0.0865 0.0000 +vt 0.1614 0.1238 0.0000 +vt 0.1652 0.1238 0.0000 +vt 0.1652 0.1262 0.0000 +vt 0.1614 0.1262 0.0000 +vt 0.5797 0.0650 0.0000 +vt 0.5780 0.0651 0.0000 +vt 0.1976 0.1547 0.0000 +vt 0.1976 0.1537 0.0000 +vt 0.1950 0.1537 0.0000 +vt 0.1950 0.1547 0.0000 +vt 0.1982 0.1549 0.0000 +vt 0.1982 0.1537 0.0000 +vt 0.7211 0.0879 0.0000 +vt 0.7205 0.0877 0.0000 +vt 0.7206 0.0865 0.0000 +vt 0.7212 0.0865 0.0000 +vt 0.1944 0.1537 0.0000 +vt 0.1944 0.1549 0.0000 +vt 0.5797 0.0658 0.0000 +vt 0.5797 0.0664 0.0000 +vt 0.5785 0.0664 0.0000 +vt 0.5783 0.0659 0.0000 +vt 0.6774 0.0472 0.0000 +vt 0.6766 0.0470 0.0000 +vt 0.6875 0.0424 0.0000 +vt 0.6760 0.0429 0.0000 +vt 0.6766 0.0425 0.0000 +vt 0.6755 0.0443 0.0000 +vt 0.6756 0.0435 0.0000 +vt 0.6756 0.0461 0.0000 +vt 0.6755 0.0453 0.0000 +vt 0.6760 0.0467 0.0000 +vt 0.1652 0.1214 0.0000 +vt 0.1660 0.1216 0.0000 +vt 0.1665 0.1219 0.0000 +vt 0.9754 0.0922 0.0000 +vt 0.9754 0.0881 0.0000 +vt 0.1614 0.1214 0.0000 +vt 0.1665 0.1257 0.0000 +vt 0.1660 0.1261 0.0000 +vt 0.1669 0.1225 0.0000 +vt 0.1670 0.1233 0.0000 +vt 0.1670 0.1243 0.0000 +vt 0.1669 0.1251 0.0000 +vt 0.6541 0.1827 0.0000 +vt 0.6424 0.1817 0.0000 +vt 0.6555 0.1820 0.0000 +vt 0.6541 0.1951 0.0000 +vt 0.6555 0.1958 0.0000 +vt 0.6369 0.1994 0.0000 +vt 0.6570 0.1960 0.0000 +vt 0.6570 0.1994 0.0000 +vt 0.6530 0.1940 0.0000 +vt 0.6523 0.1926 0.0000 +vt 0.6521 0.1910 0.0000 +vt 0.6523 0.1851 0.0000 +vt 0.6521 0.1867 0.0000 +vt 0.6369 0.1845 0.0000 +vt 0.6530 0.1837 0.0000 +vt 0.6570 0.1817 0.0000 +vt 0.7021 0.2657 0.0000 +vt 0.7021 0.2641 0.0000 +vt 0.7197 0.2641 0.0000 +vt 0.7197 0.2657 0.0000 +vt 0.7021 0.2628 0.0000 +vt 0.7197 0.2628 0.0000 +vt 0.0476 0.1085 0.0000 +vt 0.0476 0.1074 0.0000 +vt 0.0652 0.1074 0.0000 +vt 0.0652 0.1085 0.0000 +vt 0.0476 0.1061 0.0000 +vt 0.0652 0.1061 0.0000 +vt 0.0476 0.1045 0.0000 +vt 0.0652 0.1045 0.0000 +vt 0.0476 0.1001 0.0000 +vt 0.0652 0.1001 0.0000 +vt 0.0476 0.0986 0.0000 +vt 0.0652 0.0986 0.0000 +vt 0.0476 0.0972 0.0000 +vt 0.0652 0.0972 0.0000 +vt 0.0476 0.0961 0.0000 +vt 0.0652 0.0961 0.0000 +vt 0.7231 0.2451 0.0000 +vt 0.7231 0.2438 0.0000 +vt 0.7407 0.2438 0.0000 +vt 0.7407 0.2451 0.0000 +vt 0.7231 0.2422 0.0000 +vt 0.7407 0.2422 0.0000 +vt 0.7915 0.0782 0.0000 +vt 0.7929 0.0787 0.0000 +vt 0.7901 0.0857 0.0000 +vt 0.2173 0.3492 0.0000 +vt 0.2173 0.3615 0.0000 +vt 0.2335 0.3615 0.0000 +vt 0.2335 0.3492 0.0000 +vt 0.2841 0.3615 0.0000 +vt 0.2507 0.3615 0.0000 +vt 0.2507 0.3492 0.0000 +vt 0.2841 0.3492 0.0000 +vt 0.7530 0.2549 0.0000 +vt 0.7504 0.2549 0.0000 +vt 0.7504 0.2500 0.0000 +vt 0.7530 0.2500 0.0000 +vt 0.8613 0.1338 0.0000 +vt 0.8613 0.1289 0.0000 +vt 0.8745 0.1289 0.0000 +vt 0.8745 0.1338 0.0000 +vt 0.5652 0.2217 0.0000 +vt 0.5701 0.2217 0.0000 +vt 0.5701 0.2228 0.0000 +vt 0.5652 0.2228 0.0000 +vt 0.9131 0.1375 0.0000 +vt 0.9131 0.1325 0.0000 +vt 0.9144 0.1325 0.0000 +vt 0.9144 0.1375 0.0000 +vt 0.9158 0.1325 0.0000 +vt 0.9158 0.1375 0.0000 +vt 0.9174 0.1325 0.0000 +vt 0.9174 0.1375 0.0000 +vt 0.9189 0.1325 0.0000 +vt 0.9189 0.1375 0.0000 +vt 0.9203 0.1325 0.0000 +vt 0.9203 0.1375 0.0000 +vt 0.9216 0.1325 0.0000 +vt 0.9216 0.1375 0.0000 +vt 0.5120 0.1984 0.0000 +vt 0.5120 0.1935 0.0000 +vt 0.5130 0.1935 0.0000 +vt 0.5130 0.1984 0.0000 +vt 0.5143 0.1935 0.0000 +vt 0.5143 0.1984 0.0000 +vt 0.5157 0.1935 0.0000 +vt 0.5157 0.1984 0.0000 +vt 0.5173 0.1935 0.0000 +vt 0.5173 0.1984 0.0000 +vt 0.5188 0.1935 0.0000 +vt 0.5188 0.1984 0.0000 +vt 0.5203 0.1935 0.0000 +vt 0.5203 0.1984 0.0000 +vt 0.5215 0.1935 0.0000 +vt 0.5215 0.1984 0.0000 +vt 0.5226 0.1935 0.0000 +vt 0.5226 0.1984 0.0000 +vt 0.5241 0.1935 0.0000 +vt 0.5241 0.1984 0.0000 +vt 0.5266 0.1935 0.0000 +vt 0.5266 0.1984 0.0000 +vt 0.5321 0.1935 0.0000 +vt 0.5321 0.1984 0.0000 +vt 0.7967 0.0916 0.0000 +vt 0.7996 0.0942 0.0000 +vt 0.7847 0.0942 0.0000 +vt 0.7847 0.0916 0.0000 +vt 0.2173 0.3324 0.0000 +vt 0.2335 0.3324 0.0000 +vt 0.2507 0.3324 0.0000 +vt 0.2841 0.3324 0.0000 +vt 0.3733 0.3492 0.0000 +vt 0.3366 0.3492 0.0000 +vt 0.3366 0.3324 0.0000 +vt 0.3733 0.3324 0.0000 +vt 0.5266 0.1867 0.0000 +vt 0.5321 0.1867 0.0000 +vt 0.5266 0.1844 0.0000 +vt 0.5266 0.1822 0.0000 +vt 0.5321 0.1822 0.0000 +vt 0.5321 0.1844 0.0000 +vt 0.3170 0.3615 0.0000 +vt 0.3054 0.3615 0.0000 +vt 0.3054 0.3492 0.0000 +vt 0.3170 0.3492 0.0000 +vt 0.3054 0.3324 0.0000 +vt 0.3170 0.3324 0.0000 +vt 0.7616 0.1481 0.0000 +vt 0.7616 0.1544 0.0000 +vt 0.3733 0.3278 0.0000 +vt 0.3366 0.3278 0.0000 +vt 0.3366 0.3226 0.0000 +vt 0.3733 0.3226 0.0000 +vt 0.3170 0.3278 0.0000 +vt 0.3054 0.3278 0.0000 +vt 0.1979 0.1463 0.0000 +vt 0.1963 0.1463 0.0000 +vt 0.1963 0.1441 0.0000 +vt 0.1979 0.1441 0.0000 +vt 0.6838 0.1663 0.0000 +vt 0.6854 0.1663 0.0000 +vt 0.6854 0.1685 0.0000 +vt 0.6838 0.1685 0.0000 +vt 0.6838 0.1708 0.0000 +vt 0.8724 0.0419 0.0000 +vt 0.8685 0.0479 0.0000 +vt 0.1944 0.1463 0.0000 +vt 0.1944 0.1441 0.0000 +vt 0.9637 0.1673 0.0000 +vt 0.9637 0.1695 0.0000 +vt 0.9620 0.1695 0.0000 +vt 0.9620 0.1673 0.0000 +vt 0.9598 0.1695 0.0000 +vt 0.9598 0.1673 0.0000 +vt 0.9576 0.1695 0.0000 +vt 0.9576 0.1673 0.0000 +vt 0.9555 0.1695 0.0000 +vt 0.9555 0.1673 0.0000 +vt 0.9537 0.1695 0.0000 +vt 0.9537 0.1673 0.0000 +vt 0.6873 0.1663 0.0000 +vt 0.6873 0.1685 0.0000 +vt 0.7632 0.1606 0.0000 +vt 0.7632 0.1544 0.0000 +vt 0.7652 0.1595 0.0000 +vt 0.1198 0.1172 0.0000 +vt 0.1269 0.1172 0.0000 +vt 0.1210 0.1192 0.0000 +vt 0.7616 0.1606 0.0000 +vt 0.7632 0.1484 0.0000 +vt 0.7666 0.1512 0.0000 +vt 0.7652 0.1495 0.0000 +vt 0.7674 0.1556 0.0000 +vt 0.7674 0.1534 0.0000 +vt 0.7666 0.1578 0.0000 +vt 0.1195 0.1156 0.0000 +vt 0.1269 0.1156 0.0000 +vt 0.1321 0.1156 0.0000 +vt 0.1321 0.1172 0.0000 +vt 0.1310 0.1192 0.0000 +vt 0.1292 0.1206 0.0000 +vt 0.1271 0.1214 0.0000 +vt 0.1248 0.1214 0.0000 +vt 0.1227 0.1206 0.0000 +vt 0.6346 0.1029 0.0000 +vt 0.6309 0.1045 0.0000 +vt 0.6210 0.1383 0.0000 +vt 0.6252 0.1319 0.0000 +vt 0.6275 0.1319 0.0000 +vt 0.6346 0.1115 0.0000 +vt 0.6346 0.1251 0.0000 +vt 0.6309 0.1235 0.0000 +vt 0.6309 0.1115 0.0000 +vt 0.1756 0.3702 0.0000 +vt 0.1756 0.3936 0.0000 +vt 0.1600 0.3701 0.0000 +vt 0.1600 0.3935 0.0000 +vt 0.1107 0.3701 0.0000 +vt 0.1396 0.3701 0.0000 +vt 0.1396 0.3935 0.0000 +vt 0.1107 0.3935 0.0000 +vt 0.5712 0.1357 0.0000 +vt 0.5809 0.1357 0.0000 +vt 0.1874 0.4264 0.0000 +vt 0.1874 0.4068 0.0000 +vt 0.1396 0.4263 0.0000 +vt 0.1396 0.4018 0.0000 +vt 0.1600 0.4018 0.0000 +vt 0.1600 0.4263 0.0000 +vt 0.0936 0.4263 0.0000 +vt 0.0936 0.4018 0.0000 +vt 0.1107 0.4018 0.0000 +vt 0.1107 0.4263 0.0000 +vt 0.5120 0.1357 0.0000 +vt 0.5221 0.1357 0.0000 +vt 0.8679 0.0519 0.0000 +vt 0.1863 0.4064 0.0000 +vt 0.1756 0.4019 0.0000 +vt 0.1863 0.4264 0.0000 +vt 0.1755 0.4263 0.0000 +vt 0.6272 0.2007 0.0000 +vt 0.6215 0.2092 0.0000 +vt 0.1755 0.4336 0.0000 +vt 0.1600 0.4336 0.0000 +vt 0.8842 0.1181 0.0000 +vt 0.8842 0.1151 0.0000 +vt 0.1874 0.4336 0.0000 +vt 0.1863 0.4336 0.0000 +vt 0.6067 0.1111 0.0000 +vt 0.6067 0.1077 0.0000 +vt 0.6162 0.1077 0.0000 +vt 0.6162 0.1111 0.0000 +vt 0.8616 0.0267 0.0000 +vt 0.8616 0.0233 0.0000 +vt 0.7057 0.0281 0.0000 +vt 0.7108 0.0257 0.0000 +vt 0.7108 0.0352 0.0000 +vt 0.7057 0.0352 0.0000 +vt 0.9754 0.0688 0.0000 +vt 0.9764 0.0688 0.0000 +vt 0.9764 0.0722 0.0000 +vt 0.9754 0.0722 0.0000 +vt 0.5171 0.2296 0.0000 +vt 0.5161 0.2296 0.0000 +vt 0.5171 0.2176 0.0000 +vt 0.5171 0.2106 0.0000 +vt 0.5161 0.2057 0.0000 +vt 0.7067 0.0233 0.0000 +vt 0.6259 0.1077 0.0000 +vt 0.6259 0.1111 0.0000 +vt 0.6241 0.1111 0.0000 +vt 0.6241 0.1077 0.0000 +vt 0.6271 0.1077 0.0000 +vt 0.6271 0.1111 0.0000 +vt 0.9782 0.0722 0.0000 +vt 0.9782 0.0688 0.0000 +vt 0.9795 0.0688 0.0000 +vt 0.9795 0.0722 0.0000 +vt 0.5120 0.2081 0.0000 +vt 0.8575 0.0267 0.0000 +vt 0.8575 0.0233 0.0000 +vt 0.7591 0.2549 0.0000 +vt 0.7591 0.2500 0.0000 +vt 0.7857 0.0901 0.0000 +vt 0.8076 0.0916 0.0000 +vt 0.8076 0.0942 0.0000 +vt 0.7952 0.0806 0.0000 +vt 0.7846 0.0890 0.0000 +vt 0.7838 0.0878 0.0000 +vt 0.7942 0.0795 0.0000 +vt 0.7899 0.0780 0.0000 +vt 0.7884 0.0782 0.0000 +vt 0.7833 0.0863 0.0000 +vt 0.7832 0.0848 0.0000 +vt 0.7838 0.0818 0.0000 +vt 0.7833 0.0832 0.0000 +vt 0.7857 0.0795 0.0000 +vt 0.7846 0.0805 0.0000 +vt 0.7870 0.0787 0.0000 +vt 0.5120 0.2176 0.0000 +vt 0.7080 0.0891 0.0000 +vt 0.7080 0.0929 0.0000 +vt 0.3366 0.3130 0.0000 +vt 0.3733 0.3130 0.0000 +vt 0.5266 0.1783 0.0000 +vt 0.5321 0.1783 0.0000 +vt 0.0936 0.3701 0.0000 +vt 0.0936 0.3935 0.0000 +vt 0.6940 0.0448 0.0000 +vt 0.6940 0.0472 0.0000 +vt 0.7108 0.0431 0.0000 +vt 0.7067 0.0472 0.0000 +vt 0.7057 0.0472 0.0000 +vt 0.7085 0.0469 0.0000 +vt 0.7098 0.0461 0.0000 +vt 0.7105 0.0448 0.0000 +vt 0.5143 0.2294 0.0000 +vt 0.5130 0.2286 0.0000 +vt 0.5120 0.2255 0.0000 +vt 0.5122 0.2273 0.0000 +vt 0.6272 0.1817 0.0000 +vt 0.6172 0.1837 0.0000 +vt 0.6172 0.1884 0.0000 +vt 0.6272 0.1887 0.0000 +vt 0.6172 0.1861 0.0000 +vt 0.5725 0.0483 0.0000 +vt 0.5765 0.0483 0.0000 +vt 0.7386 0.0938 0.0000 +vt 0.7386 0.0897 0.0000 +vt 0.9019 0.1295 0.0000 +vt 0.8995 0.1295 0.0000 +vt 0.8995 0.1255 0.0000 +vt 0.9019 0.1255 0.0000 +vt 0.5797 0.0483 0.0000 +vt 0.7386 0.0865 0.0000 +vt 0.3701 0.2061 0.0000 +vt 0.3701 0.2071 0.0000 +vt 0.3691 0.2071 0.0000 +vt 0.3691 0.2061 0.0000 +vt 0.6940 0.0424 0.0000 +vt 0.6977 0.0424 0.0000 +vt 0.6977 0.0448 0.0000 +vt 0.7423 0.0865 0.0000 +vt 0.7424 0.0882 0.0000 +vt 0.0383 0.2381 0.0000 +vt 0.0383 0.2404 0.0000 +vt 0.0345 0.2404 0.0000 +vt 0.0345 0.2381 0.0000 +vt 0.5780 0.0445 0.0000 +vt 0.5797 0.0447 0.0000 +vt 0.3683 0.2072 0.0000 +vt 0.3683 0.2061 0.0000 +vt 0.3709 0.2061 0.0000 +vt 0.3709 0.2072 0.0000 +vt 0.3677 0.2073 0.0000 +vt 0.3677 0.2061 0.0000 +vt 0.7432 0.0879 0.0000 +vt 0.7431 0.0865 0.0000 +vt 0.7437 0.0865 0.0000 +vt 0.7437 0.0877 0.0000 +vt 0.3715 0.2061 0.0000 +vt 0.3715 0.2073 0.0000 +vt 0.5797 0.0439 0.0000 +vt 0.5783 0.0438 0.0000 +vt 0.5785 0.0432 0.0000 +vt 0.5797 0.0433 0.0000 +vt 0.6977 0.0472 0.0000 +vt 0.6985 0.0470 0.0000 +vt 0.6991 0.0429 0.0000 +vt 0.6985 0.0425 0.0000 +vt 0.6995 0.0443 0.0000 +vt 0.6994 0.0435 0.0000 +vt 0.6994 0.0461 0.0000 +vt 0.6995 0.0453 0.0000 +vt 0.6991 0.0467 0.0000 +vt 0.0345 0.2357 0.0000 +vt 0.0332 0.2361 0.0000 +vt 0.0337 0.2358 0.0000 +vt 0.9043 0.1295 0.0000 +vt 0.9043 0.1255 0.0000 +vt 0.0383 0.2357 0.0000 +vt 0.0332 0.2400 0.0000 +vt 0.0337 0.2403 0.0000 +vt 0.0329 0.2367 0.0000 +vt 0.0328 0.2376 0.0000 +vt 0.0328 0.2385 0.0000 +vt 0.0329 0.2394 0.0000 +vt 0.6600 0.1827 0.0000 +vt 0.6586 0.1820 0.0000 +vt 0.6717 0.1817 0.0000 +vt 0.6600 0.1951 0.0000 +vt 0.6772 0.1994 0.0000 +vt 0.6586 0.1958 0.0000 +vt 0.6610 0.1940 0.0000 +vt 0.6617 0.1926 0.0000 +vt 0.6620 0.1910 0.0000 +vt 0.6617 0.1851 0.0000 +vt 0.6620 0.1867 0.0000 +vt 0.6772 0.1845 0.0000 +vt 0.6610 0.1837 0.0000 +vt 0.7197 0.2672 0.0000 +vt 0.7021 0.2672 0.0000 +vt 0.7197 0.2686 0.0000 +vt 0.7021 0.2686 0.0000 +vt 0.0157 0.1280 0.0000 +vt 0.0333 0.1280 0.0000 +vt 0.0333 0.1290 0.0000 +vt 0.0157 0.1290 0.0000 +vt 0.0333 0.1304 0.0000 +vt 0.0157 0.1304 0.0000 +vt 0.0333 0.1320 0.0000 +vt 0.0157 0.1320 0.0000 +vt 0.0333 0.1364 0.0000 +vt 0.0157 0.1364 0.0000 +vt 0.0333 0.1379 0.0000 +vt 0.0157 0.1379 0.0000 +vt 0.0333 0.1393 0.0000 +vt 0.0157 0.1393 0.0000 +vt 0.0333 0.1404 0.0000 +vt 0.0157 0.1404 0.0000 +vt 0.7231 0.2393 0.0000 +vt 0.7407 0.2393 0.0000 +vt 0.7407 0.2406 0.0000 +vt 0.7231 0.2406 0.0000 +vt 0.9436 0.3771 0.0000 +vt 0.9432 0.3800 0.0000 +vt 0.9424 0.3798 0.0000 +vt 0.9429 0.3771 0.0000 +vt 0.9419 0.3825 0.0000 +vt 0.9413 0.3821 0.0000 +vt 0.9399 0.3845 0.0000 +vt 0.9394 0.3839 0.0000 +vt 0.9374 0.3858 0.0000 +vt 0.9371 0.3851 0.0000 +vt 0.9345 0.3862 0.0000 +vt 0.9344 0.3855 0.0000 +vt 0.9264 0.3862 0.0000 +vt 0.9265 0.3855 0.0000 +vt 0.9235 0.3858 0.0000 +vt 0.9238 0.3851 0.0000 +vt 0.9210 0.3845 0.0000 +vt 0.9215 0.3839 0.0000 +vt 0.9190 0.3825 0.0000 +vt 0.9196 0.3821 0.0000 +vt 0.9177 0.3800 0.0000 +vt 0.9185 0.3798 0.0000 +vt 0.9173 0.3771 0.0000 +vt 0.9180 0.3771 0.0000 +vt 0.9177 0.3742 0.0000 +vt 0.9185 0.3745 0.0000 +vt 0.9190 0.3717 0.0000 +vt 0.9196 0.3722 0.0000 +vt 0.9210 0.3697 0.0000 +vt 0.9215 0.3703 0.0000 +vt 0.9235 0.3684 0.0000 +vt 0.9238 0.3692 0.0000 +vt 0.9264 0.3680 0.0000 +vt 0.9265 0.3687 0.0000 +vt 0.9345 0.3680 0.0000 +vt 0.9344 0.3687 0.0000 +vt 0.9374 0.3684 0.0000 +vt 0.9371 0.3692 0.0000 +vt 0.9399 0.3697 0.0000 +vt 0.9394 0.3703 0.0000 +vt 0.9419 0.3717 0.0000 +vt 0.9413 0.3722 0.0000 +vt 0.9432 0.3742 0.0000 +vt 0.9424 0.3745 0.0000 +vt 0.9339 0.3827 0.0000 +vt 0.9312 0.3827 0.0000 +vt 0.9312 0.3813 0.0000 +vt 0.9339 0.3813 0.0000 +vt 0.9288 0.3827 0.0000 +vt 0.9288 0.3813 0.0000 +vt 0.9267 0.3827 0.0000 +vt 0.9267 0.3813 0.0000 +vt 0.9376 0.4011 0.0000 +vt 0.9350 0.4011 0.0000 +vt 0.9350 0.3997 0.0000 +vt 0.9376 0.3997 0.0000 +vt 0.9324 0.4011 0.0000 +vt 0.9324 0.3997 0.0000 +vt 0.9253 0.4011 0.0000 +vt 0.9253 0.3997 0.0000 +vt 0.9231 0.4011 0.0000 +vt 0.9231 0.3997 0.0000 +vt 0.9355 0.3810 0.0000 +vt 0.9355 0.3784 0.0000 +vt 0.9368 0.3784 0.0000 +vt 0.9368 0.3810 0.0000 +vt 0.9355 0.3759 0.0000 +vt 0.9368 0.3759 0.0000 +vt 0.9355 0.3738 0.0000 +vt 0.9368 0.3738 0.0000 +vt 0.9393 0.3816 0.0000 +vt 0.9393 0.3789 0.0000 +vt 0.9407 0.3789 0.0000 +vt 0.9407 0.3816 0.0000 +vt 0.9393 0.3764 0.0000 +vt 0.9407 0.3764 0.0000 +vt 0.9393 0.3743 0.0000 +vt 0.9407 0.3743 0.0000 +vt 0.9376 0.3993 0.0000 +vt 0.9350 0.3993 0.0000 +vt 0.9350 0.3980 0.0000 +vt 0.9376 0.3980 0.0000 +vt 0.9325 0.3993 0.0000 +vt 0.9325 0.3980 0.0000 +vt 0.9303 0.3993 0.0000 +vt 0.9303 0.3980 0.0000 +vt 0.9247 0.3993 0.0000 +vt 0.9247 0.3980 0.0000 +vt 0.9372 0.3810 0.0000 +vt 0.9372 0.3782 0.0000 +vt 0.9386 0.3782 0.0000 +vt 0.9386 0.3810 0.0000 +vt 0.9372 0.3758 0.0000 +vt 0.9386 0.3758 0.0000 +vt 0.9372 0.3737 0.0000 +vt 0.9386 0.3737 0.0000 +vt 0.9386 0.3827 0.0000 +vt 0.9365 0.3827 0.0000 +vt 0.9365 0.3813 0.0000 +vt 0.9386 0.3813 0.0000 +vt 0.9421 0.3958 0.0000 +vt 0.9417 0.3984 0.0000 +vt 0.9410 0.3982 0.0000 +vt 0.9413 0.3958 0.0000 +vt 0.9405 0.4007 0.0000 +vt 0.9399 0.4003 0.0000 +vt 0.9387 0.4025 0.0000 +vt 0.9382 0.4019 0.0000 +vt 0.9364 0.4037 0.0000 +vt 0.9361 0.4030 0.0000 +vt 0.9337 0.4042 0.0000 +vt 0.9336 0.4034 0.0000 +vt 0.9257 0.4042 0.0000 +vt 0.9258 0.4034 0.0000 +vt 0.9230 0.4037 0.0000 +vt 0.9232 0.4030 0.0000 +vt 0.9207 0.4025 0.0000 +vt 0.9211 0.4019 0.0000 +vt 0.9189 0.4007 0.0000 +vt 0.9195 0.4003 0.0000 +vt 0.9177 0.3984 0.0000 +vt 0.9184 0.3982 0.0000 +vt 0.9173 0.3958 0.0000 +vt 0.9180 0.3958 0.0000 +vt 0.9177 0.3931 0.0000 +vt 0.9184 0.3934 0.0000 +vt 0.9189 0.3908 0.0000 +vt 0.9195 0.3913 0.0000 +vt 0.9207 0.3890 0.0000 +vt 0.9211 0.3896 0.0000 +vt 0.9230 0.3878 0.0000 +vt 0.9232 0.3886 0.0000 +vt 0.9257 0.3874 0.0000 +vt 0.9258 0.3881 0.0000 +vt 0.9337 0.3874 0.0000 +vt 0.9336 0.3881 0.0000 +vt 0.9364 0.3878 0.0000 +vt 0.9361 0.3886 0.0000 +vt 0.9387 0.3890 0.0000 +vt 0.9382 0.3896 0.0000 +vt 0.9405 0.3908 0.0000 +vt 0.9399 0.3913 0.0000 +vt 0.9417 0.3931 0.0000 +vt 0.9410 0.3934 0.0000 +vt 0.9331 0.3957 0.0000 +vt 0.9355 0.3957 0.0000 +vt 0.9355 0.3976 0.0000 +vt 0.9331 0.3976 0.0000 +vt 0.9376 0.3957 0.0000 +vt 0.9376 0.3976 0.0000 +vt 0.9173 0.4053 0.0000 +vt 0.9189 0.4053 0.0000 +vt 0.9189 0.4072 0.0000 +vt 0.9173 0.4072 0.0000 +vt 0.9210 0.4053 0.0000 +vt 0.9210 0.4072 0.0000 +vt 0.9235 0.4053 0.0000 +vt 0.9235 0.4072 0.0000 +vt 0.9314 0.4053 0.0000 +vt 0.9314 0.4072 0.0000 +vt 0.9339 0.4053 0.0000 +vt 0.9339 0.4072 0.0000 +vt 0.9360 0.4053 0.0000 +vt 0.9360 0.4072 0.0000 +vt 0.9376 0.4053 0.0000 +vt 0.9376 0.4072 0.0000 +vt 0.9286 0.3934 0.0000 +vt 0.9307 0.3934 0.0000 +vt 0.9307 0.3953 0.0000 +vt 0.9286 0.3953 0.0000 +vt 0.9331 0.3934 0.0000 +vt 0.9331 0.3953 0.0000 +vt 0.9355 0.3934 0.0000 +vt 0.9355 0.3953 0.0000 +vt 0.9376 0.3934 0.0000 +vt 0.9376 0.3953 0.0000 +vt 0.9448 0.3680 0.0000 +vt 0.9464 0.3680 0.0000 +vt 0.9464 0.3699 0.0000 +vt 0.9448 0.3699 0.0000 +vt 0.9485 0.3680 0.0000 +vt 0.9485 0.3699 0.0000 +vt 0.9510 0.3680 0.0000 +vt 0.9510 0.3699 0.0000 +vt 0.9589 0.3680 0.0000 +vt 0.9589 0.3699 0.0000 +vt 0.9614 0.3680 0.0000 +vt 0.9614 0.3699 0.0000 +vt 0.9635 0.3680 0.0000 +vt 0.9635 0.3699 0.0000 +vt 0.9652 0.3680 0.0000 +vt 0.9652 0.3699 0.0000 +vt 0.9286 0.3957 0.0000 +vt 0.9307 0.3957 0.0000 +vt 0.9307 0.3976 0.0000 +vt 0.9286 0.3976 0.0000 +vt 0.9666 0.3950 0.0000 +vt 0.9662 0.3974 0.0000 +vt 0.9549 0.3950 0.0000 +vt 0.9651 0.3995 0.0000 +vt 0.9634 0.4012 0.0000 +vt 0.9614 0.4022 0.0000 +vt 0.9588 0.4027 0.0000 +vt 0.9510 0.4027 0.0000 +vt 0.9485 0.4022 0.0000 +vt 0.9464 0.4012 0.0000 +vt 0.9447 0.3995 0.0000 +vt 0.9436 0.3974 0.0000 +vt 0.9433 0.3950 0.0000 +vt 0.9436 0.3926 0.0000 +vt 0.9447 0.3905 0.0000 +vt 0.9464 0.3889 0.0000 +vt 0.9485 0.3878 0.0000 +vt 0.9510 0.3874 0.0000 +vt 0.9588 0.3874 0.0000 +vt 0.9614 0.3878 0.0000 +vt 0.9634 0.3889 0.0000 +vt 0.9651 0.3905 0.0000 +vt 0.9662 0.3926 0.0000 +vt 0.9623 0.2666 0.0000 +vt 0.9607 0.2666 0.0000 +vt 0.9607 0.2628 0.0000 +vt 0.9623 0.2628 0.0000 +vt 0.6302 0.1383 0.0000 +vt 0.6302 0.1367 0.0000 +vt 0.6340 0.1367 0.0000 +vt 0.6340 0.1383 0.0000 +vt 0.6302 0.1353 0.0000 +vt 0.6340 0.1353 0.0000 +vt 0.3844 0.1368 0.0000 +vt 0.3844 0.1351 0.0000 +vt 0.3883 0.1351 0.0000 +vt 0.3883 0.1368 0.0000 +vt 0.0904 0.0635 0.0000 +vt 0.0893 0.0635 0.0000 +vt 0.0893 0.0596 0.0000 +vt 0.0904 0.0596 0.0000 +vt 0.0877 0.0635 0.0000 +vt 0.0877 0.0596 0.0000 +vt 0.0861 0.0635 0.0000 +vt 0.0861 0.0596 0.0000 +vt 0.0850 0.0635 0.0000 +vt 0.0850 0.0596 0.0000 +vt 0.1406 0.2302 0.0000 +vt 0.1406 0.2286 0.0000 +vt 0.1445 0.2286 0.0000 +vt 0.1445 0.2302 0.0000 +vt 0.1406 0.2272 0.0000 +vt 0.1445 0.2272 0.0000 +vt 0.9650 0.2666 0.0000 +vt 0.9639 0.2666 0.0000 +vt 0.9639 0.2628 0.0000 +vt 0.9650 0.2628 0.0000 +vt 0.0180 0.2365 0.0000 +vt 0.0195 0.2365 0.0000 +vt 0.0192 0.2378 0.0000 +vt 0.0184 0.2378 0.0000 +vt 0.0167 0.2373 0.0000 +vt 0.0176 0.2382 0.0000 +vt 0.0159 0.2386 0.0000 +vt 0.0172 0.2389 0.0000 +vt 0.0159 0.2401 0.0000 +vt 0.0172 0.2398 0.0000 +vt 0.0167 0.2414 0.0000 +vt 0.0176 0.2405 0.0000 +vt 0.0180 0.2422 0.0000 +vt 0.0183 0.2409 0.0000 +vt 0.0195 0.2422 0.0000 +vt 0.0192 0.2409 0.0000 +vt 0.0208 0.2415 0.0000 +vt 0.0199 0.2405 0.0000 +vt 0.0216 0.2401 0.0000 +vt 0.0203 0.2398 0.0000 +vt 0.0216 0.2386 0.0000 +vt 0.0203 0.2390 0.0000 +vt 0.0208 0.2373 0.0000 +vt 0.0199 0.2383 0.0000 +vt 0.1796 0.1815 0.0000 +vt 0.1804 0.1815 0.0000 +vt 0.1800 0.1830 0.0000 +vt 0.1789 0.1819 0.0000 +vt 0.1785 0.1826 0.0000 +vt 0.1785 0.1834 0.0000 +vt 0.1789 0.1841 0.0000 +vt 0.1796 0.1845 0.0000 +vt 0.1804 0.1845 0.0000 +vt 0.1811 0.1841 0.0000 +vt 0.1815 0.1834 0.0000 +vt 0.1816 0.1826 0.0000 +vt 0.1811 0.1819 0.0000 +vt 0.1653 0.1058 0.0000 +vt 0.1666 0.1066 0.0000 +vt 0.1658 0.1073 0.0000 +vt 0.1650 0.1068 0.0000 +vt 0.1673 0.1079 0.0000 +vt 0.1663 0.1082 0.0000 +vt 0.1673 0.1094 0.0000 +vt 0.1663 0.1091 0.0000 +vt 0.1666 0.1107 0.0000 +vt 0.1658 0.1100 0.0000 +vt 0.1652 0.1115 0.0000 +vt 0.1650 0.1104 0.0000 +vt 0.1637 0.1115 0.0000 +vt 0.1640 0.1104 0.0000 +vt 0.1624 0.1107 0.0000 +vt 0.1632 0.1100 0.0000 +vt 0.1617 0.1094 0.0000 +vt 0.1627 0.1091 0.0000 +vt 0.1617 0.1079 0.0000 +vt 0.1627 0.1081 0.0000 +vt 0.1624 0.1065 0.0000 +vt 0.1632 0.1073 0.0000 +vt 0.1638 0.1058 0.0000 +vt 0.1640 0.1068 0.0000 +vt 0.1645 0.1086 0.0000 +vt 0.0196 0.2363 0.0000 +vt 0.0180 0.2363 0.0000 +vt 0.1667 0.1064 0.0000 +vt 0.1653 0.1056 0.0000 +vt 0.0165 0.2371 0.0000 +vt 0.1676 0.1078 0.0000 +vt 0.0157 0.2385 0.0000 +vt 0.1675 0.1095 0.0000 +vt 0.0157 0.2402 0.0000 +vt 0.1667 0.1109 0.0000 +vt 0.0165 0.2416 0.0000 +vt 0.1653 0.1117 0.0000 +vt 0.0179 0.2424 0.0000 +vt 0.1637 0.1117 0.0000 +vt 0.0196 0.2424 0.0000 +vt 0.1622 0.1109 0.0000 +vt 0.0210 0.2416 0.0000 +vt 0.1614 0.1094 0.0000 +vt 0.0218 0.2402 0.0000 +vt 0.1614 0.1078 0.0000 +vt 0.0218 0.2386 0.0000 +vt 0.1623 0.1064 0.0000 +vt 0.0210 0.2371 0.0000 +vt 0.1637 0.1056 0.0000 +vt 0.1944 0.1801 0.0000 +vt 0.1952 0.1801 0.0000 +vt 0.1952 0.1811 0.0000 +vt 0.1944 0.1811 0.0000 +vt 0.1959 0.1801 0.0000 +vt 0.1959 0.1811 0.0000 +vt 0.4146 0.0782 0.0000 +vt 0.4155 0.0782 0.0000 +vt 0.4155 0.0792 0.0000 +vt 0.4146 0.0792 0.0000 +vt 0.4162 0.0782 0.0000 +vt 0.4162 0.0792 0.0000 +vt 0.1953 0.2074 0.0000 +vt 0.1953 0.2082 0.0000 +vt 0.1944 0.2082 0.0000 +vt 0.1944 0.2074 0.0000 +vt 0.8439 0.0240 0.0000 +vt 0.8439 0.0245 0.0000 +vt 0.8429 0.0245 0.0000 +vt 0.8429 0.0240 0.0000 +vt 0.8439 0.0253 0.0000 +vt 0.8429 0.0253 0.0000 +vt 0.8439 0.0261 0.0000 +vt 0.8429 0.0261 0.0000 +vt 0.8439 0.0267 0.0000 +vt 0.8429 0.0267 0.0000 +vt 0.4723 0.1235 0.0000 +vt 0.4731 0.1235 0.0000 +vt 0.4731 0.1245 0.0000 +vt 0.4723 0.1245 0.0000 +vt 0.4738 0.1235 0.0000 +vt 0.4738 0.1245 0.0000 +vt 0.2878 0.2269 0.0000 +vt 0.2878 0.2278 0.0000 +vt 0.2869 0.2278 0.0000 +vt 0.2869 0.2269 0.0000 +vt 0.7631 0.1743 0.0000 +vt 0.7615 0.1743 0.0000 +vt 0.7615 0.1704 0.0000 +vt 0.7631 0.1704 0.0000 +vt 0.7604 0.1743 0.0000 +vt 0.7604 0.1704 0.0000 +vt 0.5943 0.1383 0.0000 +vt 0.5943 0.1367 0.0000 +vt 0.5982 0.1367 0.0000 +vt 0.5982 0.1383 0.0000 +vt 0.5943 0.1353 0.0000 +vt 0.5982 0.1353 0.0000 +vt 0.8754 0.0823 0.0000 +vt 0.8743 0.0823 0.0000 +vt 0.8743 0.0785 0.0000 +vt 0.8754 0.0785 0.0000 +vt 0.8727 0.0823 0.0000 +vt 0.8727 0.0785 0.0000 +vt 0.8711 0.0823 0.0000 +vt 0.8711 0.0785 0.0000 +vt 0.8700 0.0823 0.0000 +vt 0.8700 0.0785 0.0000 +vt 0.1406 0.2174 0.0000 +vt 0.1406 0.2158 0.0000 +vt 0.1445 0.2158 0.0000 +vt 0.1445 0.2174 0.0000 +vt 0.1406 0.2144 0.0000 +vt 0.1445 0.2144 0.0000 +vt 0.7659 0.1743 0.0000 +vt 0.7647 0.1743 0.0000 +vt 0.7647 0.1704 0.0000 +vt 0.7659 0.1704 0.0000 +vt 0.9193 0.1904 0.0000 +vt 0.9208 0.1904 0.0000 +vt 0.9205 0.1917 0.0000 +vt 0.9197 0.1917 0.0000 +vt 0.9180 0.1912 0.0000 +vt 0.9190 0.1921 0.0000 +vt 0.9172 0.1925 0.0000 +vt 0.9185 0.1928 0.0000 +vt 0.9172 0.1940 0.0000 +vt 0.9185 0.1936 0.0000 +vt 0.9180 0.1953 0.0000 +vt 0.9189 0.1944 0.0000 +vt 0.9193 0.1961 0.0000 +vt 0.9196 0.1948 0.0000 +vt 0.9208 0.1961 0.0000 +vt 0.9205 0.1948 0.0000 +vt 0.9221 0.1953 0.0000 +vt 0.9212 0.1944 0.0000 +vt 0.9229 0.1940 0.0000 +vt 0.9216 0.1937 0.0000 +vt 0.9229 0.1925 0.0000 +vt 0.9216 0.1928 0.0000 +vt 0.9222 0.1912 0.0000 +vt 0.9212 0.1921 0.0000 +vt 0.1626 0.1980 0.0000 +vt 0.1634 0.1981 0.0000 +vt 0.1630 0.1996 0.0000 +vt 0.1619 0.1985 0.0000 +vt 0.1614 0.1992 0.0000 +vt 0.1614 0.2000 0.0000 +vt 0.1618 0.2007 0.0000 +vt 0.1625 0.2011 0.0000 +vt 0.1634 0.2011 0.0000 +vt 0.1641 0.2007 0.0000 +vt 0.1645 0.2000 0.0000 +vt 0.1645 0.1992 0.0000 +vt 0.1641 0.1985 0.0000 +vt 0.8503 0.2630 0.0000 +vt 0.8516 0.2638 0.0000 +vt 0.8508 0.2645 0.0000 +vt 0.8500 0.2640 0.0000 +vt 0.8523 0.2651 0.0000 +vt 0.8513 0.2653 0.0000 +vt 0.8523 0.2666 0.0000 +vt 0.8513 0.2663 0.0000 +vt 0.8515 0.2679 0.0000 +vt 0.8508 0.2671 0.0000 +vt 0.8502 0.2687 0.0000 +vt 0.8499 0.2676 0.0000 +vt 0.8487 0.2686 0.0000 +vt 0.8490 0.2676 0.0000 +vt 0.8474 0.2679 0.0000 +vt 0.8481 0.2671 0.0000 +vt 0.8466 0.2666 0.0000 +vt 0.8477 0.2663 0.0000 +vt 0.8466 0.2650 0.0000 +vt 0.8477 0.2653 0.0000 +vt 0.8474 0.2637 0.0000 +vt 0.8482 0.2645 0.0000 +vt 0.8487 0.2630 0.0000 +vt 0.8490 0.2640 0.0000 +vt 0.8495 0.2658 0.0000 +vt 0.9209 0.1902 0.0000 +vt 0.9193 0.1902 0.0000 +vt 0.8517 0.2636 0.0000 +vt 0.8503 0.2628 0.0000 +vt 0.9178 0.1910 0.0000 +vt 0.8525 0.2650 0.0000 +vt 0.9170 0.1924 0.0000 +vt 0.8525 0.2667 0.0000 +vt 0.9170 0.1940 0.0000 +vt 0.8517 0.2681 0.0000 +vt 0.9178 0.1955 0.0000 +vt 0.8503 0.2689 0.0000 +vt 0.9192 0.1963 0.0000 +vt 0.8486 0.2689 0.0000 +vt 0.9209 0.1963 0.0000 +vt 0.8472 0.2680 0.0000 +vt 0.9223 0.1955 0.0000 +vt 0.8464 0.2666 0.0000 +vt 0.9231 0.1941 0.0000 +vt 0.8464 0.2650 0.0000 +vt 0.9231 0.1924 0.0000 +vt 0.8473 0.2636 0.0000 +vt 0.9223 0.1910 0.0000 +vt 0.8487 0.2628 0.0000 +vt 0.7848 0.0245 0.0000 +vt 0.7848 0.0253 0.0000 +vt 0.7839 0.0253 0.0000 +vt 0.7839 0.0245 0.0000 +vt 0.7848 0.0261 0.0000 +vt 0.7839 0.0261 0.0000 +vt 0.7848 0.0267 0.0000 +vt 0.7839 0.0267 0.0000 +vt 0.4572 0.1351 0.0000 +vt 0.4580 0.1351 0.0000 +vt 0.4580 0.1361 0.0000 +vt 0.4572 0.1361 0.0000 +vt 0.4587 0.1351 0.0000 +vt 0.4587 0.1361 0.0000 +vt 0.3006 0.2145 0.0000 +vt 0.3006 0.2153 0.0000 +vt 0.2997 0.2153 0.0000 +vt 0.2997 0.2145 0.0000 +vt 0.2869 0.1996 0.0000 +vt 0.2876 0.1996 0.0000 +vt 0.2876 0.2006 0.0000 +vt 0.2869 0.2006 0.0000 +vt 0.2884 0.1996 0.0000 +vt 0.2884 0.2006 0.0000 +vt 0.2740 0.1972 0.0000 +vt 0.2749 0.1972 0.0000 +vt 0.2749 0.1982 0.0000 +vt 0.2740 0.1982 0.0000 +vt 0.2756 0.1972 0.0000 +vt 0.2756 0.1982 0.0000 +vt 0.4470 0.2101 0.0000 +vt 0.4470 0.2109 0.0000 +vt 0.4460 0.2109 0.0000 +vt 0.4460 0.2101 0.0000 +vt 0.7848 0.0240 0.0000 +vt 0.7839 0.0240 0.0000 +vt 0.6093 0.0865 0.0000 +vt 0.5922 0.0865 0.0000 +vt 0.5922 0.0815 0.0000 +vt 0.6093 0.0815 0.0000 +vt 0.8526 0.1585 0.0000 +vt 0.8526 0.1533 0.0000 +vt 0.8575 0.1533 0.0000 +vt 0.8575 0.1585 0.0000 +vt 0.8054 0.0342 0.0000 +vt 0.8054 0.0293 0.0000 +vt 0.8167 0.0293 0.0000 +vt 0.8167 0.0342 0.0000 +vt 0.7942 0.0342 0.0000 +vt 0.7929 0.0342 0.0000 +vt 0.7929 0.0293 0.0000 +vt 0.7942 0.0293 0.0000 +vt 0.7915 0.0342 0.0000 +vt 0.7915 0.0293 0.0000 +vt 0.7891 0.0342 0.0000 +vt 0.7891 0.0293 0.0000 +vt 0.7874 0.0342 0.0000 +vt 0.7874 0.0293 0.0000 +vt 0.7858 0.0342 0.0000 +vt 0.7858 0.0293 0.0000 +vt 0.7843 0.0342 0.0000 +vt 0.7843 0.0293 0.0000 +vt 0.7832 0.0342 0.0000 +vt 0.7832 0.0293 0.0000 +vt 0.7784 0.2002 0.0000 +vt 0.7770 0.2002 0.0000 +vt 0.7770 0.1953 0.0000 +vt 0.7784 0.1953 0.0000 +vt 0.7753 0.2002 0.0000 +vt 0.7753 0.1953 0.0000 +vt 0.7736 0.2002 0.0000 +vt 0.7736 0.1953 0.0000 +vt 0.7721 0.2002 0.0000 +vt 0.7721 0.1953 0.0000 +vt 0.7707 0.2002 0.0000 +vt 0.7707 0.1953 0.0000 +vt 0.7688 0.2002 0.0000 +vt 0.7688 0.1953 0.0000 +vt 0.7621 0.2002 0.0000 +vt 0.7621 0.1953 0.0000 +vt 0.7575 0.2002 0.0000 +vt 0.7575 0.1953 0.0000 +vt 0.8474 0.2227 0.0000 +vt 0.8474 0.2180 0.0000 +vt 0.8523 0.2180 0.0000 +vt 0.8523 0.2227 0.0000 +vt 0.6383 0.0865 0.0000 +vt 0.6287 0.0865 0.0000 +vt 0.6287 0.0815 0.0000 +vt 0.6383 0.0815 0.0000 +vt 0.5922 0.0756 0.0000 +vt 0.6093 0.0756 0.0000 +vt 0.8635 0.1533 0.0000 +vt 0.8635 0.1585 0.0000 +vt 0.8054 0.0233 0.0000 +vt 0.8167 0.0233 0.0000 +vt 0.6483 0.0815 0.0000 +vt 0.6483 0.0756 0.0000 +vt 0.6605 0.0756 0.0000 +vt 0.6605 0.0815 0.0000 +vt 0.6287 0.0756 0.0000 +vt 0.6383 0.0756 0.0000 +vt 0.6530 0.2144 0.0000 +vt 0.6530 0.2295 0.0000 +vt 0.6402 0.2295 0.0000 +vt 0.6493 0.2144 0.0000 +vt 0.6287 0.0682 0.0000 +vt 0.6093 0.0657 0.0000 +vt 0.6106 0.0586 0.0000 +vt 0.6287 0.0570 0.0000 +vt 0.6383 0.0570 0.0000 +vt 0.6383 0.0682 0.0000 +vt 0.8418 0.0733 0.0000 +vt 0.8425 0.0746 0.0000 +vt 0.8296 0.0733 0.0000 +vt 0.8431 0.0761 0.0000 +vt 0.8434 0.0784 0.0000 +vt 0.8432 0.0801 0.0000 +vt 0.8426 0.0817 0.0000 +vt 0.8417 0.0832 0.0000 +vt 0.8405 0.0844 0.0000 +vt 0.8391 0.0853 0.0000 +vt 0.8375 0.0858 0.0000 +vt 0.8357 0.0860 0.0000 +vt 0.8343 0.0859 0.0000 +vt 0.8329 0.0855 0.0000 +vt 0.8310 0.0844 0.0000 +vt 0.8242 0.0822 0.0000 +vt 0.8197 0.0733 0.0000 +vt 0.8197 0.0780 0.0000 +vt 0.5922 0.0510 0.0000 +vt 0.5955 0.0495 0.0000 +vt 0.5922 0.0458 0.0000 +vt 0.5955 0.0458 0.0000 +vt 0.8090 0.1599 0.0000 +vt 0.8090 0.1481 0.0000 +vt 0.8267 0.1481 0.0000 +vt 0.8267 0.1599 0.0000 +vt 0.8733 0.1518 0.0000 +vt 0.8851 0.1518 0.0000 +vt 0.8851 0.1555 0.0000 +vt 0.8733 0.1555 0.0000 +vt 0.6902 0.1974 0.0000 +vt 0.6902 0.1856 0.0000 +vt 0.7030 0.1856 0.0000 +vt 0.7030 0.1974 0.0000 +vt 0.9584 0.0415 0.0000 +vt 0.9800 0.0415 0.0000 +vt 0.9800 0.0433 0.0000 +vt 0.9584 0.0433 0.0000 +vt 0.6504 0.1572 0.0000 +vt 0.6595 0.1572 0.0000 +vt 0.6595 0.1590 0.0000 +vt 0.6504 0.1590 0.0000 +vt 0.6902 0.1817 0.0000 +vt 0.7030 0.1817 0.0000 +vt 0.6369 0.2295 0.0000 +vt 0.6440 0.2091 0.0000 +vt 0.6869 0.1835 0.0000 +vt 0.6869 0.1817 0.0000 +vt 0.5769 0.2878 0.0000 +vt 0.5677 0.2726 0.0000 +vt 0.5730 0.2674 0.0000 +vt 0.5801 0.2878 0.0000 +vt 0.5640 0.2726 0.0000 +vt 0.5640 0.2674 0.0000 +vt 0.6530 0.2091 0.0000 +vt 0.6483 0.0682 0.0000 +vt 0.6483 0.0570 0.0000 +vt 0.7942 0.0233 0.0000 +vt 0.6287 0.0458 0.0000 +vt 0.6383 0.0458 0.0000 +vt 0.6605 0.0682 0.0000 +vt 0.6605 0.0570 0.0000 +vt 0.6106 0.0458 0.0000 +vt 0.6573 0.0491 0.0000 +vt 0.6562 0.0496 0.0000 +vt 0.6443 0.0491 0.0000 +vt 0.6435 0.0482 0.0000 +vt 0.6582 0.0482 0.0000 +vt 0.6588 0.0470 0.0000 +vt 0.6590 0.0458 0.0000 +vt 0.6605 0.0458 0.0000 +vt 0.6549 0.0498 0.0000 +vt 0.6468 0.0498 0.0000 +vt 0.6483 0.0498 0.0000 +vt 0.6455 0.0496 0.0000 +vt 0.6429 0.0470 0.0000 +vt 0.6427 0.0458 0.0000 +vt 0.6369 0.2661 0.0000 +vt 0.6369 0.2648 0.0000 +vt 0.6638 0.2648 0.0000 +vt 0.6638 0.2661 0.0000 +vt 0.6369 0.2636 0.0000 +vt 0.6638 0.2636 0.0000 +vt 0.6369 0.2628 0.0000 +vt 0.6638 0.2628 0.0000 +vt 0.6788 0.2230 0.0000 +vt 0.6788 0.2219 0.0000 +vt 0.7057 0.2219 0.0000 +vt 0.7057 0.2230 0.0000 +vt 0.6788 0.2206 0.0000 +vt 0.7057 0.2206 0.0000 +vt 0.6788 0.2139 0.0000 +vt 0.7057 0.2139 0.0000 +vt 0.6788 0.2124 0.0000 +vt 0.7057 0.2124 0.0000 +vt 0.6788 0.2111 0.0000 +vt 0.7057 0.2111 0.0000 +vt 0.6788 0.2100 0.0000 +vt 0.7057 0.2100 0.0000 +vt 0.6788 0.2091 0.0000 +vt 0.7057 0.2091 0.0000 +vt 0.5197 0.2296 0.0000 +vt 0.5197 0.2285 0.0000 +vt 0.5466 0.2285 0.0000 +vt 0.5466 0.2296 0.0000 +vt 0.5197 0.2272 0.0000 +vt 0.5466 0.2272 0.0000 +vt 0.6911 0.1590 0.0000 +vt 0.6911 0.1541 0.0000 +vt 0.7083 0.1541 0.0000 +vt 0.7083 0.1590 0.0000 +vt 0.8526 0.1481 0.0000 +vt 0.8575 0.1481 0.0000 +vt 0.8279 0.0342 0.0000 +vt 0.8279 0.0293 0.0000 +vt 0.8392 0.0342 0.0000 +vt 0.8392 0.0293 0.0000 +vt 0.8405 0.0293 0.0000 +vt 0.8405 0.0342 0.0000 +vt 0.8419 0.0293 0.0000 +vt 0.8419 0.0342 0.0000 +vt 0.8442 0.0293 0.0000 +vt 0.8442 0.0342 0.0000 +vt 0.8460 0.0293 0.0000 +vt 0.8460 0.0342 0.0000 +vt 0.8476 0.0293 0.0000 +vt 0.8476 0.0342 0.0000 +vt 0.8490 0.0293 0.0000 +vt 0.8490 0.0342 0.0000 +vt 0.8502 0.0293 0.0000 +vt 0.8502 0.0342 0.0000 +vt 0.5156 0.0455 0.0000 +vt 0.5205 0.0455 0.0000 +vt 0.5205 0.0469 0.0000 +vt 0.5156 0.0469 0.0000 +vt 0.5205 0.0486 0.0000 +vt 0.5156 0.0486 0.0000 +vt 0.5205 0.0503 0.0000 +vt 0.5156 0.0503 0.0000 +vt 0.5205 0.0518 0.0000 +vt 0.5156 0.0518 0.0000 +vt 0.5205 0.0532 0.0000 +vt 0.5156 0.0532 0.0000 +vt 0.5205 0.0551 0.0000 +vt 0.5156 0.0551 0.0000 +vt 0.5205 0.0618 0.0000 +vt 0.5156 0.0618 0.0000 +vt 0.5205 0.0664 0.0000 +vt 0.5156 0.0664 0.0000 +vt 0.1785 0.1049 0.0000 +vt 0.1834 0.1049 0.0000 +vt 0.1834 0.1096 0.0000 +vt 0.1785 0.1096 0.0000 +vt 0.6621 0.1590 0.0000 +vt 0.6621 0.1541 0.0000 +vt 0.6718 0.1541 0.0000 +vt 0.6718 0.1590 0.0000 +vt 0.6911 0.1481 0.0000 +vt 0.7083 0.1481 0.0000 +vt 0.8635 0.1481 0.0000 +vt 0.8279 0.0233 0.0000 +vt 0.6522 0.1541 0.0000 +vt 0.6400 0.1541 0.0000 +vt 0.6400 0.1481 0.0000 +vt 0.6522 0.1481 0.0000 +vt 0.6622 0.1481 0.0000 +vt 0.6717 0.1481 0.0000 +vt 0.6567 0.2144 0.0000 +vt 0.6658 0.2295 0.0000 +vt 0.6287 0.0233 0.0000 +vt 0.6287 0.0345 0.0000 +vt 0.6106 0.0329 0.0000 +vt 0.6093 0.0258 0.0000 +vt 0.6383 0.0233 0.0000 +vt 0.6383 0.0345 0.0000 +vt 0.7486 0.1944 0.0000 +vt 0.7364 0.1944 0.0000 +vt 0.7493 0.1931 0.0000 +vt 0.7498 0.1917 0.0000 +vt 0.7502 0.1894 0.0000 +vt 0.7500 0.1876 0.0000 +vt 0.7494 0.1860 0.0000 +vt 0.7485 0.1846 0.0000 +vt 0.7473 0.1834 0.0000 +vt 0.7459 0.1825 0.0000 +vt 0.7443 0.1819 0.0000 +vt 0.7425 0.1817 0.0000 +vt 0.7410 0.1818 0.0000 +vt 0.7396 0.1823 0.0000 +vt 0.7378 0.1833 0.0000 +vt 0.7310 0.1855 0.0000 +vt 0.7264 0.1944 0.0000 +vt 0.7264 0.1898 0.0000 +vt 0.5955 0.0421 0.0000 +vt 0.5922 0.0406 0.0000 +vt 0.1157 0.0872 0.0000 +vt 0.0980 0.0872 0.0000 +vt 0.0980 0.0754 0.0000 +vt 0.1157 0.0754 0.0000 +vt 0.8733 0.1481 0.0000 +vt 0.8851 0.1481 0.0000 +vt 0.7159 0.1974 0.0000 +vt 0.7159 0.1856 0.0000 +vt 0.5863 0.2301 0.0000 +vt 0.5863 0.2319 0.0000 +vt 0.5647 0.2319 0.0000 +vt 0.5647 0.2301 0.0000 +vt 0.6414 0.1590 0.0000 +vt 0.6414 0.1572 0.0000 +vt 0.7159 0.1817 0.0000 +vt 0.6620 0.2091 0.0000 +vt 0.6691 0.2295 0.0000 +vt 0.7191 0.1817 0.0000 +vt 0.7191 0.1835 0.0000 +vt 0.5512 0.2878 0.0000 +vt 0.5479 0.2878 0.0000 +vt 0.5550 0.2674 0.0000 +vt 0.5603 0.2726 0.0000 +vt 0.6483 0.0233 0.0000 +vt 0.6483 0.0345 0.0000 +vt 0.8392 0.0233 0.0000 +vt 0.6605 0.0233 0.0000 +vt 0.6605 0.0345 0.0000 +vt 0.6573 0.0425 0.0000 +vt 0.6562 0.0419 0.0000 +vt 0.6443 0.0425 0.0000 +vt 0.6435 0.0433 0.0000 +vt 0.6582 0.0433 0.0000 +vt 0.6588 0.0445 0.0000 +vt 0.6549 0.0417 0.0000 +vt 0.6468 0.0417 0.0000 +vt 0.6483 0.0417 0.0000 +vt 0.6455 0.0419 0.0000 +vt 0.6429 0.0445 0.0000 +vt 0.6638 0.2673 0.0000 +vt 0.6369 0.2673 0.0000 +vt 0.6638 0.2685 0.0000 +vt 0.6369 0.2685 0.0000 +vt 0.6638 0.2694 0.0000 +vt 0.6369 0.2694 0.0000 +vt 0.7962 0.1029 0.0000 +vt 0.8231 0.1029 0.0000 +vt 0.8231 0.1040 0.0000 +vt 0.7962 0.1040 0.0000 +vt 0.8231 0.1053 0.0000 +vt 0.7962 0.1053 0.0000 +vt 0.8231 0.1120 0.0000 +vt 0.7962 0.1120 0.0000 +vt 0.8231 0.1135 0.0000 +vt 0.7962 0.1135 0.0000 +vt 0.8231 0.1148 0.0000 +vt 0.7962 0.1148 0.0000 +vt 0.8231 0.1159 0.0000 +vt 0.7962 0.1159 0.0000 +vt 0.8231 0.1168 0.0000 +vt 0.7962 0.1168 0.0000 +vt 0.5197 0.2248 0.0000 +vt 0.5466 0.2248 0.0000 +vt 0.5466 0.2259 0.0000 +vt 0.5197 0.2259 0.0000 +vt 0.9188 0.3625 0.0000 +vt 0.9184 0.3651 0.0000 +vt 0.9168 0.3646 0.0000 +vt 0.9171 0.3625 0.0000 +vt 0.9172 0.3674 0.0000 +vt 0.9158 0.3664 0.0000 +vt 0.9154 0.3692 0.0000 +vt 0.9144 0.3678 0.0000 +vt 0.9131 0.3703 0.0000 +vt 0.9126 0.3687 0.0000 +vt 0.9105 0.3708 0.0000 +vt 0.9104 0.3691 0.0000 +vt 0.8971 0.3708 0.0000 +vt 0.8971 0.3691 0.0000 +vt 0.8940 0.3708 0.0000 +vt 0.8942 0.3691 0.0000 +vt 0.8914 0.3703 0.0000 +vt 0.8919 0.3687 0.0000 +vt 0.8891 0.3692 0.0000 +vt 0.8901 0.3678 0.0000 +vt 0.8873 0.3674 0.0000 +vt 0.8887 0.3664 0.0000 +vt 0.8862 0.3651 0.0000 +vt 0.8878 0.3646 0.0000 +vt 0.8857 0.3625 0.0000 +vt 0.8874 0.3625 0.0000 +vt 0.8862 0.3599 0.0000 +vt 0.8878 0.3604 0.0000 +vt 0.8873 0.3576 0.0000 +vt 0.8887 0.3586 0.0000 +vt 0.8891 0.3558 0.0000 +vt 0.8901 0.3572 0.0000 +vt 0.8914 0.3546 0.0000 +vt 0.8919 0.3562 0.0000 +vt 0.8940 0.3542 0.0000 +vt 0.8942 0.3559 0.0000 +vt 0.8971 0.3542 0.0000 +vt 0.8971 0.3559 0.0000 +vt 0.9105 0.3542 0.0000 +vt 0.9104 0.3559 0.0000 +vt 0.9131 0.3546 0.0000 +vt 0.9126 0.3562 0.0000 +vt 0.9154 0.3558 0.0000 +vt 0.9144 0.3572 0.0000 +vt 0.9172 0.3576 0.0000 +vt 0.9158 0.3586 0.0000 +vt 0.9184 0.3599 0.0000 +vt 0.9168 0.3604 0.0000 +vt 0.9055 0.3775 0.0000 +vt 0.9034 0.3775 0.0000 +vt 0.9034 0.3752 0.0000 +vt 0.9055 0.3752 0.0000 +vt 0.9016 0.3775 0.0000 +vt 0.9016 0.3752 0.0000 +vt 0.9115 0.4001 0.0000 +vt 0.9100 0.4001 0.0000 +vt 0.9100 0.3979 0.0000 +vt 0.9115 0.3979 0.0000 +vt 0.9082 0.4001 0.0000 +vt 0.9082 0.3979 0.0000 +vt 0.9060 0.4001 0.0000 +vt 0.9060 0.3979 0.0000 +vt 0.8927 0.4001 0.0000 +vt 0.8927 0.3979 0.0000 +vt 0.8898 0.4001 0.0000 +vt 0.8898 0.3979 0.0000 +vt 0.8875 0.4001 0.0000 +vt 0.8875 0.3979 0.0000 +vt 0.8857 0.4001 0.0000 +vt 0.8857 0.3979 0.0000 +vt 0.9094 0.3801 0.0000 +vt 0.9080 0.3801 0.0000 +vt 0.9080 0.3778 0.0000 +vt 0.9094 0.3778 0.0000 +vt 0.9062 0.3801 0.0000 +vt 0.9062 0.3778 0.0000 +vt 0.9041 0.3801 0.0000 +vt 0.9041 0.3778 0.0000 +vt 0.9020 0.3801 0.0000 +vt 0.9020 0.3778 0.0000 +vt 0.9002 0.3801 0.0000 +vt 0.9002 0.3778 0.0000 +vt 0.8988 0.3801 0.0000 +vt 0.8988 0.3778 0.0000 +vt 0.9115 0.4035 0.0000 +vt 0.9097 0.4035 0.0000 +vt 0.9097 0.4013 0.0000 +vt 0.9115 0.4013 0.0000 +vt 0.9074 0.4035 0.0000 +vt 0.9074 0.4013 0.0000 +vt 0.9045 0.4035 0.0000 +vt 0.9045 0.4013 0.0000 +vt 0.8912 0.4035 0.0000 +vt 0.8912 0.4013 0.0000 +vt 0.8890 0.4035 0.0000 +vt 0.8890 0.4013 0.0000 +vt 0.8872 0.4035 0.0000 +vt 0.8872 0.4013 0.0000 +vt 0.8857 0.4035 0.0000 +vt 0.8857 0.4013 0.0000 +vt 0.9094 0.3775 0.0000 +vt 0.9076 0.3775 0.0000 +vt 0.9076 0.3752 0.0000 +vt 0.9094 0.3752 0.0000 +vt 0.9154 0.3785 0.0000 +vt 0.9151 0.3806 0.0000 +vt 0.9135 0.3801 0.0000 +vt 0.9138 0.3785 0.0000 +vt 0.9142 0.3824 0.0000 +vt 0.9128 0.3814 0.0000 +vt 0.9127 0.3839 0.0000 +vt 0.9117 0.3825 0.0000 +vt 0.9109 0.3848 0.0000 +vt 0.9104 0.3832 0.0000 +vt 0.9087 0.3852 0.0000 +vt 0.9086 0.3835 0.0000 +vt 0.8954 0.3852 0.0000 +vt 0.8954 0.3835 0.0000 +vt 0.8925 0.3852 0.0000 +vt 0.8926 0.3835 0.0000 +vt 0.8903 0.3848 0.0000 +vt 0.8908 0.3832 0.0000 +vt 0.8884 0.3839 0.0000 +vt 0.8894 0.3825 0.0000 +vt 0.8870 0.3824 0.0000 +vt 0.8884 0.3814 0.0000 +vt 0.8861 0.3806 0.0000 +vt 0.8877 0.3801 0.0000 +vt 0.8857 0.3785 0.0000 +vt 0.8874 0.3785 0.0000 +vt 0.8861 0.3765 0.0000 +vt 0.8877 0.3770 0.0000 +vt 0.8870 0.3746 0.0000 +vt 0.8884 0.3756 0.0000 +vt 0.8884 0.3732 0.0000 +vt 0.8894 0.3746 0.0000 +vt 0.8903 0.3723 0.0000 +vt 0.8908 0.3739 0.0000 +vt 0.8925 0.3719 0.0000 +vt 0.8926 0.3736 0.0000 +vt 0.8954 0.3719 0.0000 +vt 0.8954 0.3736 0.0000 +vt 0.9087 0.3719 0.0000 +vt 0.9086 0.3736 0.0000 +vt 0.9109 0.3723 0.0000 +vt 0.9104 0.3739 0.0000 +vt 0.9127 0.3732 0.0000 +vt 0.9117 0.3746 0.0000 +vt 0.9142 0.3746 0.0000 +vt 0.9128 0.3756 0.0000 +vt 0.9151 0.3765 0.0000 +vt 0.9135 0.3770 0.0000 +vt 0.8970 0.3755 0.0000 +vt 0.8986 0.3755 0.0000 +vt 0.8986 0.3775 0.0000 +vt 0.8970 0.3775 0.0000 +vt 0.9000 0.3755 0.0000 +vt 0.9000 0.3775 0.0000 +vt 0.9012 0.3755 0.0000 +vt 0.9012 0.3775 0.0000 +vt 0.8928 0.3652 0.0000 +vt 0.8944 0.3652 0.0000 +vt 0.8944 0.3672 0.0000 +vt 0.8928 0.3672 0.0000 +vt 0.8961 0.3652 0.0000 +vt 0.8961 0.3672 0.0000 +vt 0.9078 0.3652 0.0000 +vt 0.9078 0.3672 0.0000 +vt 0.9103 0.3652 0.0000 +vt 0.9103 0.3672 0.0000 +vt 0.9118 0.3652 0.0000 +vt 0.9118 0.3672 0.0000 +vt 0.9094 0.3606 0.0000 +vt 0.9094 0.3622 0.0000 +vt 0.9074 0.3622 0.0000 +vt 0.9074 0.3606 0.0000 +vt 0.9094 0.3636 0.0000 +vt 0.9074 0.3636 0.0000 +vt 0.9094 0.3648 0.0000 +vt 0.9074 0.3648 0.0000 +vt 0.9118 0.3605 0.0000 +vt 0.9118 0.3621 0.0000 +vt 0.9098 0.3621 0.0000 +vt 0.9098 0.3605 0.0000 +vt 0.9118 0.3636 0.0000 +vt 0.9098 0.3636 0.0000 +vt 0.9118 0.3648 0.0000 +vt 0.9098 0.3648 0.0000 +vt 0.8937 0.3804 0.0000 +vt 0.8952 0.3804 0.0000 +vt 0.8952 0.3824 0.0000 +vt 0.8937 0.3824 0.0000 +vt 0.8966 0.3804 0.0000 +vt 0.8966 0.3824 0.0000 +vt 0.8981 0.3804 0.0000 +vt 0.8981 0.3824 0.0000 +vt 0.9001 0.3804 0.0000 +vt 0.9001 0.3824 0.0000 +vt 0.9094 0.3804 0.0000 +vt 0.9094 0.3824 0.0000 +vt 0.8939 0.3781 0.0000 +vt 0.8957 0.3781 0.0000 +vt 0.8957 0.3801 0.0000 +vt 0.8939 0.3801 0.0000 +vt 0.8972 0.3781 0.0000 +vt 0.8972 0.3801 0.0000 +vt 0.8984 0.3781 0.0000 +vt 0.8984 0.3801 0.0000 +vt 0.8943 0.3755 0.0000 +vt 0.8955 0.3755 0.0000 +vt 0.8955 0.3775 0.0000 +vt 0.8943 0.3775 0.0000 +vt 0.9121 0.3920 0.0000 +vt 0.9118 0.3935 0.0000 +vt 0.8983 0.3915 0.0000 +vt 0.9110 0.3948 0.0000 +vt 0.9099 0.3959 0.0000 +vt 0.9086 0.3965 0.0000 +vt 0.9067 0.3968 0.0000 +vt 0.8935 0.3963 0.0000 +vt 0.8908 0.3962 0.0000 +vt 0.8889 0.3959 0.0000 +vt 0.8876 0.3951 0.0000 +vt 0.8866 0.3940 0.0000 +vt 0.8859 0.3927 0.0000 +vt 0.8857 0.3911 0.0000 +vt 0.8860 0.3896 0.0000 +vt 0.8868 0.3882 0.0000 +vt 0.8879 0.3872 0.0000 +vt 0.8892 0.3866 0.0000 +vt 0.8911 0.3863 0.0000 +vt 0.8938 0.3864 0.0000 +vt 0.9070 0.3868 0.0000 +vt 0.9089 0.3872 0.0000 +vt 0.9102 0.3879 0.0000 +vt 0.9112 0.3890 0.0000 +vt 0.9119 0.3904 0.0000 +vt 0.9011 0.1407 0.0000 +vt 0.8995 0.1407 0.0000 +vt 0.8995 0.1369 0.0000 +vt 0.9011 0.1369 0.0000 +vt 0.2060 0.1662 0.0000 +vt 0.2060 0.1646 0.0000 +vt 0.2098 0.1646 0.0000 +vt 0.2098 0.1662 0.0000 +vt 0.2060 0.1632 0.0000 +vt 0.2098 0.1632 0.0000 +vt 0.2476 0.1266 0.0000 +vt 0.2476 0.1249 0.0000 +vt 0.2514 0.1249 0.0000 +vt 0.2514 0.1266 0.0000 +vt 0.2476 0.1235 0.0000 +vt 0.2514 0.1235 0.0000 +vt 0.8463 0.0267 0.0000 +vt 0.8463 0.0251 0.0000 +vt 0.8502 0.0251 0.0000 +vt 0.8502 0.0267 0.0000 +vt 0.8463 0.0235 0.0000 +vt 0.8502 0.0235 0.0000 +vt 0.1785 0.1717 0.0000 +vt 0.1785 0.1701 0.0000 +vt 0.1824 0.1701 0.0000 +vt 0.1824 0.1717 0.0000 +vt 0.1785 0.1687 0.0000 +vt 0.1824 0.1687 0.0000 +vt 0.9303 0.2899 0.0000 +vt 0.9303 0.2883 0.0000 +vt 0.9342 0.2883 0.0000 +vt 0.9342 0.2899 0.0000 +vt 0.9039 0.1407 0.0000 +vt 0.9027 0.1407 0.0000 +vt 0.9027 0.1369 0.0000 +vt 0.9039 0.1369 0.0000 +vt 0.1808 0.0893 0.0000 +vt 0.1823 0.0893 0.0000 +vt 0.1820 0.0906 0.0000 +vt 0.1812 0.0906 0.0000 +vt 0.1795 0.0900 0.0000 +vt 0.1804 0.0910 0.0000 +vt 0.1787 0.0914 0.0000 +vt 0.1800 0.0917 0.0000 +vt 0.1787 0.0929 0.0000 +vt 0.1800 0.0925 0.0000 +vt 0.1795 0.0942 0.0000 +vt 0.1804 0.0932 0.0000 +vt 0.1808 0.0950 0.0000 +vt 0.1811 0.0937 0.0000 +vt 0.1823 0.0950 0.0000 +vt 0.1819 0.0937 0.0000 +vt 0.1836 0.0942 0.0000 +vt 0.1827 0.0933 0.0000 +vt 0.1844 0.0929 0.0000 +vt 0.1831 0.0926 0.0000 +vt 0.1844 0.0914 0.0000 +vt 0.1831 0.0917 0.0000 +vt 0.1836 0.0901 0.0000 +vt 0.1827 0.0910 0.0000 +vt 0.2071 0.1760 0.0000 +vt 0.2079 0.1760 0.0000 +vt 0.2075 0.1775 0.0000 +vt 0.2064 0.1764 0.0000 +vt 0.2060 0.1771 0.0000 +vt 0.2060 0.1779 0.0000 +vt 0.2064 0.1786 0.0000 +vt 0.2071 0.1790 0.0000 +vt 0.2079 0.1790 0.0000 +vt 0.2086 0.1786 0.0000 +vt 0.2090 0.1779 0.0000 +vt 0.2090 0.1771 0.0000 +vt 0.2086 0.1764 0.0000 +vt 0.1189 0.1836 0.0000 +vt 0.1202 0.1843 0.0000 +vt 0.1195 0.1851 0.0000 +vt 0.1186 0.1846 0.0000 +vt 0.1210 0.1857 0.0000 +vt 0.1200 0.1859 0.0000 +vt 0.1210 0.1872 0.0000 +vt 0.1200 0.1869 0.0000 +vt 0.1202 0.1885 0.0000 +vt 0.1195 0.1877 0.0000 +vt 0.1189 0.1892 0.0000 +vt 0.1186 0.1882 0.0000 +vt 0.1174 0.1892 0.0000 +vt 0.1177 0.1882 0.0000 +vt 0.1161 0.1885 0.0000 +vt 0.1168 0.1877 0.0000 +vt 0.1153 0.1871 0.0000 +vt 0.1163 0.1869 0.0000 +vt 0.1153 0.1856 0.0000 +vt 0.1163 0.1859 0.0000 +vt 0.1161 0.1843 0.0000 +vt 0.1168 0.1851 0.0000 +vt 0.1174 0.1836 0.0000 +vt 0.1177 0.1846 0.0000 +vt 0.1182 0.1864 0.0000 +vt 0.1824 0.0891 0.0000 +vt 0.1808 0.0891 0.0000 +vt 0.1204 0.1842 0.0000 +vt 0.1190 0.1833 0.0000 +vt 0.1793 0.0899 0.0000 +vt 0.1212 0.1856 0.0000 +vt 0.1785 0.0913 0.0000 +vt 0.1212 0.1872 0.0000 +vt 0.1785 0.0929 0.0000 +vt 0.1204 0.1886 0.0000 +vt 0.1793 0.0944 0.0000 +vt 0.1189 0.1894 0.0000 +vt 0.1807 0.0952 0.0000 +vt 0.1173 0.1894 0.0000 +vt 0.1823 0.0952 0.0000 +vt 0.1159 0.1886 0.0000 +vt 0.1838 0.0944 0.0000 +vt 0.1151 0.1872 0.0000 +vt 0.1846 0.0930 0.0000 +vt 0.1151 0.1856 0.0000 +vt 0.1846 0.0913 0.0000 +vt 0.1159 0.1841 0.0000 +vt 0.1838 0.0899 0.0000 +vt 0.1174 0.1833 0.0000 +vt 0.5734 0.0648 0.0000 +vt 0.5734 0.0656 0.0000 +vt 0.5725 0.0656 0.0000 +vt 0.5725 0.0648 0.0000 +vt 0.5734 0.0664 0.0000 +vt 0.5725 0.0664 0.0000 +vt 0.3940 0.2095 0.0000 +vt 0.3948 0.2095 0.0000 +vt 0.3948 0.2104 0.0000 +vt 0.3940 0.2104 0.0000 +vt 0.3956 0.2095 0.0000 +vt 0.3956 0.2104 0.0000 +vt 0.4262 0.2107 0.0000 +vt 0.4270 0.2107 0.0000 +vt 0.4270 0.2116 0.0000 +vt 0.4262 0.2116 0.0000 +vt 0.4277 0.2107 0.0000 +vt 0.4277 0.2116 0.0000 +vt 0.2612 0.2247 0.0000 +vt 0.2620 0.2247 0.0000 +vt 0.2620 0.2256 0.0000 +vt 0.2612 0.2256 0.0000 +vt 0.2628 0.2247 0.0000 +vt 0.2628 0.2256 0.0000 +vt 0.3466 0.0693 0.0000 +vt 0.3474 0.0693 0.0000 +vt 0.3474 0.0703 0.0000 +vt 0.3466 0.0703 0.0000 +vt 0.3481 0.0693 0.0000 +vt 0.3481 0.0703 0.0000 +vt 0.4067 0.2286 0.0000 +vt 0.4075 0.2286 0.0000 +vt 0.4075 0.2295 0.0000 +vt 0.4067 0.2295 0.0000 +vt 0.4082 0.2286 0.0000 +vt 0.4082 0.2295 0.0000 +vt 0.8805 0.2922 0.0000 +vt 0.8789 0.2922 0.0000 +vt 0.8789 0.2883 0.0000 +vt 0.8805 0.2883 0.0000 +vt 0.8778 0.2922 0.0000 +vt 0.8778 0.2883 0.0000 +vt 0.2198 0.1530 0.0000 +vt 0.2198 0.1514 0.0000 +vt 0.2237 0.1514 0.0000 +vt 0.2237 0.1530 0.0000 +vt 0.2198 0.1500 0.0000 +vt 0.2237 0.1500 0.0000 +vt 0.3813 0.1483 0.0000 +vt 0.3813 0.1467 0.0000 +vt 0.3852 0.1467 0.0000 +vt 0.3852 0.1483 0.0000 +vt 0.7873 0.0267 0.0000 +vt 0.7873 0.0251 0.0000 +vt 0.7911 0.0251 0.0000 +vt 0.7911 0.0267 0.0000 +vt 0.7873 0.0235 0.0000 +vt 0.7911 0.0235 0.0000 +vt 0.1614 0.1883 0.0000 +vt 0.1614 0.1867 0.0000 +vt 0.1653 0.1867 0.0000 +vt 0.1653 0.1883 0.0000 +vt 0.1614 0.1852 0.0000 +vt 0.1653 0.1852 0.0000 +vt 0.2337 0.1398 0.0000 +vt 0.2337 0.1382 0.0000 +vt 0.2376 0.1382 0.0000 +vt 0.2376 0.1398 0.0000 +vt 0.2337 0.1367 0.0000 +vt 0.2376 0.1367 0.0000 +vt 0.8821 0.2922 0.0000 +vt 0.8821 0.2883 0.0000 +vt 0.1004 0.2001 0.0000 +vt 0.1019 0.2001 0.0000 +vt 0.1015 0.2014 0.0000 +vt 0.1007 0.2014 0.0000 +vt 0.0990 0.2008 0.0000 +vt 0.1000 0.2018 0.0000 +vt 0.0983 0.2021 0.0000 +vt 0.0996 0.2025 0.0000 +vt 0.0983 0.2036 0.0000 +vt 0.0996 0.2033 0.0000 +vt 0.0990 0.2049 0.0000 +vt 0.1000 0.2040 0.0000 +vt 0.1003 0.2057 0.0000 +vt 0.1007 0.2044 0.0000 +vt 0.1018 0.2057 0.0000 +vt 0.1015 0.2044 0.0000 +vt 0.1032 0.2050 0.0000 +vt 0.1022 0.2040 0.0000 +vt 0.1039 0.2037 0.0000 +vt 0.1026 0.2033 0.0000 +vt 0.1039 0.2022 0.0000 +vt 0.1026 0.2025 0.0000 +vt 0.1032 0.2008 0.0000 +vt 0.1022 0.2018 0.0000 +vt 0.2210 0.1628 0.0000 +vt 0.2218 0.1628 0.0000 +vt 0.2214 0.1643 0.0000 +vt 0.2202 0.1632 0.0000 +vt 0.2198 0.1639 0.0000 +vt 0.2198 0.1647 0.0000 +vt 0.2202 0.1654 0.0000 +vt 0.2209 0.1658 0.0000 +vt 0.2218 0.1658 0.0000 +vt 0.2225 0.1654 0.0000 +vt 0.2229 0.1647 0.0000 +vt 0.2229 0.1639 0.0000 +vt 0.2225 0.1632 0.0000 +vt 0.0366 0.2200 0.0000 +vt 0.0379 0.2208 0.0000 +vt 0.0372 0.2216 0.0000 +vt 0.0363 0.2211 0.0000 +vt 0.0387 0.2221 0.0000 +vt 0.0376 0.2224 0.0000 +vt 0.0386 0.2236 0.0000 +vt 0.0376 0.2234 0.0000 +vt 0.0379 0.2250 0.0000 +vt 0.0371 0.2242 0.0000 +vt 0.0366 0.2257 0.0000 +vt 0.0363 0.2247 0.0000 +vt 0.0350 0.2257 0.0000 +vt 0.0353 0.2247 0.0000 +vt 0.0337 0.2249 0.0000 +vt 0.0345 0.2242 0.0000 +vt 0.0330 0.2236 0.0000 +vt 0.0340 0.2233 0.0000 +vt 0.0330 0.2221 0.0000 +vt 0.0340 0.2224 0.0000 +vt 0.0338 0.2208 0.0000 +vt 0.0345 0.2215 0.0000 +vt 0.0351 0.2200 0.0000 +vt 0.0353 0.2211 0.0000 +vt 0.0358 0.2229 0.0000 +vt 0.1019 0.1998 0.0000 +vt 0.1003 0.1998 0.0000 +vt 0.0381 0.2206 0.0000 +vt 0.0367 0.2198 0.0000 +vt 0.0989 0.2006 0.0000 +vt 0.0389 0.2221 0.0000 +vt 0.0980 0.2021 0.0000 +vt 0.0389 0.2237 0.0000 +vt 0.0980 0.2037 0.0000 +vt 0.0380 0.2251 0.0000 +vt 0.0988 0.2051 0.0000 +vt 0.0366 0.2259 0.0000 +vt 0.1003 0.2059 0.0000 +vt 0.0350 0.2259 0.0000 +vt 0.1019 0.2059 0.0000 +vt 0.0336 0.2251 0.0000 +vt 0.1033 0.2051 0.0000 +vt 0.0328 0.2237 0.0000 +vt 0.1041 0.2037 0.0000 +vt 0.0328 0.2220 0.0000 +vt 0.1042 0.2021 0.0000 +vt 0.0336 0.2206 0.0000 +vt 0.1033 0.2007 0.0000 +vt 0.0350 0.2198 0.0000 +vt 0.5734 0.0441 0.0000 +vt 0.5734 0.0449 0.0000 +vt 0.5725 0.0449 0.0000 +vt 0.5725 0.0441 0.0000 +vt 0.5734 0.0457 0.0000 +vt 0.5725 0.0457 0.0000 +vt 0.3810 0.2215 0.0000 +vt 0.3819 0.2215 0.0000 +vt 0.3819 0.2225 0.0000 +vt 0.3810 0.2225 0.0000 +vt 0.3826 0.2215 0.0000 +vt 0.3826 0.2225 0.0000 +vt 0.9219 0.2791 0.0000 +vt 0.9227 0.2791 0.0000 +vt 0.9227 0.2801 0.0000 +vt 0.9219 0.2801 0.0000 +vt 0.9234 0.2791 0.0000 +vt 0.9234 0.2801 0.0000 +vt 0.2997 0.1872 0.0000 +vt 0.3004 0.1872 0.0000 +vt 0.3004 0.1882 0.0000 +vt 0.2997 0.1882 0.0000 +vt 0.3012 0.1872 0.0000 +vt 0.3012 0.1882 0.0000 +vt 0.4515 0.1810 0.0000 +vt 0.4523 0.1810 0.0000 +vt 0.4523 0.1820 0.0000 +vt 0.4515 0.1820 0.0000 +vt 0.4530 0.1810 0.0000 +vt 0.4530 0.1820 0.0000 +vt 0.4166 0.2196 0.0000 +vt 0.4174 0.2196 0.0000 +vt 0.4174 0.2205 0.0000 +vt 0.4166 0.2205 0.0000 +vt 0.4181 0.2196 0.0000 +vt 0.4181 0.2205 0.0000 +vt 0.8265 0.1819 0.0000 +vt 0.8579 0.1817 0.0000 +vt 0.8578 0.1821 0.0000 +vt 0.8264 0.1823 0.0000 +vt 0.9402 0.1040 0.0000 +vt 0.9077 0.1039 0.0000 +vt 0.9078 0.1035 0.0000 +vt 0.9403 0.1036 0.0000 +vt 0.9401 0.1043 0.0000 +vt 0.9077 0.1042 0.0000 +vt 0.6578 0.2896 0.0000 +vt 0.6892 0.2887 0.0000 +vt 0.6893 0.2890 0.0000 +vt 0.6579 0.2899 0.0000 +vt 0.6577 0.2892 0.0000 +vt 0.6891 0.2883 0.0000 +vt 0.0523 0.0872 0.0000 +vt 0.0847 0.0859 0.0000 +vt 0.0849 0.0863 0.0000 +vt 0.0524 0.0875 0.0000 +vt 0.0522 0.0869 0.0000 +vt 0.0847 0.0856 0.0000 +vt 0.8577 0.1824 0.0000 +vt 0.8263 0.1827 0.0000 +vt 0.4358 0.2209 0.0000 +vt 0.4361 0.2212 0.0000 +vt 0.4359 0.2213 0.0000 +vt 0.4357 0.2211 0.0000 +vt 0.4354 0.2209 0.0000 +vt 0.4355 0.2211 0.0000 +vt 0.4351 0.2212 0.0000 +vt 0.4354 0.2213 0.0000 +vt 0.4351 0.2216 0.0000 +vt 0.4354 0.2215 0.0000 +vt 0.4354 0.2219 0.0000 +vt 0.4355 0.2216 0.0000 +vt 0.4358 0.2219 0.0000 +vt 0.4357 0.2216 0.0000 +vt 0.4361 0.2216 0.0000 +vt 0.4359 0.2215 0.0000 +vt 0.4356 0.2214 0.0000 +vt 0.1238 0.0997 0.0000 +vt 0.1241 0.0999 0.0000 +vt 0.1238 0.1003 0.0000 +vt 0.1250 0.1003 0.0000 +vt 0.1234 0.1006 0.0000 +vt 0.1232 0.1003 0.0000 +vt 0.1234 0.0999 0.0000 +vt 0.8597 0.1822 0.0000 +vt 0.8596 0.1825 0.0000 +vt 0.9060 0.1033 0.0000 +vt 0.9062 0.1029 0.0000 +vt 0.0864 0.0852 0.0000 +vt 0.0865 0.0856 0.0000 +vt 0.5646 0.2806 0.0000 +vt 0.5646 0.2810 0.0000 +vt 0.5628 0.2810 0.0000 +vt 0.5628 0.2806 0.0000 +vt 0.8595 0.1829 0.0000 +vt 0.7295 0.2628 0.0000 +vt 0.7636 0.2628 0.0000 +vt 0.7636 0.2633 0.0000 +vt 0.7295 0.2633 0.0000 +vt 0.0388 0.1788 0.0000 +vt 0.0729 0.1788 0.0000 +vt 0.0729 0.1794 0.0000 +vt 0.0388 0.1794 0.0000 +vt 0.0388 0.1784 0.0000 +vt 0.0729 0.1784 0.0000 +vt 0.0157 0.1921 0.0000 +vt 0.0498 0.1921 0.0000 +vt 0.0498 0.1926 0.0000 +vt 0.0157 0.1926 0.0000 +vt 0.7220 0.0938 0.0000 +vt 0.7216 0.0933 0.0000 +vt 0.7219 0.0932 0.0000 +vt 0.7221 0.0934 0.0000 +vt 0.7226 0.0938 0.0000 +vt 0.7224 0.0934 0.0000 +vt 0.7230 0.0934 0.0000 +vt 0.7226 0.0932 0.0000 +vt 0.7230 0.0928 0.0000 +vt 0.7226 0.0929 0.0000 +vt 0.7223 0.0931 0.0000 +vt 0.1250 0.1025 0.0000 +vt 0.1245 0.1023 0.0000 +vt 0.1247 0.1011 0.0000 +vt 0.1250 0.1012 0.0000 +vt 0.1246 0.1008 0.0000 +vt 0.1247 0.1005 0.0000 +vt 0.1250 0.1004 0.0000 +vt 0.7654 0.2628 0.0000 +vt 0.7654 0.2633 0.0000 +vt 0.3821 0.2391 0.0000 +vt 0.3817 0.2389 0.0000 +vt 0.3816 0.2383 0.0000 +vt 0.3821 0.2380 0.0000 +vt 0.3813 0.2390 0.0000 +vt 0.3810 0.2380 0.0000 +vt 0.7987 0.1624 0.0000 +vt 0.7990 0.1621 0.0000 +vt 0.7989 0.1640 0.0000 +vt 0.7988 0.1634 0.0000 +vt 0.0873 0.0873 0.0000 +vt 0.0857 0.0880 0.0000 +vt 0.7677 0.2113 0.0000 +vt 0.7676 0.2110 0.0000 +vt 0.7990 0.2100 0.0000 +vt 0.7991 0.2104 0.0000 +vt 0.8614 0.1033 0.0000 +vt 0.8613 0.1029 0.0000 +vt 0.8937 0.1041 0.0000 +vt 0.8939 0.1045 0.0000 +vt 0.8615 0.1036 0.0000 +vt 0.8939 0.1048 0.0000 +vt 0.9467 0.0581 0.0000 +vt 0.9468 0.0577 0.0000 +vt 0.9782 0.0575 0.0000 +vt 0.9781 0.0578 0.0000 +vt 0.9466 0.0584 0.0000 +vt 0.9780 0.0582 0.0000 +vt 0.0507 0.1508 0.0000 +vt 0.0506 0.1512 0.0000 +vt 0.0181 0.1511 0.0000 +vt 0.0182 0.1507 0.0000 +vt 0.0508 0.1505 0.0000 +vt 0.0183 0.1504 0.0000 +vt 0.7675 0.2106 0.0000 +vt 0.7988 0.2097 0.0000 +vt 0.4610 0.1810 0.0000 +vt 0.4609 0.1813 0.0000 +vt 0.4607 0.1813 0.0000 +vt 0.4606 0.1810 0.0000 +vt 0.4613 0.1813 0.0000 +vt 0.4611 0.1814 0.0000 +vt 0.4613 0.1817 0.0000 +vt 0.4611 0.1816 0.0000 +vt 0.4610 0.1820 0.0000 +vt 0.4609 0.1818 0.0000 +vt 0.4606 0.1820 0.0000 +vt 0.4607 0.1818 0.0000 +vt 0.4603 0.1817 0.0000 +vt 0.4606 0.1816 0.0000 +vt 0.4603 0.1813 0.0000 +vt 0.4606 0.1814 0.0000 +vt 0.4608 0.1815 0.0000 +vt 0.1263 0.0997 0.0000 +vt 0.1263 0.1003 0.0000 +vt 0.1259 0.0999 0.0000 +vt 0.1266 0.1006 0.0000 +vt 0.1268 0.1003 0.0000 +vt 0.1266 0.0999 0.0000 +vt 0.8007 0.2095 0.0000 +vt 0.8008 0.2098 0.0000 +vt 0.8954 0.1036 0.0000 +vt 0.8956 0.1040 0.0000 +vt 0.0164 0.1505 0.0000 +vt 0.0165 0.1501 0.0000 +vt 0.5632 0.2773 0.0000 +vt 0.5650 0.2773 0.0000 +vt 0.5650 0.2777 0.0000 +vt 0.5632 0.2777 0.0000 +vt 0.8006 0.2091 0.0000 +vt 0.7295 0.2638 0.0000 +vt 0.7636 0.2638 0.0000 +vt 0.8949 0.1487 0.0000 +vt 0.8949 0.1481 0.0000 +vt 0.9290 0.1481 0.0000 +vt 0.9290 0.1487 0.0000 +vt 0.8949 0.1491 0.0000 +vt 0.9290 0.1491 0.0000 +vt 0.0157 0.1916 0.0000 +vt 0.0498 0.1916 0.0000 +vt 0.7216 0.0928 0.0000 +vt 0.7219 0.0929 0.0000 +vt 0.7220 0.0924 0.0000 +vt 0.7221 0.0927 0.0000 +vt 0.7226 0.0924 0.0000 +vt 0.7224 0.0927 0.0000 +vt 0.1253 0.1011 0.0000 +vt 0.1255 0.1023 0.0000 +vt 0.1254 0.1008 0.0000 +vt 0.1253 0.1005 0.0000 +vt 0.7654 0.2638 0.0000 +vt 0.9806 0.1984 0.0000 +vt 0.9805 0.1994 0.0000 +vt 0.9800 0.1992 0.0000 +vt 0.9802 0.1986 0.0000 +vt 0.9795 0.1994 0.0000 +vt 0.9798 0.1984 0.0000 +vt 0.1198 0.0640 0.0000 +vt 0.1197 0.0650 0.0000 +vt 0.1196 0.0656 0.0000 +vt 0.1196 0.0636 0.0000 +vt 0.0174 0.1529 0.0000 +vt 0.0157 0.1523 0.0000 +vt 0.8215 0.1397 0.0000 +vt 0.8221 0.1397 0.0000 +vt 0.8221 0.1405 0.0000 +vt 0.8215 0.1405 0.0000 +vt 0.5170 0.1332 0.0000 +vt 0.5152 0.1332 0.0000 +vt 0.5152 0.1325 0.0000 +vt 0.5170 0.1325 0.0000 +vt 0.5219 0.1332 0.0000 +vt 0.5219 0.1325 0.0000 +vt 0.8254 0.1397 0.0000 +vt 0.8254 0.1405 0.0000 +vt 0.9742 0.1151 0.0000 +vt 0.9773 0.1151 0.0000 +vt 0.9773 0.1159 0.0000 +vt 0.9742 0.1159 0.0000 +vt 0.9073 0.1048 0.0000 +vt 0.9057 0.1042 0.0000 +vt 0.5120 0.1332 0.0000 +vt 0.5120 0.1325 0.0000 +vt 0.8196 0.1397 0.0000 +vt 0.8202 0.1397 0.0000 +vt 0.8202 0.1405 0.0000 +vt 0.8196 0.1405 0.0000 +vt 0.7892 0.1999 0.0000 +vt 0.7910 0.1999 0.0000 +vt 0.7910 0.2007 0.0000 +vt 0.7892 0.2007 0.0000 +vt 0.7959 0.1999 0.0000 +vt 0.7959 0.2007 0.0000 +vt 0.8164 0.1397 0.0000 +vt 0.8164 0.1405 0.0000 +vt 0.9804 0.1151 0.0000 +vt 0.9804 0.1159 0.0000 +vt 0.8942 0.1054 0.0000 +vt 0.8959 0.1048 0.0000 +vt 0.7860 0.1999 0.0000 +vt 0.7860 0.2007 0.0000 +vt 0.1250 0.0999 0.0000 +vt 0.8209 0.1405 0.0000 +vt 0.8209 0.1397 0.0000 +vt 0.1046 0.1213 0.0000 +vt 0.1039 0.1213 0.0000 +vt 0.1039 0.1210 0.0000 +vt 0.1048 0.1210 0.0000 +vt 0.1039 0.1221 0.0000 +vt 0.1032 0.1213 0.0000 +vt 0.1030 0.1210 0.0000 +vt 0.7867 0.1607 0.0000 +vt 0.7924 0.1532 0.0000 +vt 0.7927 0.1531 0.0000 +vt 0.7867 0.1610 0.0000 +vt 0.1238 0.0945 0.0000 +vt 0.1244 0.0945 0.0000 +vt 0.1205 0.0945 0.0000 +vt 0.1191 0.1003 0.0000 +vt 0.1198 0.1019 0.0000 +vt 0.1219 0.1046 0.0000 +vt 0.1250 0.1046 0.0000 +vt 0.1281 0.1046 0.0000 +vt 0.1302 0.1019 0.0000 +vt 0.1309 0.1003 0.0000 +vt 0.1295 0.0945 0.0000 +vt 0.1263 0.0945 0.0000 +vt 0.1257 0.0945 0.0000 +vt 0.1250 0.0945 0.0000 +vt 0.1052 0.1208 0.0000 +vt 0.1046 0.1156 0.0000 +vt 0.1052 0.1156 0.0000 +vt 0.1039 0.1156 0.0000 +vt 0.1033 0.1156 0.0000 +vt 0.1027 0.1208 0.0000 +vt 0.1027 0.1156 0.0000 +vt 0.1023 0.1210 0.0000 +vt 0.0994 0.1156 0.0000 +vt 0.1021 0.1213 0.0000 +vt 0.0980 0.1213 0.0000 +vt 0.1023 0.1217 0.0000 +vt 0.0987 0.1230 0.0000 +vt 0.1034 0.1234 0.0000 +vt 0.1008 0.1257 0.0000 +vt 0.1039 0.1236 0.0000 +vt 0.1039 0.1257 0.0000 +vt 0.1044 0.1234 0.0000 +vt 0.1070 0.1257 0.0000 +vt 0.1055 0.1217 0.0000 +vt 0.1092 0.1230 0.0000 +vt 0.1057 0.1213 0.0000 +vt 0.1098 0.1213 0.0000 +vt 0.1055 0.1210 0.0000 +vt 0.1084 0.1156 0.0000 +vt 0.7825 0.1666 0.0000 +vt 0.7823 0.1664 0.0000 +vt 0.7863 0.1611 0.0000 +vt 0.3679 0.1356 0.0000 +vt 0.3679 0.1353 0.0000 +vt 0.3745 0.1353 0.0000 +vt 0.3746 0.1356 0.0000 +vt 0.3679 0.1351 0.0000 +vt 0.3746 0.1351 0.0000 +vt 0.1076 0.0586 0.0000 +vt 0.1036 0.0639 0.0000 +vt 0.1034 0.0638 0.0000 +vt 0.1076 0.0582 0.0000 +vt 0.6211 0.2529 0.0000 +vt 0.6211 0.2532 0.0000 +vt 0.6209 0.2527 0.0000 +vt 0.6209 0.2534 0.0000 +vt 0.6206 0.2527 0.0000 +vt 0.6206 0.2534 0.0000 +vt 0.6204 0.2529 0.0000 +vt 0.6204 0.2532 0.0000 +vt 0.1032 0.0636 0.0000 +vt 0.1072 0.0583 0.0000 +vt 0.3818 0.1240 0.0000 +vt 0.3818 0.1237 0.0000 +vt 0.3884 0.1237 0.0000 +vt 0.3885 0.1240 0.0000 +vt 0.3818 0.1235 0.0000 +vt 0.3885 0.1235 0.0000 +vt 0.7868 0.1614 0.0000 +vt 0.7827 0.1667 0.0000 +vt 0.0162 0.0864 0.0000 +vt 0.0159 0.0864 0.0000 +vt 0.0164 0.0862 0.0000 +vt 0.0157 0.0862 0.0000 +vt 0.0164 0.0859 0.0000 +vt 0.0157 0.0859 0.0000 +vt 0.0162 0.0857 0.0000 +vt 0.0159 0.0857 0.0000 +vt 0.5836 0.1684 0.0000 +vt 0.5834 0.1685 0.0000 +vt 0.5834 0.1570 0.0000 +vt 0.5836 0.1570 0.0000 +vt 0.7773 0.1539 0.0000 +vt 0.7775 0.1536 0.0000 +vt 0.7771 0.1541 0.0000 +vt 0.2795 0.0787 0.0000 +vt 0.2796 0.0785 0.0000 +vt 0.2911 0.0785 0.0000 +vt 0.2911 0.0787 0.0000 +vt 0.2795 0.0782 0.0000 +vt 0.2911 0.0782 0.0000 +vt 0.1170 0.0654 0.0000 +vt 0.1168 0.0656 0.0000 +vt 0.1080 0.0582 0.0000 +vt 0.1172 0.0652 0.0000 +vt 0.5834 0.1430 0.0000 +vt 0.5836 0.1431 0.0000 +vt 0.5836 0.1545 0.0000 +vt 0.5834 0.1545 0.0000 +vt 0.1075 0.0578 0.0000 +vt 0.0982 0.0510 0.0000 +vt 0.0984 0.0508 0.0000 +vt 0.0980 0.0513 0.0000 +vt 0.3571 0.0589 0.0000 +vt 0.3570 0.0591 0.0000 +vt 0.3455 0.0591 0.0000 +vt 0.3455 0.0589 0.0000 +vt 0.3571 0.0594 0.0000 +vt 0.3455 0.0594 0.0000 +vt 0.7961 0.1682 0.0000 +vt 0.7959 0.1684 0.0000 +vt 0.7871 0.1610 0.0000 +vt 0.7963 0.1680 0.0000 +vt 0.7231 0.2554 0.0000 +vt 0.7232 0.2551 0.0000 +vt 0.7346 0.2551 0.0000 +vt 0.7346 0.2554 0.0000 +vt 0.7231 0.2549 0.0000 +vt 0.7346 0.2549 0.0000 +vt 0.7927 0.1528 0.0000 +vt 0.7962 0.1482 0.0000 +vt 0.7964 0.1483 0.0000 +vt 0.4189 0.0591 0.0000 +vt 0.4245 0.0591 0.0000 +vt 0.4245 0.0594 0.0000 +vt 0.4188 0.0594 0.0000 +vt 0.4245 0.0589 0.0000 +vt 0.4188 0.0589 0.0000 +vt 0.1173 0.0455 0.0000 +vt 0.1175 0.0457 0.0000 +vt 0.1140 0.0503 0.0000 +vt 0.1136 0.0503 0.0000 +vt 0.1136 0.0499 0.0000 +vt 0.1171 0.0454 0.0000 +vt 0.3525 0.0893 0.0000 +vt 0.3581 0.0893 0.0000 +vt 0.3581 0.0896 0.0000 +vt 0.3524 0.0896 0.0000 +vt 0.3581 0.0891 0.0000 +vt 0.3524 0.0891 0.0000 +vt 0.7966 0.1485 0.0000 +vt 0.7931 0.1531 0.0000 +vt 0.7725 0.0415 0.0000 +vt 0.7631 0.0415 0.0000 +vt 0.7632 0.0412 0.0000 +vt 0.7724 0.0412 0.0000 +vt 0.7631 0.0410 0.0000 +vt 0.7725 0.0410 0.0000 +vt 0.1137 0.0507 0.0000 +vt 0.7836 0.0425 0.0000 +vt 0.7834 0.0425 0.0000 +vt 0.7838 0.0423 0.0000 +vt 0.7832 0.0423 0.0000 +vt 0.7839 0.0421 0.0000 +vt 0.7832 0.0420 0.0000 +vt 0.7836 0.0418 0.0000 +vt 0.7834 0.0418 0.0000 +vt 0.1133 0.0504 0.0000 +vt 0.2813 0.0896 0.0000 +vt 0.2814 0.0893 0.0000 +vt 0.2906 0.0893 0.0000 +vt 0.2907 0.0896 0.0000 +vt 0.2813 0.0891 0.0000 +vt 0.2907 0.0891 0.0000 +vt 0.7928 0.1535 0.0000 +vt 0.0419 0.0610 0.0000 +vt 0.0416 0.0610 0.0000 +vt 0.0421 0.0608 0.0000 +vt 0.0414 0.0608 0.0000 +vt 0.0421 0.0605 0.0000 +vt 0.0414 0.0605 0.0000 +vt 0.0419 0.0603 0.0000 +vt 0.0416 0.0603 0.0000 +vt 0.8918 0.1403 0.0000 +vt 0.8919 0.1406 0.0000 +vt 0.8842 0.1406 0.0000 +vt 0.8842 0.1403 0.0000 +vt 0.7864 0.1483 0.0000 +vt 0.7866 0.1481 0.0000 +vt 0.7863 0.1485 0.0000 +vt 0.3669 0.0594 0.0000 +vt 0.3670 0.0591 0.0000 +vt 0.3745 0.0591 0.0000 +vt 0.3745 0.0594 0.0000 +vt 0.3669 0.0589 0.0000 +vt 0.3745 0.0589 0.0000 +vt 0.1200 0.0551 0.0000 +vt 0.1198 0.0554 0.0000 +vt 0.1201 0.0549 0.0000 +vt 0.8919 0.1401 0.0000 +vt 0.8842 0.1401 0.0000 +vt 0.1073 0.0455 0.0000 +vt 0.1075 0.0453 0.0000 +vt 0.1071 0.0457 0.0000 +vt 0.3082 0.0891 0.0000 +vt 0.3080 0.0893 0.0000 +vt 0.3005 0.0893 0.0000 +vt 0.3005 0.0891 0.0000 +vt 0.3082 0.0896 0.0000 +vt 0.3005 0.0896 0.0000 +vt 0.7991 0.1580 0.0000 +vt 0.7989 0.1582 0.0000 +vt 0.7992 0.1577 0.0000 +vt 0.8087 0.2541 0.0000 +vt 0.8088 0.2539 0.0000 +vt 0.8164 0.2539 0.0000 +vt 0.8164 0.2541 0.0000 +vt 0.8087 0.2537 0.0000 +vt 0.8164 0.2537 0.0000 +vt 0.9015 0.0575 0.0000 +vt 0.9351 0.0578 0.0000 +vt 0.9350 0.0582 0.0000 +vt 0.9014 0.0578 0.0000 +vt 0.9710 0.0240 0.0000 +vt 0.9360 0.0243 0.0000 +vt 0.9361 0.0239 0.0000 +vt 0.9711 0.0236 0.0000 +vt 0.0341 0.1602 0.0000 +vt 0.0691 0.1613 0.0000 +vt 0.0690 0.1617 0.0000 +vt 0.0341 0.1606 0.0000 +vt 0.1317 0.1367 0.0000 +vt 0.0981 0.1358 0.0000 +vt 0.0980 0.1354 0.0000 +vt 0.1317 0.1364 0.0000 +vt 0.1318 0.1371 0.0000 +vt 0.0982 0.1362 0.0000 +vt 0.6443 0.1382 0.0000 +vt 0.6793 0.1372 0.0000 +vt 0.6794 0.1376 0.0000 +vt 0.6445 0.1386 0.0000 +vt 0.1981 0.0595 0.0000 +vt 0.1632 0.0593 0.0000 +vt 0.1631 0.0589 0.0000 +vt 0.1981 0.0591 0.0000 +vt 0.9349 0.0586 0.0000 +vt 0.9013 0.0582 0.0000 +vt 0.4346 0.0792 0.0000 +vt 0.4343 0.0789 0.0000 +vt 0.4346 0.0788 0.0000 +vt 0.4347 0.0790 0.0000 +vt 0.4350 0.0792 0.0000 +vt 0.4349 0.0790 0.0000 +vt 0.4353 0.0789 0.0000 +vt 0.4351 0.0788 0.0000 +vt 0.4353 0.0785 0.0000 +vt 0.4351 0.0786 0.0000 +vt 0.4350 0.0782 0.0000 +vt 0.4349 0.0785 0.0000 +vt 0.4346 0.0782 0.0000 +vt 0.4347 0.0785 0.0000 +vt 0.4343 0.0785 0.0000 +vt 0.4346 0.0786 0.0000 +vt 0.4348 0.0787 0.0000 +vt 0.8177 0.2140 0.0000 +vt 0.8173 0.2138 0.0000 +vt 0.8177 0.2135 0.0000 +vt 0.8164 0.2135 0.0000 +vt 0.8180 0.2131 0.0000 +vt 0.8182 0.2135 0.0000 +vt 0.8180 0.2138 0.0000 +vt 0.9369 0.0583 0.0000 +vt 0.9368 0.0587 0.0000 +vt 0.9343 0.0237 0.0000 +vt 0.9344 0.0233 0.0000 +vt 0.6809 0.1365 0.0000 +vt 0.6811 0.1369 0.0000 +vt 0.1615 0.0595 0.0000 +vt 0.1614 0.0591 0.0000 +vt 0.9367 0.0590 0.0000 +vt 0.9254 0.1673 0.0000 +vt 0.9422 0.1673 0.0000 +vt 0.9422 0.1678 0.0000 +vt 0.9254 0.1678 0.0000 +vt 0.8623 0.2628 0.0000 +vt 0.8790 0.2628 0.0000 +vt 0.8790 0.2633 0.0000 +vt 0.8623 0.2633 0.0000 +vt 0.9329 0.1902 0.0000 +vt 0.9496 0.1902 0.0000 +vt 0.9496 0.1908 0.0000 +vt 0.9329 0.1908 0.0000 +vt 0.8241 0.2482 0.0000 +vt 0.8408 0.2482 0.0000 +vt 0.8408 0.2488 0.0000 +vt 0.8241 0.2488 0.0000 +vt 0.7433 0.0924 0.0000 +vt 0.7437 0.0928 0.0000 +vt 0.7434 0.0929 0.0000 +vt 0.7432 0.0927 0.0000 +vt 0.7427 0.0924 0.0000 +vt 0.7429 0.0927 0.0000 +vt 0.7423 0.0928 0.0000 +vt 0.7427 0.0929 0.0000 +vt 0.7423 0.0933 0.0000 +vt 0.7427 0.0932 0.0000 +vt 0.7430 0.0931 0.0000 +vt 0.8164 0.2112 0.0000 +vt 0.8170 0.2114 0.0000 +vt 0.8167 0.2126 0.0000 +vt 0.8164 0.2125 0.0000 +vt 0.8168 0.2129 0.0000 +vt 0.8167 0.2132 0.0000 +vt 0.8164 0.2133 0.0000 +vt 0.9440 0.1673 0.0000 +vt 0.9440 0.1678 0.0000 +vt 0.3940 0.2260 0.0000 +vt 0.3944 0.2262 0.0000 +vt 0.3946 0.2268 0.0000 +vt 0.3940 0.2270 0.0000 +vt 0.3948 0.2260 0.0000 +vt 0.3951 0.2270 0.0000 +vt 0.7990 0.1681 0.0000 +vt 0.7987 0.1684 0.0000 +vt 0.7988 0.1665 0.0000 +vt 0.7989 0.1670 0.0000 +vt 0.6818 0.1387 0.0000 +vt 0.6802 0.1393 0.0000 +vt 0.6275 0.0947 0.0000 +vt 0.6276 0.0951 0.0000 +vt 0.5940 0.0941 0.0000 +vt 0.5939 0.0938 0.0000 +vt 0.9141 0.0435 0.0000 +vt 0.9139 0.0432 0.0000 +vt 0.9489 0.0421 0.0000 +vt 0.9490 0.0425 0.0000 +vt 0.7340 0.2885 0.0000 +vt 0.7341 0.2889 0.0000 +vt 0.6991 0.2887 0.0000 +vt 0.6991 0.2883 0.0000 +vt 0.9014 0.0692 0.0000 +vt 0.9015 0.0688 0.0000 +vt 0.9351 0.0692 0.0000 +vt 0.9350 0.0695 0.0000 +vt 0.9013 0.0695 0.0000 +vt 0.9349 0.0699 0.0000 +vt 0.7531 0.1707 0.0000 +vt 0.7529 0.1711 0.0000 +vt 0.7180 0.1714 0.0000 +vt 0.7181 0.1710 0.0000 +vt 0.6577 0.2795 0.0000 +vt 0.6578 0.2791 0.0000 +vt 0.6927 0.2803 0.0000 +vt 0.6926 0.2807 0.0000 +vt 0.6277 0.0954 0.0000 +vt 0.5941 0.0945 0.0000 +vt 0.4769 0.1354 0.0000 +vt 0.4771 0.1355 0.0000 +vt 0.4771 0.1357 0.0000 +vt 0.4768 0.1358 0.0000 +vt 0.4771 0.1351 0.0000 +vt 0.4772 0.1354 0.0000 +vt 0.4776 0.1351 0.0000 +vt 0.4774 0.1354 0.0000 +vt 0.4778 0.1354 0.0000 +vt 0.4776 0.1355 0.0000 +vt 0.4778 0.1358 0.0000 +vt 0.4776 0.1357 0.0000 +vt 0.4775 0.1361 0.0000 +vt 0.4774 0.1359 0.0000 +vt 0.4771 0.1361 0.0000 +vt 0.4772 0.1359 0.0000 +vt 0.4773 0.1356 0.0000 +vt 0.8152 0.2140 0.0000 +vt 0.8152 0.2135 0.0000 +vt 0.8155 0.2138 0.0000 +vt 0.8148 0.2131 0.0000 +vt 0.8146 0.2135 0.0000 +vt 0.8148 0.2138 0.0000 +vt 0.5923 0.0945 0.0000 +vt 0.5922 0.0942 0.0000 +vt 0.9505 0.0415 0.0000 +vt 0.9507 0.0419 0.0000 +vt 0.7163 0.1708 0.0000 +vt 0.7164 0.1704 0.0000 +vt 0.6944 0.2806 0.0000 +vt 0.6943 0.2810 0.0000 +vt 0.5923 0.0949 0.0000 +vt 0.9254 0.1684 0.0000 +vt 0.9422 0.1684 0.0000 +vt 0.1944 0.0897 0.0000 +vt 0.1944 0.0891 0.0000 +vt 0.2111 0.0891 0.0000 +vt 0.2111 0.0897 0.0000 +vt 0.0486 0.2204 0.0000 +vt 0.0486 0.2198 0.0000 +vt 0.0654 0.2198 0.0000 +vt 0.0654 0.2204 0.0000 +vt 0.8241 0.2477 0.0000 +vt 0.8408 0.2477 0.0000 +vt 0.7437 0.0934 0.0000 +vt 0.7434 0.0932 0.0000 +vt 0.7433 0.0938 0.0000 +vt 0.7432 0.0934 0.0000 +vt 0.7427 0.0938 0.0000 +vt 0.7429 0.0934 0.0000 +vt 0.8162 0.2126 0.0000 +vt 0.8159 0.2114 0.0000 +vt 0.8160 0.2129 0.0000 +vt 0.8162 0.2132 0.0000 +vt 0.9440 0.1684 0.0000 +vt 0.6284 0.2530 0.0000 +vt 0.6284 0.2520 0.0000 +vt 0.6289 0.2523 0.0000 +vt 0.6288 0.2529 0.0000 +vt 0.6295 0.2520 0.0000 +vt 0.6291 0.2531 0.0000 +vt 0.1196 0.0609 0.0000 +vt 0.1197 0.0598 0.0000 +vt 0.1198 0.0592 0.0000 +vt 0.1198 0.0612 0.0000 +vt 0.7173 0.1732 0.0000 +vt 0.7156 0.1726 0.0000 +vt 0.5751 0.1332 0.0000 +vt 0.5745 0.1332 0.0000 +vt 0.5745 0.1325 0.0000 +vt 0.5751 0.1325 0.0000 +vt 0.8569 0.1927 0.0000 +vt 0.8587 0.1927 0.0000 +vt 0.8587 0.1934 0.0000 +vt 0.8569 0.1934 0.0000 +vt 0.6037 0.1083 0.0000 +vt 0.6007 0.1083 0.0000 +vt 0.6007 0.1075 0.0000 +vt 0.6037 0.1075 0.0000 +vt 0.5712 0.1332 0.0000 +vt 0.5712 0.1325 0.0000 +vt 0.0328 0.2502 0.0000 +vt 0.0359 0.2502 0.0000 +vt 0.0359 0.2509 0.0000 +vt 0.0328 0.2509 0.0000 +vt 0.9356 0.0251 0.0000 +vt 0.9339 0.0245 0.0000 +vt 0.8619 0.1927 0.0000 +vt 0.8619 0.1934 0.0000 +vt 0.5770 0.1332 0.0000 +vt 0.5764 0.1332 0.0000 +vt 0.5764 0.1325 0.0000 +vt 0.5770 0.1325 0.0000 +vt 0.3573 0.2177 0.0000 +vt 0.3591 0.2177 0.0000 +vt 0.3591 0.2184 0.0000 +vt 0.3573 0.2184 0.0000 +vt 0.2675 0.0994 0.0000 +vt 0.2704 0.0994 0.0000 +vt 0.2704 0.1002 0.0000 +vt 0.2675 0.1002 0.0000 +vt 0.5803 0.1332 0.0000 +vt 0.5803 0.1325 0.0000 +vt 0.0390 0.2502 0.0000 +vt 0.0390 0.2509 0.0000 +vt 0.9494 0.0434 0.0000 +vt 0.9511 0.0427 0.0000 +vt 0.3541 0.2177 0.0000 +vt 0.3541 0.2184 0.0000 +vt 0.8164 0.2138 0.0000 +vt 0.5758 0.1325 0.0000 +vt 0.5758 0.1332 0.0000 +vt 0.7726 0.2254 0.0000 +vt 0.7733 0.2254 0.0000 +vt 0.7733 0.2258 0.0000 +vt 0.7725 0.2258 0.0000 +vt 0.7733 0.2247 0.0000 +vt 0.7740 0.2254 0.0000 +vt 0.7742 0.2258 0.0000 +vt 0.5718 0.2122 0.0000 +vt 0.5773 0.2180 0.0000 +vt 0.5773 0.2183 0.0000 +vt 0.5714 0.2122 0.0000 +vt 0.8177 0.2161 0.0000 +vt 0.8171 0.2161 0.0000 +vt 0.8209 0.2161 0.0000 +vt 0.8223 0.2135 0.0000 +vt 0.8217 0.2118 0.0000 +vt 0.8196 0.2091 0.0000 +vt 0.8164 0.2091 0.0000 +vt 0.8133 0.2091 0.0000 +vt 0.8112 0.2118 0.0000 +vt 0.8105 0.2135 0.0000 +vt 0.8119 0.2161 0.0000 +vt 0.8152 0.2161 0.0000 +vt 0.8158 0.2161 0.0000 +vt 0.8164 0.2161 0.0000 +vt 0.7721 0.2259 0.0000 +vt 0.7727 0.2280 0.0000 +vt 0.7721 0.2280 0.0000 +vt 0.7733 0.2280 0.0000 +vt 0.7740 0.2280 0.0000 +vt 0.7746 0.2259 0.0000 +vt 0.7746 0.2280 0.0000 +vt 0.7750 0.2258 0.0000 +vt 0.7779 0.2280 0.0000 +vt 0.7751 0.2254 0.0000 +vt 0.7792 0.2254 0.0000 +vt 0.7750 0.2250 0.0000 +vt 0.7786 0.2237 0.0000 +vt 0.7739 0.2234 0.0000 +vt 0.7765 0.2211 0.0000 +vt 0.7733 0.2232 0.0000 +vt 0.7733 0.2211 0.0000 +vt 0.7728 0.2234 0.0000 +vt 0.7702 0.2211 0.0000 +vt 0.7717 0.2250 0.0000 +vt 0.7681 0.2237 0.0000 +vt 0.7715 0.2254 0.0000 +vt 0.7675 0.2254 0.0000 +vt 0.7717 0.2258 0.0000 +vt 0.7688 0.2280 0.0000 +vt 0.5666 0.2072 0.0000 +vt 0.5668 0.2070 0.0000 +vt 0.5714 0.2118 0.0000 +vt 0.6686 0.0676 0.0000 +vt 0.6683 0.0676 0.0000 +vt 0.6683 0.0610 0.0000 +vt 0.6686 0.0609 0.0000 +vt 0.5834 0.1404 0.0000 +vt 0.5834 0.1338 0.0000 +vt 0.5836 0.1338 0.0000 +vt 0.5836 0.1405 0.0000 +vt 0.7633 0.0577 0.0000 +vt 0.7587 0.0528 0.0000 +vt 0.7589 0.0527 0.0000 +vt 0.7637 0.0577 0.0000 +vt 0.5954 0.2783 0.0000 +vt 0.5954 0.2786 0.0000 +vt 0.5952 0.2781 0.0000 +vt 0.5952 0.2788 0.0000 +vt 0.5949 0.2781 0.0000 +vt 0.5949 0.2788 0.0000 +vt 0.5947 0.2783 0.0000 +vt 0.5947 0.2786 0.0000 +vt 0.7591 0.0525 0.0000 +vt 0.7637 0.0573 0.0000 +vt 0.6980 0.0676 0.0000 +vt 0.6977 0.0676 0.0000 +vt 0.6977 0.0610 0.0000 +vt 0.6980 0.0609 0.0000 +vt 0.7498 0.0239 0.0000 +vt 0.7432 0.0239 0.0000 +vt 0.7432 0.0236 0.0000 +vt 0.7499 0.0236 0.0000 +vt 0.5711 0.2122 0.0000 +vt 0.5664 0.2074 0.0000 +vt 0.0416 0.0864 0.0000 +vt 0.0413 0.0864 0.0000 +vt 0.0418 0.0862 0.0000 +vt 0.0411 0.0862 0.0000 +vt 0.0418 0.0859 0.0000 +vt 0.0411 0.0859 0.0000 +vt 0.0416 0.0857 0.0000 +vt 0.0413 0.0857 0.0000 +vt 0.6876 0.1973 0.0000 +vt 0.6873 0.1974 0.0000 +vt 0.6873 0.1887 0.0000 +vt 0.6876 0.1887 0.0000 +vt 0.5779 0.2059 0.0000 +vt 0.5781 0.2061 0.0000 +vt 0.5778 0.2057 0.0000 +vt 0.8981 0.2883 0.0000 +vt 0.8980 0.2886 0.0000 +vt 0.8894 0.2886 0.0000 +vt 0.8894 0.2883 0.0000 +vt 0.8981 0.2888 0.0000 +vt 0.8894 0.2888 0.0000 +vt 0.7572 0.0639 0.0000 +vt 0.7570 0.0637 0.0000 +vt 0.7637 0.0580 0.0000 +vt 0.7574 0.0641 0.0000 +vt 0.7188 0.1887 0.0000 +vt 0.7191 0.1888 0.0000 +vt 0.7191 0.1974 0.0000 +vt 0.7188 0.1974 0.0000 +vt 0.7641 0.0577 0.0000 +vt 0.7702 0.0514 0.0000 +vt 0.7704 0.0516 0.0000 +vt 0.7700 0.0512 0.0000 +vt 0.3008 0.0787 0.0000 +vt 0.3009 0.0785 0.0000 +vt 0.3096 0.0785 0.0000 +vt 0.3096 0.0787 0.0000 +vt 0.3008 0.0782 0.0000 +vt 0.3096 0.0782 0.0000 +vt 0.5649 0.2184 0.0000 +vt 0.5647 0.2182 0.0000 +vt 0.5714 0.2126 0.0000 +vt 0.5651 0.2186 0.0000 +vt 0.9707 0.1822 0.0000 +vt 0.9708 0.1819 0.0000 +vt 0.9795 0.1819 0.0000 +vt 0.9795 0.1822 0.0000 +vt 0.9707 0.1817 0.0000 +vt 0.9795 0.1817 0.0000 +vt 0.5776 0.2183 0.0000 +vt 0.5816 0.2225 0.0000 +vt 0.5815 0.2226 0.0000 +vt 0.4219 0.1707 0.0000 +vt 0.4275 0.1707 0.0000 +vt 0.4275 0.1710 0.0000 +vt 0.4218 0.1710 0.0000 +vt 0.4275 0.1705 0.0000 +vt 0.4218 0.1705 0.0000 +vt 0.7737 0.0681 0.0000 +vt 0.7736 0.0683 0.0000 +vt 0.7696 0.0641 0.0000 +vt 0.7696 0.0638 0.0000 +vt 0.7699 0.0638 0.0000 +vt 0.7739 0.0680 0.0000 +vt 0.4345 0.1585 0.0000 +vt 0.4402 0.1585 0.0000 +vt 0.4402 0.1588 0.0000 +vt 0.4344 0.1588 0.0000 +vt 0.4402 0.1583 0.0000 +vt 0.4344 0.1583 0.0000 +vt 0.5813 0.2228 0.0000 +vt 0.5773 0.2186 0.0000 +vt 0.7005 0.0395 0.0000 +vt 0.7005 0.0316 0.0000 +vt 0.7008 0.0317 0.0000 +vt 0.7008 0.0394 0.0000 +vt 0.7010 0.0316 0.0000 +vt 0.7010 0.0395 0.0000 +vt 0.7692 0.0637 0.0000 +vt 0.8093 0.0428 0.0000 +vt 0.8091 0.0428 0.0000 +vt 0.8095 0.0426 0.0000 +vt 0.8088 0.0426 0.0000 +vt 0.8095 0.0423 0.0000 +vt 0.8089 0.0423 0.0000 +vt 0.8093 0.0421 0.0000 +vt 0.8091 0.0421 0.0000 +vt 0.7695 0.0634 0.0000 +vt 0.6755 0.0316 0.0000 +vt 0.6758 0.0317 0.0000 +vt 0.6758 0.0394 0.0000 +vt 0.6755 0.0395 0.0000 +vt 0.6760 0.0316 0.0000 +vt 0.6760 0.0395 0.0000 +vt 0.5770 0.2182 0.0000 +vt 0.0162 0.0607 0.0000 +vt 0.0159 0.0607 0.0000 +vt 0.0164 0.0605 0.0000 +vt 0.0157 0.0605 0.0000 +vt 0.0164 0.0602 0.0000 +vt 0.0157 0.0602 0.0000 +vt 0.0162 0.0600 0.0000 +vt 0.0159 0.0600 0.0000 +vt 0.9766 0.2175 0.0000 +vt 0.9767 0.2178 0.0000 +vt 0.9708 0.2178 0.0000 +vt 0.9708 0.2175 0.0000 +vt 0.5817 0.2141 0.0000 +vt 0.5819 0.2143 0.0000 +vt 0.5815 0.2139 0.0000 +vt 0.4192 0.1235 0.0000 +vt 0.4191 0.1238 0.0000 +vt 0.4134 0.1238 0.0000 +vt 0.4134 0.1235 0.0000 +vt 0.4192 0.1241 0.0000 +vt 0.4134 0.1241 0.0000 +vt 0.7652 0.0680 0.0000 +vt 0.7650 0.0678 0.0000 +vt 0.7654 0.0682 0.0000 +vt 0.9767 0.2173 0.0000 +vt 0.9708 0.2173 0.0000 +vt 0.7739 0.0596 0.0000 +vt 0.7741 0.0598 0.0000 +vt 0.7738 0.0594 0.0000 +vt 0.4067 0.1816 0.0000 +vt 0.4067 0.1813 0.0000 +vt 0.4125 0.1813 0.0000 +vt 0.4125 0.1816 0.0000 +vt 0.4067 0.1810 0.0000 +vt 0.4125 0.1810 0.0000 +vt 0.5729 0.2225 0.0000 +vt 0.5728 0.2223 0.0000 +vt 0.5731 0.2227 0.0000 +vt 0.2145 0.1161 0.0000 +vt 0.2146 0.1158 0.0000 +vt 0.2203 0.1158 0.0000 +vt 0.2203 0.1161 0.0000 +vt 0.2145 0.1156 0.0000 +vt 0.2203 0.1156 0.0000 +vt 0.1294 0.0799 0.0000 +vt 0.1277 0.0799 0.0000 +vt 0.1277 0.0756 0.0000 +vt 0.1294 0.0756 0.0000 +vt 0.1310 0.0799 0.0000 +vt 0.1310 0.0756 0.0000 +vt 0.1323 0.0799 0.0000 +vt 0.1323 0.0756 0.0000 +vt 0.1010 0.1849 0.0000 +vt 0.1010 0.1833 0.0000 +vt 0.1053 0.1833 0.0000 +vt 0.1053 0.1849 0.0000 +vt 0.1010 0.1867 0.0000 +vt 0.1053 0.1867 0.0000 +vt 0.1047 0.1885 0.0000 +vt 0.1010 0.1885 0.0000 +vt 0.1041 0.1901 0.0000 +vt 0.1010 0.1901 0.0000 +vt 0.8118 0.2263 0.0000 +vt 0.8118 0.2289 0.0000 +vt 0.8105 0.2289 0.0000 +vt 0.8105 0.2258 0.0000 +vt 0.3166 0.1601 0.0000 +vt 0.3125 0.1601 0.0000 +vt 0.3125 0.1583 0.0000 +vt 0.3166 0.1583 0.0000 +vt 0.8152 0.2264 0.0000 +vt 0.8152 0.2289 0.0000 +vt 0.8136 0.2289 0.0000 +vt 0.8136 0.2263 0.0000 +vt 0.1294 0.0829 0.0000 +vt 0.1277 0.0829 0.0000 +vt 0.1310 0.0829 0.0000 +vt 0.1323 0.0829 0.0000 +vt 0.0980 0.1849 0.0000 +vt 0.0980 0.1833 0.0000 +vt 0.0980 0.1867 0.0000 +vt 0.0980 0.1885 0.0000 +vt 0.0980 0.1901 0.0000 +vt 0.8118 0.2319 0.0000 +vt 0.8105 0.2319 0.0000 +vt 0.8136 0.2319 0.0000 +vt 0.8152 0.2319 0.0000 +vt 0.2198 0.1367 0.0000 +vt 0.2225 0.1367 0.0000 +vt 0.2198 0.1381 0.0000 +vt 0.9550 0.2268 0.0000 +vt 0.9550 0.2294 0.0000 +vt 0.9528 0.2294 0.0000 +vt 0.9528 0.2260 0.0000 +vt 0.3201 0.0782 0.0000 +vt 0.3215 0.0782 0.0000 +vt 0.3215 0.0800 0.0000 +vt 0.3193 0.0800 0.0000 +vt 0.2232 0.1381 0.0000 +vt 0.2239 0.1402 0.0000 +vt 0.2198 0.1402 0.0000 +vt 0.9507 0.2294 0.0000 +vt 0.9507 0.2253 0.0000 +vt 0.3236 0.0782 0.0000 +vt 0.3236 0.0800 0.0000 +vt 0.5169 0.1898 0.0000 +vt 0.5160 0.1904 0.0000 +vt 0.5146 0.1892 0.0000 +vt 0.5160 0.1880 0.0000 +vt 0.5174 0.1908 0.0000 +vt 0.1259 0.0799 0.0000 +vt 0.1259 0.0756 0.0000 +vt 0.1243 0.0799 0.0000 +vt 0.1243 0.0756 0.0000 +vt 0.1230 0.0799 0.0000 +vt 0.1230 0.0756 0.0000 +vt 0.0187 0.2250 0.0000 +vt 0.0230 0.2250 0.0000 +vt 0.0230 0.2266 0.0000 +vt 0.0187 0.2266 0.0000 +vt 0.0187 0.2232 0.0000 +vt 0.0230 0.2232 0.0000 +vt 0.0224 0.2214 0.0000 +vt 0.0187 0.2214 0.0000 +vt 0.0218 0.2198 0.0000 +vt 0.0187 0.2198 0.0000 +vt 0.8186 0.2263 0.0000 +vt 0.8198 0.2258 0.0000 +vt 0.8198 0.2289 0.0000 +vt 0.8186 0.2289 0.0000 +vt 0.3166 0.1235 0.0000 +vt 0.3166 0.1254 0.0000 +vt 0.3125 0.1254 0.0000 +vt 0.3125 0.1235 0.0000 +vt 0.8167 0.2263 0.0000 +vt 0.8167 0.2289 0.0000 +vt 0.1259 0.0829 0.0000 +vt 0.1243 0.0829 0.0000 +vt 0.1230 0.0829 0.0000 +vt 0.0157 0.2250 0.0000 +vt 0.0157 0.2266 0.0000 +vt 0.0157 0.2232 0.0000 +vt 0.0157 0.2214 0.0000 +vt 0.0157 0.2198 0.0000 +vt 0.8198 0.2319 0.0000 +vt 0.8186 0.2319 0.0000 +vt 0.8167 0.2319 0.0000 +vt 0.1785 0.1589 0.0000 +vt 0.1785 0.1576 0.0000 +vt 0.1811 0.1589 0.0000 +vt 0.0687 0.2478 0.0000 +vt 0.0709 0.2471 0.0000 +vt 0.0709 0.2504 0.0000 +vt 0.0687 0.2504 0.0000 +vt 0.8899 0.2546 0.0000 +vt 0.8891 0.2527 0.0000 +vt 0.8913 0.2527 0.0000 +vt 0.8913 0.2546 0.0000 +vt 0.1818 0.1576 0.0000 +vt 0.1785 0.1555 0.0000 +vt 0.1826 0.1555 0.0000 +vt 0.0730 0.2504 0.0000 +vt 0.0730 0.2463 0.0000 +vt 0.8934 0.2527 0.0000 +vt 0.8934 0.2546 0.0000 +vt 0.5230 0.1869 0.0000 +vt 0.5220 0.1850 0.0000 +vt 0.5239 0.1846 0.0000 +vt 0.5239 0.1865 0.0000 +vt 0.5235 0.1879 0.0000 +vt 0.5161 0.1805 0.0000 +vt 0.5170 0.1824 0.0000 +vt 0.5147 0.1814 0.0000 +vt 0.5213 0.1877 0.0000 +vt 0.5200 0.1884 0.0000 +vt 0.5190 0.1865 0.0000 +vt 0.5204 0.1858 0.0000 +vt 0.5185 0.1854 0.0000 +vt 0.5234 0.1830 0.0000 +vt 0.5223 0.1896 0.0000 +vt 0.5210 0.1905 0.0000 +vt 0.5224 0.1815 0.0000 +vt 0.5177 0.1838 0.0000 +vt 0.5209 0.1804 0.0000 +vt 0.5186 0.1890 0.0000 +vt 0.5176 0.1871 0.0000 +vt 0.5136 0.1878 0.0000 +vt 0.5130 0.1861 0.0000 +vt 0.5131 0.1843 0.0000 +vt 0.5195 0.1910 0.0000 +vt 0.5176 0.1800 0.0000 +vt 0.5137 0.1827 0.0000 +vt 0.5193 0.1799 0.0000 +vt 0.1277 0.0754 0.0000 +vt 0.1293 0.0754 0.0000 +vt 0.1449 0.1312 0.0000 +vt 0.1448 0.1309 0.0000 +vt 0.1465 0.1309 0.0000 +vt 0.1467 0.1312 0.0000 +vt 0.1482 0.1306 0.0000 +vt 0.1484 0.1308 0.0000 +vt 0.1496 0.1299 0.0000 +vt 0.1498 0.1301 0.0000 +vt 0.1506 0.1289 0.0000 +vt 0.1509 0.1292 0.0000 +vt 0.3562 0.0786 0.0000 +vt 0.3563 0.0782 0.0000 +vt 0.3581 0.0786 0.0000 +vt 0.3581 0.0790 0.0000 +vt 0.3600 0.0787 0.0000 +vt 0.3599 0.0790 0.0000 +vt 0.3613 0.0783 0.0000 +vt 0.3616 0.0786 0.0000 +vt 0.1261 0.0754 0.0000 +vt 0.1406 0.1293 0.0000 +vt 0.1409 0.1291 0.0000 +vt 0.1420 0.1300 0.0000 +vt 0.1417 0.1302 0.0000 +vt 0.9624 0.2890 0.0000 +vt 0.9625 0.2887 0.0000 +vt 0.9642 0.2883 0.0000 +vt 0.9641 0.2886 0.0000 +vt 0.9606 0.2891 0.0000 +vt 0.9607 0.2887 0.0000 +vt 0.9591 0.2887 0.0000 +vt 0.9592 0.2884 0.0000 +vt 0.4096 0.0597 0.0000 +vt 0.4096 0.0593 0.0000 +vt 0.4114 0.0590 0.0000 +vt 0.4114 0.0593 0.0000 +vt 0.4077 0.0596 0.0000 +vt 0.4077 0.0593 0.0000 +vt 0.4061 0.0591 0.0000 +vt 0.4064 0.0589 0.0000 +vt 0.2228 0.1370 0.0000 +vt 0.1815 0.1587 0.0000 +vt 0.5816 0.0309 0.0000 +vt 0.5816 0.0327 0.0000 +vt 0.5760 0.0318 0.0000 +vt 0.5810 0.0344 0.0000 +vt 0.5800 0.0359 0.0000 +vt 0.5785 0.0369 0.0000 +vt 0.5768 0.0375 0.0000 +vt 0.5750 0.0375 0.0000 +vt 0.5733 0.0369 0.0000 +vt 0.5719 0.0358 0.0000 +vt 0.5708 0.0342 0.0000 +vt 0.5703 0.0327 0.0000 +vt 0.5703 0.0311 0.0000 +vt 0.5708 0.0292 0.0000 +vt 0.5719 0.0277 0.0000 +vt 0.5734 0.0267 0.0000 +vt 0.5751 0.0261 0.0000 +vt 0.5769 0.0261 0.0000 +vt 0.5786 0.0267 0.0000 +vt 0.5800 0.0278 0.0000 +vt 0.5811 0.0292 0.0000 +vt 0.9128 0.2799 0.0000 +vt 0.9122 0.2799 0.0000 +vt 0.9122 0.2792 0.0000 +vt 0.9128 0.2792 0.0000 +vt 0.4418 0.1818 0.0000 +vt 0.4424 0.1818 0.0000 +vt 0.4424 0.1825 0.0000 +vt 0.4418 0.1825 0.0000 +vt 0.4426 0.1818 0.0000 +vt 0.4426 0.1825 0.0000 +vt 0.9130 0.2799 0.0000 +vt 0.9130 0.2792 0.0000 +vt 0.3876 0.0896 0.0000 +vt 0.3876 0.0891 0.0000 +vt 0.3879 0.0894 0.0000 +vt 0.3877 0.0897 0.0000 +vt 0.3876 0.0901 0.0000 +vt 0.3877 0.0900 0.0000 +vt 0.3883 0.0906 0.0000 +vt 0.3876 0.0906 0.0000 +vt 0.3879 0.0903 0.0000 +vt 0.3883 0.0904 0.0000 +vt 0.3883 0.0891 0.0000 +vt 0.3883 0.0893 0.0000 +vt 0.2071 0.1083 0.0000 +vt 0.2067 0.1083 0.0000 +vt 0.2067 0.1079 0.0000 +vt 0.2072 0.1079 0.0000 +vt 0.9561 0.1594 0.0000 +vt 0.9563 0.1594 0.0000 +vt 0.9563 0.1597 0.0000 +vt 0.9559 0.1597 0.0000 +vt 0.9561 0.1591 0.0000 +vt 0.9563 0.1591 0.0000 +vt 0.9559 0.1588 0.0000 +vt 0.9563 0.1588 0.0000 +vt 0.1108 0.2353 0.0000 +vt 0.1108 0.2356 0.0000 +vt 0.1104 0.2356 0.0000 +vt 0.1104 0.2353 0.0000 +vt 0.9123 0.2791 0.0000 +vt 0.9128 0.2791 0.0000 +vt 0.3875 0.0896 0.0000 +vt 0.3875 0.0892 0.0000 +vt 0.3875 0.0901 0.0000 +vt 0.3875 0.0905 0.0000 +vt 0.4424 0.1826 0.0000 +vt 0.4419 0.1826 0.0000 +vt 0.4426 0.1826 0.0000 +vt 0.9130 0.2791 0.0000 +vt 0.3011 0.1956 0.0000 +vt 0.3011 0.1963 0.0000 +vt 0.3010 0.1964 0.0000 +vt 0.3010 0.1955 0.0000 +vt 0.3004 0.1964 0.0000 +vt 0.3004 0.1955 0.0000 +vt 0.2042 0.1082 0.0000 +vt 0.2042 0.1079 0.0000 +vt 0.9588 0.1594 0.0000 +vt 0.9588 0.1597 0.0000 +vt 0.9588 0.1591 0.0000 +vt 0.9588 0.1589 0.0000 +vt 0.1079 0.2356 0.0000 +vt 0.1079 0.2353 0.0000 +vt 0.1944 0.1082 0.0000 +vt 0.1944 0.1079 0.0000 +vt 0.2041 0.1079 0.0000 +vt 0.2041 0.1082 0.0000 +vt 0.9686 0.1594 0.0000 +vt 0.9686 0.1596 0.0000 +vt 0.9589 0.1597 0.0000 +vt 0.9589 0.1594 0.0000 +vt 0.9686 0.1591 0.0000 +vt 0.9589 0.1591 0.0000 +vt 0.9686 0.1589 0.0000 +vt 0.9589 0.1589 0.0000 +vt 0.0980 0.2356 0.0000 +vt 0.0980 0.2354 0.0000 +vt 0.1077 0.2353 0.0000 +vt 0.1077 0.2356 0.0000 +vt 0.9128 0.2806 0.0000 +vt 0.9122 0.2806 0.0000 +vt 0.4418 0.1811 0.0000 +vt 0.4424 0.1811 0.0000 +vt 0.4426 0.1811 0.0000 +vt 0.9130 0.2806 0.0000 +vt 0.3889 0.0896 0.0000 +vt 0.3888 0.0897 0.0000 +vt 0.3886 0.0894 0.0000 +vt 0.3889 0.0891 0.0000 +vt 0.3889 0.0901 0.0000 +vt 0.3888 0.0900 0.0000 +vt 0.3886 0.0903 0.0000 +vt 0.3889 0.0906 0.0000 +vt 0.2071 0.1076 0.0000 +vt 0.2067 0.1076 0.0000 +vt 0.2353 0.0699 0.0000 +vt 0.2355 0.0702 0.0000 +vt 0.2351 0.0702 0.0000 +vt 0.2351 0.0699 0.0000 +vt 0.2353 0.0696 0.0000 +vt 0.2351 0.0696 0.0000 +vt 0.2351 0.0693 0.0000 +vt 0.2355 0.0693 0.0000 +vt 0.1108 0.2359 0.0000 +vt 0.1104 0.2359 0.0000 +vt 0.9128 0.2807 0.0000 +vt 0.9123 0.2807 0.0000 +vt 0.3891 0.0892 0.0000 +vt 0.3891 0.0896 0.0000 +vt 0.3891 0.0901 0.0000 +vt 0.3891 0.0905 0.0000 +vt 0.4419 0.1810 0.0000 +vt 0.4424 0.1810 0.0000 +vt 0.4426 0.1810 0.0000 +vt 0.9130 0.2807 0.0000 +vt 0.2997 0.1956 0.0000 +vt 0.2998 0.1955 0.0000 +vt 0.2998 0.1964 0.0000 +vt 0.2997 0.1963 0.0000 +vt 0.2042 0.1076 0.0000 +vt 0.2326 0.0699 0.0000 +vt 0.2326 0.0702 0.0000 +vt 0.2326 0.0696 0.0000 +vt 0.2326 0.0693 0.0000 +vt 0.1079 0.2359 0.0000 +vt 0.1944 0.1077 0.0000 +vt 0.2041 0.1076 0.0000 +vt 0.2227 0.0699 0.0000 +vt 0.2325 0.0699 0.0000 +vt 0.2325 0.0701 0.0000 +vt 0.2227 0.0701 0.0000 +vt 0.2227 0.0696 0.0000 +vt 0.2325 0.0696 0.0000 +vt 0.2227 0.0694 0.0000 +vt 0.2325 0.0693 0.0000 +vt 0.1077 0.2359 0.0000 +vt 0.0980 0.2359 0.0000 +vt 0.3695 0.2146 0.0000 +vt 0.3700 0.2148 0.0000 +vt 0.3694 0.2155 0.0000 +vt 0.3703 0.2152 0.0000 +vt 0.3703 0.2157 0.0000 +vt 0.3700 0.2161 0.0000 +vt 0.3695 0.2163 0.0000 +vt 0.3692 0.2162 0.0000 +vt 0.3692 0.2147 0.0000 +vt 0.3000 0.1695 0.0000 +vt 0.3005 0.1693 0.0000 +vt 0.3005 0.1701 0.0000 +vt 0.3007 0.1694 0.0000 +vt 0.3007 0.1709 0.0000 +vt 0.3005 0.1710 0.0000 +vt 0.3000 0.1708 0.0000 +vt 0.2997 0.1704 0.0000 +vt 0.2997 0.1699 0.0000 +vt 0.4460 0.2209 0.0000 +vt 0.4460 0.2208 0.0000 +vt 0.4463 0.2209 0.0000 +vt 0.4462 0.2207 0.0000 +vt 0.4464 0.2207 0.0000 +vt 0.4465 0.2208 0.0000 +vt 0.4466 0.2209 0.0000 +vt 0.4465 0.2211 0.0000 +vt 0.4464 0.2212 0.0000 +vt 0.4462 0.2212 0.0000 +vt 0.4460 0.2211 0.0000 +vt 0.8265 0.2017 0.0000 +vt 0.8265 0.2016 0.0000 +vt 0.8268 0.2016 0.0000 +vt 0.8267 0.2017 0.0000 +vt 0.8270 0.2017 0.0000 +vt 0.8269 0.2018 0.0000 +vt 0.9687 0.1594 0.0000 +vt 0.9687 0.1592 0.0000 +vt 0.4564 0.2383 0.0000 +vt 0.4563 0.2382 0.0000 +vt 0.4566 0.2382 0.0000 +vt 0.4566 0.2383 0.0000 +vt 0.4568 0.2382 0.0000 +vt 0.4567 0.2383 0.0000 +vt 0.8264 0.2018 0.0000 +vt 0.8263 0.2017 0.0000 +vt 0.6298 0.1485 0.0000 +vt 0.6297 0.1484 0.0000 +vt 0.6300 0.1484 0.0000 +vt 0.6300 0.1485 0.0000 +vt 0.2227 0.0698 0.0000 +vt 0.4264 0.2342 0.0000 +vt 0.4264 0.2341 0.0000 +vt 0.4267 0.2342 0.0000 +vt 0.4266 0.2343 0.0000 +vt 0.4263 0.2343 0.0000 +vt 0.4262 0.2342 0.0000 +vt 0.4442 0.1818 0.0000 +vt 0.4442 0.1825 0.0000 +vt 0.4442 0.1813 0.0000 +vt 0.4442 0.1811 0.0000 +vt 0.3022 0.1698 0.0000 +vt 0.3022 0.1705 0.0000 +vt 0.9146 0.2805 0.0000 +vt 0.9146 0.2806 0.0000 +vt 0.9146 0.2799 0.0000 +vt 0.9146 0.2793 0.0000 +vt 0.9146 0.2791 0.0000 +vt 0.3677 0.2159 0.0000 +vt 0.3677 0.2151 0.0000 +vt 0.4442 0.1826 0.0000 +vt 0.3946 0.2014 0.0000 +vt 0.3940 0.2014 0.0000 +vt 0.3940 0.2007 0.0000 +vt 0.3946 0.2007 0.0000 +vt 0.2612 0.2166 0.0000 +vt 0.2617 0.2166 0.0000 +vt 0.2617 0.2172 0.0000 +vt 0.2612 0.2172 0.0000 +vt 0.2620 0.2166 0.0000 +vt 0.2620 0.2172 0.0000 +vt 0.3948 0.2014 0.0000 +vt 0.3948 0.2007 0.0000 +vt 0.8531 0.0522 0.0000 +vt 0.8531 0.0527 0.0000 +vt 0.8527 0.0524 0.0000 +vt 0.8529 0.0522 0.0000 +vt 0.8531 0.0518 0.0000 +vt 0.8529 0.0518 0.0000 +vt 0.8524 0.0512 0.0000 +vt 0.8531 0.0512 0.0000 +vt 0.8527 0.0515 0.0000 +vt 0.8524 0.0514 0.0000 +vt 0.8524 0.0527 0.0000 +vt 0.8524 0.0525 0.0000 +vt 0.9634 0.2180 0.0000 +vt 0.9630 0.2180 0.0000 +vt 0.9630 0.2176 0.0000 +vt 0.9635 0.2176 0.0000 +vt 0.9438 0.1247 0.0000 +vt 0.9440 0.1247 0.0000 +vt 0.9440 0.1249 0.0000 +vt 0.9436 0.1249 0.0000 +vt 0.9438 0.1243 0.0000 +vt 0.9440 0.1243 0.0000 +vt 0.9436 0.1241 0.0000 +vt 0.9440 0.1241 0.0000 +vt 0.9433 0.2255 0.0000 +vt 0.9434 0.2258 0.0000 +vt 0.9429 0.2258 0.0000 +vt 0.9429 0.2255 0.0000 +vt 0.3941 0.2006 0.0000 +vt 0.3946 0.2006 0.0000 +vt 0.8532 0.0522 0.0000 +vt 0.8532 0.0527 0.0000 +vt 0.8532 0.0517 0.0000 +vt 0.8532 0.0513 0.0000 +vt 0.2617 0.2174 0.0000 +vt 0.2612 0.2174 0.0000 +vt 0.2620 0.2174 0.0000 +vt 0.3948 0.2006 0.0000 +vt 0.4366 0.2019 0.0000 +vt 0.4366 0.2027 0.0000 +vt 0.4365 0.2028 0.0000 +vt 0.4365 0.2018 0.0000 +vt 0.4358 0.2028 0.0000 +vt 0.4358 0.2018 0.0000 +vt 0.9606 0.2179 0.0000 +vt 0.9606 0.2176 0.0000 +vt 0.9465 0.1247 0.0000 +vt 0.9465 0.1249 0.0000 +vt 0.9465 0.1243 0.0000 +vt 0.9465 0.1241 0.0000 +vt 0.9405 0.2258 0.0000 +vt 0.9405 0.2255 0.0000 +vt 0.9507 0.2179 0.0000 +vt 0.9507 0.2176 0.0000 +vt 0.9604 0.2176 0.0000 +vt 0.9604 0.2179 0.0000 +vt 0.9563 0.1246 0.0000 +vt 0.9563 0.1248 0.0000 +vt 0.9466 0.1249 0.0000 +vt 0.9466 0.1247 0.0000 +vt 0.9563 0.1244 0.0000 +vt 0.9466 0.1243 0.0000 +vt 0.9563 0.1242 0.0000 +vt 0.9466 0.1241 0.0000 +vt 0.9306 0.2258 0.0000 +vt 0.9306 0.2256 0.0000 +vt 0.9403 0.2256 0.0000 +vt 0.9403 0.2258 0.0000 +vt 0.3946 0.2020 0.0000 +vt 0.3940 0.2020 0.0000 +vt 0.2612 0.2159 0.0000 +vt 0.2617 0.2159 0.0000 +vt 0.2620 0.2159 0.0000 +vt 0.3948 0.2020 0.0000 +vt 0.8517 0.0522 0.0000 +vt 0.8519 0.0522 0.0000 +vt 0.8521 0.0524 0.0000 +vt 0.8517 0.0527 0.0000 +vt 0.8517 0.0518 0.0000 +vt 0.8519 0.0518 0.0000 +vt 0.8521 0.0515 0.0000 +vt 0.8517 0.0512 0.0000 +vt 0.9634 0.2173 0.0000 +vt 0.9630 0.2173 0.0000 +vt 0.0894 0.2030 0.0000 +vt 0.0896 0.2033 0.0000 +vt 0.0892 0.2033 0.0000 +vt 0.0892 0.2030 0.0000 +vt 0.0894 0.2027 0.0000 +vt 0.0892 0.2027 0.0000 +vt 0.0892 0.2024 0.0000 +vt 0.0896 0.2024 0.0000 +vt 0.9433 0.2262 0.0000 +vt 0.9429 0.2262 0.0000 +vt 0.3946 0.2022 0.0000 +vt 0.3941 0.2022 0.0000 +vt 0.8516 0.0527 0.0000 +vt 0.8516 0.0522 0.0000 +vt 0.8516 0.0517 0.0000 +vt 0.8516 0.0513 0.0000 +vt 0.2612 0.2158 0.0000 +vt 0.2617 0.2158 0.0000 +vt 0.2620 0.2158 0.0000 +vt 0.3948 0.2022 0.0000 +vt 0.4351 0.2019 0.0000 +vt 0.4353 0.2018 0.0000 +vt 0.4353 0.2028 0.0000 +vt 0.4351 0.2027 0.0000 +vt 0.9606 0.2173 0.0000 +vt 0.0867 0.2030 0.0000 +vt 0.0867 0.2033 0.0000 +vt 0.0867 0.2027 0.0000 +vt 0.0867 0.2024 0.0000 +vt 0.9405 0.2262 0.0000 +vt 0.9507 0.2174 0.0000 +vt 0.9604 0.2174 0.0000 +vt 0.0768 0.2030 0.0000 +vt 0.0866 0.2030 0.0000 +vt 0.0866 0.2032 0.0000 +vt 0.0768 0.2032 0.0000 +vt 0.0768 0.2027 0.0000 +vt 0.0866 0.2027 0.0000 +vt 0.0768 0.2025 0.0000 +vt 0.0866 0.2024 0.0000 +vt 0.9403 0.2261 0.0000 +vt 0.9306 0.2261 0.0000 +vt 0.2886 0.1817 0.0000 +vt 0.2891 0.1819 0.0000 +vt 0.2886 0.1826 0.0000 +vt 0.2894 0.1823 0.0000 +vt 0.2894 0.1828 0.0000 +vt 0.2891 0.1832 0.0000 +vt 0.2886 0.1834 0.0000 +vt 0.2884 0.1834 0.0000 +vt 0.2884 0.1818 0.0000 +vt 0.3544 0.2259 0.0000 +vt 0.3549 0.2258 0.0000 +vt 0.3549 0.2266 0.0000 +vt 0.3551 0.2258 0.0000 +vt 0.3551 0.2274 0.0000 +vt 0.3549 0.2274 0.0000 +vt 0.3544 0.2273 0.0000 +vt 0.3541 0.2269 0.0000 +vt 0.3541 0.2263 0.0000 +vt 0.2740 0.2249 0.0000 +vt 0.2741 0.2247 0.0000 +vt 0.2744 0.2249 0.0000 +vt 0.2743 0.2246 0.0000 +vt 0.2744 0.2246 0.0000 +vt 0.2746 0.2247 0.0000 +vt 0.2747 0.2249 0.0000 +vt 0.2746 0.2250 0.0000 +vt 0.2744 0.2251 0.0000 +vt 0.2743 0.2251 0.0000 +vt 0.2741 0.2250 0.0000 +vt 0.4797 0.1914 0.0000 +vt 0.4797 0.1913 0.0000 +vt 0.4799 0.1913 0.0000 +vt 0.4799 0.1914 0.0000 +vt 0.4801 0.1914 0.0000 +vt 0.4800 0.1915 0.0000 +vt 0.9564 0.1246 0.0000 +vt 0.9564 0.1244 0.0000 +vt 0.6565 0.1879 0.0000 +vt 0.6566 0.1881 0.0000 +vt 0.6563 0.1881 0.0000 +vt 0.6563 0.1880 0.0000 +vt 0.6561 0.1881 0.0000 +vt 0.6562 0.1879 0.0000 +vt 0.4795 0.1915 0.0000 +vt 0.4795 0.1914 0.0000 +vt 0.0374 0.0964 0.0000 +vt 0.0375 0.0964 0.0000 +vt 0.0375 0.0966 0.0000 +vt 0.0374 0.0966 0.0000 +vt 0.0768 0.2028 0.0000 +vt 0.0768 0.2029 0.0000 +vt 0.9556 0.2792 0.0000 +vt 0.9556 0.2791 0.0000 +vt 0.9559 0.2792 0.0000 +vt 0.9558 0.2793 0.0000 +vt 0.9555 0.2793 0.0000 +vt 0.9554 0.2792 0.0000 +vt 0.2635 0.2166 0.0000 +vt 0.2635 0.2172 0.0000 +vt 0.2635 0.2160 0.0000 +vt 0.2635 0.2159 0.0000 +vt 0.3567 0.2262 0.0000 +vt 0.3567 0.2270 0.0000 +vt 0.3964 0.2019 0.0000 +vt 0.3964 0.2021 0.0000 +vt 0.3964 0.2014 0.0000 +vt 0.3964 0.2007 0.0000 +vt 0.3964 0.2006 0.0000 +vt 0.2869 0.1830 0.0000 +vt 0.2869 0.1822 0.0000 +vt 0.2635 0.2173 0.0000 +vt 0.1045 0.1490 0.0000 +vt 0.1027 0.1490 0.0000 +vt 0.1027 0.1447 0.0000 +vt 0.1045 0.1447 0.0000 +vt 0.1061 0.1490 0.0000 +vt 0.1061 0.1447 0.0000 +vt 0.1073 0.1490 0.0000 +vt 0.1073 0.1447 0.0000 +vt 0.1162 0.1487 0.0000 +vt 0.1146 0.1487 0.0000 +vt 0.1146 0.1444 0.0000 +vt 0.1162 0.1444 0.0000 +vt 0.1180 0.1487 0.0000 +vt 0.1180 0.1444 0.0000 +vt 0.1198 0.1451 0.0000 +vt 0.1198 0.1487 0.0000 +vt 0.1214 0.1456 0.0000 +vt 0.1214 0.1487 0.0000 +vt 0.1226 0.1461 0.0000 +vt 0.1226 0.1487 0.0000 +vt 0.3304 0.1254 0.0000 +vt 0.3263 0.1254 0.0000 +vt 0.3263 0.1235 0.0000 +vt 0.3304 0.1235 0.0000 +vt 0.7969 0.2483 0.0000 +vt 0.7969 0.2508 0.0000 +vt 0.7954 0.2508 0.0000 +vt 0.7954 0.2482 0.0000 +vt 0.1045 0.1517 0.0000 +vt 0.1027 0.1517 0.0000 +vt 0.1061 0.1517 0.0000 +vt 0.1073 0.1517 0.0000 +vt 0.1162 0.1515 0.0000 +vt 0.1146 0.1515 0.0000 +vt 0.1180 0.1515 0.0000 +vt 0.1198 0.1515 0.0000 +vt 0.1214 0.1515 0.0000 +vt 0.1226 0.1515 0.0000 +vt 0.7954 0.2536 0.0000 +vt 0.7935 0.2536 0.0000 +vt 0.7935 0.2508 0.0000 +vt 0.7969 0.2536 0.0000 +vt 0.1406 0.1879 0.0000 +vt 0.1433 0.1879 0.0000 +vt 0.1406 0.1893 0.0000 +vt 0.1986 0.1250 0.0000 +vt 0.1986 0.1276 0.0000 +vt 0.1965 0.1276 0.0000 +vt 0.1965 0.1243 0.0000 +vt 0.3187 0.0891 0.0000 +vt 0.3201 0.0891 0.0000 +vt 0.3201 0.0909 0.0000 +vt 0.3179 0.0909 0.0000 +vt 0.1440 0.1893 0.0000 +vt 0.1448 0.1914 0.0000 +vt 0.1406 0.1914 0.0000 +vt 0.1944 0.1276 0.0000 +vt 0.1944 0.1235 0.0000 +vt 0.3222 0.0891 0.0000 +vt 0.3222 0.0909 0.0000 +vt 0.5746 0.1898 0.0000 +vt 0.5737 0.1904 0.0000 +vt 0.5722 0.1892 0.0000 +vt 0.5736 0.1880 0.0000 +vt 0.5751 0.1908 0.0000 +vt 0.1009 0.1490 0.0000 +vt 0.1009 0.1447 0.0000 +vt 0.0993 0.1490 0.0000 +vt 0.0993 0.1447 0.0000 +vt 0.0980 0.1490 0.0000 +vt 0.0980 0.1447 0.0000 +vt 0.7846 0.2525 0.0000 +vt 0.7846 0.2482 0.0000 +vt 0.7862 0.2482 0.0000 +vt 0.7862 0.2525 0.0000 +vt 0.7828 0.2525 0.0000 +vt 0.7828 0.2482 0.0000 +vt 0.7811 0.2488 0.0000 +vt 0.7811 0.2525 0.0000 +vt 0.7795 0.2494 0.0000 +vt 0.7795 0.2525 0.0000 +vt 0.7782 0.2499 0.0000 +vt 0.7782 0.2525 0.0000 +vt 0.1826 0.2442 0.0000 +vt 0.1826 0.2460 0.0000 +vt 0.1785 0.2460 0.0000 +vt 0.1785 0.2442 0.0000 +vt 0.7984 0.2482 0.0000 +vt 0.7984 0.2508 0.0000 +vt 0.1009 0.1517 0.0000 +vt 0.0993 0.1517 0.0000 +vt 0.0980 0.1517 0.0000 +vt 0.7846 0.2553 0.0000 +vt 0.7862 0.2553 0.0000 +vt 0.7828 0.2553 0.0000 +vt 0.7811 0.2553 0.0000 +vt 0.7795 0.2553 0.0000 +vt 0.7782 0.2553 0.0000 +vt 0.8003 0.2508 0.0000 +vt 0.8003 0.2536 0.0000 +vt 0.7984 0.2536 0.0000 +vt 0.1614 0.1623 0.0000 +vt 0.1614 0.1609 0.0000 +vt 0.1641 0.1623 0.0000 +vt 0.9450 0.2487 0.0000 +vt 0.9471 0.2480 0.0000 +vt 0.9471 0.2513 0.0000 +vt 0.9450 0.2513 0.0000 +vt 0.2484 0.1508 0.0000 +vt 0.2476 0.1490 0.0000 +vt 0.2497 0.1490 0.0000 +vt 0.2497 0.1508 0.0000 +vt 0.1648 0.1609 0.0000 +vt 0.1614 0.1588 0.0000 +vt 0.1655 0.1588 0.0000 +vt 0.9493 0.2513 0.0000 +vt 0.9493 0.2472 0.0000 +vt 0.2518 0.1490 0.0000 +vt 0.2518 0.1508 0.0000 +vt 0.5806 0.1869 0.0000 +vt 0.5797 0.1850 0.0000 +vt 0.5816 0.1846 0.0000 +vt 0.5816 0.1865 0.0000 +vt 0.5811 0.1879 0.0000 +vt 0.5737 0.1805 0.0000 +vt 0.5746 0.1824 0.0000 +vt 0.5723 0.1814 0.0000 +vt 0.5790 0.1877 0.0000 +vt 0.5776 0.1884 0.0000 +vt 0.5766 0.1865 0.0000 +vt 0.5780 0.1858 0.0000 +vt 0.5761 0.1854 0.0000 +vt 0.5810 0.1830 0.0000 +vt 0.5799 0.1896 0.0000 +vt 0.5787 0.1905 0.0000 +vt 0.5800 0.1815 0.0000 +vt 0.5753 0.1838 0.0000 +vt 0.5786 0.1804 0.0000 +vt 0.5762 0.1890 0.0000 +vt 0.5753 0.1871 0.0000 +vt 0.5712 0.1878 0.0000 +vt 0.5707 0.1861 0.0000 +vt 0.5707 0.1843 0.0000 +vt 0.5772 0.1910 0.0000 +vt 0.5752 0.1800 0.0000 +vt 0.5713 0.1827 0.0000 +vt 0.5769 0.1799 0.0000 +vt 0.1027 0.1444 0.0000 +vt 0.1043 0.1444 0.0000 +vt 0.2719 0.0612 0.0000 +vt 0.2718 0.0608 0.0000 +vt 0.2735 0.0609 0.0000 +vt 0.2737 0.0612 0.0000 +vt 0.2752 0.0605 0.0000 +vt 0.2754 0.0608 0.0000 +vt 0.2766 0.0598 0.0000 +vt 0.2768 0.0601 0.0000 +vt 0.2776 0.0589 0.0000 +vt 0.2779 0.0591 0.0000 +vt 0.3411 0.0786 0.0000 +vt 0.3412 0.0782 0.0000 +vt 0.3429 0.0786 0.0000 +vt 0.3430 0.0790 0.0000 +vt 0.3448 0.0787 0.0000 +vt 0.3448 0.0790 0.0000 +vt 0.3462 0.0783 0.0000 +vt 0.3465 0.0786 0.0000 +vt 0.1011 0.1444 0.0000 +vt 0.2676 0.0592 0.0000 +vt 0.2679 0.0591 0.0000 +vt 0.2689 0.0599 0.0000 +vt 0.2687 0.0602 0.0000 +vt 0.4323 0.1243 0.0000 +vt 0.4324 0.1239 0.0000 +vt 0.4340 0.1235 0.0000 +vt 0.4340 0.1239 0.0000 +vt 0.4305 0.1243 0.0000 +vt 0.4306 0.1240 0.0000 +vt 0.4290 0.1240 0.0000 +vt 0.4291 0.1236 0.0000 +vt 0.9325 0.2715 0.0000 +vt 0.9326 0.2711 0.0000 +vt 0.9344 0.2708 0.0000 +vt 0.9344 0.2711 0.0000 +vt 0.9307 0.2714 0.0000 +vt 0.9307 0.2711 0.0000 +vt 0.9290 0.2710 0.0000 +vt 0.9293 0.2707 0.0000 +vt 0.1436 0.1882 0.0000 +vt 0.1644 0.1620 0.0000 +vt 0.7570 0.0821 0.0000 +vt 0.7570 0.0803 0.0000 +vt 0.7626 0.0813 0.0000 +vt 0.7576 0.0786 0.0000 +vt 0.7586 0.0772 0.0000 +vt 0.7601 0.0761 0.0000 +vt 0.7618 0.0756 0.0000 +vt 0.7636 0.0756 0.0000 +vt 0.7653 0.0762 0.0000 +vt 0.7667 0.0772 0.0000 +vt 0.7678 0.0789 0.0000 +vt 0.7683 0.0804 0.0000 +vt 0.7683 0.0819 0.0000 +vt 0.7678 0.0839 0.0000 +vt 0.7667 0.0853 0.0000 +vt 0.7652 0.0864 0.0000 +vt 0.7635 0.0869 0.0000 +vt 0.7617 0.0869 0.0000 +vt 0.7600 0.0864 0.0000 +vt 0.7586 0.0853 0.0000 +vt 0.7575 0.0838 0.0000 +vt 0.4072 0.2116 0.0000 +vt 0.4067 0.2116 0.0000 +vt 0.4067 0.2110 0.0000 +vt 0.4072 0.2110 0.0000 +vt 0.3961 0.0790 0.0000 +vt 0.3966 0.0790 0.0000 +vt 0.3966 0.0797 0.0000 +vt 0.3961 0.0797 0.0000 +vt 0.3969 0.0790 0.0000 +vt 0.3969 0.0797 0.0000 +vt 0.4075 0.2116 0.0000 +vt 0.4075 0.2110 0.0000 +vt 0.4718 0.1710 0.0000 +vt 0.4718 0.1705 0.0000 +vt 0.4722 0.1708 0.0000 +vt 0.4720 0.1711 0.0000 +vt 0.4718 0.1715 0.0000 +vt 0.4720 0.1714 0.0000 +vt 0.4725 0.1720 0.0000 +vt 0.4718 0.1720 0.0000 +vt 0.4722 0.1717 0.0000 +vt 0.4725 0.1718 0.0000 +vt 0.4725 0.1705 0.0000 +vt 0.4725 0.1707 0.0000 +vt 0.2537 0.0897 0.0000 +vt 0.2533 0.0897 0.0000 +vt 0.2533 0.0894 0.0000 +vt 0.2538 0.0894 0.0000 +vt 0.9466 0.1332 0.0000 +vt 0.9469 0.1332 0.0000 +vt 0.9469 0.1334 0.0000 +vt 0.9465 0.1334 0.0000 +vt 0.9466 0.1328 0.0000 +vt 0.9469 0.1328 0.0000 +vt 0.9465 0.1325 0.0000 +vt 0.9469 0.1325 0.0000 +vt 0.2612 0.0897 0.0000 +vt 0.2611 0.0894 0.0000 +vt 0.2616 0.0894 0.0000 +vt 0.2616 0.0897 0.0000 +vt 0.4067 0.2108 0.0000 +vt 0.4072 0.2108 0.0000 +vt 0.4717 0.1710 0.0000 +vt 0.4717 0.1706 0.0000 +vt 0.4717 0.1715 0.0000 +vt 0.4717 0.1719 0.0000 +vt 0.3966 0.0798 0.0000 +vt 0.3961 0.0798 0.0000 +vt 0.3969 0.0798 0.0000 +vt 0.4075 0.2108 0.0000 +vt 0.4726 0.1468 0.0000 +vt 0.4726 0.1476 0.0000 +vt 0.4724 0.1476 0.0000 +vt 0.4724 0.1467 0.0000 +vt 0.4718 0.1476 0.0000 +vt 0.4718 0.1467 0.0000 +vt 0.2509 0.0897 0.0000 +vt 0.2509 0.0894 0.0000 +vt 0.9493 0.1331 0.0000 +vt 0.9493 0.1334 0.0000 +vt 0.9493 0.1328 0.0000 +vt 0.9493 0.1326 0.0000 +vt 0.2640 0.0894 0.0000 +vt 0.2640 0.0897 0.0000 +vt 0.2410 0.0896 0.0000 +vt 0.2410 0.0894 0.0000 +vt 0.2507 0.0894 0.0000 +vt 0.2507 0.0897 0.0000 +vt 0.9592 0.1331 0.0000 +vt 0.9592 0.1333 0.0000 +vt 0.9495 0.1334 0.0000 +vt 0.9495 0.1331 0.0000 +vt 0.9592 0.1329 0.0000 +vt 0.9495 0.1328 0.0000 +vt 0.9592 0.1327 0.0000 +vt 0.9495 0.1326 0.0000 +vt 0.2739 0.0894 0.0000 +vt 0.2739 0.0896 0.0000 +vt 0.2642 0.0897 0.0000 +vt 0.2642 0.0894 0.0000 +vt 0.4072 0.2123 0.0000 +vt 0.4067 0.2123 0.0000 +vt 0.3961 0.0783 0.0000 +vt 0.3966 0.0783 0.0000 +vt 0.3969 0.0783 0.0000 +vt 0.4075 0.2123 0.0000 +vt 0.4732 0.1710 0.0000 +vt 0.4730 0.1711 0.0000 +vt 0.4728 0.1708 0.0000 +vt 0.4732 0.1705 0.0000 +vt 0.4732 0.1715 0.0000 +vt 0.4730 0.1714 0.0000 +vt 0.4728 0.1717 0.0000 +vt 0.4732 0.1720 0.0000 +vt 0.2537 0.0891 0.0000 +vt 0.2533 0.0891 0.0000 +vt 0.2978 0.0595 0.0000 +vt 0.2980 0.0598 0.0000 +vt 0.2976 0.0598 0.0000 +vt 0.2976 0.0595 0.0000 +vt 0.2978 0.0591 0.0000 +vt 0.2976 0.0591 0.0000 +vt 0.2976 0.0589 0.0000 +vt 0.2980 0.0589 0.0000 +vt 0.2612 0.0891 0.0000 +vt 0.2616 0.0891 0.0000 +vt 0.4072 0.2124 0.0000 +vt 0.4067 0.2124 0.0000 +vt 0.4733 0.1706 0.0000 +vt 0.4733 0.1710 0.0000 +vt 0.4733 0.1715 0.0000 +vt 0.4733 0.1719 0.0000 +vt 0.3961 0.0782 0.0000 +vt 0.3966 0.0782 0.0000 +vt 0.3969 0.0782 0.0000 +vt 0.4075 0.2124 0.0000 +vt 0.4711 0.1468 0.0000 +vt 0.4712 0.1467 0.0000 +vt 0.4712 0.1476 0.0000 +vt 0.4711 0.1476 0.0000 +vt 0.2509 0.0891 0.0000 +vt 0.2951 0.0595 0.0000 +vt 0.2951 0.0597 0.0000 +vt 0.2951 0.0592 0.0000 +vt 0.2951 0.0589 0.0000 +vt 0.2640 0.0891 0.0000 +vt 0.2410 0.0892 0.0000 +vt 0.2507 0.0891 0.0000 +vt 0.2853 0.0594 0.0000 +vt 0.2950 0.0595 0.0000 +vt 0.2950 0.0597 0.0000 +vt 0.2853 0.0596 0.0000 +vt 0.2853 0.0592 0.0000 +vt 0.2950 0.0592 0.0000 +vt 0.2853 0.0590 0.0000 +vt 0.2950 0.0589 0.0000 +vt 0.2642 0.0891 0.0000 +vt 0.2739 0.0892 0.0000 +vt 0.2630 0.1978 0.0000 +vt 0.2635 0.1979 0.0000 +vt 0.2629 0.1986 0.0000 +vt 0.2638 0.1984 0.0000 +vt 0.2638 0.1989 0.0000 +vt 0.2635 0.1993 0.0000 +vt 0.2630 0.1995 0.0000 +vt 0.2627 0.1994 0.0000 +vt 0.2627 0.1978 0.0000 +vt 0.2872 0.1729 0.0000 +vt 0.2877 0.1727 0.0000 +vt 0.2877 0.1736 0.0000 +vt 0.2879 0.1728 0.0000 +vt 0.2879 0.1744 0.0000 +vt 0.2877 0.1744 0.0000 +vt 0.2872 0.1742 0.0000 +vt 0.2869 0.1738 0.0000 +vt 0.2869 0.1733 0.0000 +vt 0.1944 0.2183 0.0000 +vt 0.1944 0.2181 0.0000 +vt 0.1947 0.2183 0.0000 +vt 0.1946 0.2180 0.0000 +vt 0.1948 0.2180 0.0000 +vt 0.1949 0.2181 0.0000 +vt 0.1950 0.2183 0.0000 +vt 0.1949 0.2184 0.0000 +vt 0.1948 0.2186 0.0000 +vt 0.1946 0.2186 0.0000 +vt 0.1944 0.2184 0.0000 +vt 0.4821 0.0590 0.0000 +vt 0.4821 0.0589 0.0000 +vt 0.4823 0.0589 0.0000 +vt 0.4823 0.0590 0.0000 +vt 0.4825 0.0590 0.0000 +vt 0.4825 0.0591 0.0000 +vt 0.9593 0.1331 0.0000 +vt 0.9593 0.1329 0.0000 +vt 0.5727 0.0407 0.0000 +vt 0.5727 0.0408 0.0000 +vt 0.5725 0.0408 0.0000 +vt 0.5725 0.0407 0.0000 +vt 0.2740 0.0896 0.0000 +vt 0.2740 0.0894 0.0000 +vt 0.4820 0.0591 0.0000 +vt 0.4819 0.0590 0.0000 +vt 0.6244 0.1485 0.0000 +vt 0.6244 0.1484 0.0000 +vt 0.6246 0.1484 0.0000 +vt 0.6246 0.1485 0.0000 +vt 0.2852 0.0592 0.0000 +vt 0.2852 0.0594 0.0000 +vt 0.2999 0.2431 0.0000 +vt 0.2999 0.2430 0.0000 +vt 0.3001 0.2430 0.0000 +vt 0.3001 0.2431 0.0000 +vt 0.2997 0.2431 0.0000 +vt 0.2997 0.2430 0.0000 +vt 0.3984 0.0790 0.0000 +vt 0.3984 0.0796 0.0000 +vt 0.3984 0.0785 0.0000 +vt 0.3984 0.0783 0.0000 +vt 0.2894 0.1732 0.0000 +vt 0.2894 0.1740 0.0000 +vt 0.4090 0.2122 0.0000 +vt 0.4090 0.2123 0.0000 +vt 0.4090 0.2116 0.0000 +vt 0.4090 0.2110 0.0000 +vt 0.4090 0.2109 0.0000 +vt 0.2612 0.1990 0.0000 +vt 0.2612 0.1982 0.0000 +vt 0.3984 0.0798 0.0000 +vt 0.4480 0.1359 0.0000 +vt 0.4475 0.1359 0.0000 +vt 0.4475 0.1352 0.0000 +vt 0.4480 0.1352 0.0000 +vt 0.2997 0.1791 0.0000 +vt 0.3002 0.1791 0.0000 +vt 0.3002 0.1798 0.0000 +vt 0.2997 0.1798 0.0000 +vt 0.3005 0.1791 0.0000 +vt 0.3005 0.1798 0.0000 +vt 0.4483 0.1359 0.0000 +vt 0.4483 0.1352 0.0000 +vt 0.1313 0.1730 0.0000 +vt 0.1313 0.1725 0.0000 +vt 0.1316 0.1728 0.0000 +vt 0.1314 0.1731 0.0000 +vt 0.1313 0.1734 0.0000 +vt 0.1314 0.1734 0.0000 +vt 0.1319 0.1740 0.0000 +vt 0.1313 0.1740 0.0000 +vt 0.1316 0.1737 0.0000 +vt 0.1319 0.1738 0.0000 +vt 0.1319 0.1725 0.0000 +vt 0.1319 0.1727 0.0000 +vt 0.8420 0.2798 0.0000 +vt 0.8416 0.2797 0.0000 +vt 0.8416 0.2794 0.0000 +vt 0.8420 0.2794 0.0000 +vt 0.2193 0.0788 0.0000 +vt 0.2196 0.0788 0.0000 +vt 0.2196 0.0791 0.0000 +vt 0.2191 0.0791 0.0000 +vt 0.2193 0.0785 0.0000 +vt 0.2196 0.0785 0.0000 +vt 0.2191 0.0782 0.0000 +vt 0.2196 0.0782 0.0000 +vt 0.2347 0.1000 0.0000 +vt 0.2346 0.0997 0.0000 +vt 0.2351 0.0997 0.0000 +vt 0.2351 0.1000 0.0000 +vt 0.4476 0.1351 0.0000 +vt 0.4480 0.1351 0.0000 +vt 0.1312 0.1730 0.0000 +vt 0.1312 0.1725 0.0000 +vt 0.1312 0.1735 0.0000 +vt 0.1312 0.1739 0.0000 +vt 0.3002 0.1799 0.0000 +vt 0.2997 0.1799 0.0000 +vt 0.3005 0.1799 0.0000 +vt 0.4483 0.1351 0.0000 +vt 0.3978 0.0892 0.0000 +vt 0.3978 0.0899 0.0000 +vt 0.3977 0.0900 0.0000 +vt 0.3977 0.0891 0.0000 +vt 0.3971 0.0900 0.0000 +vt 0.3971 0.0891 0.0000 +vt 0.8391 0.2797 0.0000 +vt 0.8391 0.2794 0.0000 +vt 0.2220 0.0788 0.0000 +vt 0.2220 0.0791 0.0000 +vt 0.2220 0.0785 0.0000 +vt 0.2220 0.0782 0.0000 +vt 0.2375 0.0997 0.0000 +vt 0.2375 0.1000 0.0000 +vt 0.8292 0.2797 0.0000 +vt 0.8292 0.2794 0.0000 +vt 0.8390 0.2794 0.0000 +vt 0.8390 0.2797 0.0000 +vt 0.2319 0.0788 0.0000 +vt 0.2319 0.0790 0.0000 +vt 0.2222 0.0791 0.0000 +vt 0.2222 0.0788 0.0000 +vt 0.2319 0.0785 0.0000 +vt 0.2222 0.0785 0.0000 +vt 0.2319 0.0783 0.0000 +vt 0.2222 0.0783 0.0000 +vt 0.2474 0.0997 0.0000 +vt 0.2474 0.0999 0.0000 +vt 0.2377 0.1000 0.0000 +vt 0.2377 0.0997 0.0000 +vt 0.4480 0.1366 0.0000 +vt 0.4475 0.1366 0.0000 +vt 0.2997 0.1784 0.0000 +vt 0.3002 0.1784 0.0000 +vt 0.3005 0.1784 0.0000 +vt 0.4483 0.1366 0.0000 +vt 0.1326 0.1730 0.0000 +vt 0.1325 0.1731 0.0000 +vt 0.1323 0.1728 0.0000 +vt 0.1326 0.1725 0.0000 +vt 0.1326 0.1734 0.0000 +vt 0.1325 0.1734 0.0000 +vt 0.1323 0.1737 0.0000 +vt 0.1326 0.1740 0.0000 +vt 0.8420 0.2791 0.0000 +vt 0.8416 0.2791 0.0000 +vt 0.9014 0.2634 0.0000 +vt 0.9016 0.2636 0.0000 +vt 0.9012 0.2636 0.0000 +vt 0.9012 0.2634 0.0000 +vt 0.9014 0.2630 0.0000 +vt 0.9012 0.2630 0.0000 +vt 0.9012 0.2628 0.0000 +vt 0.9016 0.2628 0.0000 +vt 0.2347 0.0994 0.0000 +vt 0.2351 0.0994 0.0000 +vt 0.4480 0.1367 0.0000 +vt 0.4476 0.1367 0.0000 +vt 0.1327 0.1725 0.0000 +vt 0.1327 0.1730 0.0000 +vt 0.1327 0.1735 0.0000 +vt 0.1327 0.1739 0.0000 +vt 0.2997 0.1783 0.0000 +vt 0.3002 0.1783 0.0000 +vt 0.3005 0.1783 0.0000 +vt 0.4483 0.1367 0.0000 +vt 0.3964 0.0892 0.0000 +vt 0.3965 0.0891 0.0000 +vt 0.3965 0.0900 0.0000 +vt 0.3964 0.0899 0.0000 +vt 0.8391 0.2791 0.0000 +vt 0.8987 0.2634 0.0000 +vt 0.8987 0.2636 0.0000 +vt 0.8987 0.2630 0.0000 +vt 0.8987 0.2628 0.0000 +vt 0.2375 0.0994 0.0000 +vt 0.8292 0.2792 0.0000 +vt 0.8390 0.2791 0.0000 +vt 0.8889 0.2633 0.0000 +vt 0.8986 0.2633 0.0000 +vt 0.8986 0.2636 0.0000 +vt 0.8889 0.2635 0.0000 +vt 0.8889 0.2631 0.0000 +vt 0.8986 0.2630 0.0000 +vt 0.8889 0.2629 0.0000 +vt 0.8986 0.2628 0.0000 +vt 0.2377 0.0994 0.0000 +vt 0.2474 0.0995 0.0000 +vt 0.4085 0.2018 0.0000 +vt 0.4089 0.2020 0.0000 +vt 0.4084 0.2027 0.0000 +vt 0.4093 0.2024 0.0000 +vt 0.4093 0.2029 0.0000 +vt 0.4089 0.2034 0.0000 +vt 0.4085 0.2035 0.0000 +vt 0.4082 0.2035 0.0000 +vt 0.4082 0.2019 0.0000 +vt 0.3865 0.0784 0.0000 +vt 0.3870 0.0782 0.0000 +vt 0.3870 0.0791 0.0000 +vt 0.3872 0.0783 0.0000 +vt 0.3872 0.0798 0.0000 +vt 0.3870 0.0799 0.0000 +vt 0.3865 0.0797 0.0000 +vt 0.3862 0.0793 0.0000 +vt 0.3862 0.0788 0.0000 +vt 0.7521 0.1291 0.0000 +vt 0.7523 0.1291 0.0000 +vt 0.7521 0.1294 0.0000 +vt 0.7524 0.1293 0.0000 +vt 0.7524 0.1295 0.0000 +vt 0.7523 0.1296 0.0000 +vt 0.7521 0.1297 0.0000 +vt 0.7520 0.1296 0.0000 +vt 0.7518 0.1295 0.0000 +vt 0.7518 0.1293 0.0000 +vt 0.7520 0.1291 0.0000 +vt 0.4462 0.2311 0.0000 +vt 0.4462 0.2310 0.0000 +vt 0.4464 0.2310 0.0000 +vt 0.4464 0.2311 0.0000 +vt 0.4466 0.2311 0.0000 +vt 0.4465 0.2312 0.0000 +vt 0.2320 0.0788 0.0000 +vt 0.2320 0.0786 0.0000 +vt 0.4290 0.0891 0.0000 +vt 0.4291 0.0892 0.0000 +vt 0.4288 0.0892 0.0000 +vt 0.4288 0.0891 0.0000 +vt 0.2475 0.0999 0.0000 +vt 0.2475 0.0997 0.0000 +vt 0.4461 0.2312 0.0000 +vt 0.4460 0.2311 0.0000 +vt 0.6636 0.1034 0.0000 +vt 0.6636 0.1032 0.0000 +vt 0.6639 0.1032 0.0000 +vt 0.6638 0.1034 0.0000 +vt 0.8888 0.2631 0.0000 +vt 0.8888 0.2633 0.0000 +vt 0.8345 0.2017 0.0000 +vt 0.8345 0.2016 0.0000 +vt 0.8347 0.2016 0.0000 +vt 0.8347 0.2017 0.0000 +vt 0.8343 0.2018 0.0000 +vt 0.8343 0.2016 0.0000 +vt 0.3020 0.1791 0.0000 +vt 0.3020 0.1797 0.0000 +vt 0.3020 0.1785 0.0000 +vt 0.3020 0.1784 0.0000 +vt 0.3888 0.0787 0.0000 +vt 0.3888 0.0795 0.0000 +vt 0.4498 0.1365 0.0000 +vt 0.4498 0.1366 0.0000 +vt 0.4498 0.1359 0.0000 +vt 0.4498 0.1353 0.0000 +vt 0.4498 0.1351 0.0000 +vt 0.4067 0.2031 0.0000 +vt 0.4067 0.2023 0.0000 +vt 0.3020 0.1799 0.0000 +vt 0.8404 0.1713 0.0000 +vt 0.8386 0.1713 0.0000 +vt 0.8386 0.1670 0.0000 +vt 0.8404 0.1670 0.0000 +vt 0.8420 0.1713 0.0000 +vt 0.8420 0.1670 0.0000 +vt 0.8433 0.1713 0.0000 +vt 0.8433 0.1670 0.0000 +vt 0.1644 0.0907 0.0000 +vt 0.1644 0.0891 0.0000 +vt 0.1687 0.0891 0.0000 +vt 0.1687 0.0907 0.0000 +vt 0.1644 0.0925 0.0000 +vt 0.1687 0.0925 0.0000 +vt 0.1681 0.0942 0.0000 +vt 0.1644 0.0942 0.0000 +vt 0.1675 0.0958 0.0000 +vt 0.1644 0.0958 0.0000 +vt 0.1419 0.0830 0.0000 +vt 0.1419 0.0856 0.0000 +vt 0.1406 0.0856 0.0000 +vt 0.1406 0.0825 0.0000 +vt 0.3166 0.1717 0.0000 +vt 0.3125 0.1717 0.0000 +vt 0.3125 0.1699 0.0000 +vt 0.3166 0.1699 0.0000 +vt 0.1453 0.0831 0.0000 +vt 0.1453 0.0856 0.0000 +vt 0.1437 0.0856 0.0000 +vt 0.1437 0.0830 0.0000 +vt 0.8404 0.1743 0.0000 +vt 0.8386 0.1743 0.0000 +vt 0.8420 0.1743 0.0000 +vt 0.8433 0.1743 0.0000 +vt 0.1614 0.0907 0.0000 +vt 0.1614 0.0891 0.0000 +vt 0.1614 0.0925 0.0000 +vt 0.1614 0.0942 0.0000 +vt 0.1614 0.0958 0.0000 +vt 0.1419 0.0886 0.0000 +vt 0.1406 0.0886 0.0000 +vt 0.1437 0.0886 0.0000 +vt 0.1453 0.0886 0.0000 +vt 0.2060 0.1367 0.0000 +vt 0.2086 0.1367 0.0000 +vt 0.2060 0.1381 0.0000 +vt 0.7707 0.2515 0.0000 +vt 0.7707 0.2541 0.0000 +vt 0.7686 0.2541 0.0000 +vt 0.7686 0.2508 0.0000 +vt 0.7806 0.1511 0.0000 +vt 0.7793 0.1511 0.0000 +vt 0.7793 0.1493 0.0000 +vt 0.7814 0.1493 0.0000 +vt 0.2093 0.1381 0.0000 +vt 0.2101 0.1402 0.0000 +vt 0.2060 0.1402 0.0000 +vt 0.7664 0.2541 0.0000 +vt 0.7664 0.2500 0.0000 +vt 0.7771 0.1511 0.0000 +vt 0.7771 0.1493 0.0000 +vt 0.8427 0.1235 0.0000 +vt 0.8433 0.1244 0.0000 +vt 0.8421 0.1259 0.0000 +vt 0.8408 0.1245 0.0000 +vt 0.8437 0.1230 0.0000 +vt 0.8368 0.1713 0.0000 +vt 0.8368 0.1670 0.0000 +vt 0.8352 0.1713 0.0000 +vt 0.8352 0.1670 0.0000 +vt 0.8340 0.1713 0.0000 +vt 0.8340 0.1670 0.0000 +vt 0.9030 0.1953 0.0000 +vt 0.9073 0.1953 0.0000 +vt 0.9073 0.1969 0.0000 +vt 0.9030 0.1969 0.0000 +vt 0.9030 0.1936 0.0000 +vt 0.9073 0.1936 0.0000 +vt 0.9066 0.1918 0.0000 +vt 0.9030 0.1918 0.0000 +vt 0.9061 0.1902 0.0000 +vt 0.9030 0.1902 0.0000 +vt 0.1487 0.0830 0.0000 +vt 0.1499 0.0825 0.0000 +vt 0.1499 0.0856 0.0000 +vt 0.1487 0.0856 0.0000 +vt 0.3582 0.1235 0.0000 +vt 0.3582 0.1254 0.0000 +vt 0.3541 0.1254 0.0000 +vt 0.3541 0.1235 0.0000 +vt 0.1468 0.0830 0.0000 +vt 0.1468 0.0856 0.0000 +vt 0.8368 0.1743 0.0000 +vt 0.8352 0.1743 0.0000 +vt 0.8340 0.1743 0.0000 +vt 0.8999 0.1953 0.0000 +vt 0.8999 0.1969 0.0000 +vt 0.8999 0.1936 0.0000 +vt 0.8999 0.1918 0.0000 +vt 0.8999 0.1902 0.0000 +vt 0.1499 0.0886 0.0000 +vt 0.1487 0.0886 0.0000 +vt 0.1468 0.0886 0.0000 +vt 0.2060 0.1534 0.0000 +vt 0.2060 0.1521 0.0000 +vt 0.2086 0.1534 0.0000 +vt 0.1406 0.1780 0.0000 +vt 0.1428 0.1773 0.0000 +vt 0.1428 0.1806 0.0000 +vt 0.1406 0.1806 0.0000 +vt 0.9087 0.2901 0.0000 +vt 0.9079 0.2883 0.0000 +vt 0.9101 0.2883 0.0000 +vt 0.9101 0.2901 0.0000 +vt 0.2093 0.1521 0.0000 +vt 0.2060 0.1500 0.0000 +vt 0.2101 0.1500 0.0000 +vt 0.1449 0.1806 0.0000 +vt 0.1449 0.1765 0.0000 +vt 0.9122 0.2883 0.0000 +vt 0.9122 0.2901 0.0000 +vt 0.8398 0.1175 0.0000 +vt 0.8379 0.1184 0.0000 +vt 0.8375 0.1165 0.0000 +vt 0.8394 0.1165 0.0000 +vt 0.8407 0.1170 0.0000 +vt 0.8334 0.1244 0.0000 +vt 0.8353 0.1235 0.0000 +vt 0.8343 0.1258 0.0000 +vt 0.8406 0.1191 0.0000 +vt 0.8412 0.1205 0.0000 +vt 0.8393 0.1215 0.0000 +vt 0.8387 0.1201 0.0000 +vt 0.8359 0.1171 0.0000 +vt 0.8383 0.1220 0.0000 +vt 0.8425 0.1182 0.0000 +vt 0.8434 0.1194 0.0000 +vt 0.8344 0.1181 0.0000 +vt 0.8367 0.1228 0.0000 +vt 0.8333 0.1195 0.0000 +vt 0.8419 0.1219 0.0000 +vt 0.8400 0.1228 0.0000 +vt 0.8407 0.1269 0.0000 +vt 0.8390 0.1274 0.0000 +vt 0.8372 0.1274 0.0000 +vt 0.8439 0.1209 0.0000 +vt 0.8329 0.1229 0.0000 +vt 0.8356 0.1268 0.0000 +vt 0.8328 0.1212 0.0000 +vt 0.8386 0.1667 0.0000 +vt 0.8402 0.1667 0.0000 +vt 0.9735 0.1504 0.0000 +vt 0.9735 0.1500 0.0000 +vt 0.9752 0.1501 0.0000 +vt 0.9753 0.1504 0.0000 +vt 0.9768 0.1497 0.0000 +vt 0.9770 0.1500 0.0000 +vt 0.9783 0.1490 0.0000 +vt 0.9785 0.1493 0.0000 +vt 0.9793 0.1481 0.0000 +vt 0.9795 0.1483 0.0000 +vt 0.3982 0.1239 0.0000 +vt 0.3983 0.1235 0.0000 +vt 0.4001 0.1240 0.0000 +vt 0.4001 0.1243 0.0000 +vt 0.4020 0.1240 0.0000 +vt 0.4019 0.1243 0.0000 +vt 0.4033 0.1237 0.0000 +vt 0.4036 0.1239 0.0000 +vt 0.8370 0.1667 0.0000 +vt 0.9693 0.1485 0.0000 +vt 0.9695 0.1483 0.0000 +vt 0.9706 0.1491 0.0000 +vt 0.9704 0.1494 0.0000 +vt 0.3746 0.0790 0.0000 +vt 0.3747 0.0786 0.0000 +vt 0.3764 0.0782 0.0000 +vt 0.3764 0.0786 0.0000 +vt 0.3729 0.0790 0.0000 +vt 0.3730 0.0787 0.0000 +vt 0.3713 0.0787 0.0000 +vt 0.3715 0.0783 0.0000 +vt 0.2583 0.1002 0.0000 +vt 0.2583 0.0998 0.0000 +vt 0.2601 0.0995 0.0000 +vt 0.2602 0.0998 0.0000 +vt 0.2564 0.1001 0.0000 +vt 0.2564 0.0998 0.0000 +vt 0.2548 0.0997 0.0000 +vt 0.2551 0.0994 0.0000 +vt 0.2089 0.1370 0.0000 +vt 0.2089 0.1532 0.0000 +vt 0.0430 0.1345 0.0000 +vt 0.0431 0.1327 0.0000 +vt 0.0487 0.1336 0.0000 +vt 0.0436 0.1310 0.0000 +vt 0.0447 0.1296 0.0000 +vt 0.0461 0.1285 0.0000 +vt 0.0478 0.1280 0.0000 +vt 0.0496 0.1280 0.0000 +vt 0.0513 0.1285 0.0000 +vt 0.0528 0.1296 0.0000 +vt 0.0539 0.1313 0.0000 +vt 0.0544 0.1328 0.0000 +vt 0.0543 0.1343 0.0000 +vt 0.0538 0.1363 0.0000 +vt 0.0528 0.1377 0.0000 +vt 0.0513 0.1388 0.0000 +vt 0.0496 0.1393 0.0000 +vt 0.0478 0.1393 0.0000 +vt 0.0461 0.1387 0.0000 +vt 0.0446 0.1377 0.0000 +vt 0.0436 0.1362 0.0000 +vt 0.3278 0.0701 0.0000 +vt 0.3273 0.0701 0.0000 +vt 0.3273 0.0694 0.0000 +vt 0.3278 0.0694 0.0000 +vt 0.9026 0.2799 0.0000 +vt 0.9031 0.2799 0.0000 +vt 0.9031 0.2806 0.0000 +vt 0.9026 0.2806 0.0000 +vt 0.9034 0.2799 0.0000 +vt 0.9034 0.2806 0.0000 +vt 0.3281 0.0701 0.0000 +vt 0.3281 0.0694 0.0000 +vt 0.4058 0.0787 0.0000 +vt 0.4058 0.0782 0.0000 +vt 0.4062 0.0785 0.0000 +vt 0.4060 0.0788 0.0000 +vt 0.4058 0.0792 0.0000 +vt 0.4060 0.0791 0.0000 +vt 0.4065 0.0797 0.0000 +vt 0.4058 0.0797 0.0000 +vt 0.4062 0.0794 0.0000 +vt 0.4065 0.0795 0.0000 +vt 0.4065 0.0782 0.0000 +vt 0.4065 0.0784 0.0000 +vt 0.9216 0.2714 0.0000 +vt 0.9212 0.2714 0.0000 +vt 0.9212 0.2710 0.0000 +vt 0.9217 0.2710 0.0000 +vt 0.3055 0.0595 0.0000 +vt 0.3057 0.0595 0.0000 +vt 0.3057 0.0598 0.0000 +vt 0.3053 0.0598 0.0000 +vt 0.3055 0.0591 0.0000 +vt 0.3057 0.0591 0.0000 +vt 0.3053 0.0589 0.0000 +vt 0.3057 0.0589 0.0000 +vt 0.9417 0.2628 0.0000 +vt 0.9418 0.2631 0.0000 +vt 0.9413 0.2631 0.0000 +vt 0.9413 0.2628 0.0000 +vt 0.3274 0.0693 0.0000 +vt 0.3278 0.0693 0.0000 +vt 0.4057 0.0787 0.0000 +vt 0.4057 0.0783 0.0000 +vt 0.4057 0.0792 0.0000 +vt 0.4057 0.0796 0.0000 +vt 0.9031 0.2807 0.0000 +vt 0.9026 0.2807 0.0000 +vt 0.9034 0.2807 0.0000 +vt 0.3281 0.0693 0.0000 +vt 0.2883 0.2080 0.0000 +vt 0.2883 0.2088 0.0000 +vt 0.2882 0.2088 0.0000 +vt 0.2882 0.2079 0.0000 +vt 0.2876 0.2088 0.0000 +vt 0.2876 0.2079 0.0000 +vt 0.9188 0.2713 0.0000 +vt 0.9188 0.2710 0.0000 +vt 0.3082 0.0595 0.0000 +vt 0.3082 0.0597 0.0000 +vt 0.3082 0.0592 0.0000 +vt 0.3082 0.0589 0.0000 +vt 0.9389 0.2631 0.0000 +vt 0.9389 0.2628 0.0000 +vt 0.9089 0.2713 0.0000 +vt 0.9089 0.2710 0.0000 +vt 0.9186 0.2710 0.0000 +vt 0.9186 0.2713 0.0000 +vt 0.3180 0.0594 0.0000 +vt 0.3180 0.0596 0.0000 +vt 0.3083 0.0597 0.0000 +vt 0.3083 0.0595 0.0000 +vt 0.3180 0.0592 0.0000 +vt 0.3083 0.0592 0.0000 +vt 0.3180 0.0590 0.0000 +vt 0.3083 0.0589 0.0000 +vt 0.9290 0.2631 0.0000 +vt 0.9290 0.2628 0.0000 +vt 0.9387 0.2628 0.0000 +vt 0.9387 0.2631 0.0000 +vt 0.3278 0.0708 0.0000 +vt 0.3273 0.0708 0.0000 +vt 0.9026 0.2792 0.0000 +vt 0.9031 0.2792 0.0000 +vt 0.9034 0.2792 0.0000 +vt 0.3281 0.0708 0.0000 +vt 0.4072 0.0787 0.0000 +vt 0.4070 0.0788 0.0000 +vt 0.4068 0.0785 0.0000 +vt 0.4072 0.0782 0.0000 +vt 0.4072 0.0792 0.0000 +vt 0.4070 0.0791 0.0000 +vt 0.4068 0.0794 0.0000 +vt 0.4072 0.0797 0.0000 +vt 0.9216 0.2707 0.0000 +vt 0.9212 0.2707 0.0000 +vt 0.9433 0.2179 0.0000 +vt 0.9434 0.2182 0.0000 +vt 0.9430 0.2182 0.0000 +vt 0.9430 0.2179 0.0000 +vt 0.9433 0.2176 0.0000 +vt 0.9430 0.2176 0.0000 +vt 0.9430 0.2173 0.0000 +vt 0.9434 0.2173 0.0000 +vt 0.9417 0.2634 0.0000 +vt 0.9413 0.2634 0.0000 +vt 0.3278 0.0709 0.0000 +vt 0.3274 0.0709 0.0000 +vt 0.4073 0.0783 0.0000 +vt 0.4073 0.0787 0.0000 +vt 0.4073 0.0792 0.0000 +vt 0.4073 0.0796 0.0000 +vt 0.9026 0.2791 0.0000 +vt 0.9031 0.2791 0.0000 +vt 0.9034 0.2791 0.0000 +vt 0.3281 0.0709 0.0000 +vt 0.2869 0.2080 0.0000 +vt 0.2870 0.2079 0.0000 +vt 0.2870 0.2088 0.0000 +vt 0.2869 0.2088 0.0000 +vt 0.9188 0.2707 0.0000 +vt 0.9406 0.2179 0.0000 +vt 0.9406 0.2182 0.0000 +vt 0.9406 0.2176 0.0000 +vt 0.9406 0.2174 0.0000 +vt 0.9389 0.2634 0.0000 +vt 0.9089 0.2708 0.0000 +vt 0.9186 0.2707 0.0000 +vt 0.9307 0.2179 0.0000 +vt 0.9404 0.2179 0.0000 +vt 0.9404 0.2182 0.0000 +vt 0.9307 0.2181 0.0000 +vt 0.9307 0.2176 0.0000 +vt 0.9404 0.2176 0.0000 +vt 0.9307 0.2174 0.0000 +vt 0.9404 0.2174 0.0000 +vt 0.9387 0.2634 0.0000 +vt 0.9290 0.2633 0.0000 +vt 0.2758 0.1793 0.0000 +vt 0.2763 0.1795 0.0000 +vt 0.2758 0.1802 0.0000 +vt 0.2766 0.1799 0.0000 +vt 0.2766 0.1804 0.0000 +vt 0.2763 0.1809 0.0000 +vt 0.2758 0.1810 0.0000 +vt 0.2756 0.1810 0.0000 +vt 0.2756 0.1794 0.0000 +vt 0.1302 0.0645 0.0000 +vt 0.1307 0.0643 0.0000 +vt 0.1307 0.0652 0.0000 +vt 0.1309 0.0644 0.0000 +vt 0.1309 0.0659 0.0000 +vt 0.1307 0.0660 0.0000 +vt 0.1302 0.0658 0.0000 +vt 0.1299 0.0654 0.0000 +vt 0.1299 0.0649 0.0000 +vt 0.7267 0.1034 0.0000 +vt 0.7269 0.1034 0.0000 +vt 0.7267 0.1037 0.0000 +vt 0.7270 0.1036 0.0000 +vt 0.7270 0.1038 0.0000 +vt 0.7269 0.1039 0.0000 +vt 0.7267 0.1040 0.0000 +vt 0.7266 0.1039 0.0000 +vt 0.7264 0.1038 0.0000 +vt 0.7264 0.1036 0.0000 +vt 0.7266 0.1034 0.0000 +vt 0.2743 0.2350 0.0000 +vt 0.2742 0.2349 0.0000 +vt 0.2745 0.2349 0.0000 +vt 0.2745 0.2350 0.0000 +vt 0.2747 0.2350 0.0000 +vt 0.2746 0.2351 0.0000 +vt 0.3181 0.0594 0.0000 +vt 0.3181 0.0592 0.0000 +vt 0.2591 0.1078 0.0000 +vt 0.2591 0.1077 0.0000 +vt 0.2593 0.1076 0.0000 +vt 0.2593 0.1077 0.0000 +vt 0.2595 0.1077 0.0000 +vt 0.2595 0.1078 0.0000 +vt 0.2741 0.2351 0.0000 +vt 0.2740 0.2350 0.0000 +vt 0.8413 0.0633 0.0000 +vt 0.8415 0.0633 0.0000 +vt 0.8415 0.0636 0.0000 +vt 0.8413 0.0635 0.0000 +vt 0.9306 0.2177 0.0000 +vt 0.9306 0.2179 0.0000 +vt 0.4645 0.2208 0.0000 +vt 0.4645 0.2207 0.0000 +vt 0.4647 0.2207 0.0000 +vt 0.4647 0.2208 0.0000 +vt 0.4643 0.2208 0.0000 +vt 0.4643 0.2207 0.0000 +vt 0.9049 0.2799 0.0000 +vt 0.9049 0.2805 0.0000 +vt 0.9049 0.2793 0.0000 +vt 0.9049 0.2792 0.0000 +vt 0.1325 0.0648 0.0000 +vt 0.1325 0.0656 0.0000 +vt 0.3296 0.0706 0.0000 +vt 0.3296 0.0708 0.0000 +vt 0.3296 0.0701 0.0000 +vt 0.3296 0.0695 0.0000 +vt 0.3296 0.0693 0.0000 +vt 0.2740 0.1806 0.0000 +vt 0.2740 0.1798 0.0000 +vt 0.9049 0.2807 0.0000 +vt 0.3375 0.0701 0.0000 +vt 0.3370 0.0701 0.0000 +vt 0.3370 0.0694 0.0000 +vt 0.3375 0.0694 0.0000 +vt 0.2740 0.1891 0.0000 +vt 0.2746 0.1891 0.0000 +vt 0.2746 0.1898 0.0000 +vt 0.2740 0.1898 0.0000 +vt 0.2749 0.1891 0.0000 +vt 0.2749 0.1898 0.0000 +vt 0.3378 0.0701 0.0000 +vt 0.3378 0.0694 0.0000 +vt 0.1523 0.1770 0.0000 +vt 0.1523 0.1765 0.0000 +vt 0.1527 0.1768 0.0000 +vt 0.1525 0.1771 0.0000 +vt 0.1523 0.1775 0.0000 +vt 0.1525 0.1774 0.0000 +vt 0.1530 0.1780 0.0000 +vt 0.1523 0.1780 0.0000 +vt 0.1527 0.1777 0.0000 +vt 0.1530 0.1778 0.0000 +vt 0.1530 0.1765 0.0000 +vt 0.1530 0.1767 0.0000 +vt 0.8704 0.2889 0.0000 +vt 0.8700 0.2889 0.0000 +vt 0.8700 0.2886 0.0000 +vt 0.8704 0.2886 0.0000 +vt 0.9625 0.0803 0.0000 +vt 0.9628 0.0803 0.0000 +vt 0.9628 0.0805 0.0000 +vt 0.9624 0.0805 0.0000 +vt 0.9625 0.0799 0.0000 +vt 0.9628 0.0799 0.0000 +vt 0.9624 0.0797 0.0000 +vt 0.9628 0.0797 0.0000 +vt 0.0613 0.2463 0.0000 +vt 0.0614 0.2466 0.0000 +vt 0.0609 0.2466 0.0000 +vt 0.0609 0.2463 0.0000 +vt 0.3370 0.0693 0.0000 +vt 0.3375 0.0693 0.0000 +vt 0.1522 0.1770 0.0000 +vt 0.1522 0.1766 0.0000 +vt 0.1522 0.1775 0.0000 +vt 0.1522 0.1779 0.0000 +vt 0.2746 0.1899 0.0000 +vt 0.2741 0.1899 0.0000 +vt 0.2749 0.1899 0.0000 +vt 0.3378 0.0693 0.0000 +vt 0.3955 0.2178 0.0000 +vt 0.3955 0.2186 0.0000 +vt 0.3954 0.2187 0.0000 +vt 0.3954 0.2178 0.0000 +vt 0.3947 0.2187 0.0000 +vt 0.3947 0.2178 0.0000 +vt 0.8675 0.2889 0.0000 +vt 0.8675 0.2886 0.0000 +vt 0.9652 0.0803 0.0000 +vt 0.9652 0.0805 0.0000 +vt 0.9652 0.0799 0.0000 +vt 0.9652 0.0797 0.0000 +vt 0.0585 0.2466 0.0000 +vt 0.0585 0.2463 0.0000 +vt 0.8576 0.2888 0.0000 +vt 0.8576 0.2886 0.0000 +vt 0.8674 0.2886 0.0000 +vt 0.8674 0.2889 0.0000 +vt 0.9751 0.0802 0.0000 +vt 0.9751 0.0804 0.0000 +vt 0.9654 0.0805 0.0000 +vt 0.9654 0.0803 0.0000 +vt 0.9751 0.0800 0.0000 +vt 0.9654 0.0799 0.0000 +vt 0.9751 0.0798 0.0000 +vt 0.9654 0.0797 0.0000 +vt 0.0486 0.2466 0.0000 +vt 0.0486 0.2464 0.0000 +vt 0.0583 0.2463 0.0000 +vt 0.0583 0.2466 0.0000 +vt 0.3375 0.0708 0.0000 +vt 0.3370 0.0708 0.0000 +vt 0.2740 0.1885 0.0000 +vt 0.2746 0.1885 0.0000 +vt 0.2749 0.1885 0.0000 +vt 0.3378 0.0708 0.0000 +vt 0.1537 0.1770 0.0000 +vt 0.1536 0.1771 0.0000 +vt 0.1534 0.1768 0.0000 +vt 0.1537 0.1765 0.0000 +vt 0.1537 0.1775 0.0000 +vt 0.1536 0.1774 0.0000 +vt 0.1534 0.1777 0.0000 +vt 0.1537 0.1780 0.0000 +vt 0.8704 0.2883 0.0000 +vt 0.8700 0.2883 0.0000 +vt 0.8016 0.2797 0.0000 +vt 0.8018 0.2800 0.0000 +vt 0.8014 0.2800 0.0000 +vt 0.8014 0.2797 0.0000 +vt 0.8016 0.2794 0.0000 +vt 0.8014 0.2794 0.0000 +vt 0.8014 0.2791 0.0000 +vt 0.8018 0.2791 0.0000 +vt 0.0613 0.2469 0.0000 +vt 0.0609 0.2469 0.0000 +vt 0.3375 0.0709 0.0000 +vt 0.3370 0.0709 0.0000 +vt 0.1538 0.1766 0.0000 +vt 0.1538 0.1770 0.0000 +vt 0.1538 0.1775 0.0000 +vt 0.1538 0.1779 0.0000 +vt 0.2741 0.1883 0.0000 +vt 0.2746 0.1883 0.0000 +vt 0.2749 0.1883 0.0000 +vt 0.3378 0.0709 0.0000 +vt 0.3940 0.2178 0.0000 +vt 0.3942 0.2178 0.0000 +vt 0.3942 0.2187 0.0000 +vt 0.3940 0.2186 0.0000 +vt 0.8675 0.2883 0.0000 +vt 0.7989 0.2797 0.0000 +vt 0.7989 0.2800 0.0000 +vt 0.7989 0.2794 0.0000 +vt 0.7989 0.2791 0.0000 +vt 0.0585 0.2469 0.0000 +vt 0.8576 0.2884 0.0000 +vt 0.8674 0.2883 0.0000 +vt 0.7891 0.2797 0.0000 +vt 0.7988 0.2797 0.0000 +vt 0.7988 0.2800 0.0000 +vt 0.7891 0.2799 0.0000 +vt 0.7891 0.2794 0.0000 +vt 0.7988 0.2794 0.0000 +vt 0.7891 0.2792 0.0000 +vt 0.7988 0.2792 0.0000 +vt 0.0583 0.2469 0.0000 +vt 0.0486 0.2469 0.0000 +vt 0.3828 0.2036 0.0000 +vt 0.3833 0.2038 0.0000 +vt 0.3828 0.2044 0.0000 +vt 0.3836 0.2042 0.0000 +vt 0.3836 0.2047 0.0000 +vt 0.3833 0.2051 0.0000 +vt 0.3828 0.2053 0.0000 +vt 0.3826 0.2052 0.0000 +vt 0.3826 0.2037 0.0000 +vt 0.4399 0.1469 0.0000 +vt 0.4404 0.1467 0.0000 +vt 0.4404 0.1475 0.0000 +vt 0.4406 0.1468 0.0000 +vt 0.4406 0.1483 0.0000 +vt 0.4404 0.1484 0.0000 +vt 0.4399 0.1482 0.0000 +vt 0.4396 0.1478 0.0000 +vt 0.4396 0.1473 0.0000 +vt 0.4587 0.1916 0.0000 +vt 0.4588 0.1914 0.0000 +vt 0.4590 0.1916 0.0000 +vt 0.4590 0.1913 0.0000 +vt 0.4591 0.1913 0.0000 +vt 0.4593 0.1914 0.0000 +vt 0.4593 0.1916 0.0000 +vt 0.4593 0.1918 0.0000 +vt 0.4591 0.1919 0.0000 +vt 0.4590 0.1919 0.0000 +vt 0.4588 0.1918 0.0000 +vt 0.4264 0.2267 0.0000 +vt 0.4264 0.2266 0.0000 +vt 0.4267 0.2266 0.0000 +vt 0.4266 0.2267 0.0000 +vt 0.4269 0.2267 0.0000 +vt 0.4268 0.2268 0.0000 +vt 0.9752 0.0802 0.0000 +vt 0.9752 0.0800 0.0000 +vt 0.4736 0.0784 0.0000 +vt 0.4736 0.0783 0.0000 +vt 0.4738 0.0782 0.0000 +vt 0.4738 0.0783 0.0000 +vt 0.4740 0.0783 0.0000 +vt 0.4740 0.0784 0.0000 +vt 0.4263 0.2268 0.0000 +vt 0.4262 0.2267 0.0000 +vt 0.0157 0.1180 0.0000 +vt 0.0158 0.1180 0.0000 +vt 0.0158 0.1182 0.0000 +vt 0.0157 0.1182 0.0000 +vt 0.7890 0.2795 0.0000 +vt 0.7890 0.2796 0.0000 +vt 0.6286 0.2757 0.0000 +vt 0.6286 0.2756 0.0000 +vt 0.6288 0.2756 0.0000 +vt 0.6288 0.2757 0.0000 +vt 0.6284 0.2757 0.0000 +vt 0.6284 0.2756 0.0000 +vt 0.2764 0.1891 0.0000 +vt 0.2764 0.1898 0.0000 +vt 0.2764 0.1886 0.0000 +vt 0.2764 0.1884 0.0000 +vt 0.4422 0.1472 0.0000 +vt 0.4422 0.1479 0.0000 +vt 0.3393 0.0706 0.0000 +vt 0.3393 0.0708 0.0000 +vt 0.3393 0.0701 0.0000 +vt 0.3393 0.0695 0.0000 +vt 0.3393 0.0693 0.0000 +vt 0.3810 0.2048 0.0000 +vt 0.3810 0.2041 0.0000 +vt 0.2764 0.1899 0.0000 +vt 0.0865 0.1325 0.0000 +vt 0.0847 0.1325 0.0000 +vt 0.0847 0.1282 0.0000 +vt 0.0865 0.1282 0.0000 +vt 0.0881 0.1325 0.0000 +vt 0.0881 0.1282 0.0000 +vt 0.0894 0.1325 0.0000 +vt 0.0894 0.1282 0.0000 +vt 0.8990 0.2107 0.0000 +vt 0.8990 0.2091 0.0000 +vt 0.9033 0.2091 0.0000 +vt 0.9033 0.2107 0.0000 +vt 0.8990 0.2125 0.0000 +vt 0.9033 0.2125 0.0000 +vt 0.9027 0.2143 0.0000 +vt 0.8990 0.2143 0.0000 +vt 0.9021 0.2159 0.0000 +vt 0.8990 0.2159 0.0000 +vt 0.0839 0.1789 0.0000 +vt 0.0839 0.1815 0.0000 +vt 0.0827 0.1815 0.0000 +vt 0.0827 0.1784 0.0000 +vt 0.3582 0.1370 0.0000 +vt 0.3541 0.1370 0.0000 +vt 0.3541 0.1351 0.0000 +vt 0.3582 0.1351 0.0000 +vt 0.0873 0.1790 0.0000 +vt 0.0873 0.1815 0.0000 +vt 0.0858 0.1815 0.0000 +vt 0.0858 0.1789 0.0000 +vt 0.0865 0.1353 0.0000 +vt 0.0847 0.1353 0.0000 +vt 0.0881 0.1353 0.0000 +vt 0.0894 0.1353 0.0000 +vt 0.8962 0.2107 0.0000 +vt 0.8962 0.2091 0.0000 +vt 0.8962 0.2125 0.0000 +vt 0.8962 0.2143 0.0000 +vt 0.8962 0.2159 0.0000 +vt 0.0839 0.1843 0.0000 +vt 0.0827 0.1843 0.0000 +vt 0.0858 0.1843 0.0000 +vt 0.0873 0.1843 0.0000 +vt 0.2337 0.1235 0.0000 +vt 0.2363 0.1235 0.0000 +vt 0.2337 0.1249 0.0000 +vt 0.1657 0.1489 0.0000 +vt 0.1657 0.1515 0.0000 +vt 0.1636 0.1515 0.0000 +vt 0.1636 0.1481 0.0000 +vt 0.2345 0.1622 0.0000 +vt 0.2359 0.1622 0.0000 +vt 0.2359 0.1640 0.0000 +vt 0.2337 0.1640 0.0000 +vt 0.2370 0.1249 0.0000 +vt 0.2378 0.1270 0.0000 +vt 0.2337 0.1270 0.0000 +vt 0.1614 0.1515 0.0000 +vt 0.1614 0.1474 0.0000 +vt 0.2380 0.1622 0.0000 +vt 0.2380 0.1640 0.0000 +vt 0.7959 0.1887 0.0000 +vt 0.7964 0.1896 0.0000 +vt 0.7953 0.1911 0.0000 +vt 0.7940 0.1896 0.0000 +vt 0.7969 0.1882 0.0000 +vt 0.0829 0.1325 0.0000 +vt 0.0829 0.1282 0.0000 +vt 0.0813 0.1325 0.0000 +vt 0.0813 0.1282 0.0000 +vt 0.0801 0.1325 0.0000 +vt 0.0801 0.1282 0.0000 +vt 0.8044 0.2670 0.0000 +vt 0.8044 0.2628 0.0000 +vt 0.8060 0.2628 0.0000 +vt 0.8060 0.2670 0.0000 +vt 0.8026 0.2670 0.0000 +vt 0.8026 0.2628 0.0000 +vt 0.8008 0.2634 0.0000 +vt 0.8008 0.2670 0.0000 +vt 0.7992 0.2640 0.0000 +vt 0.7992 0.2670 0.0000 +vt 0.7980 0.2644 0.0000 +vt 0.7980 0.2670 0.0000 +vt 0.3443 0.1351 0.0000 +vt 0.3443 0.1370 0.0000 +vt 0.3402 0.1370 0.0000 +vt 0.3402 0.1351 0.0000 +vt 0.0889 0.1789 0.0000 +vt 0.0889 0.1815 0.0000 +vt 0.0829 0.1353 0.0000 +vt 0.0813 0.1353 0.0000 +vt 0.0801 0.1353 0.0000 +vt 0.8044 0.2698 0.0000 +vt 0.8060 0.2698 0.0000 +vt 0.8026 0.2698 0.0000 +vt 0.8008 0.2698 0.0000 +vt 0.7992 0.2698 0.0000 +vt 0.7980 0.2698 0.0000 +vt 0.0907 0.1815 0.0000 +vt 0.0907 0.1843 0.0000 +vt 0.0889 0.1843 0.0000 +vt 0.9566 0.2507 0.0000 +vt 0.9566 0.2493 0.0000 +vt 0.9592 0.2507 0.0000 +vt 0.9491 0.2643 0.0000 +vt 0.9513 0.2635 0.0000 +vt 0.9513 0.2669 0.0000 +vt 0.9491 0.2669 0.0000 +vt 0.3851 0.0607 0.0000 +vt 0.3843 0.0589 0.0000 +vt 0.3865 0.0589 0.0000 +vt 0.3865 0.0607 0.0000 +vt 0.9599 0.2493 0.0000 +vt 0.9566 0.2472 0.0000 +vt 0.9607 0.2472 0.0000 +vt 0.9534 0.2669 0.0000 +vt 0.9534 0.2628 0.0000 +vt 0.3886 0.0589 0.0000 +vt 0.3886 0.0607 0.0000 +vt 0.7929 0.1827 0.0000 +vt 0.7910 0.1836 0.0000 +vt 0.7907 0.1817 0.0000 +vt 0.7925 0.1817 0.0000 +vt 0.7939 0.1822 0.0000 +vt 0.7865 0.1896 0.0000 +vt 0.7884 0.1886 0.0000 +vt 0.7874 0.1909 0.0000 +vt 0.7937 0.1843 0.0000 +vt 0.7944 0.1857 0.0000 +vt 0.7925 0.1866 0.0000 +vt 0.7918 0.1852 0.0000 +vt 0.7890 0.1822 0.0000 +vt 0.7914 0.1871 0.0000 +vt 0.7957 0.1833 0.0000 +vt 0.7966 0.1846 0.0000 +vt 0.7875 0.1833 0.0000 +vt 0.7899 0.1879 0.0000 +vt 0.7865 0.1847 0.0000 +vt 0.7951 0.1871 0.0000 +vt 0.7932 0.1880 0.0000 +vt 0.7939 0.1921 0.0000 +vt 0.7922 0.1926 0.0000 +vt 0.7904 0.1926 0.0000 +vt 0.7970 0.1861 0.0000 +vt 0.7860 0.1880 0.0000 +vt 0.7888 0.1920 0.0000 +vt 0.7860 0.1863 0.0000 +vt 0.0847 0.1280 0.0000 +vt 0.0863 0.1280 0.0000 +vt 0.8049 0.2906 0.0000 +vt 0.8048 0.2903 0.0000 +vt 0.8065 0.2903 0.0000 +vt 0.8067 0.2906 0.0000 +vt 0.8081 0.2899 0.0000 +vt 0.8083 0.2902 0.0000 +vt 0.8096 0.2892 0.0000 +vt 0.8098 0.2895 0.0000 +vt 0.8106 0.2883 0.0000 +vt 0.8108 0.2886 0.0000 +vt 0.3980 0.1355 0.0000 +vt 0.3980 0.1351 0.0000 +vt 0.3998 0.1355 0.0000 +vt 0.3999 0.1359 0.0000 +vt 0.4017 0.1356 0.0000 +vt 0.4017 0.1359 0.0000 +vt 0.4031 0.1352 0.0000 +vt 0.4034 0.1355 0.0000 +vt 0.0831 0.1280 0.0000 +vt 0.8006 0.2887 0.0000 +vt 0.8008 0.2885 0.0000 +vt 0.8019 0.2893 0.0000 +vt 0.8017 0.2896 0.0000 +vt 0.4099 0.1921 0.0000 +vt 0.4101 0.1917 0.0000 +vt 0.4117 0.1913 0.0000 +vt 0.4117 0.1917 0.0000 +vt 0.4082 0.1921 0.0000 +vt 0.4083 0.1918 0.0000 +vt 0.4067 0.1918 0.0000 +vt 0.4068 0.1914 0.0000 +vt 0.9743 0.2099 0.0000 +vt 0.9744 0.2096 0.0000 +vt 0.9762 0.2092 0.0000 +vt 0.9762 0.2095 0.0000 +vt 0.9725 0.2099 0.0000 +vt 0.9725 0.2095 0.0000 +vt 0.9708 0.2094 0.0000 +vt 0.9711 0.2091 0.0000 +vt 0.2367 0.1238 0.0000 +vt 0.9595 0.2504 0.0000 +vt 0.0750 0.1027 0.0000 +vt 0.0750 0.1009 0.0000 +vt 0.0806 0.1018 0.0000 +vt 0.0756 0.0992 0.0000 +vt 0.0766 0.0977 0.0000 +vt 0.0781 0.0967 0.0000 +vt 0.0798 0.0961 0.0000 +vt 0.0816 0.0961 0.0000 +vt 0.0833 0.0967 0.0000 +vt 0.0847 0.0978 0.0000 +vt 0.0858 0.0994 0.0000 +vt 0.0863 0.1009 0.0000 +vt 0.0863 0.1025 0.0000 +vt 0.0858 0.1044 0.0000 +vt 0.0847 0.1059 0.0000 +vt 0.0832 0.1069 0.0000 +vt 0.0815 0.1075 0.0000 +vt 0.0797 0.1075 0.0000 +vt 0.0780 0.1069 0.0000 +vt 0.0766 0.1058 0.0000 +vt 0.0755 0.1044 0.0000 +vt 0.4327 0.1818 0.0000 +vt 0.4322 0.1818 0.0000 +vt 0.4322 0.1811 0.0000 +vt 0.4327 0.1811 0.0000 +vt 0.3940 0.1925 0.0000 +vt 0.3946 0.1925 0.0000 +vt 0.3946 0.1931 0.0000 +vt 0.3940 0.1931 0.0000 +vt 0.3948 0.1925 0.0000 +vt 0.3948 0.1931 0.0000 +vt 0.4330 0.1818 0.0000 +vt 0.4330 0.1811 0.0000 +vt 0.6529 0.0454 0.0000 +vt 0.6534 0.0454 0.0000 +vt 0.6531 0.0458 0.0000 +vt 0.6528 0.0456 0.0000 +vt 0.6524 0.0454 0.0000 +vt 0.6525 0.0456 0.0000 +vt 0.6519 0.0461 0.0000 +vt 0.6519 0.0454 0.0000 +vt 0.6522 0.0458 0.0000 +vt 0.6521 0.0461 0.0000 +vt 0.6534 0.0461 0.0000 +vt 0.6532 0.0461 0.0000 +vt 0.2756 0.0699 0.0000 +vt 0.2752 0.0699 0.0000 +vt 0.2752 0.0696 0.0000 +vt 0.2757 0.0696 0.0000 +vt 0.9595 0.1908 0.0000 +vt 0.9598 0.1908 0.0000 +vt 0.9598 0.1911 0.0000 +vt 0.9594 0.1911 0.0000 +vt 0.9595 0.1905 0.0000 +vt 0.9598 0.1905 0.0000 +vt 0.9594 0.1902 0.0000 +vt 0.9598 0.1902 0.0000 +vt 0.2272 0.0994 0.0000 +vt 0.2273 0.0997 0.0000 +vt 0.2268 0.0997 0.0000 +vt 0.2268 0.0994 0.0000 +vt 0.4322 0.1810 0.0000 +vt 0.4327 0.1810 0.0000 +vt 0.6529 0.0453 0.0000 +vt 0.6533 0.0453 0.0000 +vt 0.6524 0.0453 0.0000 +vt 0.6519 0.0453 0.0000 +vt 0.3946 0.1933 0.0000 +vt 0.3941 0.1933 0.0000 +vt 0.3948 0.1933 0.0000 +vt 0.4330 0.1810 0.0000 +vt 0.4821 0.1706 0.0000 +vt 0.4821 0.1713 0.0000 +vt 0.4819 0.1714 0.0000 +vt 0.4819 0.1705 0.0000 +vt 0.4813 0.1714 0.0000 +vt 0.4813 0.1705 0.0000 +vt 0.2728 0.0699 0.0000 +vt 0.2728 0.0696 0.0000 +vt 0.9622 0.1908 0.0000 +vt 0.9622 0.1910 0.0000 +vt 0.9622 0.1905 0.0000 +vt 0.9622 0.1902 0.0000 +vt 0.2244 0.0997 0.0000 +vt 0.2244 0.0994 0.0000 +vt 0.2629 0.0698 0.0000 +vt 0.2629 0.0696 0.0000 +vt 0.2726 0.0696 0.0000 +vt 0.2726 0.0699 0.0000 +vt 0.9721 0.1908 0.0000 +vt 0.9721 0.1909 0.0000 +vt 0.9624 0.1910 0.0000 +vt 0.9624 0.1908 0.0000 +vt 0.9721 0.1905 0.0000 +vt 0.9624 0.1905 0.0000 +vt 0.9721 0.1903 0.0000 +vt 0.9624 0.1902 0.0000 +vt 0.2145 0.0997 0.0000 +vt 0.2145 0.0995 0.0000 +vt 0.2242 0.0994 0.0000 +vt 0.2242 0.0997 0.0000 +vt 0.4327 0.1825 0.0000 +vt 0.4322 0.1825 0.0000 +vt 0.3940 0.1918 0.0000 +vt 0.3946 0.1918 0.0000 +vt 0.3948 0.1918 0.0000 +vt 0.4330 0.1825 0.0000 +vt 0.6529 0.0468 0.0000 +vt 0.6528 0.0466 0.0000 +vt 0.6531 0.0464 0.0000 +vt 0.6534 0.0468 0.0000 +vt 0.6524 0.0468 0.0000 +vt 0.6525 0.0466 0.0000 +vt 0.6522 0.0464 0.0000 +vt 0.6519 0.0468 0.0000 +vt 0.2756 0.0693 0.0000 +vt 0.2752 0.0693 0.0000 +vt 0.9455 0.2011 0.0000 +vt 0.9457 0.2014 0.0000 +vt 0.9453 0.2014 0.0000 +vt 0.9453 0.2011 0.0000 +vt 0.9455 0.2008 0.0000 +vt 0.9453 0.2008 0.0000 +vt 0.9453 0.2005 0.0000 +vt 0.9457 0.2005 0.0000 +vt 0.2272 0.1001 0.0000 +vt 0.2268 0.1001 0.0000 +vt 0.4327 0.1826 0.0000 +vt 0.4322 0.1826 0.0000 +vt 0.6533 0.0469 0.0000 +vt 0.6529 0.0469 0.0000 +vt 0.6524 0.0469 0.0000 +vt 0.6519 0.0469 0.0000 +vt 0.3941 0.1917 0.0000 +vt 0.3946 0.1917 0.0000 +vt 0.3948 0.1917 0.0000 +vt 0.4330 0.1826 0.0000 +vt 0.4806 0.1706 0.0000 +vt 0.4807 0.1705 0.0000 +vt 0.4807 0.1714 0.0000 +vt 0.4806 0.1713 0.0000 +vt 0.2728 0.0693 0.0000 +vt 0.9428 0.2011 0.0000 +vt 0.9428 0.2014 0.0000 +vt 0.9428 0.2008 0.0000 +vt 0.9428 0.2005 0.0000 +vt 0.2244 0.1000 0.0000 +vt 0.2629 0.0694 0.0000 +vt 0.2726 0.0693 0.0000 +vt 0.9330 0.2011 0.0000 +vt 0.9427 0.2011 0.0000 +vt 0.9427 0.2014 0.0000 +vt 0.9330 0.2013 0.0000 +vt 0.9330 0.2008 0.0000 +vt 0.9427 0.2008 0.0000 +vt 0.9330 0.2006 0.0000 +vt 0.9427 0.2006 0.0000 +vt 0.2242 0.1000 0.0000 +vt 0.2145 0.1000 0.0000 +vt 0.8530 0.1165 0.0000 +vt 0.8535 0.1167 0.0000 +vt 0.8529 0.1174 0.0000 +vt 0.8538 0.1171 0.0000 +vt 0.8538 0.1176 0.0000 +vt 0.8535 0.1181 0.0000 +vt 0.8530 0.1182 0.0000 +vt 0.8527 0.1182 0.0000 +vt 0.8527 0.1166 0.0000 +vt 0.1302 0.0555 0.0000 +vt 0.1307 0.0553 0.0000 +vt 0.1307 0.0562 0.0000 +vt 0.1309 0.0554 0.0000 +vt 0.1309 0.0570 0.0000 +vt 0.1307 0.0570 0.0000 +vt 0.1302 0.0568 0.0000 +vt 0.1299 0.0564 0.0000 +vt 0.1299 0.0559 0.0000 +vt 0.7524 0.1037 0.0000 +vt 0.7526 0.1037 0.0000 +vt 0.7524 0.1040 0.0000 +vt 0.7527 0.1039 0.0000 +vt 0.7527 0.1041 0.0000 +vt 0.7526 0.1042 0.0000 +vt 0.7524 0.1043 0.0000 +vt 0.7522 0.1042 0.0000 +vt 0.7521 0.1041 0.0000 +vt 0.7521 0.1039 0.0000 +vt 0.7522 0.1037 0.0000 +vt 0.1946 0.2284 0.0000 +vt 0.1946 0.2283 0.0000 +vt 0.1948 0.2283 0.0000 +vt 0.1948 0.2284 0.0000 +vt 0.1950 0.2284 0.0000 +vt 0.1949 0.2285 0.0000 +vt 0.9722 0.1907 0.0000 +vt 0.9722 0.1905 0.0000 +vt 0.4666 0.2283 0.0000 +vt 0.4665 0.2282 0.0000 +vt 0.4668 0.2282 0.0000 +vt 0.4668 0.2283 0.0000 +vt 0.4670 0.2282 0.0000 +vt 0.4669 0.2283 0.0000 +vt 0.1944 0.2285 0.0000 +vt 0.1944 0.2284 0.0000 +vt 0.6610 0.1034 0.0000 +vt 0.6609 0.1032 0.0000 +vt 0.6612 0.1032 0.0000 +vt 0.6611 0.1034 0.0000 +vt 0.9329 0.2009 0.0000 +vt 0.9329 0.2011 0.0000 +vt 0.4168 0.2433 0.0000 +vt 0.4168 0.2432 0.0000 +vt 0.4170 0.2432 0.0000 +vt 0.4170 0.2433 0.0000 +vt 0.4166 0.2433 0.0000 +vt 0.4166 0.2432 0.0000 +vt 0.3964 0.1925 0.0000 +vt 0.3964 0.1931 0.0000 +vt 0.3964 0.1919 0.0000 +vt 0.3964 0.1918 0.0000 +vt 0.1325 0.0558 0.0000 +vt 0.1325 0.0566 0.0000 +vt 0.4345 0.1824 0.0000 +vt 0.4345 0.1825 0.0000 +vt 0.4345 0.1818 0.0000 +vt 0.4345 0.1812 0.0000 +vt 0.4345 0.1811 0.0000 +vt 0.8512 0.1178 0.0000 +vt 0.8512 0.1170 0.0000 +vt 0.3964 0.1932 0.0000 +vt 0.2874 0.1915 0.0000 +vt 0.2869 0.1915 0.0000 +vt 0.2869 0.1908 0.0000 +vt 0.2874 0.1908 0.0000 +vt 0.3810 0.2134 0.0000 +vt 0.3816 0.2134 0.0000 +vt 0.3816 0.2141 0.0000 +vt 0.3810 0.2141 0.0000 +vt 0.3819 0.2134 0.0000 +vt 0.3819 0.2141 0.0000 +vt 0.2877 0.1915 0.0000 +vt 0.2877 0.1908 0.0000 +vt 0.9785 0.0238 0.0000 +vt 0.9785 0.0233 0.0000 +vt 0.9789 0.0236 0.0000 +vt 0.9787 0.0239 0.0000 +vt 0.9785 0.0242 0.0000 +vt 0.9787 0.0242 0.0000 +vt 0.9792 0.0248 0.0000 +vt 0.9785 0.0248 0.0000 +vt 0.9789 0.0245 0.0000 +vt 0.9792 0.0246 0.0000 +vt 0.9792 0.0233 0.0000 +vt 0.9792 0.0235 0.0000 +vt 0.1309 0.2277 0.0000 +vt 0.1305 0.2277 0.0000 +vt 0.1305 0.2274 0.0000 +vt 0.1310 0.2274 0.0000 +vt 0.9308 0.2097 0.0000 +vt 0.9310 0.2097 0.0000 +vt 0.9310 0.2100 0.0000 +vt 0.9306 0.2100 0.0000 +vt 0.9308 0.2094 0.0000 +vt 0.9310 0.2094 0.0000 +vt 0.9306 0.2091 0.0000 +vt 0.9310 0.2091 0.0000 +vt 0.2721 0.0782 0.0000 +vt 0.2722 0.0785 0.0000 +vt 0.2717 0.0785 0.0000 +vt 0.2717 0.0782 0.0000 +vt 0.2869 0.1907 0.0000 +vt 0.2874 0.1907 0.0000 +vt 0.9784 0.0238 0.0000 +vt 0.9784 0.0233 0.0000 +vt 0.9784 0.0243 0.0000 +vt 0.9784 0.0247 0.0000 +vt 0.3816 0.2142 0.0000 +vt 0.3811 0.2142 0.0000 +vt 0.3819 0.2142 0.0000 +vt 0.2877 0.1907 0.0000 +vt 0.4642 0.0589 0.0000 +vt 0.4642 0.0597 0.0000 +vt 0.4641 0.0598 0.0000 +vt 0.4641 0.0589 0.0000 +vt 0.4635 0.0598 0.0000 +vt 0.4635 0.0589 0.0000 +vt 0.1280 0.2277 0.0000 +vt 0.1280 0.2274 0.0000 +vt 0.9335 0.2097 0.0000 +vt 0.9335 0.2100 0.0000 +vt 0.9335 0.2094 0.0000 +vt 0.9335 0.2092 0.0000 +vt 0.2693 0.0785 0.0000 +vt 0.2693 0.0782 0.0000 +vt 0.1182 0.2276 0.0000 +vt 0.1182 0.2274 0.0000 +vt 0.1279 0.2274 0.0000 +vt 0.1279 0.2277 0.0000 +vt 0.9433 0.2097 0.0000 +vt 0.9433 0.2099 0.0000 +vt 0.9336 0.2100 0.0000 +vt 0.9336 0.2097 0.0000 +vt 0.9433 0.2094 0.0000 +vt 0.9336 0.2094 0.0000 +vt 0.9433 0.2092 0.0000 +vt 0.9336 0.2092 0.0000 +vt 0.2594 0.0785 0.0000 +vt 0.2594 0.0783 0.0000 +vt 0.2691 0.0782 0.0000 +vt 0.2691 0.0785 0.0000 +vt 0.2874 0.1922 0.0000 +vt 0.2869 0.1922 0.0000 +vt 0.3810 0.2127 0.0000 +vt 0.3816 0.2127 0.0000 +vt 0.3819 0.2127 0.0000 +vt 0.2877 0.1922 0.0000 +vt 0.9799 0.0238 0.0000 +vt 0.9797 0.0239 0.0000 +vt 0.9795 0.0236 0.0000 +vt 0.9799 0.0233 0.0000 +vt 0.9799 0.0242 0.0000 +vt 0.9797 0.0242 0.0000 +vt 0.9795 0.0245 0.0000 +vt 0.9799 0.0248 0.0000 +vt 0.1309 0.2271 0.0000 +vt 0.1305 0.2271 0.0000 +vt 0.8308 0.2889 0.0000 +vt 0.8309 0.2892 0.0000 +vt 0.8305 0.2892 0.0000 +vt 0.8305 0.2889 0.0000 +vt 0.8308 0.2886 0.0000 +vt 0.8305 0.2886 0.0000 +vt 0.8305 0.2883 0.0000 +vt 0.8309 0.2883 0.0000 +vt 0.2721 0.0789 0.0000 +vt 0.2717 0.0789 0.0000 +vt 0.2874 0.1923 0.0000 +vt 0.2869 0.1923 0.0000 +vt 0.9800 0.0233 0.0000 +vt 0.9800 0.0238 0.0000 +vt 0.9800 0.0243 0.0000 +vt 0.9800 0.0247 0.0000 +vt 0.3811 0.2126 0.0000 +vt 0.3816 0.2126 0.0000 +vt 0.3819 0.2126 0.0000 +vt 0.2877 0.1923 0.0000 +vt 0.4628 0.0589 0.0000 +vt 0.4629 0.0589 0.0000 +vt 0.4629 0.0598 0.0000 +vt 0.4628 0.0597 0.0000 +vt 0.1280 0.2271 0.0000 +vt 0.8281 0.2889 0.0000 +vt 0.8281 0.2892 0.0000 +vt 0.8281 0.2886 0.0000 +vt 0.8281 0.2883 0.0000 +vt 0.2693 0.0788 0.0000 +vt 0.1182 0.2272 0.0000 +vt 0.1279 0.2271 0.0000 +vt 0.8182 0.2889 0.0000 +vt 0.8279 0.2889 0.0000 +vt 0.8279 0.2891 0.0000 +vt 0.8182 0.2891 0.0000 +vt 0.8182 0.2886 0.0000 +vt 0.8279 0.2886 0.0000 +vt 0.8182 0.2884 0.0000 +vt 0.8279 0.2883 0.0000 +vt 0.2691 0.0788 0.0000 +vt 0.2594 0.0788 0.0000 +vt 0.4539 0.1705 0.0000 +vt 0.4544 0.1706 0.0000 +vt 0.4538 0.1713 0.0000 +vt 0.4547 0.1711 0.0000 +vt 0.4547 0.1716 0.0000 +vt 0.4544 0.1720 0.0000 +vt 0.4539 0.1722 0.0000 +vt 0.4537 0.1721 0.0000 +vt 0.4537 0.1705 0.0000 +vt 0.4441 0.1237 0.0000 +vt 0.4446 0.1235 0.0000 +vt 0.4447 0.1244 0.0000 +vt 0.4449 0.1236 0.0000 +vt 0.4449 0.1252 0.0000 +vt 0.4446 0.1252 0.0000 +vt 0.4441 0.1251 0.0000 +vt 0.4438 0.1246 0.0000 +vt 0.4438 0.1241 0.0000 +vt 0.3940 0.2371 0.0000 +vt 0.3941 0.2369 0.0000 +vt 0.3943 0.2371 0.0000 +vt 0.3942 0.2368 0.0000 +vt 0.3944 0.2368 0.0000 +vt 0.3946 0.2369 0.0000 +vt 0.3946 0.2371 0.0000 +vt 0.3946 0.2373 0.0000 +vt 0.3944 0.2374 0.0000 +vt 0.3942 0.2374 0.0000 +vt 0.3941 0.2373 0.0000 +vt 0.2871 0.2480 0.0000 +vt 0.2870 0.2479 0.0000 +vt 0.2873 0.2478 0.0000 +vt 0.2873 0.2480 0.0000 +vt 0.2875 0.2479 0.0000 +vt 0.2874 0.2480 0.0000 +vt 0.9434 0.2097 0.0000 +vt 0.9434 0.2095 0.0000 +vt 0.1944 0.2460 0.0000 +vt 0.1944 0.2459 0.0000 +vt 0.1946 0.2458 0.0000 +vt 0.1946 0.2460 0.0000 +vt 0.1948 0.2459 0.0000 +vt 0.1948 0.2460 0.0000 +vt 0.2869 0.2481 0.0000 +vt 0.2869 0.2480 0.0000 +vt 0.6663 0.1034 0.0000 +vt 0.6663 0.1032 0.0000 +vt 0.6665 0.1032 0.0000 +vt 0.6665 0.1034 0.0000 +vt 0.8181 0.2886 0.0000 +vt 0.8181 0.2888 0.0000 +vt 0.2945 0.0995 0.0000 +vt 0.2945 0.0994 0.0000 +vt 0.2948 0.0995 0.0000 +vt 0.2947 0.0996 0.0000 +vt 0.2944 0.0996 0.0000 +vt 0.2943 0.0995 0.0000 +vt 0.3834 0.2134 0.0000 +vt 0.3834 0.2140 0.0000 +vt 0.3834 0.2128 0.0000 +vt 0.3834 0.2127 0.0000 +vt 0.4464 0.1240 0.0000 +vt 0.4464 0.1248 0.0000 +vt 0.2892 0.1921 0.0000 +vt 0.2892 0.1922 0.0000 +vt 0.2892 0.1915 0.0000 +vt 0.2892 0.1909 0.0000 +vt 0.2892 0.1907 0.0000 +vt 0.4521 0.1717 0.0000 +vt 0.4521 0.1709 0.0000 +vt 0.3834 0.2142 0.0000 +vt 0.8894 0.0802 0.0000 +vt 0.8876 0.0802 0.0000 +vt 0.8876 0.0759 0.0000 +vt 0.8894 0.0759 0.0000 +vt 0.8910 0.0802 0.0000 +vt 0.8910 0.0759 0.0000 +vt 0.8922 0.0802 0.0000 +vt 0.8922 0.0759 0.0000 +vt 0.8337 0.2223 0.0000 +vt 0.8321 0.2223 0.0000 +vt 0.8321 0.2180 0.0000 +vt 0.8337 0.2180 0.0000 +vt 0.8354 0.2223 0.0000 +vt 0.8354 0.2180 0.0000 +vt 0.8372 0.2187 0.0000 +vt 0.8372 0.2223 0.0000 +vt 0.8388 0.2192 0.0000 +vt 0.8388 0.2223 0.0000 +vt 0.8401 0.2197 0.0000 +vt 0.8401 0.2223 0.0000 +vt 0.3166 0.1370 0.0000 +vt 0.3125 0.1370 0.0000 +vt 0.3125 0.1351 0.0000 +vt 0.3166 0.1351 0.0000 +vt 0.1180 0.1596 0.0000 +vt 0.1180 0.1621 0.0000 +vt 0.1165 0.1621 0.0000 +vt 0.1165 0.1595 0.0000 +vt 0.8894 0.0830 0.0000 +vt 0.8876 0.0830 0.0000 +vt 0.8910 0.0830 0.0000 +vt 0.8922 0.0830 0.0000 +vt 0.8337 0.2251 0.0000 +vt 0.8321 0.2251 0.0000 +vt 0.8354 0.2251 0.0000 +vt 0.8372 0.2251 0.0000 +vt 0.8388 0.2251 0.0000 +vt 0.8401 0.2251 0.0000 +vt 0.1165 0.1649 0.0000 +vt 0.1146 0.1649 0.0000 +vt 0.1146 0.1621 0.0000 +vt 0.1180 0.1649 0.0000 +vt 0.9704 0.2472 0.0000 +vt 0.9731 0.2472 0.0000 +vt 0.9704 0.2486 0.0000 +vt 0.0892 0.0723 0.0000 +vt 0.0892 0.0749 0.0000 +vt 0.0871 0.0749 0.0000 +vt 0.0871 0.0716 0.0000 +vt 0.7771 0.1676 0.0000 +vt 0.7771 0.1663 0.0000 +vt 0.7790 0.1663 0.0000 +vt 0.7790 0.1684 0.0000 +vt 0.9738 0.2486 0.0000 +vt 0.9746 0.2507 0.0000 +vt 0.9704 0.2507 0.0000 +vt 0.0850 0.0749 0.0000 +vt 0.0850 0.0708 0.0000 +vt 0.7771 0.1641 0.0000 +vt 0.7790 0.1641 0.0000 +vt 0.8527 0.0824 0.0000 +vt 0.8522 0.0815 0.0000 +vt 0.8533 0.0800 0.0000 +vt 0.8546 0.0814 0.0000 +vt 0.8517 0.0829 0.0000 +vt 0.8858 0.0802 0.0000 +vt 0.8858 0.0759 0.0000 +vt 0.8842 0.0802 0.0000 +vt 0.8842 0.0759 0.0000 +vt 0.8829 0.0802 0.0000 +vt 0.8829 0.0759 0.0000 +vt 0.1434 0.1176 0.0000 +vt 0.1477 0.1176 0.0000 +vt 0.1477 0.1192 0.0000 +vt 0.1434 0.1192 0.0000 +vt 0.1434 0.1158 0.0000 +vt 0.1477 0.1158 0.0000 +vt 0.1471 0.1140 0.0000 +vt 0.1434 0.1140 0.0000 +vt 0.1465 0.1124 0.0000 +vt 0.1434 0.1124 0.0000 +vt 0.1214 0.1595 0.0000 +vt 0.1226 0.1590 0.0000 +vt 0.1226 0.1621 0.0000 +vt 0.1214 0.1621 0.0000 +vt 0.3166 0.1467 0.0000 +vt 0.3166 0.1485 0.0000 +vt 0.3125 0.1485 0.0000 +vt 0.3125 0.1467 0.0000 +vt 0.1195 0.1595 0.0000 +vt 0.1195 0.1621 0.0000 +vt 0.8858 0.0830 0.0000 +vt 0.8842 0.0830 0.0000 +vt 0.8829 0.0830 0.0000 +vt 0.1406 0.1176 0.0000 +vt 0.1406 0.1192 0.0000 +vt 0.1406 0.1158 0.0000 +vt 0.1406 0.1140 0.0000 +vt 0.1406 0.1124 0.0000 +vt 0.1226 0.1649 0.0000 +vt 0.1214 0.1649 0.0000 +vt 0.1195 0.1649 0.0000 +vt 0.1614 0.1755 0.0000 +vt 0.1614 0.1741 0.0000 +vt 0.1641 0.1755 0.0000 +vt 0.1182 0.2448 0.0000 +vt 0.1204 0.2440 0.0000 +vt 0.1204 0.2474 0.0000 +vt 0.1182 0.2474 0.0000 +vt 0.8719 0.2791 0.0000 +vt 0.8727 0.2809 0.0000 +vt 0.8705 0.2809 0.0000 +vt 0.8705 0.2791 0.0000 +vt 0.1648 0.1741 0.0000 +vt 0.1614 0.1720 0.0000 +vt 0.1655 0.1720 0.0000 +vt 0.1225 0.2474 0.0000 +vt 0.1225 0.2433 0.0000 +vt 0.8684 0.2809 0.0000 +vt 0.8684 0.2791 0.0000 +vt 0.8557 0.0884 0.0000 +vt 0.8576 0.0875 0.0000 +vt 0.8580 0.0894 0.0000 +vt 0.8561 0.0894 0.0000 +vt 0.8547 0.0889 0.0000 +vt 0.8621 0.0815 0.0000 +vt 0.8602 0.0824 0.0000 +vt 0.8612 0.0801 0.0000 +vt 0.8549 0.0868 0.0000 +vt 0.8542 0.0854 0.0000 +vt 0.8561 0.0844 0.0000 +vt 0.8568 0.0858 0.0000 +vt 0.8572 0.0839 0.0000 +vt 0.8596 0.0888 0.0000 +vt 0.8530 0.0877 0.0000 +vt 0.8520 0.0865 0.0000 +vt 0.8611 0.0878 0.0000 +vt 0.8588 0.0831 0.0000 +vt 0.8622 0.0864 0.0000 +vt 0.8535 0.0840 0.0000 +vt 0.8554 0.0831 0.0000 +vt 0.8547 0.0790 0.0000 +vt 0.8565 0.0785 0.0000 +vt 0.8583 0.0785 0.0000 +vt 0.8516 0.0850 0.0000 +vt 0.8626 0.0830 0.0000 +vt 0.8599 0.0791 0.0000 +vt 0.8627 0.0847 0.0000 +vt 0.8876 0.0757 0.0000 +vt 0.8892 0.0757 0.0000 +vt 0.9173 0.2114 0.0000 +vt 0.9173 0.2111 0.0000 +vt 0.9190 0.2111 0.0000 +vt 0.9191 0.2114 0.0000 +vt 0.9206 0.2108 0.0000 +vt 0.9208 0.2110 0.0000 +vt 0.9220 0.2101 0.0000 +vt 0.9223 0.2103 0.0000 +vt 0.9231 0.2091 0.0000 +vt 0.9233 0.2094 0.0000 +vt 0.4067 0.1708 0.0000 +vt 0.4067 0.1705 0.0000 +vt 0.4085 0.1709 0.0000 +vt 0.4085 0.1713 0.0000 +vt 0.4104 0.1709 0.0000 +vt 0.4104 0.1713 0.0000 +vt 0.4117 0.1706 0.0000 +vt 0.4120 0.1709 0.0000 +vt 0.8860 0.0757 0.0000 +vt 0.9131 0.2095 0.0000 +vt 0.9133 0.2093 0.0000 +vt 0.9144 0.2102 0.0000 +vt 0.9141 0.2104 0.0000 +vt 0.4133 0.1474 0.0000 +vt 0.4134 0.1471 0.0000 +vt 0.4151 0.1467 0.0000 +vt 0.4151 0.1471 0.0000 +vt 0.4116 0.1475 0.0000 +vt 0.4117 0.1471 0.0000 +vt 0.4100 0.1472 0.0000 +vt 0.4101 0.1468 0.0000 +vt 0.3432 0.0899 0.0000 +vt 0.3432 0.0895 0.0000 +vt 0.3450 0.0892 0.0000 +vt 0.3451 0.0895 0.0000 +vt 0.3413 0.0898 0.0000 +vt 0.3413 0.0895 0.0000 +vt 0.3397 0.0893 0.0000 +vt 0.3400 0.0891 0.0000 +vt 0.9734 0.2474 0.0000 +vt 0.1644 0.1753 0.0000 +vt 0.5856 0.2442 0.0000 +vt 0.5856 0.2460 0.0000 +vt 0.5799 0.2450 0.0000 +vt 0.5850 0.2477 0.0000 +vt 0.5839 0.2491 0.0000 +vt 0.5825 0.2502 0.0000 +vt 0.5808 0.2507 0.0000 +vt 0.5790 0.2507 0.0000 +vt 0.5773 0.2501 0.0000 +vt 0.5758 0.2491 0.0000 +vt 0.5747 0.2474 0.0000 +vt 0.5742 0.2459 0.0000 +vt 0.5743 0.2444 0.0000 +vt 0.5748 0.2424 0.0000 +vt 0.5759 0.2410 0.0000 +vt 0.5773 0.2399 0.0000 +vt 0.5790 0.2394 0.0000 +vt 0.5808 0.2394 0.0000 +vt 0.5825 0.2399 0.0000 +vt 0.5840 0.2410 0.0000 +vt 0.5850 0.2425 0.0000 +vt 0.1962 0.1720 0.0000 +vt 0.1967 0.1720 0.0000 +vt 0.1967 0.1727 0.0000 +vt 0.1962 0.1727 0.0000 +vt 0.4644 0.1713 0.0000 +vt 0.4638 0.1713 0.0000 +vt 0.4638 0.1706 0.0000 +vt 0.4644 0.1706 0.0000 +vt 0.4636 0.1713 0.0000 +vt 0.4636 0.1706 0.0000 +vt 0.1959 0.1720 0.0000 +vt 0.1959 0.1727 0.0000 +vt 0.8725 0.0522 0.0000 +vt 0.8725 0.0527 0.0000 +vt 0.8722 0.0524 0.0000 +vt 0.8724 0.0522 0.0000 +vt 0.8725 0.0518 0.0000 +vt 0.8724 0.0518 0.0000 +vt 0.8719 0.0512 0.0000 +vt 0.8725 0.0512 0.0000 +vt 0.8722 0.0515 0.0000 +vt 0.8719 0.0514 0.0000 +vt 0.8719 0.0527 0.0000 +vt 0.8719 0.0525 0.0000 +vt 0.3255 0.0589 0.0000 +vt 0.3259 0.0589 0.0000 +vt 0.3259 0.0592 0.0000 +vt 0.3254 0.0592 0.0000 +vt 0.9639 0.1247 0.0000 +vt 0.9641 0.1247 0.0000 +vt 0.9641 0.1249 0.0000 +vt 0.9637 0.1249 0.0000 +vt 0.9639 0.1243 0.0000 +vt 0.9641 0.1243 0.0000 +vt 0.9637 0.1241 0.0000 +vt 0.9641 0.1241 0.0000 +vt 0.0981 0.2439 0.0000 +vt 0.0980 0.2435 0.0000 +vt 0.0985 0.2435 0.0000 +vt 0.0985 0.2439 0.0000 +vt 0.1967 0.1728 0.0000 +vt 0.1962 0.1728 0.0000 +vt 0.8727 0.0522 0.0000 +vt 0.8727 0.0527 0.0000 +vt 0.8727 0.0517 0.0000 +vt 0.8727 0.0513 0.0000 +vt 0.4638 0.1705 0.0000 +vt 0.4643 0.1705 0.0000 +vt 0.4636 0.1705 0.0000 +vt 0.1959 0.1728 0.0000 +vt 0.3692 0.2429 0.0000 +vt 0.3692 0.2436 0.0000 +vt 0.3690 0.2437 0.0000 +vt 0.3690 0.2428 0.0000 +vt 0.3684 0.2437 0.0000 +vt 0.3684 0.2428 0.0000 +vt 0.3284 0.0589 0.0000 +vt 0.3284 0.0592 0.0000 +vt 0.9666 0.1247 0.0000 +vt 0.9666 0.1249 0.0000 +vt 0.9666 0.1243 0.0000 +vt 0.9666 0.1241 0.0000 +vt 0.1010 0.2435 0.0000 +vt 0.1010 0.2439 0.0000 +vt 0.3382 0.0590 0.0000 +vt 0.3382 0.0592 0.0000 +vt 0.3285 0.0592 0.0000 +vt 0.3285 0.0589 0.0000 +vt 0.9765 0.1246 0.0000 +vt 0.9765 0.1248 0.0000 +vt 0.9668 0.1249 0.0000 +vt 0.9668 0.1247 0.0000 +vt 0.9765 0.1244 0.0000 +vt 0.9668 0.1243 0.0000 +vt 0.9765 0.1242 0.0000 +vt 0.9668 0.1241 0.0000 +vt 0.1108 0.2436 0.0000 +vt 0.1108 0.2438 0.0000 +vt 0.1011 0.2438 0.0000 +vt 0.1011 0.2435 0.0000 +vt 0.1962 0.1713 0.0000 +vt 0.1967 0.1713 0.0000 +vt 0.4644 0.1720 0.0000 +vt 0.4638 0.1720 0.0000 +vt 0.4636 0.1720 0.0000 +vt 0.1959 0.1713 0.0000 +vt 0.8712 0.0522 0.0000 +vt 0.8713 0.0522 0.0000 +vt 0.8715 0.0524 0.0000 +vt 0.8712 0.0527 0.0000 +vt 0.8712 0.0518 0.0000 +vt 0.8713 0.0518 0.0000 +vt 0.8715 0.0515 0.0000 +vt 0.8712 0.0512 0.0000 +vt 0.3255 0.0595 0.0000 +vt 0.3259 0.0595 0.0000 +vt 0.1533 0.1526 0.0000 +vt 0.1535 0.1529 0.0000 +vt 0.1531 0.1529 0.0000 +vt 0.1531 0.1526 0.0000 +vt 0.1533 0.1523 0.0000 +vt 0.1531 0.1523 0.0000 +vt 0.1531 0.1520 0.0000 +vt 0.1535 0.1520 0.0000 +vt 0.0981 0.2433 0.0000 +vt 0.0985 0.2433 0.0000 +vt 0.1962 0.1712 0.0000 +vt 0.1967 0.1712 0.0000 +vt 0.8711 0.0527 0.0000 +vt 0.8711 0.0522 0.0000 +vt 0.8711 0.0517 0.0000 +vt 0.8711 0.0513 0.0000 +vt 0.4643 0.1721 0.0000 +vt 0.4638 0.1721 0.0000 +vt 0.4636 0.1721 0.0000 +vt 0.1959 0.1712 0.0000 +vt 0.3677 0.2429 0.0000 +vt 0.3678 0.2428 0.0000 +vt 0.3678 0.2437 0.0000 +vt 0.3677 0.2436 0.0000 +vt 0.3284 0.0595 0.0000 +vt 0.1506 0.1526 0.0000 +vt 0.1506 0.1529 0.0000 +vt 0.1506 0.1523 0.0000 +vt 0.1506 0.1520 0.0000 +vt 0.1010 0.2433 0.0000 +vt 0.3382 0.0594 0.0000 +vt 0.3285 0.0595 0.0000 +vt 0.1407 0.1526 0.0000 +vt 0.1504 0.1526 0.0000 +vt 0.1504 0.1528 0.0000 +vt 0.1407 0.1528 0.0000 +vt 0.1407 0.1523 0.0000 +vt 0.1504 0.1523 0.0000 +vt 0.1407 0.1521 0.0000 +vt 0.1504 0.1520 0.0000 +vt 0.1011 0.2433 0.0000 +vt 0.1108 0.2434 0.0000 +vt 0.4665 0.1583 0.0000 +vt 0.4670 0.1585 0.0000 +vt 0.4665 0.1591 0.0000 +vt 0.4673 0.1589 0.0000 +vt 0.4673 0.1594 0.0000 +vt 0.4670 0.1598 0.0000 +vt 0.4665 0.1600 0.0000 +vt 0.4663 0.1599 0.0000 +vt 0.4663 0.1584 0.0000 +vt 0.4346 0.0590 0.0000 +vt 0.4351 0.0589 0.0000 +vt 0.4352 0.0597 0.0000 +vt 0.4353 0.0589 0.0000 +vt 0.4353 0.0605 0.0000 +vt 0.4351 0.0606 0.0000 +vt 0.4346 0.0604 0.0000 +vt 0.4343 0.0600 0.0000 +vt 0.4343 0.0595 0.0000 +vt 0.4691 0.1916 0.0000 +vt 0.4692 0.1914 0.0000 +vt 0.4694 0.1916 0.0000 +vt 0.4693 0.1913 0.0000 +vt 0.4695 0.1913 0.0000 +vt 0.4697 0.1914 0.0000 +vt 0.4697 0.1916 0.0000 +vt 0.4697 0.1918 0.0000 +vt 0.4695 0.1919 0.0000 +vt 0.4693 0.1919 0.0000 +vt 0.4692 0.1918 0.0000 +vt 0.4673 0.2102 0.0000 +vt 0.4673 0.2101 0.0000 +vt 0.4675 0.2101 0.0000 +vt 0.4675 0.2102 0.0000 +vt 0.4677 0.2102 0.0000 +vt 0.4676 0.2103 0.0000 +vt 0.9766 0.1246 0.0000 +vt 0.9766 0.1244 0.0000 +vt 0.5780 0.0407 0.0000 +vt 0.5781 0.0408 0.0000 +vt 0.5778 0.0408 0.0000 +vt 0.5779 0.0407 0.0000 +vt 0.1109 0.2438 0.0000 +vt 0.1109 0.2436 0.0000 +vt 0.4671 0.2103 0.0000 +vt 0.4671 0.2102 0.0000 +vt 0.8197 0.0633 0.0000 +vt 0.8198 0.0633 0.0000 +vt 0.8198 0.0636 0.0000 +vt 0.8197 0.0635 0.0000 +vt 0.1406 0.1523 0.0000 +vt 0.1406 0.1525 0.0000 +vt 0.0803 0.1427 0.0000 +vt 0.0803 0.1426 0.0000 +vt 0.0805 0.1426 0.0000 +vt 0.0805 0.1427 0.0000 +vt 0.0801 0.1428 0.0000 +vt 0.0801 0.1426 0.0000 +vt 0.4620 0.1713 0.0000 +vt 0.4620 0.1707 0.0000 +vt 0.4620 0.1718 0.0000 +vt 0.4620 0.1720 0.0000 +vt 0.4369 0.0593 0.0000 +vt 0.4369 0.0601 0.0000 +vt 0.1944 0.1714 0.0000 +vt 0.1944 0.1713 0.0000 +vt 0.1944 0.1720 0.0000 +vt 0.1944 0.1726 0.0000 +vt 0.1944 0.1728 0.0000 +vt 0.4648 0.1595 0.0000 +vt 0.4648 0.1588 0.0000 +vt 0.4620 0.1705 0.0000 +vt 0.4460 0.0597 0.0000 +vt 0.4465 0.0597 0.0000 +vt 0.4465 0.0604 0.0000 +vt 0.4460 0.0604 0.0000 +vt 0.4770 0.1591 0.0000 +vt 0.4765 0.1591 0.0000 +vt 0.4765 0.1584 0.0000 +vt 0.4770 0.1584 0.0000 +vt 0.4762 0.1591 0.0000 +vt 0.4762 0.1584 0.0000 +vt 0.4457 0.0597 0.0000 +vt 0.4457 0.0604 0.0000 +vt 0.0887 0.1506 0.0000 +vt 0.0887 0.1501 0.0000 +vt 0.0891 0.1504 0.0000 +vt 0.0889 0.1507 0.0000 +vt 0.0887 0.1511 0.0000 +vt 0.0889 0.1510 0.0000 +vt 0.0894 0.1516 0.0000 +vt 0.0887 0.1516 0.0000 +vt 0.0891 0.1513 0.0000 +vt 0.0894 0.1514 0.0000 +vt 0.0894 0.1501 0.0000 +vt 0.0894 0.1503 0.0000 +vt 0.9048 0.2475 0.0000 +vt 0.9052 0.2475 0.0000 +vt 0.9052 0.2478 0.0000 +vt 0.9047 0.2478 0.0000 +vt 0.9049 0.2399 0.0000 +vt 0.9051 0.2399 0.0000 +vt 0.9051 0.2402 0.0000 +vt 0.9047 0.2402 0.0000 +vt 0.9049 0.2396 0.0000 +vt 0.9051 0.2396 0.0000 +vt 0.9047 0.2393 0.0000 +vt 0.9051 0.2393 0.0000 +vt 0.2146 0.1082 0.0000 +vt 0.2145 0.1079 0.0000 +vt 0.2150 0.1079 0.0000 +vt 0.2150 0.1082 0.0000 +vt 0.4465 0.0605 0.0000 +vt 0.4460 0.0605 0.0000 +vt 0.0886 0.1506 0.0000 +vt 0.0886 0.1502 0.0000 +vt 0.0886 0.1511 0.0000 +vt 0.0886 0.1515 0.0000 +vt 0.4765 0.1583 0.0000 +vt 0.4769 0.1583 0.0000 +vt 0.4762 0.1583 0.0000 +vt 0.4457 0.0605 0.0000 +vt 0.4514 0.1914 0.0000 +vt 0.4514 0.1922 0.0000 +vt 0.4513 0.1922 0.0000 +vt 0.4513 0.1913 0.0000 +vt 0.4507 0.1922 0.0000 +vt 0.4507 0.1913 0.0000 +vt 0.9077 0.2475 0.0000 +vt 0.9077 0.2478 0.0000 +vt 0.9076 0.2399 0.0000 +vt 0.9076 0.2401 0.0000 +vt 0.9076 0.2396 0.0000 +vt 0.9076 0.2393 0.0000 +vt 0.2174 0.1079 0.0000 +vt 0.2174 0.1082 0.0000 +vt 0.9175 0.2476 0.0000 +vt 0.9175 0.2478 0.0000 +vt 0.9078 0.2478 0.0000 +vt 0.9078 0.2475 0.0000 +vt 0.9175 0.2398 0.0000 +vt 0.9175 0.2400 0.0000 +vt 0.9077 0.2401 0.0000 +vt 0.9077 0.2399 0.0000 +vt 0.9175 0.2396 0.0000 +vt 0.9077 0.2396 0.0000 +vt 0.9175 0.2394 0.0000 +vt 0.9077 0.2393 0.0000 +vt 0.2273 0.1079 0.0000 +vt 0.2273 0.1082 0.0000 +vt 0.2176 0.1082 0.0000 +vt 0.2176 0.1079 0.0000 +vt 0.4460 0.0590 0.0000 +vt 0.4465 0.0590 0.0000 +vt 0.4770 0.1598 0.0000 +vt 0.4765 0.1598 0.0000 +vt 0.4762 0.1598 0.0000 +vt 0.4457 0.0590 0.0000 +vt 0.0901 0.1506 0.0000 +vt 0.0899 0.1507 0.0000 +vt 0.0897 0.1504 0.0000 +vt 0.0901 0.1501 0.0000 +vt 0.0901 0.1511 0.0000 +vt 0.0899 0.1510 0.0000 +vt 0.0897 0.1513 0.0000 +vt 0.0901 0.1516 0.0000 +vt 0.9048 0.2481 0.0000 +vt 0.9052 0.2481 0.0000 +vt 0.2554 0.0699 0.0000 +vt 0.2556 0.0702 0.0000 +vt 0.2552 0.0702 0.0000 +vt 0.2552 0.0699 0.0000 +vt 0.2554 0.0696 0.0000 +vt 0.2552 0.0696 0.0000 +vt 0.2552 0.0693 0.0000 +vt 0.2556 0.0693 0.0000 +vt 0.2146 0.1076 0.0000 +vt 0.2150 0.1076 0.0000 +vt 0.4460 0.0589 0.0000 +vt 0.4465 0.0589 0.0000 +vt 0.0902 0.1502 0.0000 +vt 0.0902 0.1506 0.0000 +vt 0.0902 0.1511 0.0000 +vt 0.0902 0.1515 0.0000 +vt 0.4769 0.1599 0.0000 +vt 0.4765 0.1599 0.0000 +vt 0.4762 0.1599 0.0000 +vt 0.4457 0.0589 0.0000 +vt 0.4499 0.1914 0.0000 +vt 0.4501 0.1913 0.0000 +vt 0.4501 0.1922 0.0000 +vt 0.4499 0.1922 0.0000 +vt 0.9077 0.2481 0.0000 +vt 0.2527 0.0699 0.0000 +vt 0.2527 0.0702 0.0000 +vt 0.2527 0.0696 0.0000 +vt 0.2527 0.0693 0.0000 +vt 0.2174 0.1076 0.0000 +vt 0.9175 0.2480 0.0000 +vt 0.9078 0.2481 0.0000 +vt 0.2429 0.0699 0.0000 +vt 0.2526 0.0699 0.0000 +vt 0.2526 0.0701 0.0000 +vt 0.2429 0.0701 0.0000 +vt 0.2429 0.0696 0.0000 +vt 0.2526 0.0696 0.0000 +vt 0.2429 0.0694 0.0000 +vt 0.2526 0.0693 0.0000 +vt 0.2176 0.1076 0.0000 +vt 0.2273 0.1077 0.0000 +vt 0.3420 0.2371 0.0000 +vt 0.3425 0.2373 0.0000 +vt 0.3419 0.2380 0.0000 +vt 0.3428 0.2377 0.0000 +vt 0.3428 0.2382 0.0000 +vt 0.3425 0.2386 0.0000 +vt 0.3420 0.2388 0.0000 +vt 0.3417 0.2388 0.0000 +vt 0.3417 0.2372 0.0000 +vt 0.8930 0.2793 0.0000 +vt 0.8935 0.2791 0.0000 +vt 0.8935 0.2799 0.0000 +vt 0.8937 0.2792 0.0000 +vt 0.8937 0.2807 0.0000 +vt 0.8935 0.2808 0.0000 +vt 0.8930 0.2806 0.0000 +vt 0.8927 0.2802 0.0000 +vt 0.8927 0.2797 0.0000 +vt 0.4567 0.2104 0.0000 +vt 0.4568 0.2102 0.0000 +vt 0.4570 0.2104 0.0000 +vt 0.4569 0.2101 0.0000 +vt 0.4571 0.2101 0.0000 +vt 0.4573 0.2102 0.0000 +vt 0.4573 0.2104 0.0000 +vt 0.4573 0.2105 0.0000 +vt 0.4571 0.2107 0.0000 +vt 0.4569 0.2107 0.0000 +vt 0.4568 0.2105 0.0000 +vt 0.4566 0.2208 0.0000 +vt 0.4565 0.2207 0.0000 +vt 0.4568 0.2207 0.0000 +vt 0.4568 0.2208 0.0000 +vt 0.4570 0.2207 0.0000 +vt 0.4569 0.2209 0.0000 +vt 0.5754 0.0407 0.0000 +vt 0.5754 0.0408 0.0000 +vt 0.5751 0.0408 0.0000 +vt 0.5752 0.0407 0.0000 +vt 0.2274 0.1081 0.0000 +vt 0.2274 0.1079 0.0000 +vt 0.4564 0.2209 0.0000 +vt 0.4563 0.2208 0.0000 +vt 0.6690 0.1034 0.0000 +vt 0.6690 0.1032 0.0000 +vt 0.6692 0.1032 0.0000 +vt 0.6692 0.1034 0.0000 +vt 0.2428 0.0696 0.0000 +vt 0.2428 0.0698 0.0000 +vt 0.2515 0.1077 0.0000 +vt 0.2515 0.1076 0.0000 +vt 0.2517 0.1077 0.0000 +vt 0.2517 0.1078 0.0000 +vt 0.2513 0.1078 0.0000 +vt 0.2513 0.1077 0.0000 +vt 0.4747 0.1591 0.0000 +vt 0.4747 0.1585 0.0000 +vt 0.4747 0.1597 0.0000 +vt 0.4747 0.1598 0.0000 +vt 0.8953 0.2796 0.0000 +vt 0.8953 0.2803 0.0000 +vt 0.4442 0.0591 0.0000 +vt 0.4442 0.0590 0.0000 +vt 0.4442 0.0597 0.0000 +vt 0.4442 0.0603 0.0000 +vt 0.4442 0.0604 0.0000 +vt 0.3402 0.2384 0.0000 +vt 0.3402 0.2376 0.0000 +vt 0.4747 0.1583 0.0000 +vt 0.6740 0.0647 0.0000 +vt 0.6740 0.0629 0.0000 +vt 0.6783 0.0629 0.0000 +vt 0.6783 0.0647 0.0000 +vt 0.6740 0.0663 0.0000 +vt 0.6783 0.0663 0.0000 +vt 0.6740 0.0676 0.0000 +vt 0.6783 0.0676 0.0000 +vt 0.8749 0.1695 0.0000 +vt 0.8733 0.1695 0.0000 +vt 0.8733 0.1652 0.0000 +vt 0.8749 0.1652 0.0000 +vt 0.8766 0.1695 0.0000 +vt 0.8766 0.1652 0.0000 +vt 0.8784 0.1659 0.0000 +vt 0.8784 0.1695 0.0000 +vt 0.8800 0.1664 0.0000 +vt 0.8800 0.1695 0.0000 +vt 0.8813 0.1669 0.0000 +vt 0.8813 0.1695 0.0000 +vt 0.3304 0.1370 0.0000 +vt 0.3263 0.1370 0.0000 +vt 0.3263 0.1351 0.0000 +vt 0.3304 0.1351 0.0000 +vt 0.6139 0.1382 0.0000 +vt 0.6139 0.1357 0.0000 +vt 0.6154 0.1357 0.0000 +vt 0.6154 0.1383 0.0000 +vt 0.6710 0.0647 0.0000 +vt 0.6710 0.0629 0.0000 +vt 0.6710 0.0663 0.0000 +vt 0.6710 0.0676 0.0000 +vt 0.8749 0.1725 0.0000 +vt 0.8733 0.1725 0.0000 +vt 0.8766 0.1725 0.0000 +vt 0.8784 0.1725 0.0000 +vt 0.8800 0.1725 0.0000 +vt 0.8813 0.1725 0.0000 +vt 0.6154 0.1327 0.0000 +vt 0.6173 0.1327 0.0000 +vt 0.6173 0.1357 0.0000 +vt 0.6139 0.1327 0.0000 +vt 0.1785 0.1422 0.0000 +vt 0.1811 0.1422 0.0000 +vt 0.1785 0.1436 0.0000 +vt 0.9666 0.2268 0.0000 +vt 0.9666 0.2294 0.0000 +vt 0.9644 0.2294 0.0000 +vt 0.9644 0.2260 0.0000 +vt 0.1978 0.1368 0.0000 +vt 0.1965 0.1368 0.0000 +vt 0.1965 0.1350 0.0000 +vt 0.1986 0.1350 0.0000 +vt 0.1818 0.1436 0.0000 +vt 0.1826 0.1457 0.0000 +vt 0.1785 0.1457 0.0000 +vt 0.9623 0.2294 0.0000 +vt 0.9623 0.2253 0.0000 +vt 0.1944 0.1368 0.0000 +vt 0.1944 0.1350 0.0000 +vt 0.8841 0.0614 0.0000 +vt 0.8836 0.0605 0.0000 +vt 0.8847 0.0590 0.0000 +vt 0.8860 0.0604 0.0000 +vt 0.8831 0.0619 0.0000 +vt 0.6740 0.0611 0.0000 +vt 0.6783 0.0611 0.0000 +vt 0.6740 0.0595 0.0000 +vt 0.6783 0.0595 0.0000 +vt 0.6740 0.0583 0.0000 +vt 0.6783 0.0583 0.0000 +vt 0.7954 0.2254 0.0000 +vt 0.7954 0.2211 0.0000 +vt 0.7970 0.2211 0.0000 +vt 0.7970 0.2254 0.0000 +vt 0.7936 0.2254 0.0000 +vt 0.7936 0.2211 0.0000 +vt 0.7918 0.2217 0.0000 +vt 0.7918 0.2254 0.0000 +vt 0.7902 0.2223 0.0000 +vt 0.7902 0.2254 0.0000 +vt 0.7890 0.2227 0.0000 +vt 0.7890 0.2254 0.0000 +vt 0.3443 0.1235 0.0000 +vt 0.3443 0.1254 0.0000 +vt 0.3402 0.1254 0.0000 +vt 0.3402 0.1235 0.0000 +vt 0.6124 0.1383 0.0000 +vt 0.6124 0.1357 0.0000 +vt 0.6710 0.0611 0.0000 +vt 0.6710 0.0595 0.0000 +vt 0.6710 0.0583 0.0000 +vt 0.7954 0.2284 0.0000 +vt 0.7970 0.2284 0.0000 +vt 0.7936 0.2284 0.0000 +vt 0.7918 0.2284 0.0000 +vt 0.7902 0.2284 0.0000 +vt 0.7890 0.2284 0.0000 +vt 0.6105 0.1357 0.0000 +vt 0.6105 0.1327 0.0000 +vt 0.6124 0.1327 0.0000 +vt 0.9724 0.2662 0.0000 +vt 0.9724 0.2649 0.0000 +vt 0.9750 0.2662 0.0000 +vt 0.1785 0.1323 0.0000 +vt 0.1807 0.1316 0.0000 +vt 0.1807 0.1349 0.0000 +vt 0.1785 0.1349 0.0000 +vt 0.5164 0.0431 0.0000 +vt 0.5156 0.0412 0.0000 +vt 0.5178 0.0412 0.0000 +vt 0.5178 0.0431 0.0000 +vt 0.9757 0.2649 0.0000 +vt 0.9724 0.2628 0.0000 +vt 0.9765 0.2628 0.0000 +vt 0.1828 0.1349 0.0000 +vt 0.1828 0.1308 0.0000 +vt 0.5199 0.0412 0.0000 +vt 0.5199 0.0431 0.0000 +vt 0.8871 0.0674 0.0000 +vt 0.8890 0.0665 0.0000 +vt 0.8893 0.0684 0.0000 +vt 0.8875 0.0683 0.0000 +vt 0.8861 0.0679 0.0000 +vt 0.8934 0.0605 0.0000 +vt 0.8915 0.0614 0.0000 +vt 0.8925 0.0591 0.0000 +vt 0.8862 0.0658 0.0000 +vt 0.8856 0.0644 0.0000 +vt 0.8875 0.0634 0.0000 +vt 0.8881 0.0648 0.0000 +vt 0.8885 0.0629 0.0000 +vt 0.8910 0.0678 0.0000 +vt 0.8843 0.0667 0.0000 +vt 0.8834 0.0655 0.0000 +vt 0.8924 0.0668 0.0000 +vt 0.8901 0.0621 0.0000 +vt 0.8935 0.0654 0.0000 +vt 0.8849 0.0630 0.0000 +vt 0.8868 0.0621 0.0000 +vt 0.8861 0.0580 0.0000 +vt 0.8878 0.0575 0.0000 +vt 0.8896 0.0575 0.0000 +vt 0.8829 0.0640 0.0000 +vt 0.8940 0.0620 0.0000 +vt 0.8912 0.0581 0.0000 +vt 0.8940 0.0637 0.0000 +vt 0.6786 0.0629 0.0000 +vt 0.6786 0.0645 0.0000 +vt 0.9332 0.1348 0.0000 +vt 0.9331 0.1345 0.0000 +vt 0.9348 0.1345 0.0000 +vt 0.9350 0.1348 0.0000 +vt 0.9365 0.1342 0.0000 +vt 0.9367 0.1344 0.0000 +vt 0.9379 0.1335 0.0000 +vt 0.9381 0.1337 0.0000 +vt 0.9389 0.1325 0.0000 +vt 0.9391 0.1328 0.0000 +vt 0.4193 0.1586 0.0000 +vt 0.4193 0.1583 0.0000 +vt 0.4211 0.1587 0.0000 +vt 0.4211 0.1591 0.0000 +vt 0.4230 0.1588 0.0000 +vt 0.4230 0.1591 0.0000 +vt 0.4244 0.1584 0.0000 +vt 0.4247 0.1587 0.0000 +vt 0.6786 0.0613 0.0000 +vt 0.9289 0.1329 0.0000 +vt 0.9292 0.1327 0.0000 +vt 0.9302 0.1336 0.0000 +vt 0.9300 0.1338 0.0000 +vt 0.4164 0.1359 0.0000 +vt 0.4165 0.1355 0.0000 +vt 0.4182 0.1351 0.0000 +vt 0.4182 0.1355 0.0000 +vt 0.4147 0.1359 0.0000 +vt 0.4148 0.1356 0.0000 +vt 0.4131 0.1356 0.0000 +vt 0.4132 0.1352 0.0000 +vt 0.8835 0.2799 0.0000 +vt 0.8835 0.2795 0.0000 +vt 0.8853 0.2792 0.0000 +vt 0.8853 0.2795 0.0000 +vt 0.8816 0.2798 0.0000 +vt 0.8816 0.2795 0.0000 +vt 0.8800 0.2794 0.0000 +vt 0.8803 0.2791 0.0000 +vt 0.1815 0.1425 0.0000 +vt 0.9753 0.2660 0.0000 +vt 0.1046 0.1059 0.0000 +vt 0.1028 0.1059 0.0000 +vt 0.1037 0.1002 0.0000 +vt 0.1011 0.1053 0.0000 +vt 0.0996 0.1042 0.0000 +vt 0.0986 0.1028 0.0000 +vt 0.0980 0.1011 0.0000 +vt 0.0980 0.0993 0.0000 +vt 0.0986 0.0976 0.0000 +vt 0.0997 0.0961 0.0000 +vt 0.1014 0.0950 0.0000 +vt 0.1028 0.0945 0.0000 +vt 0.1044 0.0946 0.0000 +vt 0.1063 0.0951 0.0000 +vt 0.1078 0.0961 0.0000 +vt 0.1088 0.0976 0.0000 +vt 0.1094 0.0993 0.0000 +vt 0.1094 0.1011 0.0000 +vt 0.1088 0.1028 0.0000 +vt 0.1077 0.1043 0.0000 +vt 0.1063 0.1053 0.0000 +vt 0.3695 0.2244 0.0000 +vt 0.3700 0.2244 0.0000 +vt 0.3700 0.2251 0.0000 +vt 0.3695 0.2251 0.0000 +vt 0.4518 0.1475 0.0000 +vt 0.4513 0.1475 0.0000 +vt 0.4513 0.1468 0.0000 +vt 0.4518 0.1468 0.0000 +vt 0.4510 0.1475 0.0000 +vt 0.4510 0.1468 0.0000 +vt 0.3692 0.2244 0.0000 +vt 0.3692 0.2251 0.0000 +vt 0.4540 0.0594 0.0000 +vt 0.4540 0.0589 0.0000 +vt 0.4543 0.0592 0.0000 +vt 0.4541 0.0595 0.0000 +vt 0.4540 0.0598 0.0000 +vt 0.4541 0.0598 0.0000 +vt 0.4546 0.0604 0.0000 +vt 0.4540 0.0604 0.0000 +vt 0.4543 0.0601 0.0000 +vt 0.4546 0.0602 0.0000 +vt 0.4546 0.0589 0.0000 +vt 0.4546 0.0591 0.0000 +vt 0.9508 0.2091 0.0000 +vt 0.9512 0.2091 0.0000 +vt 0.9512 0.2094 0.0000 +vt 0.9507 0.2094 0.0000 +vt 0.2210 0.0897 0.0000 +vt 0.2213 0.0897 0.0000 +vt 0.2213 0.0900 0.0000 +vt 0.2209 0.0900 0.0000 +vt 0.2210 0.0894 0.0000 +vt 0.2213 0.0894 0.0000 +vt 0.2209 0.0891 0.0000 +vt 0.2213 0.0891 0.0000 +vt 0.8889 0.2716 0.0000 +vt 0.8888 0.2713 0.0000 +vt 0.8893 0.2713 0.0000 +vt 0.8893 0.2716 0.0000 +vt 0.3700 0.2252 0.0000 +vt 0.3695 0.2252 0.0000 +vt 0.4538 0.0594 0.0000 +vt 0.4538 0.0589 0.0000 +vt 0.4538 0.0599 0.0000 +vt 0.4538 0.0603 0.0000 +vt 0.4513 0.1467 0.0000 +vt 0.4518 0.1467 0.0000 +vt 0.4510 0.1467 0.0000 +vt 0.3692 0.2252 0.0000 +vt 0.9322 0.2792 0.0000 +vt 0.9322 0.2800 0.0000 +vt 0.9320 0.2800 0.0000 +vt 0.9320 0.2791 0.0000 +vt 0.9314 0.2800 0.0000 +vt 0.9314 0.2791 0.0000 +vt 0.9537 0.2091 0.0000 +vt 0.9537 0.2094 0.0000 +vt 0.2237 0.0897 0.0000 +vt 0.2237 0.0899 0.0000 +vt 0.2237 0.0894 0.0000 +vt 0.2237 0.0891 0.0000 +vt 0.8917 0.2713 0.0000 +vt 0.8917 0.2716 0.0000 +vt 0.9635 0.2092 0.0000 +vt 0.9635 0.2094 0.0000 +vt 0.9538 0.2094 0.0000 +vt 0.9538 0.2092 0.0000 +vt 0.2336 0.0896 0.0000 +vt 0.2336 0.0898 0.0000 +vt 0.2239 0.0899 0.0000 +vt 0.2239 0.0897 0.0000 +vt 0.2336 0.0894 0.0000 +vt 0.2239 0.0894 0.0000 +vt 0.2336 0.0892 0.0000 +vt 0.2239 0.0891 0.0000 +vt 0.9016 0.2713 0.0000 +vt 0.9016 0.2715 0.0000 +vt 0.8919 0.2716 0.0000 +vt 0.8919 0.2713 0.0000 +vt 0.3695 0.2237 0.0000 +vt 0.3700 0.2237 0.0000 +vt 0.4518 0.1482 0.0000 +vt 0.4513 0.1482 0.0000 +vt 0.4510 0.1482 0.0000 +vt 0.3692 0.2237 0.0000 +vt 0.4553 0.0594 0.0000 +vt 0.4552 0.0595 0.0000 +vt 0.4550 0.0592 0.0000 +vt 0.4553 0.0589 0.0000 +vt 0.4553 0.0598 0.0000 +vt 0.4552 0.0598 0.0000 +vt 0.4550 0.0601 0.0000 +vt 0.4553 0.0604 0.0000 +vt 0.9508 0.2098 0.0000 +vt 0.9512 0.2098 0.0000 +vt 0.2070 0.1000 0.0000 +vt 0.2072 0.1003 0.0000 +vt 0.2068 0.1003 0.0000 +vt 0.2068 0.1000 0.0000 +vt 0.2070 0.0997 0.0000 +vt 0.2068 0.0997 0.0000 +vt 0.2068 0.0994 0.0000 +vt 0.2072 0.0994 0.0000 +vt 0.8889 0.2710 0.0000 +vt 0.8893 0.2710 0.0000 +vt 0.3695 0.2236 0.0000 +vt 0.3700 0.2236 0.0000 +vt 0.4554 0.0589 0.0000 +vt 0.4554 0.0594 0.0000 +vt 0.4554 0.0599 0.0000 +vt 0.4554 0.0603 0.0000 +vt 0.4518 0.1483 0.0000 +vt 0.4513 0.1483 0.0000 +vt 0.4510 0.1483 0.0000 +vt 0.3692 0.2236 0.0000 +vt 0.9307 0.2792 0.0000 +vt 0.9309 0.2791 0.0000 +vt 0.9309 0.2800 0.0000 +vt 0.9307 0.2800 0.0000 +vt 0.9537 0.2097 0.0000 +vt 0.2043 0.1000 0.0000 +vt 0.2043 0.1003 0.0000 +vt 0.2043 0.0997 0.0000 +vt 0.2043 0.0994 0.0000 +vt 0.8917 0.2710 0.0000 +vt 0.9635 0.2097 0.0000 +vt 0.9538 0.2097 0.0000 +vt 0.1945 0.1000 0.0000 +vt 0.2042 0.1000 0.0000 +vt 0.2042 0.1003 0.0000 +vt 0.1945 0.1002 0.0000 +vt 0.1945 0.0997 0.0000 +vt 0.2042 0.0997 0.0000 +vt 0.1945 0.0995 0.0000 +vt 0.2042 0.0995 0.0000 +vt 0.8919 0.2710 0.0000 +vt 0.9016 0.2710 0.0000 +vt 0.1962 0.1622 0.0000 +vt 0.1967 0.1623 0.0000 +vt 0.1961 0.1630 0.0000 +vt 0.1970 0.1628 0.0000 +vt 0.1970 0.1633 0.0000 +vt 0.1967 0.1637 0.0000 +vt 0.1962 0.1639 0.0000 +vt 0.1959 0.1638 0.0000 +vt 0.1959 0.1622 0.0000 +vt 0.8515 0.1257 0.0000 +vt 0.8520 0.1255 0.0000 +vt 0.8521 0.1264 0.0000 +vt 0.8522 0.1256 0.0000 +vt 0.8522 0.1272 0.0000 +vt 0.8520 0.1272 0.0000 +vt 0.8515 0.1271 0.0000 +vt 0.8512 0.1266 0.0000 +vt 0.8512 0.1261 0.0000 +vt 0.4715 0.0592 0.0000 +vt 0.4716 0.0590 0.0000 +vt 0.4718 0.0592 0.0000 +vt 0.4718 0.0589 0.0000 +vt 0.4719 0.0589 0.0000 +vt 0.4721 0.0590 0.0000 +vt 0.4722 0.0592 0.0000 +vt 0.4721 0.0593 0.0000 +vt 0.4719 0.0595 0.0000 +vt 0.4718 0.0595 0.0000 +vt 0.4716 0.0593 0.0000 +vt 0.3943 0.2472 0.0000 +vt 0.3942 0.2471 0.0000 +vt 0.3945 0.2471 0.0000 +vt 0.3944 0.2472 0.0000 +vt 0.3947 0.2472 0.0000 +vt 0.3946 0.2473 0.0000 +vt 0.2337 0.0896 0.0000 +vt 0.2337 0.0894 0.0000 +vt 0.0879 0.1428 0.0000 +vt 0.0878 0.1426 0.0000 +vt 0.0881 0.1426 0.0000 +vt 0.0881 0.1427 0.0000 +vt 0.0883 0.1426 0.0000 +vt 0.0882 0.1428 0.0000 +vt 0.3941 0.2473 0.0000 +vt 0.3940 0.2472 0.0000 +vt 0.8197 0.0418 0.0000 +vt 0.8198 0.0417 0.0000 +vt 0.8198 0.0420 0.0000 +vt 0.8197 0.0420 0.0000 +vt 0.1944 0.0998 0.0000 +vt 0.1944 0.0999 0.0000 +vt 0.4353 0.2496 0.0000 +vt 0.4353 0.2495 0.0000 +vt 0.4356 0.2495 0.0000 +vt 0.4355 0.2496 0.0000 +vt 0.4352 0.2497 0.0000 +vt 0.4351 0.2495 0.0000 +vt 0.4495 0.1475 0.0000 +vt 0.4495 0.1469 0.0000 +vt 0.4495 0.1481 0.0000 +vt 0.4495 0.1482 0.0000 +vt 0.8538 0.1260 0.0000 +vt 0.8538 0.1268 0.0000 +vt 0.3677 0.2239 0.0000 +vt 0.3677 0.2237 0.0000 +vt 0.3677 0.2244 0.0000 +vt 0.3677 0.2250 0.0000 +vt 0.3677 0.2252 0.0000 +vt 0.1944 0.1634 0.0000 +vt 0.1944 0.1626 0.0000 +vt 0.4495 0.1467 0.0000 +vt 0.3559 0.2355 0.0000 +vt 0.3564 0.2355 0.0000 +vt 0.3564 0.2362 0.0000 +vt 0.3559 0.2362 0.0000 +vt 0.3801 0.0899 0.0000 +vt 0.3796 0.0899 0.0000 +vt 0.3796 0.0892 0.0000 +vt 0.3801 0.0892 0.0000 +vt 0.3793 0.0899 0.0000 +vt 0.3793 0.0892 0.0000 +vt 0.3556 0.2355 0.0000 +vt 0.3556 0.2362 0.0000 +vt 0.4167 0.2113 0.0000 +vt 0.4167 0.2108 0.0000 +vt 0.4170 0.2111 0.0000 +vt 0.4168 0.2113 0.0000 +vt 0.4167 0.2117 0.0000 +vt 0.4168 0.2117 0.0000 +vt 0.4174 0.2123 0.0000 +vt 0.4167 0.2123 0.0000 +vt 0.4170 0.2119 0.0000 +vt 0.4174 0.2121 0.0000 +vt 0.4174 0.2108 0.0000 +vt 0.4174 0.2110 0.0000 +vt 0.9249 0.2393 0.0000 +vt 0.9253 0.2393 0.0000 +vt 0.9253 0.2396 0.0000 +vt 0.9249 0.2396 0.0000 +vt 0.0982 0.2277 0.0000 +vt 0.0984 0.2277 0.0000 +vt 0.0984 0.2280 0.0000 +vt 0.0980 0.2280 0.0000 +vt 0.0982 0.2274 0.0000 +vt 0.0984 0.2274 0.0000 +vt 0.0980 0.2271 0.0000 +vt 0.0984 0.2271 0.0000 +vt 0.1407 0.1608 0.0000 +vt 0.1406 0.1605 0.0000 +vt 0.1411 0.1605 0.0000 +vt 0.1411 0.1608 0.0000 +vt 0.3563 0.2363 0.0000 +vt 0.3559 0.2363 0.0000 +vt 0.4166 0.2112 0.0000 +vt 0.4166 0.2108 0.0000 +vt 0.4166 0.2118 0.0000 +vt 0.4166 0.2122 0.0000 +vt 0.3796 0.0891 0.0000 +vt 0.3801 0.0891 0.0000 +vt 0.3793 0.0891 0.0000 +vt 0.3556 0.2363 0.0000 +vt 0.3569 0.0694 0.0000 +vt 0.3569 0.0701 0.0000 +vt 0.3568 0.0702 0.0000 +vt 0.3568 0.0693 0.0000 +vt 0.3562 0.0702 0.0000 +vt 0.3562 0.0693 0.0000 +vt 0.9278 0.2393 0.0000 +vt 0.9278 0.2396 0.0000 +vt 0.1009 0.2277 0.0000 +vt 0.1009 0.2280 0.0000 +vt 0.1009 0.2274 0.0000 +vt 0.1009 0.2271 0.0000 +vt 0.1436 0.1605 0.0000 +vt 0.1436 0.1608 0.0000 +vt 0.9377 0.2394 0.0000 +vt 0.9377 0.2396 0.0000 +vt 0.9279 0.2396 0.0000 +vt 0.9279 0.2393 0.0000 +vt 0.1108 0.2277 0.0000 +vt 0.1108 0.2279 0.0000 +vt 0.1010 0.2279 0.0000 +vt 0.1010 0.2277 0.0000 +vt 0.1108 0.2274 0.0000 +vt 0.1010 0.2274 0.0000 +vt 0.1108 0.2272 0.0000 +vt 0.1010 0.2271 0.0000 +vt 0.1534 0.1605 0.0000 +vt 0.1534 0.1608 0.0000 +vt 0.1437 0.1608 0.0000 +vt 0.1437 0.1605 0.0000 +vt 0.3559 0.2349 0.0000 +vt 0.3564 0.2349 0.0000 +vt 0.3801 0.0906 0.0000 +vt 0.3796 0.0906 0.0000 +vt 0.3793 0.0906 0.0000 +vt 0.3556 0.2349 0.0000 +vt 0.4180 0.2113 0.0000 +vt 0.4179 0.2113 0.0000 +vt 0.4177 0.2111 0.0000 +vt 0.4180 0.2108 0.0000 +vt 0.4180 0.2117 0.0000 +vt 0.4179 0.2117 0.0000 +vt 0.4177 0.2119 0.0000 +vt 0.4180 0.2123 0.0000 +vt 0.9249 0.2399 0.0000 +vt 0.9253 0.2399 0.0000 +vt 0.1312 0.2163 0.0000 +vt 0.1313 0.2166 0.0000 +vt 0.1309 0.2166 0.0000 +vt 0.1309 0.2163 0.0000 +vt 0.1312 0.2160 0.0000 +vt 0.1309 0.2160 0.0000 +vt 0.1309 0.2157 0.0000 +vt 0.1313 0.2157 0.0000 +vt 0.1407 0.1602 0.0000 +vt 0.1411 0.1602 0.0000 +vt 0.3559 0.2347 0.0000 +vt 0.3563 0.2347 0.0000 +vt 0.4182 0.2108 0.0000 +vt 0.4182 0.2112 0.0000 +vt 0.4182 0.2118 0.0000 +vt 0.4182 0.2122 0.0000 +vt 0.3801 0.0907 0.0000 +vt 0.3796 0.0907 0.0000 +vt 0.3793 0.0907 0.0000 +vt 0.3556 0.2347 0.0000 +vt 0.3555 0.0694 0.0000 +vt 0.3556 0.0693 0.0000 +vt 0.3556 0.0702 0.0000 +vt 0.3555 0.0701 0.0000 +vt 0.9278 0.2399 0.0000 +vt 0.1285 0.2163 0.0000 +vt 0.1285 0.2166 0.0000 +vt 0.1285 0.2160 0.0000 +vt 0.1285 0.2157 0.0000 +vt 0.1436 0.1602 0.0000 +vt 0.9377 0.2398 0.0000 +vt 0.9279 0.2399 0.0000 +vt 0.1186 0.2163 0.0000 +vt 0.1283 0.2163 0.0000 +vt 0.1283 0.2165 0.0000 +vt 0.1186 0.2165 0.0000 +vt 0.1186 0.2160 0.0000 +vt 0.1283 0.2160 0.0000 +vt 0.1186 0.2158 0.0000 +vt 0.1283 0.2157 0.0000 +vt 0.1437 0.1602 0.0000 +vt 0.1534 0.1603 0.0000 +vt 0.2630 0.2068 0.0000 +vt 0.2635 0.2069 0.0000 +vt 0.2629 0.2076 0.0000 +vt 0.2638 0.2074 0.0000 +vt 0.2638 0.2079 0.0000 +vt 0.2635 0.2083 0.0000 +vt 0.2630 0.2085 0.0000 +vt 0.2627 0.2084 0.0000 +vt 0.2627 0.2068 0.0000 +vt 0.3682 0.0892 0.0000 +vt 0.3687 0.0891 0.0000 +vt 0.3688 0.0899 0.0000 +vt 0.3690 0.0891 0.0000 +vt 0.3690 0.0907 0.0000 +vt 0.3687 0.0908 0.0000 +vt 0.3682 0.0906 0.0000 +vt 0.3679 0.0902 0.0000 +vt 0.3679 0.0897 0.0000 +vt 0.7267 0.1291 0.0000 +vt 0.7269 0.1291 0.0000 +vt 0.7267 0.1294 0.0000 +vt 0.7270 0.1293 0.0000 +vt 0.7270 0.1295 0.0000 +vt 0.7269 0.1296 0.0000 +vt 0.7267 0.1297 0.0000 +vt 0.7266 0.1296 0.0000 +vt 0.7264 0.1295 0.0000 +vt 0.7264 0.1293 0.0000 +vt 0.7266 0.1291 0.0000 +vt 0.1312 0.1924 0.0000 +vt 0.1312 0.1922 0.0000 +vt 0.1314 0.1922 0.0000 +vt 0.1314 0.1924 0.0000 +vt 0.1316 0.1923 0.0000 +vt 0.1315 0.1924 0.0000 +vt 0.1108 0.2276 0.0000 +vt 0.4460 0.2487 0.0000 +vt 0.4460 0.2485 0.0000 +vt 0.4462 0.2485 0.0000 +vt 0.4462 0.2486 0.0000 +vt 0.4464 0.2485 0.0000 +vt 0.4464 0.2487 0.0000 +vt 0.1310 0.1924 0.0000 +vt 0.1310 0.1923 0.0000 +vt 0.6271 0.1485 0.0000 +vt 0.6271 0.1484 0.0000 +vt 0.6273 0.1484 0.0000 +vt 0.6273 0.1485 0.0000 +vt 0.1185 0.2161 0.0000 +vt 0.1185 0.2162 0.0000 +vt 0.4600 0.2020 0.0000 +vt 0.4600 0.2018 0.0000 +vt 0.4603 0.2019 0.0000 +vt 0.4602 0.2020 0.0000 +vt 0.4599 0.2020 0.0000 +vt 0.4598 0.2019 0.0000 +vt 0.3778 0.0899 0.0000 +vt 0.3778 0.0892 0.0000 +vt 0.3778 0.0904 0.0000 +vt 0.3778 0.0906 0.0000 +vt 0.3705 0.0895 0.0000 +vt 0.3705 0.0903 0.0000 +vt 0.3541 0.2350 0.0000 +vt 0.3541 0.2348 0.0000 +vt 0.3541 0.2355 0.0000 +vt 0.3541 0.2362 0.0000 +vt 0.3541 0.2363 0.0000 +vt 0.2612 0.2080 0.0000 +vt 0.2612 0.2072 0.0000 +vt 0.3778 0.0891 0.0000 +vt 0.7035 0.0647 0.0000 +vt 0.7035 0.0629 0.0000 +vt 0.7078 0.0629 0.0000 +vt 0.7078 0.0647 0.0000 +vt 0.7035 0.0663 0.0000 +vt 0.7078 0.0663 0.0000 +vt 0.7035 0.0676 0.0000 +vt 0.7078 0.0676 0.0000 +vt 0.1437 0.0975 0.0000 +vt 0.1437 0.0959 0.0000 +vt 0.1480 0.0959 0.0000 +vt 0.1480 0.0975 0.0000 +vt 0.1437 0.0993 0.0000 +vt 0.1480 0.0993 0.0000 +vt 0.1473 0.1011 0.0000 +vt 0.1437 0.1011 0.0000 +vt 0.1467 0.1027 0.0000 +vt 0.1437 0.1027 0.0000 +vt 0.0993 0.1595 0.0000 +vt 0.0993 0.1621 0.0000 +vt 0.0980 0.1621 0.0000 +vt 0.0980 0.1590 0.0000 +vt 0.3304 0.1485 0.0000 +vt 0.3263 0.1485 0.0000 +vt 0.3263 0.1467 0.0000 +vt 0.3304 0.1467 0.0000 +vt 0.1027 0.1596 0.0000 +vt 0.1027 0.1621 0.0000 +vt 0.1011 0.1621 0.0000 +vt 0.1011 0.1595 0.0000 +vt 0.7005 0.0647 0.0000 +vt 0.7005 0.0629 0.0000 +vt 0.7005 0.0663 0.0000 +vt 0.7005 0.0676 0.0000 +vt 0.1406 0.0975 0.0000 +vt 0.1406 0.0959 0.0000 +vt 0.1406 0.0993 0.0000 +vt 0.1406 0.1011 0.0000 +vt 0.1406 0.1027 0.0000 +vt 0.0993 0.1652 0.0000 +vt 0.0980 0.1652 0.0000 +vt 0.1011 0.1652 0.0000 +vt 0.1027 0.1652 0.0000 +vt 0.1406 0.2012 0.0000 +vt 0.1433 0.2012 0.0000 +vt 0.1406 0.2025 0.0000 +vt 0.1657 0.1375 0.0000 +vt 0.1657 0.1401 0.0000 +vt 0.1636 0.1401 0.0000 +vt 0.1636 0.1367 0.0000 +vt 0.6250 0.1201 0.0000 +vt 0.6250 0.1188 0.0000 +vt 0.6269 0.1188 0.0000 +vt 0.6269 0.1209 0.0000 +vt 0.1440 0.2025 0.0000 +vt 0.1448 0.2046 0.0000 +vt 0.1406 0.2046 0.0000 +vt 0.1614 0.1401 0.0000 +vt 0.1614 0.1359 0.0000 +vt 0.6250 0.1166 0.0000 +vt 0.6269 0.1166 0.0000 +vt 0.0168 0.1641 0.0000 +vt 0.0163 0.1632 0.0000 +vt 0.0174 0.1617 0.0000 +vt 0.0187 0.1632 0.0000 +vt 0.0158 0.1646 0.0000 +vt 0.7035 0.0611 0.0000 +vt 0.7078 0.0611 0.0000 +vt 0.7035 0.0595 0.0000 +vt 0.7078 0.0595 0.0000 +vt 0.7035 0.0583 0.0000 +vt 0.7078 0.0583 0.0000 +vt 0.8822 0.2143 0.0000 +vt 0.8865 0.2143 0.0000 +vt 0.8865 0.2159 0.0000 +vt 0.8822 0.2159 0.0000 +vt 0.8822 0.2125 0.0000 +vt 0.8865 0.2125 0.0000 +vt 0.8859 0.2107 0.0000 +vt 0.8822 0.2107 0.0000 +vt 0.8853 0.2091 0.0000 +vt 0.8822 0.2091 0.0000 +vt 0.1061 0.1595 0.0000 +vt 0.1073 0.1590 0.0000 +vt 0.1073 0.1621 0.0000 +vt 0.1061 0.1621 0.0000 +vt 0.3720 0.1235 0.0000 +vt 0.3720 0.1254 0.0000 +vt 0.3679 0.1254 0.0000 +vt 0.3679 0.1235 0.0000 +vt 0.1042 0.1595 0.0000 +vt 0.1042 0.1621 0.0000 +vt 0.7005 0.0611 0.0000 +vt 0.7005 0.0595 0.0000 +vt 0.7005 0.0583 0.0000 +vt 0.8792 0.2143 0.0000 +vt 0.8792 0.2159 0.0000 +vt 0.8792 0.2125 0.0000 +vt 0.8792 0.2107 0.0000 +vt 0.8792 0.2091 0.0000 +vt 0.1073 0.1652 0.0000 +vt 0.1061 0.1652 0.0000 +vt 0.1042 0.1652 0.0000 +vt 0.2198 0.1270 0.0000 +vt 0.2198 0.1256 0.0000 +vt 0.2225 0.1270 0.0000 +vt 0.9710 0.1688 0.0000 +vt 0.9732 0.1681 0.0000 +vt 0.9732 0.1714 0.0000 +vt 0.9710 0.1714 0.0000 +vt 0.5646 0.2869 0.0000 +vt 0.5628 0.2878 0.0000 +vt 0.5628 0.2856 0.0000 +vt 0.5646 0.2856 0.0000 +vt 0.2232 0.1256 0.0000 +vt 0.2198 0.1235 0.0000 +vt 0.2239 0.1235 0.0000 +vt 0.9753 0.1714 0.0000 +vt 0.9753 0.1673 0.0000 +vt 0.5628 0.2835 0.0000 +vt 0.5646 0.2835 0.0000 +vt 0.0198 0.1701 0.0000 +vt 0.0217 0.1692 0.0000 +vt 0.0221 0.1711 0.0000 +vt 0.0202 0.1711 0.0000 +vt 0.0188 0.1706 0.0000 +vt 0.0262 0.1632 0.0000 +vt 0.0243 0.1642 0.0000 +vt 0.0253 0.1619 0.0000 +vt 0.0190 0.1685 0.0000 +vt 0.0183 0.1671 0.0000 +vt 0.0202 0.1662 0.0000 +vt 0.0209 0.1676 0.0000 +vt 0.0213 0.1657 0.0000 +vt 0.0237 0.1706 0.0000 +vt 0.0171 0.1695 0.0000 +vt 0.0161 0.1682 0.0000 +vt 0.0252 0.1695 0.0000 +vt 0.0229 0.1649 0.0000 +vt 0.0262 0.1681 0.0000 +vt 0.0176 0.1657 0.0000 +vt 0.0195 0.1648 0.0000 +vt 0.0188 0.1607 0.0000 +vt 0.0206 0.1602 0.0000 +vt 0.0223 0.1602 0.0000 +vt 0.0157 0.1667 0.0000 +vt 0.0267 0.1648 0.0000 +vt 0.0240 0.1608 0.0000 +vt 0.0268 0.1665 0.0000 +vt 0.7080 0.0629 0.0000 +vt 0.7080 0.0645 0.0000 +vt 0.8758 0.2416 0.0000 +vt 0.8758 0.2412 0.0000 +vt 0.8774 0.2413 0.0000 +vt 0.8776 0.2416 0.0000 +vt 0.8791 0.2409 0.0000 +vt 0.8793 0.2412 0.0000 +vt 0.8805 0.2402 0.0000 +vt 0.8807 0.2405 0.0000 +vt 0.8816 0.2393 0.0000 +vt 0.8818 0.2395 0.0000 +vt 0.3949 0.1471 0.0000 +vt 0.3950 0.1467 0.0000 +vt 0.3967 0.1471 0.0000 +vt 0.3968 0.1475 0.0000 +vt 0.3986 0.1472 0.0000 +vt 0.3986 0.1475 0.0000 +vt 0.4000 0.1468 0.0000 +vt 0.4003 0.1471 0.0000 +vt 0.7080 0.0613 0.0000 +vt 0.8716 0.2396 0.0000 +vt 0.8718 0.2395 0.0000 +vt 0.8729 0.2403 0.0000 +vt 0.8726 0.2406 0.0000 +vt 0.4532 0.1590 0.0000 +vt 0.4533 0.1587 0.0000 +vt 0.4550 0.1583 0.0000 +vt 0.4550 0.1587 0.0000 +vt 0.4515 0.1591 0.0000 +vt 0.4516 0.1587 0.0000 +vt 0.4499 0.1588 0.0000 +vt 0.4500 0.1584 0.0000 +vt 0.3181 0.0701 0.0000 +vt 0.3182 0.0697 0.0000 +vt 0.3200 0.0694 0.0000 +vt 0.3200 0.0697 0.0000 +vt 0.3163 0.0700 0.0000 +vt 0.3163 0.0697 0.0000 +vt 0.3146 0.0695 0.0000 +vt 0.3149 0.0693 0.0000 +vt 0.1436 0.2014 0.0000 +vt 0.2228 0.1268 0.0000 +vt 0.8453 0.1529 0.0000 +vt 0.8453 0.1547 0.0000 +vt 0.8397 0.1538 0.0000 +vt 0.8447 0.1564 0.0000 +vt 0.8437 0.1578 0.0000 +vt 0.8422 0.1589 0.0000 +vt 0.8405 0.1594 0.0000 +vt 0.8387 0.1594 0.0000 +vt 0.8370 0.1589 0.0000 +vt 0.8356 0.1578 0.0000 +vt 0.8345 0.1561 0.0000 +vt 0.8340 0.1546 0.0000 +vt 0.8340 0.1531 0.0000 +vt 0.8345 0.1511 0.0000 +vt 0.8356 0.1497 0.0000 +vt 0.8371 0.1486 0.0000 +vt 0.8388 0.1481 0.0000 +vt 0.8406 0.1481 0.0000 +vt 0.8423 0.1487 0.0000 +vt 0.8437 0.1497 0.0000 +vt 0.8448 0.1512 0.0000 +vt 0.9800 0.1037 0.0000 +vt 0.9805 0.1037 0.0000 +vt 0.9805 0.1044 0.0000 +vt 0.9800 0.1044 0.0000 +vt 0.6451 0.2836 0.0000 +vt 0.6446 0.2836 0.0000 +vt 0.6446 0.2829 0.0000 +vt 0.6451 0.2829 0.0000 +vt 0.6443 0.2836 0.0000 +vt 0.6443 0.2829 0.0000 +vt 0.9797 0.1037 0.0000 +vt 0.9797 0.1044 0.0000 +vt 0.4068 0.2203 0.0000 +vt 0.4068 0.2197 0.0000 +vt 0.4071 0.2201 0.0000 +vt 0.4069 0.2203 0.0000 +vt 0.4068 0.2207 0.0000 +vt 0.4069 0.2207 0.0000 +vt 0.4075 0.2213 0.0000 +vt 0.4068 0.2213 0.0000 +vt 0.4071 0.2209 0.0000 +vt 0.4075 0.2210 0.0000 +vt 0.4075 0.2197 0.0000 +vt 0.4075 0.2200 0.0000 +vt 0.1944 0.1156 0.0000 +vt 0.1948 0.1156 0.0000 +vt 0.1948 0.1159 0.0000 +vt 0.1944 0.1159 0.0000 +vt 0.0464 0.2119 0.0000 +vt 0.0466 0.2119 0.0000 +vt 0.0466 0.2122 0.0000 +vt 0.0462 0.2122 0.0000 +vt 0.0464 0.2116 0.0000 +vt 0.0466 0.2116 0.0000 +vt 0.0462 0.2113 0.0000 +vt 0.0466 0.2113 0.0000 +vt 0.1182 0.2359 0.0000 +vt 0.1181 0.2356 0.0000 +vt 0.1186 0.2356 0.0000 +vt 0.1186 0.2359 0.0000 +vt 0.9805 0.1045 0.0000 +vt 0.9800 0.1045 0.0000 +vt 0.4067 0.2202 0.0000 +vt 0.4067 0.2198 0.0000 +vt 0.4067 0.2208 0.0000 +vt 0.4067 0.2212 0.0000 +vt 0.6446 0.2828 0.0000 +vt 0.6451 0.2828 0.0000 +vt 0.6443 0.2828 0.0000 +vt 0.9797 0.1045 0.0000 +vt 0.3825 0.2299 0.0000 +vt 0.3825 0.2306 0.0000 +vt 0.3824 0.2307 0.0000 +vt 0.3824 0.2298 0.0000 +vt 0.3818 0.2307 0.0000 +vt 0.3818 0.2298 0.0000 +vt 0.1973 0.1156 0.0000 +vt 0.1973 0.1159 0.0000 +vt 0.0491 0.2119 0.0000 +vt 0.0491 0.2122 0.0000 +vt 0.0491 0.2116 0.0000 +vt 0.0491 0.2114 0.0000 +vt 0.1211 0.2356 0.0000 +vt 0.1211 0.2359 0.0000 +vt 0.2072 0.1157 0.0000 +vt 0.2072 0.1159 0.0000 +vt 0.1974 0.1159 0.0000 +vt 0.1974 0.1156 0.0000 +vt 0.0589 0.2119 0.0000 +vt 0.0589 0.2121 0.0000 +vt 0.0492 0.2122 0.0000 +vt 0.0492 0.2119 0.0000 +vt 0.0589 0.2116 0.0000 +vt 0.0492 0.2116 0.0000 +vt 0.0589 0.2115 0.0000 +vt 0.0492 0.2114 0.0000 +vt 0.1309 0.2356 0.0000 +vt 0.1309 0.2358 0.0000 +vt 0.1212 0.2359 0.0000 +vt 0.1212 0.2356 0.0000 +vt 0.9800 0.1030 0.0000 +vt 0.9805 0.1030 0.0000 +vt 0.6451 0.2843 0.0000 +vt 0.6446 0.2843 0.0000 +vt 0.6443 0.2843 0.0000 +vt 0.9797 0.1030 0.0000 +vt 0.4081 0.2203 0.0000 +vt 0.4080 0.2203 0.0000 +vt 0.4078 0.2201 0.0000 +vt 0.4081 0.2197 0.0000 +vt 0.4081 0.2207 0.0000 +vt 0.4080 0.2207 0.0000 +vt 0.4078 0.2209 0.0000 +vt 0.4081 0.2213 0.0000 +vt 0.1944 0.1162 0.0000 +vt 0.1948 0.1162 0.0000 +vt 0.9431 0.1823 0.0000 +vt 0.9433 0.1826 0.0000 +vt 0.9429 0.1826 0.0000 +vt 0.9429 0.1823 0.0000 +vt 0.9431 0.1820 0.0000 +vt 0.9429 0.1820 0.0000 +vt 0.9429 0.1817 0.0000 +vt 0.9433 0.1817 0.0000 +vt 0.1182 0.2353 0.0000 +vt 0.1186 0.2353 0.0000 +vt 0.9800 0.1029 0.0000 +vt 0.9805 0.1029 0.0000 +vt 0.4082 0.2198 0.0000 +vt 0.4082 0.2202 0.0000 +vt 0.4082 0.2208 0.0000 +vt 0.4082 0.2212 0.0000 +vt 0.6451 0.2844 0.0000 +vt 0.6446 0.2844 0.0000 +vt 0.6443 0.2844 0.0000 +vt 0.9797 0.1029 0.0000 +vt 0.3810 0.2299 0.0000 +vt 0.3812 0.2298 0.0000 +vt 0.3812 0.2307 0.0000 +vt 0.3810 0.2306 0.0000 +vt 0.1973 0.1162 0.0000 +vt 0.9404 0.1823 0.0000 +vt 0.9404 0.1826 0.0000 +vt 0.9404 0.1820 0.0000 +vt 0.9404 0.1817 0.0000 +vt 0.1211 0.2353 0.0000 +vt 0.2072 0.1161 0.0000 +vt 0.1974 0.1162 0.0000 +vt 0.9306 0.1823 0.0000 +vt 0.9403 0.1823 0.0000 +vt 0.9403 0.1825 0.0000 +vt 0.9306 0.1825 0.0000 +vt 0.9306 0.1820 0.0000 +vt 0.9403 0.1820 0.0000 +vt 0.9306 0.1818 0.0000 +vt 0.9403 0.1817 0.0000 +vt 0.1212 0.2353 0.0000 +vt 0.1309 0.2354 0.0000 +vt 0.3014 0.1603 0.0000 +vt 0.3019 0.1605 0.0000 +vt 0.3014 0.1611 0.0000 +vt 0.3022 0.1609 0.0000 +vt 0.3022 0.1614 0.0000 +vt 0.3019 0.1618 0.0000 +vt 0.3014 0.1620 0.0000 +vt 0.3012 0.1619 0.0000 +vt 0.3012 0.1604 0.0000 +vt 0.3814 0.1948 0.0000 +vt 0.3818 0.1946 0.0000 +vt 0.3819 0.1954 0.0000 +vt 0.3821 0.1947 0.0000 +vt 0.3821 0.1962 0.0000 +vt 0.3818 0.1963 0.0000 +vt 0.3814 0.1961 0.0000 +vt 0.3810 0.1957 0.0000 +vt 0.3810 0.1952 0.0000 +vt 0.2997 0.2254 0.0000 +vt 0.2997 0.2252 0.0000 +vt 0.3000 0.2254 0.0000 +vt 0.2999 0.2251 0.0000 +vt 0.3001 0.2251 0.0000 +vt 0.3002 0.2252 0.0000 +vt 0.3003 0.2254 0.0000 +vt 0.3002 0.2256 0.0000 +vt 0.3001 0.2257 0.0000 +vt 0.2999 0.2257 0.0000 +vt 0.2997 0.2256 0.0000 +vt 0.2999 0.2356 0.0000 +vt 0.2999 0.2354 0.0000 +vt 0.3001 0.2354 0.0000 +vt 0.3001 0.2356 0.0000 +vt 0.3003 0.2355 0.0000 +vt 0.3002 0.2356 0.0000 +vt 0.0590 0.2119 0.0000 +vt 0.0590 0.2117 0.0000 +vt 0.0375 0.1182 0.0000 +vt 0.0374 0.1182 0.0000 +vt 0.0374 0.1180 0.0000 +vt 0.0375 0.1180 0.0000 +vt 0.1310 0.2358 0.0000 +vt 0.1310 0.2356 0.0000 +vt 0.2997 0.2356 0.0000 +vt 0.2997 0.2355 0.0000 +vt 0.0157 0.0964 0.0000 +vt 0.0158 0.0964 0.0000 +vt 0.0158 0.0966 0.0000 +vt 0.0157 0.0966 0.0000 +vt 0.9305 0.1821 0.0000 +vt 0.9305 0.1822 0.0000 +vt 0.1537 0.2477 0.0000 +vt 0.1537 0.2475 0.0000 +vt 0.1540 0.2476 0.0000 +vt 0.1539 0.2477 0.0000 +vt 0.1536 0.2477 0.0000 +vt 0.1535 0.2476 0.0000 +vt 0.6428 0.2836 0.0000 +vt 0.6428 0.2830 0.0000 +vt 0.6428 0.2842 0.0000 +vt 0.6428 0.2843 0.0000 +vt 0.3836 0.1951 0.0000 +vt 0.3836 0.1958 0.0000 +vt 0.9782 0.1032 0.0000 +vt 0.9782 0.1030 0.0000 +vt 0.9782 0.1037 0.0000 +vt 0.9782 0.1043 0.0000 +vt 0.9782 0.1045 0.0000 +vt 0.2997 0.1615 0.0000 +vt 0.2997 0.1608 0.0000 +vt 0.6428 0.2828 0.0000 +vt 0.1328 0.1841 0.0000 +vt 0.1333 0.1841 0.0000 +vt 0.1333 0.1848 0.0000 +vt 0.1328 0.1848 0.0000 +vt 0.3425 0.2469 0.0000 +vt 0.3420 0.2469 0.0000 +vt 0.3420 0.2462 0.0000 +vt 0.3425 0.2462 0.0000 +vt 0.3417 0.2469 0.0000 +vt 0.3417 0.2462 0.0000 +vt 0.1325 0.1841 0.0000 +vt 0.1325 0.1848 0.0000 +vt 0.4635 0.1241 0.0000 +vt 0.4635 0.1235 0.0000 +vt 0.4638 0.1238 0.0000 +vt 0.4636 0.1241 0.0000 +vt 0.4635 0.1245 0.0000 +vt 0.4636 0.1245 0.0000 +vt 0.4642 0.1250 0.0000 +vt 0.4635 0.1250 0.0000 +vt 0.4638 0.1247 0.0000 +vt 0.4642 0.1248 0.0000 +vt 0.4642 0.1235 0.0000 +vt 0.4642 0.1237 0.0000 +vt 0.0688 0.2383 0.0000 +vt 0.0692 0.2383 0.0000 +vt 0.0692 0.2387 0.0000 +vt 0.0687 0.2387 0.0000 +vt 0.0488 0.2308 0.0000 +vt 0.0490 0.2308 0.0000 +vt 0.0490 0.2310 0.0000 +vt 0.0486 0.2310 0.0000 +vt 0.0488 0.2304 0.0000 +vt 0.0490 0.2304 0.0000 +vt 0.0486 0.2301 0.0000 +vt 0.0490 0.2301 0.0000 +vt 0.9451 0.2399 0.0000 +vt 0.9450 0.2396 0.0000 +vt 0.9455 0.2396 0.0000 +vt 0.9455 0.2399 0.0000 +vt 0.1333 0.1849 0.0000 +vt 0.1328 0.1849 0.0000 +vt 0.4634 0.1240 0.0000 +vt 0.4634 0.1236 0.0000 +vt 0.4634 0.1245 0.0000 +vt 0.4634 0.1250 0.0000 +vt 0.3420 0.2461 0.0000 +vt 0.3425 0.2461 0.0000 +vt 0.3417 0.2461 0.0000 +vt 0.1325 0.1849 0.0000 +vt 0.2755 0.2056 0.0000 +vt 0.2755 0.2064 0.0000 +vt 0.2754 0.2065 0.0000 +vt 0.2754 0.2055 0.0000 +vt 0.2748 0.2065 0.0000 +vt 0.2748 0.2055 0.0000 +vt 0.0717 0.2384 0.0000 +vt 0.0717 0.2387 0.0000 +vt 0.0515 0.2307 0.0000 +vt 0.0515 0.2310 0.0000 +vt 0.0515 0.2304 0.0000 +vt 0.0515 0.2302 0.0000 +vt 0.9479 0.2396 0.0000 +vt 0.9479 0.2399 0.0000 +vt 0.0815 0.2384 0.0000 +vt 0.0815 0.2387 0.0000 +vt 0.0718 0.2387 0.0000 +vt 0.0718 0.2384 0.0000 +vt 0.0613 0.2307 0.0000 +vt 0.0613 0.2309 0.0000 +vt 0.0516 0.2310 0.0000 +vt 0.0516 0.2307 0.0000 +vt 0.0613 0.2305 0.0000 +vt 0.0516 0.2304 0.0000 +vt 0.0613 0.2303 0.0000 +vt 0.0516 0.2302 0.0000 +vt 0.9578 0.2396 0.0000 +vt 0.9578 0.2398 0.0000 +vt 0.9481 0.2399 0.0000 +vt 0.9481 0.2396 0.0000 +vt 0.1328 0.1834 0.0000 +vt 0.1333 0.1834 0.0000 +vt 0.3425 0.2476 0.0000 +vt 0.3420 0.2476 0.0000 +vt 0.3417 0.2476 0.0000 +vt 0.1325 0.1834 0.0000 +vt 0.4648 0.1241 0.0000 +vt 0.4647 0.1241 0.0000 +vt 0.4645 0.1238 0.0000 +vt 0.4648 0.1235 0.0000 +vt 0.4648 0.1245 0.0000 +vt 0.4647 0.1245 0.0000 +vt 0.4645 0.1247 0.0000 +vt 0.4648 0.1250 0.0000 +vt 0.0688 0.2390 0.0000 +vt 0.0692 0.2390 0.0000 +vt 0.0878 0.2204 0.0000 +vt 0.0879 0.2207 0.0000 +vt 0.0875 0.2207 0.0000 +vt 0.0875 0.2204 0.0000 +vt 0.0878 0.2201 0.0000 +vt 0.0875 0.2201 0.0000 +vt 0.0875 0.2198 0.0000 +vt 0.0879 0.2198 0.0000 +vt 0.9451 0.2393 0.0000 +vt 0.9455 0.2393 0.0000 +vt 0.1328 0.1833 0.0000 +vt 0.1333 0.1833 0.0000 +vt 0.4650 0.1236 0.0000 +vt 0.4650 0.1240 0.0000 +vt 0.4650 0.1245 0.0000 +vt 0.4650 0.1250 0.0000 +vt 0.3425 0.2477 0.0000 +vt 0.3420 0.2477 0.0000 +vt 0.3417 0.2477 0.0000 +vt 0.1325 0.1833 0.0000 +vt 0.2740 0.2056 0.0000 +vt 0.2742 0.2055 0.0000 +vt 0.2742 0.2065 0.0000 +vt 0.2740 0.2064 0.0000 +vt 0.0717 0.2390 0.0000 +vt 0.0851 0.2204 0.0000 +vt 0.0851 0.2207 0.0000 +vt 0.0851 0.2201 0.0000 +vt 0.0851 0.2198 0.0000 +vt 0.9479 0.2393 0.0000 +vt 0.0815 0.2389 0.0000 +vt 0.0718 0.2390 0.0000 +vt 0.0752 0.2204 0.0000 +vt 0.0849 0.2204 0.0000 +vt 0.0849 0.2207 0.0000 +vt 0.0752 0.2206 0.0000 +vt 0.0752 0.2201 0.0000 +vt 0.0849 0.2201 0.0000 +vt 0.0752 0.2199 0.0000 +vt 0.0849 0.2199 0.0000 +vt 0.9481 0.2393 0.0000 +vt 0.9578 0.2394 0.0000 +vt 0.2758 0.1703 0.0000 +vt 0.2763 0.1705 0.0000 +vt 0.2758 0.1712 0.0000 +vt 0.2766 0.1709 0.0000 +vt 0.2766 0.1714 0.0000 +vt 0.2763 0.1719 0.0000 +vt 0.2758 0.1720 0.0000 +vt 0.2756 0.1720 0.0000 +vt 0.2756 0.1704 0.0000 +vt 0.3943 0.1828 0.0000 +vt 0.3948 0.1827 0.0000 +vt 0.3949 0.1835 0.0000 +vt 0.3951 0.1827 0.0000 +vt 0.3951 0.1843 0.0000 +vt 0.3948 0.1843 0.0000 +vt 0.3943 0.1842 0.0000 +vt 0.3940 0.1838 0.0000 +vt 0.3940 0.1832 0.0000 +vt 0.2869 0.2378 0.0000 +vt 0.2869 0.2376 0.0000 +vt 0.2872 0.2378 0.0000 +vt 0.2871 0.2375 0.0000 +vt 0.2872 0.2375 0.0000 +vt 0.2874 0.2376 0.0000 +vt 0.2875 0.2378 0.0000 +vt 0.2874 0.2380 0.0000 +vt 0.2872 0.2381 0.0000 +vt 0.2871 0.2381 0.0000 +vt 0.2869 0.2380 0.0000 +vt 0.6255 0.1141 0.0000 +vt 0.6255 0.1142 0.0000 +vt 0.6252 0.1142 0.0000 +vt 0.6253 0.1141 0.0000 +vt 0.6250 0.1141 0.0000 +vt 0.6251 0.1140 0.0000 +vt 0.0614 0.2307 0.0000 +vt 0.0614 0.2305 0.0000 +vt 0.6326 0.1484 0.0000 +vt 0.6327 0.1485 0.0000 +vt 0.6324 0.1485 0.0000 +vt 0.6325 0.1484 0.0000 +vt 0.9579 0.2398 0.0000 +vt 0.9579 0.2396 0.0000 +vt 0.6256 0.1140 0.0000 +vt 0.6257 0.1141 0.0000 +vt 0.8413 0.0418 0.0000 +vt 0.8415 0.0417 0.0000 +vt 0.8415 0.0420 0.0000 +vt 0.8413 0.0420 0.0000 +vt 0.0751 0.2202 0.0000 +vt 0.0751 0.2203 0.0000 +vt 0.2445 0.1157 0.0000 +vt 0.2444 0.1156 0.0000 +vt 0.2447 0.1156 0.0000 +vt 0.2446 0.1157 0.0000 +vt 0.2443 0.1157 0.0000 +vt 0.2442 0.1156 0.0000 +vt 0.3402 0.2469 0.0000 +vt 0.3402 0.2463 0.0000 +vt 0.3402 0.2475 0.0000 +vt 0.3402 0.2476 0.0000 +vt 0.3966 0.1831 0.0000 +vt 0.3966 0.1839 0.0000 +vt 0.1310 0.1836 0.0000 +vt 0.1310 0.1834 0.0000 +vt 0.1310 0.1841 0.0000 +vt 0.1310 0.1848 0.0000 +vt 0.1310 0.1849 0.0000 +vt 0.2740 0.1716 0.0000 +vt 0.2740 0.1708 0.0000 +vt 0.3402 0.2461 0.0000 +vt 0.8906 0.1300 0.0000 +vt 0.8889 0.1300 0.0000 +vt 0.8889 0.1257 0.0000 +vt 0.8906 0.1257 0.0000 +vt 0.8922 0.1300 0.0000 +vt 0.8922 0.1257 0.0000 +vt 0.8100 0.2436 0.0000 +vt 0.8087 0.2436 0.0000 +vt 0.8087 0.2393 0.0000 +vt 0.8100 0.2393 0.0000 +vt 0.8116 0.2436 0.0000 +vt 0.8116 0.2393 0.0000 +vt 0.8134 0.2436 0.0000 +vt 0.8134 0.2393 0.0000 +vt 0.8151 0.2399 0.0000 +vt 0.8151 0.2436 0.0000 +vt 0.8167 0.2405 0.0000 +vt 0.8167 0.2436 0.0000 +vt 0.8639 0.2096 0.0000 +vt 0.8639 0.2122 0.0000 +vt 0.8626 0.2122 0.0000 +vt 0.8626 0.2091 0.0000 +vt 0.3443 0.1485 0.0000 +vt 0.3402 0.1485 0.0000 +vt 0.3402 0.1467 0.0000 +vt 0.3443 0.1467 0.0000 +vt 0.8672 0.2097 0.0000 +vt 0.8672 0.2122 0.0000 +vt 0.8657 0.2122 0.0000 +vt 0.8657 0.2096 0.0000 +vt 0.8906 0.1328 0.0000 +vt 0.8889 0.1328 0.0000 +vt 0.8922 0.1328 0.0000 +vt 0.8100 0.2463 0.0000 +vt 0.8087 0.2463 0.0000 +vt 0.8116 0.2463 0.0000 +vt 0.8134 0.2463 0.0000 +vt 0.8151 0.2463 0.0000 +vt 0.8167 0.2463 0.0000 +vt 0.8639 0.2150 0.0000 +vt 0.8626 0.2150 0.0000 +vt 0.8657 0.2150 0.0000 +vt 0.8672 0.2150 0.0000 +vt 0.2060 0.1235 0.0000 +vt 0.2086 0.1235 0.0000 +vt 0.2060 0.1249 0.0000 +vt 0.1828 0.1209 0.0000 +vt 0.1828 0.1235 0.0000 +vt 0.1806 0.1235 0.0000 +vt 0.1806 0.1201 0.0000 +vt 0.0980 0.0648 0.0000 +vt 0.0980 0.0634 0.0000 +vt 0.0999 0.0634 0.0000 +vt 0.0999 0.0656 0.0000 +vt 0.2093 0.1249 0.0000 +vt 0.2101 0.1270 0.0000 +vt 0.2060 0.1270 0.0000 +vt 0.1785 0.1235 0.0000 +vt 0.1785 0.1194 0.0000 +vt 0.0980 0.0613 0.0000 +vt 0.0999 0.0613 0.0000 +vt 0.0628 0.1319 0.0000 +vt 0.0623 0.1310 0.0000 +vt 0.0634 0.1295 0.0000 +vt 0.0647 0.1309 0.0000 +vt 0.0618 0.1324 0.0000 +vt 0.8871 0.1300 0.0000 +vt 0.8871 0.1257 0.0000 +vt 0.8855 0.1300 0.0000 +vt 0.8855 0.1257 0.0000 +vt 0.8842 0.1300 0.0000 +vt 0.8842 0.1257 0.0000 +vt 0.8575 0.2444 0.0000 +vt 0.8618 0.2444 0.0000 +vt 0.8618 0.2460 0.0000 +vt 0.8575 0.2460 0.0000 +vt 0.8575 0.2427 0.0000 +vt 0.8618 0.2427 0.0000 +vt 0.8612 0.2409 0.0000 +vt 0.8575 0.2409 0.0000 +vt 0.8606 0.2393 0.0000 +vt 0.8575 0.2393 0.0000 +vt 0.8706 0.2096 0.0000 +vt 0.8719 0.2091 0.0000 +vt 0.8719 0.2122 0.0000 +vt 0.8706 0.2122 0.0000 +vt 0.3304 0.1583 0.0000 +vt 0.3304 0.1601 0.0000 +vt 0.3263 0.1601 0.0000 +vt 0.3263 0.1583 0.0000 +vt 0.8688 0.2096 0.0000 +vt 0.8688 0.2122 0.0000 +vt 0.8871 0.1328 0.0000 +vt 0.8855 0.1328 0.0000 +vt 0.8842 0.1328 0.0000 +vt 0.8547 0.2444 0.0000 +vt 0.8547 0.2460 0.0000 +vt 0.8547 0.2427 0.0000 +vt 0.8547 0.2409 0.0000 +vt 0.8547 0.2393 0.0000 +vt 0.8719 0.2150 0.0000 +vt 0.8706 0.2150 0.0000 +vt 0.8688 0.2150 0.0000 +vt 0.9739 0.2287 0.0000 +vt 0.9739 0.2274 0.0000 +vt 0.9766 0.2287 0.0000 +vt 0.8700 0.0912 0.0000 +vt 0.8721 0.0904 0.0000 +vt 0.8721 0.0938 0.0000 +vt 0.8700 0.0938 0.0000 +vt 0.5951 0.2891 0.0000 +vt 0.5943 0.2873 0.0000 +vt 0.5965 0.2873 0.0000 +vt 0.5965 0.2891 0.0000 +vt 0.9773 0.2274 0.0000 +vt 0.9739 0.2253 0.0000 +vt 0.9780 0.2253 0.0000 +vt 0.8743 0.0938 0.0000 +vt 0.8743 0.0897 0.0000 +vt 0.5986 0.2873 0.0000 +vt 0.5986 0.2891 0.0000 +vt 0.0658 0.1379 0.0000 +vt 0.0677 0.1370 0.0000 +vt 0.0681 0.1389 0.0000 +vt 0.0662 0.1388 0.0000 +vt 0.0648 0.1384 0.0000 +vt 0.0722 0.1310 0.0000 +vt 0.0703 0.1319 0.0000 +vt 0.0713 0.1296 0.0000 +vt 0.0650 0.1363 0.0000 +vt 0.0643 0.1349 0.0000 +vt 0.0662 0.1339 0.0000 +vt 0.0669 0.1353 0.0000 +vt 0.0673 0.1334 0.0000 +vt 0.0697 0.1383 0.0000 +vt 0.0631 0.1372 0.0000 +vt 0.0621 0.1360 0.0000 +vt 0.0712 0.1373 0.0000 +vt 0.0689 0.1326 0.0000 +vt 0.0723 0.1359 0.0000 +vt 0.0636 0.1335 0.0000 +vt 0.0655 0.1326 0.0000 +vt 0.0648 0.1285 0.0000 +vt 0.0666 0.1280 0.0000 +vt 0.0684 0.1280 0.0000 +vt 0.0617 0.1345 0.0000 +vt 0.0727 0.1325 0.0000 +vt 0.0700 0.1286 0.0000 +vt 0.0728 0.1342 0.0000 +vt 0.8889 0.1255 0.0000 +vt 0.8905 0.1255 0.0000 +vt 0.6007 0.1150 0.0000 +vt 0.6010 0.1149 0.0000 +vt 0.6010 0.1166 0.0000 +vt 0.6007 0.1168 0.0000 +vt 0.6014 0.1182 0.0000 +vt 0.6011 0.1185 0.0000 +vt 0.6021 0.1197 0.0000 +vt 0.6018 0.1199 0.0000 +vt 0.6030 0.1207 0.0000 +vt 0.6027 0.1209 0.0000 +vt 0.9440 0.2886 0.0000 +vt 0.9440 0.2883 0.0000 +vt 0.9458 0.2887 0.0000 +vt 0.9458 0.2891 0.0000 +vt 0.9477 0.2887 0.0000 +vt 0.9477 0.2891 0.0000 +vt 0.9491 0.2884 0.0000 +vt 0.9493 0.2887 0.0000 +vt 0.8872 0.1255 0.0000 +vt 0.6026 0.1107 0.0000 +vt 0.6028 0.1109 0.0000 +vt 0.6020 0.1120 0.0000 +vt 0.6017 0.1118 0.0000 +vt 0.4406 0.1712 0.0000 +vt 0.4407 0.1709 0.0000 +vt 0.4424 0.1705 0.0000 +vt 0.4423 0.1708 0.0000 +vt 0.4389 0.1713 0.0000 +vt 0.4390 0.1709 0.0000 +vt 0.4373 0.1709 0.0000 +vt 0.4374 0.1706 0.0000 +vt 0.2094 0.2487 0.0000 +vt 0.2095 0.2483 0.0000 +vt 0.2113 0.2480 0.0000 +vt 0.2113 0.2483 0.0000 +vt 0.2076 0.2486 0.0000 +vt 0.2076 0.2483 0.0000 +vt 0.2060 0.2482 0.0000 +vt 0.2062 0.2479 0.0000 +vt 0.2089 0.1238 0.0000 +vt 0.9769 0.2285 0.0000 +vt 0.6946 0.1728 0.0000 +vt 0.6946 0.1710 0.0000 +vt 0.7003 0.1720 0.0000 +vt 0.6952 0.1693 0.0000 +vt 0.6963 0.1679 0.0000 +vt 0.6977 0.1668 0.0000 +vt 0.6994 0.1663 0.0000 +vt 0.7012 0.1663 0.0000 +vt 0.7029 0.1669 0.0000 +vt 0.7044 0.1679 0.0000 +vt 0.7055 0.1696 0.0000 +vt 0.7060 0.1711 0.0000 +vt 0.7059 0.1727 0.0000 +vt 0.7054 0.1746 0.0000 +vt 0.7044 0.1760 0.0000 +vt 0.7029 0.1771 0.0000 +vt 0.7012 0.1776 0.0000 +vt 0.6994 0.1776 0.0000 +vt 0.6977 0.1771 0.0000 +vt 0.6962 0.1760 0.0000 +vt 0.6952 0.1746 0.0000 +vt 0.4184 0.2026 0.0000 +vt 0.4189 0.2026 0.0000 +vt 0.4189 0.2033 0.0000 +vt 0.4184 0.2033 0.0000 +vt 0.4560 0.1243 0.0000 +vt 0.4555 0.1243 0.0000 +vt 0.4555 0.1236 0.0000 +vt 0.4560 0.1236 0.0000 +vt 0.4552 0.1243 0.0000 +vt 0.4552 0.1236 0.0000 +vt 0.4181 0.2026 0.0000 +vt 0.4181 0.2033 0.0000 +vt 0.4412 0.1918 0.0000 +vt 0.4412 0.1913 0.0000 +vt 0.4415 0.1916 0.0000 +vt 0.4413 0.1919 0.0000 +vt 0.4412 0.1923 0.0000 +vt 0.4413 0.1922 0.0000 +vt 0.4418 0.1928 0.0000 +vt 0.4412 0.1928 0.0000 +vt 0.4415 0.1925 0.0000 +vt 0.4418 0.1926 0.0000 +vt 0.4418 0.1913 0.0000 +vt 0.4418 0.1915 0.0000 +vt 0.9594 0.1984 0.0000 +vt 0.9599 0.1984 0.0000 +vt 0.9599 0.1987 0.0000 +vt 0.9594 0.1987 0.0000 +vt 0.9507 0.1823 0.0000 +vt 0.9510 0.1823 0.0000 +vt 0.9510 0.1826 0.0000 +vt 0.9506 0.1826 0.0000 +vt 0.9507 0.1820 0.0000 +vt 0.9510 0.1820 0.0000 +vt 0.9506 0.1817 0.0000 +vt 0.9510 0.1817 0.0000 +vt 0.9090 0.2634 0.0000 +vt 0.9089 0.2631 0.0000 +vt 0.9094 0.2631 0.0000 +vt 0.9094 0.2634 0.0000 +vt 0.4189 0.2034 0.0000 +vt 0.4184 0.2034 0.0000 +vt 0.4410 0.1918 0.0000 +vt 0.4410 0.1914 0.0000 +vt 0.4410 0.1923 0.0000 +vt 0.4410 0.1928 0.0000 +vt 0.4555 0.1235 0.0000 +vt 0.4560 0.1235 0.0000 +vt 0.4552 0.1235 0.0000 +vt 0.4181 0.2034 0.0000 +vt 0.2627 0.2330 0.0000 +vt 0.2627 0.2338 0.0000 +vt 0.2625 0.2339 0.0000 +vt 0.2625 0.2330 0.0000 +vt 0.2619 0.2339 0.0000 +vt 0.2619 0.2330 0.0000 +vt 0.9623 0.1984 0.0000 +vt 0.9623 0.1987 0.0000 +vt 0.9534 0.1823 0.0000 +vt 0.9534 0.1826 0.0000 +vt 0.9534 0.1820 0.0000 +vt 0.9534 0.1817 0.0000 +vt 0.9118 0.2631 0.0000 +vt 0.9118 0.2634 0.0000 +vt 0.9722 0.1985 0.0000 +vt 0.9722 0.1987 0.0000 +vt 0.9625 0.1987 0.0000 +vt 0.9625 0.1984 0.0000 +vt 0.9633 0.1823 0.0000 +vt 0.9633 0.1825 0.0000 +vt 0.9536 0.1825 0.0000 +vt 0.9536 0.1823 0.0000 +vt 0.9633 0.1820 0.0000 +vt 0.9536 0.1820 0.0000 +vt 0.9633 0.1818 0.0000 +vt 0.9536 0.1817 0.0000 +vt 0.9217 0.2631 0.0000 +vt 0.9217 0.2633 0.0000 +vt 0.9120 0.2634 0.0000 +vt 0.9120 0.2631 0.0000 +vt 0.4184 0.2020 0.0000 +vt 0.4189 0.2020 0.0000 +vt 0.4560 0.1250 0.0000 +vt 0.4555 0.1250 0.0000 +vt 0.4552 0.1250 0.0000 +vt 0.4181 0.2020 0.0000 +vt 0.4425 0.1918 0.0000 +vt 0.4424 0.1919 0.0000 +vt 0.4422 0.1916 0.0000 +vt 0.4425 0.1913 0.0000 +vt 0.4425 0.1923 0.0000 +vt 0.4424 0.1922 0.0000 +vt 0.4422 0.1925 0.0000 +vt 0.4425 0.1928 0.0000 +vt 0.9594 0.1990 0.0000 +vt 0.9599 0.1990 0.0000 +vt 0.2519 0.0788 0.0000 +vt 0.2521 0.0791 0.0000 +vt 0.2517 0.0791 0.0000 +vt 0.2517 0.0788 0.0000 +vt 0.2519 0.0785 0.0000 +vt 0.2517 0.0785 0.0000 +vt 0.2517 0.0782 0.0000 +vt 0.2521 0.0782 0.0000 +vt 0.9090 0.2628 0.0000 +vt 0.9094 0.2628 0.0000 +vt 0.4184 0.2018 0.0000 +vt 0.4189 0.2018 0.0000 +vt 0.4426 0.1914 0.0000 +vt 0.4426 0.1918 0.0000 +vt 0.4426 0.1923 0.0000 +vt 0.4426 0.1928 0.0000 +vt 0.4560 0.1251 0.0000 +vt 0.4555 0.1251 0.0000 +vt 0.4552 0.1251 0.0000 +vt 0.4181 0.2018 0.0000 +vt 0.2612 0.2330 0.0000 +vt 0.2613 0.2330 0.0000 +vt 0.2613 0.2339 0.0000 +vt 0.2612 0.2338 0.0000 +vt 0.9623 0.1990 0.0000 +vt 0.2492 0.0788 0.0000 +vt 0.2492 0.0791 0.0000 +vt 0.2492 0.0785 0.0000 +vt 0.2492 0.0782 0.0000 +vt 0.9118 0.2628 0.0000 +vt 0.9722 0.1989 0.0000 +vt 0.9625 0.1990 0.0000 +vt 0.2394 0.0788 0.0000 +vt 0.2491 0.0788 0.0000 +vt 0.2491 0.0791 0.0000 +vt 0.2394 0.0790 0.0000 +vt 0.2394 0.0785 0.0000 +vt 0.2491 0.0785 0.0000 +vt 0.2394 0.0783 0.0000 +vt 0.2491 0.0783 0.0000 +vt 0.9120 0.2628 0.0000 +vt 0.9217 0.2628 0.0000 +vt 0.4241 0.1810 0.0000 +vt 0.4246 0.1812 0.0000 +vt 0.4240 0.1819 0.0000 +vt 0.4249 0.1816 0.0000 +vt 0.4249 0.1821 0.0000 +vt 0.4246 0.1826 0.0000 +vt 0.4241 0.1827 0.0000 +vt 0.4238 0.1827 0.0000 +vt 0.4238 0.1811 0.0000 +vt 0.9742 0.2885 0.0000 +vt 0.9747 0.2883 0.0000 +vt 0.9748 0.2891 0.0000 +vt 0.9750 0.2884 0.0000 +vt 0.9750 0.2899 0.0000 +vt 0.9747 0.2900 0.0000 +vt 0.9742 0.2898 0.0000 +vt 0.9739 0.2894 0.0000 +vt 0.9739 0.2889 0.0000 +vt 0.4451 0.0785 0.0000 +vt 0.4451 0.0783 0.0000 +vt 0.4454 0.0785 0.0000 +vt 0.4453 0.0782 0.0000 +vt 0.4455 0.0782 0.0000 +vt 0.4456 0.0783 0.0000 +vt 0.4457 0.0785 0.0000 +vt 0.4456 0.0787 0.0000 +vt 0.4455 0.0788 0.0000 +vt 0.4453 0.0788 0.0000 +vt 0.4451 0.0787 0.0000 +vt 0.4354 0.2421 0.0000 +vt 0.4353 0.2420 0.0000 +vt 0.4356 0.2420 0.0000 +vt 0.4355 0.2421 0.0000 +vt 0.4358 0.2420 0.0000 +vt 0.4357 0.2422 0.0000 +vt 0.9634 0.1822 0.0000 +vt 0.9634 0.1821 0.0000 +vt 0.2521 0.1157 0.0000 +vt 0.2520 0.1156 0.0000 +vt 0.2522 0.1156 0.0000 +vt 0.2522 0.1157 0.0000 +vt 0.2525 0.1156 0.0000 +vt 0.2524 0.1157 0.0000 +vt 0.4352 0.2422 0.0000 +vt 0.4351 0.2421 0.0000 +vt 0.4564 0.2458 0.0000 +vt 0.4563 0.2456 0.0000 +vt 0.4566 0.2456 0.0000 +vt 0.4566 0.2458 0.0000 +vt 0.2393 0.0786 0.0000 +vt 0.2393 0.0788 0.0000 +vt 0.3804 0.0694 0.0000 +vt 0.3804 0.0693 0.0000 +vt 0.3806 0.0693 0.0000 +vt 0.3805 0.0695 0.0000 +vt 0.3802 0.0695 0.0000 +vt 0.3801 0.0694 0.0000 +vt 0.4537 0.1243 0.0000 +vt 0.4537 0.1237 0.0000 +vt 0.4537 0.1249 0.0000 +vt 0.4537 0.1250 0.0000 +vt 0.9765 0.2888 0.0000 +vt 0.9765 0.2895 0.0000 +vt 0.4166 0.2021 0.0000 +vt 0.4166 0.2019 0.0000 +vt 0.4166 0.2026 0.0000 +vt 0.4166 0.2033 0.0000 +vt 0.4166 0.2034 0.0000 +vt 0.4223 0.1823 0.0000 +vt 0.4223 0.1815 0.0000 +vt 0.4537 0.1236 0.0000 +vt 0.4332 0.1921 0.0000 +vt 0.4337 0.1921 0.0000 +vt 0.4337 0.1928 0.0000 +vt 0.4332 0.1928 0.0000 +vt 0.4402 0.1359 0.0000 +vt 0.4396 0.1359 0.0000 +vt 0.4396 0.1352 0.0000 +vt 0.4402 0.1352 0.0000 +vt 0.4394 0.1359 0.0000 +vt 0.4394 0.1352 0.0000 +vt 0.4329 0.1921 0.0000 +vt 0.4329 0.1928 0.0000 +vt 0.4263 0.2024 0.0000 +vt 0.4263 0.2018 0.0000 +vt 0.4267 0.2022 0.0000 +vt 0.4265 0.2024 0.0000 +vt 0.4263 0.2028 0.0000 +vt 0.4265 0.2028 0.0000 +vt 0.4270 0.2034 0.0000 +vt 0.4263 0.2034 0.0000 +vt 0.4267 0.2030 0.0000 +vt 0.4270 0.2031 0.0000 +vt 0.4270 0.2018 0.0000 +vt 0.4270 0.2021 0.0000 +vt 0.0688 0.2301 0.0000 +vt 0.0692 0.2301 0.0000 +vt 0.0692 0.2305 0.0000 +vt 0.0688 0.2305 0.0000 +vt 0.8093 0.2797 0.0000 +vt 0.8095 0.2797 0.0000 +vt 0.8095 0.2800 0.0000 +vt 0.8091 0.2800 0.0000 +vt 0.8093 0.2794 0.0000 +vt 0.8095 0.2794 0.0000 +vt 0.8091 0.2791 0.0000 +vt 0.8095 0.2791 0.0000 +vt 0.0487 0.2390 0.0000 +vt 0.0486 0.2387 0.0000 +vt 0.0491 0.2387 0.0000 +vt 0.0491 0.2390 0.0000 +vt 0.4337 0.1929 0.0000 +vt 0.4332 0.1929 0.0000 +vt 0.4262 0.2023 0.0000 +vt 0.4262 0.2019 0.0000 +vt 0.4262 0.2029 0.0000 +vt 0.4262 0.2033 0.0000 +vt 0.4396 0.1351 0.0000 +vt 0.4401 0.1351 0.0000 +vt 0.4394 0.1351 0.0000 +vt 0.4329 0.1929 0.0000 +vt 0.1958 0.1884 0.0000 +vt 0.1958 0.1892 0.0000 +vt 0.1957 0.1893 0.0000 +vt 0.1957 0.1884 0.0000 +vt 0.1951 0.1893 0.0000 +vt 0.1951 0.1884 0.0000 +vt 0.0717 0.2302 0.0000 +vt 0.0717 0.2305 0.0000 +vt 0.8120 0.2797 0.0000 +vt 0.8120 0.2800 0.0000 +vt 0.8120 0.2794 0.0000 +vt 0.8120 0.2791 0.0000 +vt 0.0516 0.2387 0.0000 +vt 0.0516 0.2390 0.0000 +vt 0.0816 0.2302 0.0000 +vt 0.0816 0.2305 0.0000 +vt 0.0718 0.2305 0.0000 +vt 0.0718 0.2302 0.0000 +vt 0.8218 0.2797 0.0000 +vt 0.8218 0.2799 0.0000 +vt 0.8121 0.2800 0.0000 +vt 0.8121 0.2797 0.0000 +vt 0.8218 0.2794 0.0000 +vt 0.8121 0.2794 0.0000 +vt 0.8218 0.2792 0.0000 +vt 0.8121 0.2792 0.0000 +vt 0.0614 0.2387 0.0000 +vt 0.0614 0.2389 0.0000 +vt 0.0517 0.2390 0.0000 +vt 0.0517 0.2387 0.0000 +vt 0.4332 0.1914 0.0000 +vt 0.4337 0.1914 0.0000 +vt 0.4402 0.1366 0.0000 +vt 0.4396 0.1366 0.0000 +vt 0.4394 0.1366 0.0000 +vt 0.4329 0.1914 0.0000 +vt 0.4277 0.2024 0.0000 +vt 0.4275 0.2024 0.0000 +vt 0.4273 0.2022 0.0000 +vt 0.4277 0.2018 0.0000 +vt 0.4277 0.2028 0.0000 +vt 0.4275 0.2028 0.0000 +vt 0.4273 0.2030 0.0000 +vt 0.4277 0.2034 0.0000 +vt 0.0688 0.2308 0.0000 +vt 0.0692 0.2308 0.0000 +vt 0.0790 0.2119 0.0000 +vt 0.0792 0.2122 0.0000 +vt 0.0787 0.2122 0.0000 +vt 0.0787 0.2119 0.0000 +vt 0.0790 0.2116 0.0000 +vt 0.0787 0.2116 0.0000 +vt 0.0787 0.2113 0.0000 +vt 0.0792 0.2113 0.0000 +vt 0.0487 0.2383 0.0000 +vt 0.0491 0.2383 0.0000 +vt 0.4332 0.1913 0.0000 +vt 0.4337 0.1913 0.0000 +vt 0.4278 0.2019 0.0000 +vt 0.4278 0.2023 0.0000 +vt 0.4278 0.2029 0.0000 +vt 0.4278 0.2033 0.0000 +vt 0.4401 0.1367 0.0000 +vt 0.4396 0.1367 0.0000 +vt 0.4394 0.1367 0.0000 +vt 0.4329 0.1913 0.0000 +vt 0.1944 0.1884 0.0000 +vt 0.1945 0.1884 0.0000 +vt 0.1945 0.1893 0.0000 +vt 0.1944 0.1892 0.0000 +vt 0.0717 0.2308 0.0000 +vt 0.0763 0.2119 0.0000 +vt 0.0763 0.2122 0.0000 +vt 0.0763 0.2116 0.0000 +vt 0.0763 0.2114 0.0000 +vt 0.0516 0.2384 0.0000 +vt 0.0816 0.2307 0.0000 +vt 0.0718 0.2308 0.0000 +vt 0.0664 0.2119 0.0000 +vt 0.0761 0.2119 0.0000 +vt 0.0761 0.2122 0.0000 +vt 0.0664 0.2121 0.0000 +vt 0.0664 0.2116 0.0000 +vt 0.0761 0.2116 0.0000 +vt 0.0664 0.2115 0.0000 +vt 0.0761 0.2114 0.0000 +vt 0.0517 0.2384 0.0000 +vt 0.0614 0.2384 0.0000 +vt 0.4297 0.1351 0.0000 +vt 0.4302 0.1353 0.0000 +vt 0.4297 0.1360 0.0000 +vt 0.4305 0.1357 0.0000 +vt 0.4305 0.1362 0.0000 +vt 0.4302 0.1366 0.0000 +vt 0.4297 0.1368 0.0000 +vt 0.4295 0.1368 0.0000 +vt 0.4295 0.1352 0.0000 +vt 0.4218 0.1915 0.0000 +vt 0.4223 0.1913 0.0000 +vt 0.4224 0.1922 0.0000 +vt 0.4225 0.1914 0.0000 +vt 0.4225 0.1930 0.0000 +vt 0.4223 0.1930 0.0000 +vt 0.4218 0.1928 0.0000 +vt 0.4215 0.1924 0.0000 +vt 0.4215 0.1919 0.0000 +vt 0.4351 0.2319 0.0000 +vt 0.4352 0.2317 0.0000 +vt 0.4354 0.2319 0.0000 +vt 0.4353 0.2316 0.0000 +vt 0.4355 0.2316 0.0000 +vt 0.4357 0.2317 0.0000 +vt 0.4357 0.2319 0.0000 +vt 0.4357 0.2321 0.0000 +vt 0.4355 0.2322 0.0000 +vt 0.4353 0.2322 0.0000 +vt 0.4352 0.2321 0.0000 +vt 0.4557 0.0783 0.0000 +vt 0.4556 0.0782 0.0000 +vt 0.4559 0.0782 0.0000 +vt 0.4558 0.0783 0.0000 +vt 0.4561 0.0783 0.0000 +vt 0.4560 0.0784 0.0000 +vt 0.8219 0.2796 0.0000 +vt 0.8219 0.2795 0.0000 +vt 0.3021 0.0996 0.0000 +vt 0.3021 0.0995 0.0000 +vt 0.3023 0.0994 0.0000 +vt 0.3023 0.0995 0.0000 +vt 0.3025 0.0995 0.0000 +vt 0.3025 0.0996 0.0000 +vt 0.4555 0.0784 0.0000 +vt 0.4554 0.0783 0.0000 +vt 0.4814 0.0783 0.0000 +vt 0.4814 0.0782 0.0000 +vt 0.4816 0.0782 0.0000 +vt 0.4816 0.0783 0.0000 +vt 0.0663 0.2117 0.0000 +vt 0.0663 0.2119 0.0000 +vt 0.4213 0.0892 0.0000 +vt 0.4213 0.0891 0.0000 +vt 0.4215 0.0891 0.0000 +vt 0.4215 0.0892 0.0000 +vt 0.4211 0.0893 0.0000 +vt 0.4211 0.0891 0.0000 +vt 0.4378 0.1359 0.0000 +vt 0.4378 0.1353 0.0000 +vt 0.4378 0.1365 0.0000 +vt 0.4378 0.1366 0.0000 +vt 0.4241 0.1918 0.0000 +vt 0.4241 0.1926 0.0000 +vt 0.4314 0.1916 0.0000 +vt 0.4314 0.1914 0.0000 +vt 0.4314 0.1921 0.0000 +vt 0.4314 0.1927 0.0000 +vt 0.4314 0.1929 0.0000 +vt 0.4279 0.1364 0.0000 +vt 0.4279 0.1356 0.0000 +vt 0.4378 0.1351 0.0000 +vt 0.8406 0.1367 0.0000 +vt 0.8402 0.1371 0.0000 +vt 0.8328 0.1351 0.0000 +vt 0.8337 0.1347 0.0000 +vt 0.8516 0.0415 0.0000 +vt 0.8624 0.0415 0.0000 +vt 0.8479 0.1368 0.0000 +vt 0.8481 0.1373 0.0000 +vt 0.8444 0.1395 0.0000 +vt 0.8445 0.1388 0.0000 +vt 0.8439 0.1388 0.0000 +vt 0.8438 0.1395 0.0000 +vt 0.5749 0.2587 0.0000 +vt 0.5742 0.2580 0.0000 +vt 0.5818 0.2589 0.0000 +vt 0.5820 0.2595 0.0000 +vt 0.8732 0.0415 0.0000 +vt 0.8513 0.1348 0.0000 +vt 0.8518 0.1352 0.0000 +vt 0.5861 0.2581 0.0000 +vt 0.5858 0.2588 0.0000 +vt 0.8573 0.0523 0.0000 +vt 0.8570 0.0527 0.0000 +vt 0.8565 0.0523 0.0000 +vt 0.8674 0.0523 0.0000 +vt 0.8683 0.0523 0.0000 +vt 0.8678 0.0527 0.0000 +vt 0.8624 0.0523 0.0000 +vt 0.5483 0.1644 0.0000 +vt 0.5483 0.1592 0.0000 +vt 0.5585 0.1592 0.0000 +vt 0.5531 0.1644 0.0000 +vt 0.5470 0.0422 0.0000 +vt 0.5472 0.0290 0.0000 +vt 0.5505 0.0290 0.0000 +vt 0.5626 0.0422 0.0000 +vt 0.5548 0.1685 0.0000 +vt 0.5483 0.1685 0.0000 +vt 0.5417 0.1685 0.0000 +vt 0.5434 0.1644 0.0000 +vt 0.5352 0.1621 0.0000 +vt 0.5380 0.1592 0.0000 +vt 0.5281 0.1553 0.0000 +vt 0.5322 0.1536 0.0000 +vt 0.5281 0.1417 0.0000 +vt 0.5322 0.1417 0.0000 +vt 0.5281 0.1331 0.0000 +vt 0.5322 0.1331 0.0000 +vt 0.5281 0.1286 0.0000 +vt 0.5322 0.1245 0.0000 +vt 0.5256 0.1286 0.0000 +vt 0.5239 0.1245 0.0000 +vt 0.5194 0.1286 0.0000 +vt 0.5146 0.1163 0.0000 +vt 0.5189 0.1106 0.0000 +vt 0.5135 0.1152 0.0000 +vt 0.5127 0.1140 0.0000 +vt 0.5121 0.1125 0.0000 +vt 0.5120 0.1110 0.0000 +vt 0.5121 0.1094 0.0000 +vt 0.5127 0.1080 0.0000 +vt 0.5135 0.1067 0.0000 +vt 0.5145 0.1057 0.0000 +vt 0.5158 0.1049 0.0000 +vt 0.5172 0.1044 0.0000 +vt 0.5188 0.1042 0.0000 +vt 0.5203 0.1044 0.0000 +vt 0.5217 0.1049 0.0000 +vt 0.5230 0.1057 0.0000 +vt 0.5241 0.1067 0.0000 +vt 0.5256 0.1057 0.0000 +vt 0.5280 0.1106 0.0000 +vt 0.5281 0.1057 0.0000 +vt 0.5336 0.1029 0.0000 +vt 0.5346 0.1106 0.0000 +vt 0.5483 0.1029 0.0000 +vt 0.5483 0.1106 0.0000 +vt 0.5629 0.1029 0.0000 +vt 0.5619 0.1106 0.0000 +vt 0.5684 0.1057 0.0000 +vt 0.5685 0.1106 0.0000 +vt 0.5709 0.1057 0.0000 +vt 0.5725 0.1067 0.0000 +vt 0.5735 0.1057 0.0000 +vt 0.5786 0.1106 0.0000 +vt 0.5748 0.1049 0.0000 +vt 0.5762 0.1044 0.0000 +vt 0.5778 0.1042 0.0000 +vt 0.5793 0.1044 0.0000 +vt 0.5807 0.1049 0.0000 +vt 0.5820 0.1057 0.0000 +vt 0.5831 0.1067 0.0000 +vt 0.5839 0.1080 0.0000 +vt 0.5844 0.1094 0.0000 +vt 0.5845 0.1110 0.0000 +vt 0.5844 0.1125 0.0000 +vt 0.5839 0.1140 0.0000 +vt 0.5831 0.1152 0.0000 +vt 0.5820 0.1163 0.0000 +vt 0.5771 0.1286 0.0000 +vt 0.5726 0.1245 0.0000 +vt 0.5709 0.1286 0.0000 +vt 0.5684 0.1286 0.0000 +vt 0.5643 0.1245 0.0000 +vt 0.5684 0.1331 0.0000 +vt 0.5643 0.1331 0.0000 +vt 0.5684 0.1417 0.0000 +vt 0.5643 0.1417 0.0000 +vt 0.5684 0.1553 0.0000 +vt 0.5643 0.1536 0.0000 +vt 0.5613 0.1621 0.0000 +vt 0.5524 0.0233 0.0000 +vt 0.5672 0.0404 0.0000 +vt 0.5697 0.0598 0.0000 +vt 0.5626 0.0600 0.0000 +vt 0.5697 0.0694 0.0000 +vt 0.5626 0.0750 0.0000 +vt 0.5744 0.0694 0.0000 +vt 0.5750 0.0750 0.0000 +vt 0.5786 0.0740 0.0000 +vt 0.5808 0.0807 0.0000 +vt 0.5750 0.0873 0.0000 +vt 0.5819 0.0826 0.0000 +vt 0.5823 0.0840 0.0000 +vt 0.5824 0.0855 0.0000 +vt 0.5822 0.0872 0.0000 +vt 0.5816 0.0889 0.0000 +vt 0.5807 0.0903 0.0000 +vt 0.5795 0.0915 0.0000 +vt 0.5781 0.0924 0.0000 +vt 0.5765 0.0930 0.0000 +vt 0.5747 0.0932 0.0000 +vt 0.5724 0.0928 0.0000 +vt 0.5710 0.0923 0.0000 +vt 0.5697 0.0916 0.0000 +vt 0.5584 0.0916 0.0000 +vt 0.5584 0.0873 0.0000 +vt 0.5472 0.0916 0.0000 +vt 0.5472 0.0873 0.0000 +vt 0.5359 0.0916 0.0000 +vt 0.5359 0.0873 0.0000 +vt 0.5247 0.0916 0.0000 +vt 0.5194 0.0873 0.0000 +vt 0.5234 0.0923 0.0000 +vt 0.5220 0.0928 0.0000 +vt 0.5196 0.0932 0.0000 +vt 0.5179 0.0930 0.0000 +vt 0.5163 0.0924 0.0000 +vt 0.5148 0.0915 0.0000 +vt 0.5137 0.0903 0.0000 +vt 0.5127 0.0889 0.0000 +vt 0.5122 0.0872 0.0000 +vt 0.5120 0.0855 0.0000 +vt 0.5121 0.0840 0.0000 +vt 0.5125 0.0826 0.0000 +vt 0.5136 0.0807 0.0000 +vt 0.5158 0.0740 0.0000 +vt 0.5194 0.0750 0.0000 +vt 0.5200 0.0694 0.0000 +vt 0.5247 0.0694 0.0000 +vt 0.5313 0.0750 0.0000 +vt 0.5247 0.0598 0.0000 +vt 0.5313 0.0600 0.0000 +vt 0.5272 0.0404 0.0000 +vt 0.5313 0.0422 0.0000 +vt 0.5420 0.0233 0.0000 +vt 0.5439 0.0290 0.0000 +vt 0.5472 0.0233 0.0000 +vt 0.5470 0.0750 0.0000 +vt 0.5470 0.0600 0.0000 +vt 0.5483 0.1245 0.0000 +vt 0.5483 0.1331 0.0000 +vt 0.5483 0.1417 0.0000 +vt 0.5483 0.1536 0.0000 +vt 0.7834 0.0675 0.0000 +vt 0.7836 0.0675 0.0000 +vt 0.7835 0.0679 0.0000 +vt 0.7839 0.0678 0.0000 +vt 0.7838 0.0680 0.0000 +vt 0.7836 0.0682 0.0000 +vt 0.7834 0.0682 0.0000 +vt 0.7832 0.0680 0.0000 +vt 0.7832 0.0677 0.0000 +vt 0.8093 0.0679 0.0000 +vt 0.8092 0.0681 0.0000 +vt 0.8089 0.0680 0.0000 +vt 0.8090 0.0682 0.0000 +vt 0.8087 0.0682 0.0000 +vt 0.8086 0.0681 0.0000 +vt 0.8086 0.0679 0.0000 +vt 0.8088 0.0677 0.0000 +vt 0.8091 0.0677 0.0000 +vt 0.3709 0.1820 0.0000 +vt 0.3677 0.1820 0.0000 +vt 0.2343 0.2445 0.0000 +vt 0.2363 0.2445 0.0000 +vt 0.3567 0.1954 0.0000 +vt 0.3709 0.1700 0.0000 +vt 0.3677 0.1700 0.0000 +vt 0.2502 0.2298 0.0000 +vt 0.2482 0.2298 0.0000 +vt 0.3125 0.2302 0.0000 +vt 0.3157 0.2302 0.0000 +vt 0.3263 0.2187 0.0000 +vt 0.3295 0.2187 0.0000 +vt 0.3567 0.1820 0.0000 +vt 0.3547 0.1820 0.0000 +vt 0.3408 0.2053 0.0000 +vt 0.3811 0.1605 0.0000 +vt 0.3843 0.1605 0.0000 +vt 0.6613 0.2480 0.0000 +vt 0.8076 0.0854 0.0000 +# 12370 texture coords + +g _King_George_V_detail +usemtl _King_George_V +s 1 +f 192/256/186 193/257/186 194/258/186 195/259/186 +f 196/260/187 197/261/188 193/257/186 +f 194/258/186 193/257/186 197/261/188 198/262/186 +f 198/262/186 199/263/186 194/258/186 +f 195/259/186 194/258/186 199/263/186 200/264/186 +f 200/264/186 201/265/187 195/259/186 +f 201/265/187 202/266/187 195/259/186 +f 192/256/186 195/259/186 202/266/187 203/267/187 +f 203/267/187 204/268/187 192/256/186 +f 204/268/187 205/269/186 192/256/186 +f 193/257/186 192/256/186 205/269/186 206/270/186 +f 206/270/186 196/260/187 193/257/186 +f 207/271/189 208/272/189 209/273/189 210/274/189 +f 208/272/189 211/272/190 212/272/189 +f 211/272/190 208/272/189 207/271/189 213/271/189 +f 207/271/189 214/271/189 213/271/189 +f 214/271/189 207/271/189 210/274/189 215/275/189 +f 210/274/189 216/274/189 215/275/189 +f 210/274/189 217/274/189 216/274/189 +f 217/274/189 210/274/189 209/273/189 218/276/189 +f 209/273/189 219/273/189 218/276/189 +f 209/273/189 220/273/189 219/273/189 +f 220/273/189 209/273/189 208/272/189 221/272/189 +f 208/272/189 212/272/189 221/272/189 +f 222/277/191 223/278/191 224/279/191 225/280/191 +s 2 +f 223/278/192 226/281/192 227/282/192 224/279/192 +s 1 +f 226/283/193 228/283/193 229/284/193 227/284/193 +s 2 +f 228/283/194 230/285/195 231/286/195 229/284/194 +f 230/285/195 232/285/196 233/286/196 231/286/195 +s 1 +f 232/287/197 234/287/197 235/287/197 233/287/197 +s 2 +f 234/287/198 236/288/199 237/288/199 235/287/198 +f 236/289/199 238/290/200 239/291/200 237/292/199 +f 238/293/200 240/294/201 241/295/201 239/296/200 +f 240/294/201 242/297/202 243/298/202 241/295/201 +f 242/297/202 222/299/203 225/300/203 243/298/202 +s 4 +f 196/301/204 225/302/205 224/303/206 197/304/207 +s 8 +f 197/305/208 224/279/208 227/282/209 198/306/209 +s 4 +f 198/307/210 227/308/211 229/309/212 199/310/213 +f 199/311/213 229/312/212 231/313/214 200/314/215 +f 200/315/215 231/316/214 233/317/216 201/318/217 +f 201/319/217 233/320/216 235/321/218 202/322/219 +f 202/323/219 235/324/218 237/292/220 203/325/221 +f 203/326/221 237/327/220 239/328/222 204/329/223 +f 204/330/223 239/331/222 241/332/224 205/333/225 +f 205/334/225 241/335/224 243/336/226 206/337/227 +f 206/338/227 243/298/226 225/300/205 196/339/204 +f 211/340/228 223/341/229 222/342/230 212/343/231 +s 8 +f 213/344/232 226/345/232 223/346/233 211/347/233 +s 4 +f 214/348/234 228/348/235 226/349/236 213/348/237 +f 215/285/238 230/285/239 228/283/235 214/350/234 +f 216/351/240 232/351/241 230/351/239 215/351/238 +f 217/352/242 234/352/243 232/352/241 216/353/240 +f 218/354/244 236/288/245 234/287/243 217/355/242 +f 219/356/246 238/356/247 236/356/245 218/356/244 +f 220/357/248 240/358/249 238/358/247 219/357/246 +f 221/359/250 242/360/251 240/361/249 220/361/248 +f 212/362/231 222/362/230 242/362/251 221/362/250 +s 1 +f 244/363/252 245/364/252 246/365/252 247/366/252 +f 248/367/253 249/368/253 250/369/253 251/370/253 +s 2 +f 249/368/254 252/371/255 253/372/256 250/369/254 +f 254/373/257 244/363/258 247/366/258 255/374/259 +f 256/375/260 246/376/261 257/377/262 258/378/263 +f 259/379/264 256/375/260 258/378/263 260/380/265 +f 248/381/266 251/382/267 261/383/268 262/384/266 +f 245/385/269 263/386/270 257/377/262 246/376/261 +f 259/379/264 260/380/265 261/383/268 251/382/267 +s 1 +f 261/387/271 264/388/271 265/389/271 262/390/271 +s 4 +f 260/391/272 266/392/273 264/393/274 261/394/275 +s 1 +f 258/395/276 267/396/277 266/392/277 260/391/278 +s 4 +f 258/395/279 257/397/280 268/398/281 267/396/282 +s 1 +f 257/399/283 263/400/283 269/401/283 268/402/283 +s 4 +f 246/365/284 270/403/284 271/404/285 247/366/286 +s 2 +f 256/375/260 272/405/287 270/406/288 246/376/261 +f 259/379/264 273/407/289 272/405/287 256/375/260 +f 251/382/267 274/408/290 273/407/289 259/379/264 +s 4 +f 250/369/291 275/409/292 274/410/293 251/370/293 +f 253/372/294 276/411/295 275/409/292 250/369/291 +f 247/366/286 271/404/285 277/412/296 255/374/297 +s 1 +f 278/413/298 279/414/298 280/415/299 281/416/299 +f 281/416/299 280/415/299 282/417/300 283/418/301 +f 284/419/302 285/420/303 265/389/271 264/388/271 +s 4 +f 286/421/304 284/422/305 264/393/274 266/392/273 +s 1 +f 287/423/306 286/421/307 266/392/277 267/396/277 +s 4 +f 288/424/308 287/423/309 267/396/282 268/398/281 +s 1 +f 289/425/310 288/426/311 268/402/283 269/401/283 +f 290/427/312 291/428/313 292/429/314 293/430/315 +s 4 +f 294/431/316 290/432/317 293/433/318 295/434/319 +s 1 +f 296/435/320 294/431/320 295/434/321 297/436/321 +s 4 +f 298/437/322 296/435/323 297/436/324 299/438/325 +s 1 +f 300/439/326 298/440/327 299/441/328 301/442/329 +f 284/419/302 293/430/315 292/429/314 285/420/303 +s 4 +f 286/421/304 295/434/319 293/433/318 284/422/305 +s 1 +f 287/423/306 297/436/321 295/434/321 286/421/307 +s 4 +f 288/424/308 299/438/325 297/436/324 287/423/309 +s 1 +f 289/425/310 301/442/329 299/441/328 288/426/311 +f 244/363/252 302/443/252 303/444/252 245/364/252 +f 248/367/253 304/445/253 305/446/253 249/368/253 +s 2 +f 249/368/254 305/446/254 306/447/330 252/371/255 +f 254/373/257 307/448/331 302/443/258 244/363/258 +f 308/449/332 309/450/333 310/451/334 303/452/335 +f 311/453/336 312/454/337 309/450/333 308/449/332 +f 248/381/266 262/384/266 313/455/338 304/456/339 +f 245/385/269 303/452/335 310/451/334 263/386/270 +f 311/453/336 304/456/339 313/455/338 312/454/337 +s 4 +f 313/457/340 262/390/340 265/389/340 314/458/340 +s 1 +f 312/459/341 313/460/342 314/461/343 315/462/344 +s 4 +f 309/463/345 312/459/345 315/462/346 316/464/346 +s 1 +f 309/463/347 316/464/348 317/465/349 310/466/350 +s 4 +f 310/467/351 317/468/351 269/401/351 263/400/351 +f 303/444/352 302/443/353 318/469/354 319/470/352 +s 2 +f 308/449/332 303/452/335 319/471/355 320/472/356 +f 311/453/336 308/449/332 320/472/356 321/473/357 +f 304/456/339 311/453/336 321/473/357 322/474/358 +s 4 +f 305/446/359 304/445/360 322/475/360 323/476/361 +f 306/447/362 305/446/359 323/476/361 324/477/363 +f 302/443/353 307/448/364 325/478/365 318/469/354 +s 1 +f 326/479/366 327/480/367 328/481/367 329/482/366 +f 327/480/367 283/418/301 282/417/300 328/481/367 +s 4 +f 330/483/368 314/458/340 265/389/340 285/420/369 +s 1 +f 331/484/370 315/462/344 314/461/343 330/485/371 +s 4 +f 332/486/372 316/464/346 315/462/346 331/484/372 +s 1 +f 333/487/373 317/465/349 316/464/348 332/486/374 +s 4 +f 289/425/375 269/401/351 317/468/351 333/488/376 +f 334/489/377 335/490/378 292/429/379 291/428/380 +s 1 +f 336/491/381 337/492/382 335/493/383 334/494/384 +s 4 +f 338/495/385 339/496/386 337/492/386 336/491/385 +s 1 +f 340/497/387 341/498/388 339/496/389 338/495/390 +s 4 +f 300/439/391 301/442/392 341/499/393 340/500/394 +f 330/483/368 285/420/369 292/429/379 335/490/378 +s 1 +f 331/484/370 330/485/371 335/493/383 337/492/382 +s 4 +f 332/486/372 331/484/372 337/492/386 339/496/386 +s 1 +f 333/487/373 332/486/374 339/496/389 341/498/388 +s 4 +f 289/425/375 333/488/376 341/499/393 301/442/392 +s 1 +f 271/501/189 270/502/189 342/503/395 +f 270/502/189 272/504/189 342/503/395 +f 272/504/189 273/505/189 342/503/395 +f 273/505/189 274/506/189 342/503/395 +f 274/506/189 275/507/395 342/503/395 +f 275/507/395 276/508/395 342/503/395 +f 276/508/395 277/509/395 342/503/395 +f 277/509/395 271/501/189 342/503/395 +f 319/510/188 318/511/188 343/512/188 +f 318/511/188 325/513/188 343/512/188 +f 325/513/188 324/514/188 343/512/188 +f 324/514/188 323/515/188 343/512/188 +f 323/515/188 322/516/188 343/512/188 +f 322/516/188 321/517/188 343/512/188 +f 321/517/188 320/518/188 343/512/188 +f 320/518/188 319/510/188 343/512/188 +f 344/519/396 345/520/396 346/521/396 +f 345/520/396 347/522/396 346/521/396 +f 347/522/396 348/523/396 346/521/396 +f 348/523/396 349/524/396 346/521/396 +f 349/524/396 350/525/396 346/521/396 +f 350/525/396 351/526/396 346/521/396 +f 351/526/396 352/527/396 346/521/396 +f 352/527/396 353/528/396 346/521/396 +f 353/528/396 354/529/396 346/521/396 +f 354/529/396 344/519/396 346/521/396 +s 2 +f 344/530/397 291/531/397 290/532/398 345/533/398 +f 345/533/398 290/532/398 294/534/399 347/535/399 +f 347/536/399 294/431/399 296/435/400 348/537/400 +f 348/538/400 296/539/400 298/540/401 349/541/401 +f 349/541/401 298/540/401 300/542/402 350/543/402 +f 354/544/403 334/545/403 291/531/397 344/530/397 +f 353/546/404 336/547/404 334/548/403 354/549/403 +f 352/550/405 338/495/405 336/491/404 353/551/404 +f 351/552/406 340/553/406 338/554/405 352/555/405 +f 350/556/402 300/557/402 340/553/406 351/552/406 +f 253/372/256 252/371/255 282/558/407 280/559/408 +f 252/371/255 306/447/330 328/560/409 282/558/407 +f 306/561/330 324/562/410 329/482/411 328/481/409 +s 8 +f 324/514/412 325/513/412 326/563/412 329/564/412 +s 2 +f 325/565/413 307/566/331 327/480/414 326/479/415 +f 307/448/331 254/373/257 283/567/416 327/568/414 +f 254/373/257 255/374/259 281/569/417 283/567/416 +f 255/570/259 277/571/418 278/413/419 281/416/417 +s 8 +f 277/509/420 276/508/420 279/572/420 278/573/420 +s 2 +f 276/574/421 253/575/256 280/415/408 279/414/422 +s 1 +f 355/576/252 356/577/252 357/578/252 358/579/252 +f 359/580/253 360/581/253 361/582/253 362/583/253 +s 2 +f 360/581/254 363/584/255 364/585/256 361/582/254 +f 365/586/257 355/576/258 358/579/258 366/587/259 +f 367/588/260 357/589/261 368/590/262 369/591/263 +f 370/592/264 367/588/260 369/591/263 371/593/265 +f 359/594/266 362/595/267 372/596/268 373/597/266 +f 356/598/270 374/599/270 368/590/262 357/589/261 +f 370/592/264 371/593/265 372/596/268 362/595/267 +s 1 +f 372/600/271 375/601/271 376/602/271 373/603/271 +s 4 +f 371/604/272 377/605/273 375/606/274 372/607/275 +s 1 +f 369/608/278 378/609/423 377/605/423 371/604/278 +s 4 +f 369/608/279 368/610/280 379/611/281 378/609/282 +s 1 +f 368/612/283 374/613/283 380/614/283 379/615/283 +s 4 +f 357/578/424 381/616/424 382/617/285 358/579/286 +s 2 +f 367/588/260 383/618/287 381/619/288 357/589/261 +f 370/592/264 384/620/289 383/618/287 367/588/260 +f 362/595/267 385/621/290 384/620/289 370/592/264 +s 4 +f 361/582/291 386/622/292 385/623/293 362/583/293 +f 364/585/294 387/624/295 386/622/292 361/582/291 +f 358/579/286 382/617/285 388/625/296 366/587/297 +s 1 +f 389/626/298 390/627/425 391/628/299 392/629/299 +f 392/629/299 391/628/299 393/630/426 394/631/300 +f 395/632/302 396/633/303 376/602/271 375/601/271 +s 4 +f 397/634/304 395/635/305 375/606/274 377/605/273 +s 1 +f 398/636/307 397/634/307 377/605/423 378/609/423 +s 4 +f 399/637/308 398/636/309 378/609/282 379/611/281 +s 1 +f 400/638/310 399/639/311 379/615/283 380/614/283 +f 401/640/312 402/641/313 403/642/314 404/643/315 +s 4 +f 405/644/316 401/645/317 404/646/318 406/647/319 +s 1 +f 407/648/320 405/644/320 406/647/321 408/649/321 +s 4 +f 409/650/322 407/648/323 408/649/324 410/651/325 +s 1 +f 411/652/326 409/653/327 410/654/328 412/655/329 +f 395/632/302 404/643/315 403/642/314 396/633/303 +s 4 +f 397/634/304 406/647/319 404/646/318 395/635/305 +s 1 +f 398/636/307 408/649/321 406/647/321 397/634/307 +s 4 +f 399/637/308 410/651/325 408/649/324 398/636/309 +s 1 +f 400/638/310 412/655/329 410/654/328 399/639/311 +f 355/576/252 413/656/252 414/657/252 356/577/252 +f 359/580/253 415/658/253 416/659/253 360/581/253 +s 2 +f 360/581/254 416/659/254 417/660/330 363/584/255 +f 365/586/257 418/661/331 413/656/258 355/576/258 +f 419/662/332 420/663/333 421/664/334 414/665/335 +f 422/666/336 423/667/337 420/663/333 419/662/332 +f 359/594/266 373/597/266 424/668/338 415/669/339 +f 356/598/270 414/665/335 421/664/334 374/599/270 +f 422/666/336 415/669/339 424/668/338 423/667/337 +s 4 +f 424/670/340 373/603/340 376/602/340 425/671/340 +s 1 +f 423/672/341 424/673/342 425/674/343 426/675/344 +s 4 +f 420/676/345 423/672/345 426/675/346 427/677/346 +s 1 +f 420/676/347 427/677/348 428/678/349 421/679/350 +s 4 +f 421/680/351 428/681/351 380/614/351 374/613/351 +f 414/657/352 413/656/353 429/682/354 430/683/352 +s 2 +f 419/662/332 414/665/335 430/684/355 431/685/356 +f 422/666/336 419/662/332 431/685/356 432/686/357 +f 415/669/339 422/666/336 432/686/357 433/687/358 +s 4 +f 416/659/359 415/658/360 433/688/360 434/689/361 +f 417/660/362 416/659/359 434/689/361 435/690/363 +f 413/656/353 418/661/364 436/691/365 429/682/354 +s 1 +f 437/692/366 438/693/367 439/694/367 440/695/366 +f 438/693/367 394/631/300 393/630/426 439/694/367 +s 4 +f 441/696/368 425/671/340 376/602/340 396/633/369 +s 1 +f 442/697/370 426/675/344 425/674/343 441/698/371 +s 4 +f 443/699/372 427/677/346 426/675/346 442/697/372 +s 1 +f 444/700/373 428/678/349 427/677/348 443/699/374 +s 4 +f 400/638/375 380/614/351 428/681/351 444/701/376 +f 445/702/377 446/703/378 403/642/379 402/641/380 +s 1 +f 447/704/381 448/705/382 446/706/383 445/707/384 +s 4 +f 449/708/385 450/709/386 448/705/386 447/704/385 +s 1 +f 451/710/387 452/711/388 450/709/389 449/708/390 +s 4 +f 411/652/394 412/655/392 452/712/393 451/713/394 +f 441/696/368 396/633/369 403/642/379 446/703/378 +s 1 +f 442/697/370 441/698/371 446/706/383 448/705/382 +s 4 +f 443/699/372 442/697/372 448/705/386 450/709/386 +s 1 +f 444/700/373 443/699/374 450/709/389 452/711/388 +s 4 +f 400/638/375 444/701/376 452/712/393 412/655/392 +s 1 +f 382/714/189 381/715/189 453/716/189 +f 381/715/189 383/717/189 453/716/189 +f 383/717/189 384/718/189 453/716/189 +f 384/718/189 385/719/189 453/716/189 +f 385/719/189 386/720/189 453/716/189 +f 386/720/189 387/721/189 453/716/189 +f 387/721/189 388/722/189 453/716/189 +f 388/722/189 382/714/189 453/716/189 +f 430/723/188 429/724/188 454/725/188 +f 429/724/188 436/726/188 454/725/188 +f 436/726/188 435/727/186 454/725/188 +f 435/727/186 434/728/186 454/725/188 +f 434/728/186 433/729/187 454/725/188 +f 433/729/187 432/730/187 454/725/188 +f 432/730/187 431/731/188 454/725/188 +f 431/731/188 430/723/188 454/725/188 +f 455/732/396 456/733/396 457/734/396 +f 456/733/396 458/735/396 457/734/396 +f 458/735/396 459/736/396 457/734/396 +f 459/736/396 460/737/396 457/734/396 +f 460/737/396 461/738/396 457/734/396 +f 461/738/396 462/739/396 457/734/396 +f 462/739/396 463/740/396 457/734/396 +f 463/740/396 464/741/396 457/734/396 +f 464/741/396 465/742/396 457/734/396 +f 465/742/396 455/732/396 457/734/396 +s 2 +f 455/743/397 402/744/397 401/745/398 456/746/398 +f 456/746/398 401/745/398 405/747/399 458/748/399 +f 458/749/399 405/644/399 407/648/400 459/750/400 +f 459/751/400 407/752/400 409/753/401 460/754/401 +f 460/754/401 409/753/401 411/755/402 461/756/402 +f 465/757/403 445/758/403 402/744/397 455/743/397 +f 464/759/404 447/760/404 445/761/403 465/762/403 +f 463/763/405 449/708/405 447/704/404 464/764/404 +f 462/765/406 451/766/406 449/767/405 463/768/405 +f 461/769/402 411/770/402 451/766/406 462/765/406 +f 364/585/256 363/584/255 393/771/407 391/772/408 +f 363/584/255 417/660/330 439/773/409 393/771/407 +f 417/774/330 435/775/410 440/695/411 439/694/409 +s 8 +f 435/727/412 436/726/412 437/776/412 440/777/412 +s 2 +f 436/778/413 418/779/331 438/693/414 437/692/415 +f 418/661/331 365/586/257 394/780/416 438/781/414 +f 365/586/257 366/587/259 392/782/417 394/780/416 +f 366/783/259 388/784/418 389/626/419 392/629/417 +s 8 +f 388/722/427 387/721/427 390/785/427 389/786/427 +s 2 +f 387/787/421 364/788/256 391/628/408 390/627/422 +s 1 +f 466/789/428 467/790/428 468/791/429 469/792/430 +f 470/793/431 471/794/432 472/795/433 473/796/434 +s 2 +f 474/797/396 475/798/396 476/799/396 477/800/396 +f 478/801/435 479/802/436 480/803/436 481/804/437 +s 1 +f 479/805/438 482/806/439 483/807/440 480/808/438 +f 482/806/439 484/809/441 485/810/442 483/807/440 +f 484/809/441 486/811/443 487/812/444 485/810/442 +f 488/813/445 489/814/446 487/812/444 486/811/443 +f 488/813/445 490/815/447 491/816/448 489/814/446 +f 490/817/447 492/818/449 493/819/450 491/820/448 +f 494/821/451 495/822/452 493/819/450 492/818/449 +f 496/823/453 497/824/454 495/825/452 494/826/451 +s 4 +f 498/827/455 499/828/455 500/829/455 501/830/455 +f 471/831/455 499/828/455 502/832/455 503/833/455 +f 496/834/455 494/835/455 504/836/455 +f 494/835/455 492/837/455 504/836/455 +f 492/837/455 490/838/455 505/839/455 504/836/455 +f 490/838/455 488/840/455 506/841/455 505/839/455 +f 488/840/455 486/842/455 507/843/455 506/841/455 +f 486/842/455 484/844/455 508/845/455 507/843/455 +f 484/844/455 482/846/455 509/847/455 508/845/455 +f 482/846/455 479/848/455 509/847/455 +f 479/848/455 478/849/455 509/847/455 +f 510/850/455 474/851/455 511/852/455 512/853/455 +f 511/852/455 513/854/455 514/855/455 515/856/455 +f 515/856/455 514/855/455 516/857/455 517/858/455 +f 516/857/455 518/859/455 519/860/455 517/858/455 +f 518/859/455 498/827/455 501/830/455 519/860/455 +s 1 +f 520/861/456 521/862/430 522/863/430 523/864/456 +f 524/865/428 525/866/428 526/867/428 +f 525/866/428 527/868/428 526/867/428 +f 527/868/428 528/869/429 529/870/428 526/867/428 +f 528/869/429 530/871/428 531/872/428 529/870/428 +f 530/871/428 532/873/430 533/874/430 531/872/428 +f 532/873/430 534/875/428 535/876/428 533/874/430 +f 534/875/428 536/877/456 537/878/456 535/876/428 +f 536/877/456 538/879/456 537/878/456 +f 538/879/456 539/880/456 537/878/456 +f 540/881/428 466/789/428 469/792/430 541/882/429 +f 542/883/429 543/884/429 544/885/456 545/886/456 +f 468/791/429 467/790/428 544/885/456 546/887/430 +f 523/864/456 522/863/430 543/884/429 542/883/429 +f 529/870/428 531/872/428 547/888/428 548/889/428 +f 548/889/428 547/888/428 467/790/428 466/789/428 +f 549/890/456 550/891/430 469/792/430 468/791/429 +f 503/892/457 551/893/458 552/894/459 553/895/460 +f 471/794/432 503/892/457 553/895/460 472/795/433 +f 554/896/461 497/824/454 473/796/434 555/897/462 +s 2 +f 556/898/396 478/801/435 481/804/437 557/899/396 +f 512/900/396 558/901/396 559/902/396 510/903/396 +s 4 +f 560/904/455 561/905/455 502/832/455 562/906/455 +f 562/906/455 502/832/455 499/828/455 498/827/455 +f 504/836/455 505/839/455 501/830/455 500/829/455 +f 496/834/455 504/836/455 500/829/455 470/907/455 +f 470/907/455 500/829/455 499/828/455 471/831/455 +f 561/905/455 551/908/455 503/833/455 502/832/455 +f 563/909/455 564/910/455 565/911/455 566/912/455 +f 477/913/455 566/912/455 513/854/455 474/851/455 +f 509/847/455 556/914/455 512/853/455 511/852/455 +f 565/911/455 567/915/455 568/916/455 569/917/455 +f 513/854/455 565/911/455 569/917/455 514/855/455 +f 515/856/455 508/845/455 509/847/455 511/852/455 +f 569/917/455 568/916/455 570/918/455 571/919/455 +f 514/855/455 569/917/455 571/919/455 516/857/455 +f 517/858/455 507/843/455 508/845/455 515/856/455 +f 570/918/455 572/920/455 573/921/455 571/919/455 +f 571/919/455 573/921/455 518/859/455 516/857/455 +f 506/841/455 507/843/455 517/858/455 519/860/455 +f 572/920/455 560/904/455 562/906/455 573/921/455 +f 573/921/455 562/906/455 498/827/455 518/859/455 +f 505/839/455 506/841/455 519/860/455 501/830/455 +s 1 +f 574/922/428 575/923/428 576/924/428 577/925/430 +f 521/862/430 574/922/428 577/925/430 522/863/430 +f 523/864/456 537/878/456 539/880/456 520/861/456 +f 558/926/430 578/927/430 579/928/430 580/929/428 +f 581/930/428 558/926/430 580/929/428 582/931/428 +f 583/932/428 584/933/428 585/934/429 586/935/429 +f 526/867/428 529/870/428 548/889/428 587/936/428 +f 587/936/428 548/889/428 466/789/428 540/881/428 +f 550/891/430 588/937/429 541/882/429 469/792/430 +f 589/938/429 590/939/428 591/940/430 546/887/430 +f 543/884/429 589/938/429 546/887/430 544/885/456 +f 545/886/456 533/874/430 535/876/428 542/883/429 +f 547/888/428 531/872/428 533/874/430 545/886/456 +f 467/790/428 547/888/428 545/886/456 544/885/456 +f 546/887/430 591/940/430 549/890/456 468/791/429 +f 577/925/430 576/924/428 590/939/428 589/938/429 +f 522/863/430 577/925/430 589/938/429 543/884/429 +f 542/883/429 535/876/428 537/878/456 523/864/456 +f 592/941/428 526/867/428 587/936/428 +f 593/942/428 540/881/428 594/943/429 +f 595/944/428 540/881/428 596/945/428 +f 597/946/429 588/937/429 598/947/428 +f 599/948/429 586/935/429 585/934/429 476/949/428 +s 2 +f 600/950/396 475/798/396 559/902/396 601/951/396 +f 602/952/463 603/953/464 584/954/465 604/955/466 +s 1 +f 597/946/429 541/882/429 588/937/429 +f 605/956/428 606/957/428 598/947/428 588/937/429 +f 595/944/428 607/958/428 608/959/429 540/881/428 +f 540/881/428 541/882/429 596/945/428 +f 593/942/428 587/936/428 540/881/428 +f 608/959/429 609/960/428 594/943/429 540/881/428 +f 610/961/429 524/865/428 526/867/428 611/962/429 +f 592/941/428 611/962/429 526/867/428 +s 4 +f 612/963/467 613/964/468 578/965/469 557/966/470 +s 2 +f 613/964/471 614/967/471 579/968/471 578/965/471 +s 4 +f 614/969/472 615/970/472 580/971/472 579/972/472 +s 2 +f 615/970/473 616/973/473 582/974/473 580/971/473 +s 4 +f 616/975/474 617/976/474 581/977/474 582/978/474 +s 8 +f 617/976/475 601/979/476 559/980/477 581/977/478 +s 4 +f 618/981/479 619/982/345 599/983/480 476/984/481 +s 2 +f 619/982/482 620/985/482 621/986/482 599/983/471 +s 4 +f 620/987/483 622/988/483 586/989/483 621/990/483 +s 2 +f 622/988/484 623/991/484 624/992/484 586/989/484 +s 4 +f 623/993/485 625/994/485 583/995/485 624/996/485 +s 8 +f 625/994/486 604/997/487 584/998/488 583/995/489 +s 1 +f 626/999/490 555/897/462 473/796/434 472/795/433 +s 2 +f 475/798/396 600/950/396 618/1000/396 476/799/396 +f 627/1001/436 628/1002/491 481/804/437 480/803/436 +s 1 +f 629/1003/492 627/1004/438 480/808/438 483/807/440 +f 630/1005/493 629/1003/492 483/807/440 485/810/442 +f 631/1006/494 630/1005/493 485/810/442 487/812/444 +f 489/814/446 632/1007/495 631/1006/494 487/812/444 +f 633/1008/496 632/1007/495 489/814/446 491/816/448 +f 634/1009/497 633/1010/496 491/820/448 493/819/450 +f 495/822/452 635/1011/498 634/1009/497 493/819/450 +f 497/824/454 554/896/461 635/1012/498 495/825/452 +f 636/1013/499 637/1014/500 553/895/460 552/894/459 +f 637/1014/500 626/999/490 472/795/433 553/895/460 +f 497/824/454 496/823/453 470/793/431 473/796/434 +s 2 +f 628/1002/491 612/1015/396 557/899/396 481/804/437 +f 584/954/465 563/1016/501 566/1017/502 585/1018/503 +f 512/900/396 556/898/396 557/899/396 558/901/396 +f 474/797/396 510/903/396 559/902/396 475/798/396 +f 585/1018/503 566/1017/502 477/800/396 476/799/396 +f 603/953/464 564/1019/396 563/1016/501 584/954/465 +s 8 +f 539/880/504 554/1020/505 555/1021/506 520/861/507 +s 4 +f 605/1022/508 602/952/509 604/955/510 606/1023/511 +s 8 +f 524/865/512 628/1024/513 627/1025/514 525/866/515 +f 525/866/515 627/1025/514 629/1026/516 527/868/517 +f 527/868/517 629/1026/516 630/1027/518 528/869/519 +f 528/869/519 630/1027/518 631/1028/520 530/871/521 +f 530/871/521 631/1028/520 632/1029/522 532/873/523 +f 532/873/523 632/1029/522 633/1030/524 534/875/525 +f 534/875/525 633/1030/524 634/1031/526 536/877/527 +f 536/877/527 634/1031/526 635/1032/528 538/879/529 +f 538/1033/529 635/1034/528 554/1035/505 539/1036/504 +f 520/861/507 555/1021/506 626/1037/530 521/862/531 +f 521/862/531 626/1037/530 637/1038/532 574/922/533 +f 574/922/533 637/1038/532 636/1039/534 575/923/535 +s 16 +f 608/959/536 600/1040/536 601/1041/536 609/960/509 +s 8 +f 610/961/537 612/1042/538 628/1024/513 524/865/512 +s 32 +f 612/963/539 610/1043/540 611/1044/541 613/964/542 +f 613/1045/542 611/1046/541 592/1047/543 614/1048/544 +f 614/1048/544 592/1047/543 587/1049/545 615/1050/546 +f 615/1051/546 587/936/545 593/942/547 616/1052/548 +f 616/1052/548 593/942/547 594/943/549 617/1053/550 +f 617/976/550 594/1054/549 609/1055/551 601/979/552 +f 620/1056/553 596/945/554 541/882/555 622/1057/556 +f 619/1058/557 595/1059/558 596/1060/554 620/1061/553 +f 622/1057/556 541/882/555 597/946/559 623/1062/560 +f 623/1062/560 597/946/559 598/947/561 625/1063/562 +f 625/994/562 598/1064/561 606/1065/563 604/997/564 +s 16 +f 607/958/509 618/1066/509 600/1040/536 608/959/536 +s 32 +f 618/981/565 607/1067/566 595/1068/558 619/982/557 +s 1 +f 638/1069/252 639/1070/252 640/1071/252 641/1072/252 +f 642/1073/253 643/1074/253 644/1075/253 645/1076/253 +s 2 +f 645/1076/254 644/1075/254 646/1077/567 647/1078/568 +f 648/1079/569 649/1080/570 639/1070/258 638/1069/258 +f 650/1081/332 651/1082/333 652/1083/334 640/1084/335 +f 653/1085/336 654/1086/337 651/1082/333 650/1081/332 +f 642/1087/571 655/1088/571 656/1089/338 643/1090/339 +f 641/1091/270 640/1084/335 652/1083/334 657/1092/270 +f 653/1085/336 643/1090/339 656/1089/338 654/1086/337 +s 1 +f 656/1093/340 655/1094/340 658/1095/340 659/1096/340 +s 4 +f 654/1097/341 656/1098/342 659/1099/343 660/1100/344 +s 1 +f 651/1101/572 654/1097/572 660/1100/573 661/1102/346 +s 4 +f 651/1101/347 661/1102/348 662/1103/349 652/1104/350 +s 1 +f 652/1105/351 662/1106/351 663/1107/351 657/1108/351 +s 4 +f 640/1071/574 639/1070/353 664/1109/354 665/1110/574 +s 2 +f 650/1081/332 640/1084/335 665/1111/355 666/1112/356 +f 653/1085/336 650/1081/332 666/1112/356 667/1113/357 +f 643/1090/339 653/1085/336 667/1113/357 668/1114/358 +s 4 +f 644/1075/359 643/1074/360 668/1115/360 669/1116/361 +f 646/1077/362 644/1075/359 669/1116/361 670/1117/363 +f 639/1070/353 649/1080/364 671/1118/365 664/1109/354 +s 1 +f 672/1119/575 673/1120/367 674/1121/576 675/1122/575 +f 673/1120/367 676/1123/301 677/1124/301 674/1121/576 +f 678/1125/368 659/1096/340 658/1095/340 679/1126/369 +s 4 +f 680/1127/370 660/1100/344 659/1099/343 678/1128/371 +s 1 +f 681/1129/372 661/1102/346 660/1100/573 680/1127/372 +s 4 +f 682/1130/373 662/1103/349 661/1102/348 681/1129/374 +s 1 +f 683/1131/375 663/1107/351 662/1106/351 682/1132/376 +f 684/1133/377 685/1134/378 686/1135/379 687/1136/380 +s 4 +f 688/1137/381 689/1138/382 685/1139/383 684/1140/384 +s 1 +f 690/1141/577 691/1142/386 689/1138/578 688/1137/577 +s 4 +f 692/1143/387 693/1144/388 691/1142/579 690/1141/390 +s 1 +f 694/1145/391 695/1146/392 693/1147/393 692/1148/394 +f 678/1125/368 679/1126/369 686/1135/379 685/1134/378 +s 4 +f 680/1127/370 678/1128/371 685/1139/383 689/1138/382 +s 1 +f 681/1129/372 680/1127/372 689/1138/578 691/1142/386 +s 4 +f 682/1130/373 681/1129/374 691/1142/579 693/1144/388 +s 1 +f 683/1131/375 682/1132/376 693/1147/393 695/1146/392 +f 638/1069/252 641/1072/252 696/1149/252 697/1150/252 +f 642/1073/253 645/1076/253 698/1151/253 699/1152/253 +s 2 +f 645/1076/254 647/1078/568 700/1153/580 698/1151/254 +f 648/1079/569 638/1069/258 697/1150/258 701/1154/581 +f 702/1155/260 696/1156/261 703/1157/262 704/1158/263 +f 705/1159/264 702/1155/260 704/1158/263 706/1160/265 +f 642/1087/571 699/1161/267 707/1162/268 655/1088/571 +f 641/1091/270 657/1092/270 703/1157/262 696/1156/261 +f 705/1159/264 706/1160/265 707/1162/268 699/1161/267 +s 4 +f 707/1163/271 708/1164/271 658/1095/271 655/1094/271 +s 1 +f 706/1165/272 709/1166/273 708/1167/274 707/1168/275 +s 4 +f 704/1169/278 710/1170/423 709/1166/423 706/1165/278 +s 1 +f 704/1169/279 703/1171/280 711/1172/281 710/1170/282 +s 4 +f 703/1173/283 657/1108/283 663/1107/283 711/1174/283 +f 696/1149/424 712/1175/424 713/1176/285 697/1150/286 +s 2 +f 702/1155/260 714/1177/287 712/1178/288 696/1156/261 +f 705/1159/264 715/1179/289 714/1177/287 702/1155/260 +f 699/1161/267 716/1180/290 715/1179/289 705/1159/264 +s 4 +f 698/1151/291 717/1181/292 716/1182/293 699/1152/293 +f 700/1153/294 718/1183/295 717/1181/292 698/1151/291 +f 697/1150/286 713/1176/285 719/1184/296 701/1154/297 +s 1 +f 720/1185/425 721/1186/425 722/1187/582 723/1188/582 +f 723/1188/582 722/1187/582 677/1124/301 676/1123/301 +s 4 +f 724/1189/302 679/1126/303 658/1095/271 708/1164/271 +s 1 +f 725/1190/304 724/1191/305 708/1167/274 709/1166/273 +s 4 +f 726/1192/307 725/1190/307 709/1166/423 710/1170/423 +s 1 +f 727/1193/308 726/1192/309 710/1170/282 711/1172/281 +s 4 +f 683/1131/310 727/1194/311 711/1174/283 663/1107/283 +f 728/1195/312 687/1136/313 686/1135/314 729/1196/315 +s 1 +f 730/1197/316 728/1198/317 729/1199/318 731/1200/319 +s 4 +f 732/1201/320 730/1197/320 731/1200/321 733/1202/321 +s 1 +f 734/1203/322 732/1201/323 733/1202/583 735/1204/325 +s 4 +f 694/1145/326 734/1205/327 735/1206/328 695/1146/329 +f 724/1189/302 729/1196/315 686/1135/314 679/1126/303 +s 1 +f 725/1190/304 731/1200/319 729/1199/318 724/1191/305 +s 4 +f 726/1192/307 733/1202/321 731/1200/321 725/1190/307 +s 1 +f 727/1193/308 735/1204/325 733/1202/583 726/1192/309 +s 4 +f 683/1131/310 695/1146/329 735/1206/328 727/1194/311 +s 1 +f 664/1207/187 736/1208/187 665/1209/187 +f 665/1209/187 736/1208/187 666/1210/187 +f 666/1210/187 736/1208/187 667/1211/187 +f 667/1211/187 736/1208/187 668/1212/187 +f 668/1212/187 736/1208/187 669/1213/187 +f 669/1213/187 736/1208/187 670/1214/187 +f 670/1214/187 736/1208/187 671/1215/187 +f 671/1215/187 736/1208/187 664/1207/187 +f 712/1216/584 737/1217/584 713/1218/584 +f 713/1218/584 737/1217/584 719/1219/584 +f 719/1219/584 737/1217/584 718/1220/584 +f 718/1220/584 737/1217/584 717/1221/584 +f 717/1221/584 737/1217/584 716/1222/584 +f 716/1222/584 737/1217/584 715/1223/584 +f 715/1223/584 737/1217/584 714/1224/584 +f 714/1224/584 737/1217/584 712/1216/584 +f 738/1225/396 739/1226/396 740/1227/396 +f 740/1227/396 739/1226/396 741/1228/396 +f 741/1228/396 739/1226/396 742/1229/396 +f 742/1229/396 739/1226/396 743/1230/396 +f 743/1230/396 739/1226/396 744/1231/396 +f 744/1231/396 739/1226/396 745/1232/396 +f 745/1232/396 739/1226/396 746/1233/396 +f 746/1233/396 739/1226/396 747/1234/396 +f 747/1234/396 739/1226/396 748/1235/396 +f 748/1235/396 739/1226/396 738/1225/396 +s 2 +f 738/1236/585 740/1237/403 684/1238/403 687/1239/585 +f 740/1237/403 741/1240/404 688/1241/404 684/1238/403 +f 741/1242/404 742/1243/405 690/1141/405 688/1137/404 +f 742/1244/405 743/1245/406 692/1246/406 690/1247/405 +f 743/1245/406 744/1248/586 694/1249/586 692/1246/406 +f 748/1250/398 738/1236/585 687/1239/585 728/1251/398 +f 747/1252/399 748/1253/398 728/1254/398 730/1255/399 +f 746/1256/400 747/1257/399 730/1197/399 732/1201/400 +f 745/1258/401 746/1259/400 732/1260/400 734/1261/401 +f 744/1262/586 745/1258/401 734/1261/401 694/1263/586 +f 646/1077/567 674/1264/587 677/1265/588 647/1078/568 +f 647/1078/568 677/1265/588 722/1266/589 700/1153/580 +f 700/1267/580 722/1187/589 721/1186/590 718/1268/591 +s 8 +f 718/1220/427 721/1269/427 720/1270/427 719/1219/427 +s 2 +f 719/1271/592 720/1185/593 723/1188/594 701/1272/581 +f 701/1154/581 723/1273/594 676/1274/595 648/1079/569 +f 648/1079/569 676/1274/595 673/1275/596 649/1080/570 +f 649/1276/570 673/1120/596 672/1119/597 671/1277/598 +s 8 +f 671/1215/599 672/1278/599 675/1279/599 670/1214/412 +s 2 +f 670/1280/600 675/1122/601 674/1121/587 646/1281/567 +s 1 +f 749/1282/252 750/1283/252 751/1284/252 752/1285/252 +f 753/1286/253 754/1287/253 755/1288/253 756/1289/253 +s 2 +f 756/1289/254 755/1288/254 757/1290/567 758/1291/568 +f 759/1292/569 760/1293/570 750/1283/258 749/1282/258 +f 761/1294/332 762/1295/333 763/1296/334 751/1297/335 +f 764/1298/336 765/1299/337 762/1295/333 761/1294/332 +f 753/1300/571 766/1301/571 767/1302/338 754/1303/339 +f 752/1304/270 751/1297/335 763/1296/334 768/1305/270 +f 764/1298/336 754/1303/339 767/1302/338 765/1299/337 +s 1 +f 767/1306/340 766/1307/340 769/1308/340 770/1309/340 +s 4 +f 765/1310/341 767/1311/342 770/1312/343 771/1313/344 +s 1 +f 762/1314/345 765/1310/345 771/1313/346 772/1315/346 +s 4 +f 762/1314/347 772/1315/348 773/1316/349 763/1317/350 +s 1 +f 763/1318/351 773/1319/351 774/1320/351 768/1321/351 +s 4 +f 751/1284/574 750/1283/353 775/1322/354 776/1323/574 +s 2 +f 761/1294/332 751/1297/335 776/1324/355 777/1325/356 +f 764/1298/336 761/1294/332 777/1325/356 778/1326/357 +f 754/1303/339 764/1298/336 778/1326/357 779/1327/358 +s 4 +f 755/1288/359 754/1287/360 779/1328/360 780/1329/361 +f 757/1290/362 755/1288/359 780/1329/361 781/1330/363 +f 750/1283/353 760/1293/364 782/1331/365 775/1322/354 +s 1 +f 783/1332/366 784/1333/367 785/1334/367 786/1335/366 +f 784/1333/367 787/1336/301 788/1337/301 785/1334/367 +f 789/1338/368 770/1309/340 769/1308/340 790/1339/369 +s 4 +f 791/1340/370 771/1313/344 770/1312/343 789/1341/371 +s 1 +f 792/1342/372 772/1315/346 771/1313/346 791/1340/372 +s 4 +f 793/1343/373 773/1316/349 772/1315/348 792/1342/374 +s 1 +f 794/1344/375 774/1320/351 773/1319/351 793/1345/376 +f 795/1346/377 796/1347/378 797/1348/379 798/1349/380 +s 4 +f 799/1350/381 800/1351/382 796/1352/383 795/1353/384 +s 1 +f 801/1354/385 802/1355/386 800/1351/386 799/1350/385 +s 4 +f 803/1356/387 804/1357/388 802/1355/579 801/1354/390 +s 1 +f 805/1358/391 806/1359/392 804/1360/393 803/1361/394 +f 789/1338/368 790/1339/369 797/1348/379 796/1347/378 +s 4 +f 791/1340/370 789/1341/371 796/1352/383 800/1351/382 +s 1 +f 792/1342/372 791/1340/372 800/1351/386 802/1355/386 +s 4 +f 793/1343/373 792/1342/374 802/1355/579 804/1357/388 +s 1 +f 794/1344/375 793/1345/376 804/1360/393 806/1359/392 +f 749/1282/252 752/1285/252 807/1362/252 808/1363/252 +f 753/1286/253 756/1289/253 809/1364/253 810/1365/253 +s 2 +f 756/1289/254 758/1291/568 811/1366/580 809/1364/254 +f 759/1292/569 749/1282/258 808/1363/258 812/1367/581 +f 813/1368/260 807/1369/261 814/1370/262 815/1371/263 +f 816/1372/264 813/1368/260 815/1371/263 817/1373/265 +f 753/1300/571 810/1374/267 818/1375/268 766/1301/571 +f 752/1304/270 768/1305/270 814/1370/262 807/1369/261 +f 816/1372/264 817/1373/265 818/1375/268 810/1374/267 +s 4 +f 818/1376/271 819/1377/271 769/1308/271 766/1307/271 +s 1 +f 817/1378/272 820/1379/273 819/1380/274 818/1381/275 +s 4 +f 815/1382/278 821/1383/423 820/1379/423 817/1378/278 +s 1 +f 815/1382/279 814/1384/280 822/1385/281 821/1383/282 +s 4 +f 814/1386/283 768/1321/283 774/1320/283 822/1387/283 +f 807/1362/424 823/1388/284 824/1389/285 808/1363/286 +s 2 +f 813/1368/260 825/1390/287 823/1391/288 807/1369/261 +f 816/1372/264 826/1392/289 825/1390/287 813/1368/260 +f 810/1374/267 827/1393/290 826/1392/289 816/1372/264 +s 4 +f 809/1364/291 828/1394/292 827/1395/602 810/1365/602 +f 811/1366/294 829/1396/295 828/1394/292 809/1364/291 +f 808/1363/286 824/1389/285 830/1397/296 812/1367/297 +s 1 +f 831/1398/425 832/1399/425 833/1400/582 834/1401/582 +f 834/1401/582 833/1400/582 788/1337/301 787/1336/301 +s 4 +f 835/1402/302 790/1339/303 769/1308/271 819/1377/271 +s 1 +f 836/1403/304 835/1404/305 819/1380/274 820/1379/273 +s 4 +f 837/1405/307 836/1403/307 820/1379/423 821/1383/423 +s 1 +f 838/1406/308 837/1405/309 821/1383/282 822/1385/281 +s 4 +f 794/1344/310 838/1407/311 822/1387/283 774/1320/283 +f 839/1408/312 798/1349/313 797/1348/314 840/1409/315 +s 1 +f 841/1410/316 839/1411/317 840/1412/318 842/1413/319 +s 4 +f 843/1414/320 841/1410/320 842/1413/321 844/1415/321 +s 1 +f 845/1416/322 843/1414/323 844/1415/583 846/1417/325 +s 4 +f 805/1358/326 845/1418/327 846/1419/328 806/1359/329 +f 835/1402/302 840/1409/315 797/1348/314 790/1339/303 +s 1 +f 836/1403/304 842/1413/319 840/1412/318 835/1404/305 +s 4 +f 837/1405/307 844/1415/321 842/1413/321 836/1403/307 +s 1 +f 838/1406/308 846/1417/325 844/1415/583 837/1405/309 +s 4 +f 794/1344/310 806/1359/329 846/1419/328 838/1407/311 +s 1 +f 775/1420/187 847/1421/187 776/1422/187 +f 776/1422/187 847/1421/187 777/1423/187 +f 777/1423/187 847/1421/187 778/1424/187 +f 778/1424/187 847/1421/187 779/1425/187 +f 779/1425/187 847/1421/187 780/1426/187 +f 780/1426/187 847/1421/187 781/1427/187 +f 781/1427/187 847/1421/187 782/1428/187 +f 782/1428/187 847/1421/187 775/1420/187 +f 823/1429/584 848/1430/395 824/1431/189 +f 824/1431/189 848/1430/395 830/1432/395 +f 830/1432/395 848/1430/395 829/1433/395 +f 829/1433/395 848/1430/395 828/1434/395 +f 828/1434/395 848/1430/395 827/1435/584 +f 827/1435/584 848/1430/395 826/1436/584 +f 826/1436/584 848/1430/395 825/1437/584 +f 825/1437/584 848/1430/395 823/1429/584 +f 849/1438/603 850/1439/604 851/1440/605 +f 851/1440/605 850/1439/604 852/1441/606 +f 852/1441/606 850/1439/604 853/1442/607 +f 853/1442/607 850/1439/604 854/1443/608 +f 854/1443/608 850/1439/604 855/1444/609 +f 855/1444/609 850/1439/604 856/1445/610 +f 856/1445/610 850/1439/604 857/1446/611 +f 857/1446/611 850/1439/604 858/1447/612 +f 858/1447/612 850/1439/604 859/1448/613 +f 859/1448/613 850/1439/604 849/1438/603 +s 2 +f 849/1449/585 851/1450/403 795/1451/403 798/1452/585 +f 851/1450/403 852/1453/404 799/1454/404 795/1451/403 +f 852/1455/404 853/1456/405 801/1354/405 799/1350/404 +f 853/1457/405 854/1458/406 803/1459/406 801/1460/405 +f 854/1461/406 855/1462/586 805/1358/586 803/1361/406 +f 859/1463/398 849/1449/585 798/1452/585 839/1464/398 +f 858/1465/399 859/1466/398 839/1467/398 841/1468/399 +f 857/1469/400 858/1470/399 841/1410/399 843/1414/400 +f 856/1471/401 857/1472/400 843/1473/400 845/1474/401 +f 855/1475/586 856/1471/401 845/1474/401 805/1476/586 +f 757/1290/567 785/1477/587 788/1478/588 758/1291/568 +f 758/1291/568 788/1478/588 833/1479/589 811/1366/580 +f 811/1480/580 833/1400/589 832/1399/590 829/1481/591 +s 8 +f 829/1433/427 832/1482/427 831/1483/420 830/1432/420 +s 2 +f 830/1484/592 831/1398/593 834/1401/594 812/1485/581 +f 812/1367/581 834/1486/594 787/1487/595 759/1292/569 +f 759/1292/569 787/1487/595 784/1488/596 760/1293/570 +f 760/1489/570 784/1333/596 783/1332/597 782/1490/598 +s 8 +f 782/1428/412 783/1491/412 786/1492/412 781/1427/412 +s 2 +f 781/1493/600 786/1335/601 785/1334/587 757/1494/567 +s 1 +f 860/1495/428 861/1496/456 862/1497/456 863/1498/428 +f 864/1499/614 865/1500/615 866/1501/616 867/1502/617 +s 2 +f 868/1503/396 869/1504/396 870/1505/396 871/1506/396 +f 872/1507/618 873/1508/619 874/1509/620 875/1510/620 +s 1 +f 875/1511/621 874/1512/621 876/1513/622 877/1514/623 +f 877/1514/623 876/1513/622 878/1515/624 879/1516/625 +f 879/1516/625 878/1515/624 880/1517/626 881/1518/627 +f 882/1519/628 881/1518/627 880/1517/626 883/1520/629 +f 882/1519/628 883/1520/629 884/1521/630 885/1522/631 +f 885/1523/631 884/1524/630 886/1525/632 887/1526/633 +f 888/1527/634 887/1526/633 886/1525/632 889/1528/635 +f 890/1529/636 888/1530/634 889/1531/635 891/1532/637 +s 4 +f 892/1533/455 893/1534/455 894/1535/455 895/1536/455 +f 867/1537/455 896/1538/455 897/1539/455 895/1536/455 +f 890/1540/455 898/1541/455 888/1542/455 +f 888/1542/455 898/1541/455 887/1543/455 +f 887/1543/455 898/1541/455 899/1544/455 885/1545/455 +f 885/1545/455 899/1544/455 900/1546/455 882/1547/455 +f 882/1547/455 900/1546/455 901/1548/455 881/1549/455 +f 881/1549/455 901/1548/455 902/1550/455 879/1551/455 +f 879/1551/455 902/1550/455 903/1552/455 877/1553/455 +f 877/1553/455 903/1552/455 875/1554/455 +f 875/1554/455 903/1552/455 872/1555/455 +f 904/1556/455 868/1557/455 905/1558/455 906/1559/455 +f 904/1556/455 907/1560/455 908/1561/455 909/1562/455 +f 907/1560/455 910/1563/455 911/1564/455 908/1561/455 +f 911/1564/455 910/1563/455 912/1565/455 913/1566/455 +f 913/1566/455 912/1565/455 893/1534/455 892/1533/455 +s 1 +f 914/1567/430 915/1568/430 916/1569/456 917/1570/456 +f 918/1571/429 919/1572/429 920/1573/429 +f 920/1573/429 919/1572/429 921/1574/429 +f 921/1574/429 919/1572/429 922/1575/429 923/1576/428 +f 923/1576/428 922/1575/429 924/1577/428 925/1578/428 +f 925/1578/428 924/1577/428 926/1579/456 927/1580/456 +f 927/1580/456 926/1579/456 928/1581/429 929/1582/429 +f 929/1582/429 928/1581/429 930/1583/430 931/1584/430 +f 931/1584/430 930/1583/430 932/1585/430 +f 932/1585/430 930/1583/430 933/1586/430 +f 934/1587/429 935/1588/428 861/1496/456 860/1495/428 +f 936/1589/428 937/1590/456 938/1591/456 939/1592/428 +f 862/1497/456 940/1593/456 938/1591/456 863/1498/428 +f 915/1568/430 936/1589/428 939/1592/428 916/1569/456 +f 922/1575/429 941/1594/428 942/1595/428 924/1577/428 +f 941/1594/428 860/1495/428 863/1498/428 942/1595/428 +f 549/890/456 862/1497/456 861/1496/456 550/891/430 +f 896/1596/638 943/1597/639 552/894/459 551/893/458 +f 867/1502/617 866/1501/616 943/1597/639 896/1596/638 +f 944/1598/640 945/1599/641 865/1500/615 891/1532/637 +s 2 +f 946/1600/396 947/1601/396 873/1508/619 872/1507/618 +f 906/1602/396 905/1603/396 948/1604/396 949/1605/396 +s 4 +f 560/904/455 950/1606/455 897/1539/455 561/905/455 +f 950/1606/455 892/1533/455 895/1536/455 897/1539/455 +f 898/1541/455 894/1535/455 893/1534/455 899/1544/455 +f 890/1540/455 864/1607/455 894/1535/455 898/1541/455 +f 864/1607/455 867/1537/455 895/1536/455 894/1535/455 +f 561/905/455 897/1539/455 896/1538/455 551/908/455 +f 951/1608/455 564/910/455 952/1609/455 953/1610/455 +f 909/1562/455 953/1610/455 869/1611/455 868/1557/455 +f 906/1559/455 946/1612/455 903/1552/455 904/1556/455 +f 951/1608/455 954/1613/455 568/916/455 567/915/455 +f 909/1562/455 908/1561/455 954/1613/455 951/1608/455 +f 907/1560/455 904/1556/455 903/1552/455 902/1550/455 +f 954/1613/455 955/1614/455 570/918/455 568/916/455 +f 908/1561/455 911/1564/455 955/1614/455 954/1613/455 +f 910/1563/455 907/1560/455 902/1550/455 901/1548/455 +f 570/918/455 955/1614/455 956/1615/455 572/920/455 +f 955/1614/455 911/1564/455 913/1566/455 956/1615/455 +f 900/1546/455 912/1565/455 910/1563/455 901/1548/455 +f 572/920/455 956/1615/455 950/1606/455 560/904/455 +f 956/1615/455 913/1566/455 892/1533/455 950/1606/455 +f 899/1544/455 893/1534/455 912/1565/455 900/1546/455 +s 1 +f 957/1616/428 958/1617/456 576/924/428 575/923/428 +f 917/1570/456 916/1569/456 958/1617/456 957/1616/428 +f 915/1568/430 914/1567/430 933/1586/430 930/1583/430 +f 949/1618/428 959/1619/428 960/1620/428 947/1621/428 +f 961/1622/428 962/1623/428 949/1618/428 948/1624/428 +f 963/1625/428 964/1626/428 965/1627/428 966/1628/428 +f 919/1572/429 967/1629/428 941/1594/428 922/1575/429 +f 967/1629/428 934/1587/429 860/1495/428 941/1594/428 +f 550/891/430 861/1496/456 935/1588/428 588/937/429 +f 968/1630/428 940/1593/456 591/940/430 590/939/428 +f 939/1592/428 938/1591/456 940/1593/456 968/1630/428 +f 937/1590/456 936/1589/428 928/1581/429 926/1579/456 +f 942/1595/428 937/1590/456 926/1579/456 924/1577/428 +f 863/1498/428 938/1591/456 937/1590/456 942/1595/428 +f 940/1593/456 862/1497/456 549/890/456 591/940/430 +f 958/1617/456 968/1630/428 590/939/428 576/924/428 +f 916/1569/456 939/1592/428 968/1630/428 958/1617/456 +f 936/1589/428 915/1568/430 930/1583/430 928/1581/429 +f 969/1631/429 967/1629/428 919/1572/429 +f 970/1632/428 971/1633/428 934/1587/429 +f 972/1634/429 973/1635/428 934/1587/429 +f 974/1636/428 975/1637/428 588/937/429 +f 976/1638/428 964/1626/428 963/1625/428 977/1639/428 +s 2 +f 978/1640/396 979/1641/396 948/1604/396 871/1506/396 +f 602/952/463 980/1642/642 981/1643/643 603/953/464 +s 1 +f 974/1636/428 588/937/429 935/1588/428 +f 605/956/428 588/937/429 975/1637/428 982/1644/428 +f 972/1634/429 934/1587/429 983/1645/428 984/1646/428 +f 934/1587/429 973/1635/428 935/1588/428 +f 970/1632/428 934/1587/429 967/1629/428 +f 983/1645/428 934/1587/429 971/1633/428 985/1647/428 +f 986/1648/428 987/1649/428 919/1572/429 918/1571/429 +f 969/1631/429 919/1572/429 987/1649/428 +s 4 +f 988/1650/644 947/1651/645 960/1652/646 989/1653/647 +s 2 +f 989/1653/485 960/1652/485 959/1654/485 990/1655/485 +s 4 +f 990/1656/648 959/1657/648 962/1658/648 991/1659/648 +s 2 +f 991/1659/649 962/1658/649 992/1660/649 993/1661/649 +s 4 +f 993/1662/471 992/1663/471 961/1664/471 994/1665/471 +s 8 +f 994/1665/650 961/1664/651 948/1666/652 979/1667/653 +s 4 +f 995/1668/654 870/1669/655 976/1670/656 996/1671/276 +s 2 +f 996/1671/474 976/1670/474 977/1672/474 997/1673/474 +s 4 +f 997/1674/657 977/1675/657 963/1676/657 998/1677/657 +s 2 +f 998/1677/658 963/1676/658 966/1678/658 999/1679/658 +s 4 +f 999/1680/471 966/1681/471 965/1682/471 1000/1683/471 +s 8 +f 1000/1683/659 965/1682/660 981/1684/661 980/1685/662 +s 1 +f 1001/1686/663 866/1501/616 865/1500/615 945/1599/641 +s 2 +f 871/1506/396 870/1505/396 995/1687/396 978/1640/396 +f 1002/1688/620 874/1509/620 873/1508/619 1003/1689/664 +s 1 +f 1004/1690/665 876/1513/622 874/1512/621 1002/1691/621 +f 1005/1692/666 878/1515/624 876/1513/622 1004/1690/665 +f 1006/1693/667 880/1517/626 878/1515/624 1005/1692/666 +f 883/1520/629 880/1517/626 1006/1693/667 1007/1694/668 +f 1008/1695/669 884/1521/630 883/1520/629 1007/1694/668 +f 1009/1696/670 886/1525/632 884/1524/630 1008/1697/669 +f 889/1528/635 886/1525/632 1009/1696/670 1010/1698/671 +f 891/1532/637 889/1531/635 1010/1699/671 944/1598/640 +f 636/1013/499 552/894/459 943/1597/639 1011/1700/672 +f 1011/1700/672 943/1597/639 866/1501/616 1001/1686/663 +f 891/1532/637 865/1500/615 864/1499/614 890/1529/636 +s 2 +f 1003/1689/664 873/1508/619 947/1601/396 988/1701/396 +f 981/1643/643 964/1702/673 953/1703/674 952/1704/675 +f 906/1602/396 949/1605/396 947/1601/396 946/1600/396 +f 868/1503/396 871/1506/396 948/1604/396 905/1603/396 +f 964/1702/673 870/1505/396 869/1504/396 953/1703/674 +f 603/953/464 981/1643/643 952/1704/675 564/1019/396 +s 8 +f 933/1586/676 914/1567/677 945/1705/678 944/1706/679 +s 4 +f 605/1022/508 982/1707/511 980/1642/680 602/952/509 +s 8 +f 918/1571/681 920/1573/682 1002/1708/683 1003/1709/684 +f 920/1573/682 921/1574/685 1004/1710/686 1002/1708/683 +f 921/1574/685 923/1576/687 1005/1711/688 1004/1710/686 +f 923/1576/687 925/1578/689 1006/1712/690 1005/1711/688 +f 925/1578/689 927/1580/691 1007/1713/692 1006/1712/690 +f 927/1580/691 929/1582/693 1008/1714/694 1007/1713/692 +f 929/1582/693 931/1584/695 1009/1715/696 1008/1714/694 +f 931/1584/695 932/1585/697 1010/1716/698 1009/1715/696 +f 932/1717/697 933/1718/676 944/1719/679 1010/1720/698 +f 914/1567/677 917/1570/699 1001/1721/700 945/1705/678 +f 917/1570/699 957/1616/701 1011/1722/702 1001/1721/700 +f 957/1616/701 575/923/535 636/1039/534 1011/1722/702 +s 16 +f 983/1645/509 985/1647/509 979/1723/509 978/1724/509 +s 8 +f 986/1648/703 918/1571/681 1003/1709/684 988/1725/704 +s 32 +f 988/1650/705 989/1653/706 987/1726/707 986/1727/708 +f 989/1728/706 990/1729/709 969/1730/710 987/1731/707 +f 990/1729/709 991/1732/711 967/1733/712 969/1730/710 +f 991/1734/711 993/1735/713 970/1632/714 967/1629/712 +f 993/1735/713 994/1736/715 971/1633/716 970/1632/714 +f 994/1665/715 979/1667/717 985/1737/718 971/1738/716 +f 997/1739/719 998/1740/720 935/1588/721 973/1635/722 +f 996/1741/723 997/1742/719 973/1743/722 972/1744/724 +f 998/1740/720 999/1745/725 974/1636/726 935/1588/721 +f 999/1745/725 1000/1746/727 975/1637/728 974/1636/726 +f 1000/1683/727 980/1685/729 982/1747/730 975/1748/728 +s 16 +f 984/1646/536 983/1645/509 978/1724/509 995/1749/536 +s 32 +f 995/1668/731 996/1671/723 972/1750/724 984/1751/732 +s 1 +f 1012/1752/301 1013/1753/733 1014/1754/734 1015/1755/301 +f 1013/1753/733 1016/1756/735 1017/1757/735 1014/1754/734 +f 1016/1756/735 1018/1758/736 1019/1759/736 1017/1757/735 +f 1018/1760/736 1020/1761/737 1021/1762/737 1019/1763/736 +f 1020/1761/737 1022/1764/188 1023/1765/188 1021/1762/737 +f 1022/1764/188 1024/1766/738 1025/1767/738 1023/1765/188 +f 1024/1766/738 1026/1768/471 1027/1769/471 1025/1767/738 +f 1026/1770/471 1028/1771/739 1029/1772/740 1027/1773/471 +f 1028/1771/739 1030/1774/741 1031/1775/741 1029/1772/740 +f 1030/1774/741 1032/1776/742 1033/1777/742 1031/1775/741 +f 1032/1776/742 1034/1778/743 1035/1779/743 1033/1777/742 +f 1034/1778/743 1036/1780/744 1037/1781/745 1035/1779/743 +f 1036/1782/744 1038/1783/474 1039/1784/474 1037/1785/745 +f 1038/1783/474 1040/1786/746 1041/1787/746 1039/1784/474 +f 1040/1786/746 1042/1788/395 1043/1789/395 1041/1787/746 +f 1042/1788/395 1044/1790/747 1045/1791/747 1043/1789/395 +f 1044/1790/747 1046/1792/748 1047/1793/749 1045/1791/747 +f 1046/1792/748 1048/1794/750 1049/1795/750 1047/1793/749 +f 1048/1796/750 1050/1797/751 1051/1798/751 1049/1799/750 +f 1050/1797/751 1012/1752/301 1015/1755/301 1051/1798/751 +s 2 +f 1013/1800/455 1012/1801/455 1052/1802/752 +f 1016/1803/752 1013/1800/455 1052/1802/752 +f 1018/1804/753 1016/1803/752 1052/1802/752 +f 1020/1805/754 1018/1804/753 1052/1802/752 +f 1022/1806/455 1020/1805/754 1052/1802/752 +f 1024/1807/455 1022/1806/455 1052/1802/752 +f 1026/1808/752 1024/1807/455 1052/1802/752 +f 1028/1809/753 1026/1808/752 1052/1802/752 +f 1030/1810/455 1028/1809/753 1052/1802/752 +f 1032/1811/455 1030/1810/455 1052/1802/752 +f 1034/1812/455 1032/1811/455 1052/1802/752 +f 1036/1813/754 1034/1812/455 1052/1802/752 +f 1038/1814/455 1036/1813/754 1052/1802/752 +f 1040/1815/752 1038/1814/455 1052/1802/752 +f 1042/1816/455 1040/1815/752 1052/1802/752 +f 1044/1817/753 1042/1816/455 1052/1802/752 +f 1046/1818/754 1044/1817/753 1052/1802/752 +f 1048/1819/455 1046/1818/754 1052/1802/752 1053/1820/455 +f 1050/1821/455 1048/1819/455 1053/1820/455 1054/1822/455 +f 1012/1801/455 1050/1821/455 1054/1822/455 1052/1802/752 +f 1054/1822/455 1053/1820/455 1052/1802/752 +s 1 +f 1055/1823/456 1056/1824/430 1057/1825/456 +f 1056/1824/430 1058/1826/456 1057/1825/456 +f 1058/1826/456 1059/1827/456 1057/1825/456 +f 1059/1827/456 1060/1828/429 1057/1825/456 +f 1060/1828/429 1061/1829/430 1057/1825/456 +f 1061/1829/430 1062/1830/430 1057/1825/456 +f 1062/1830/430 1063/1831/430 1057/1825/456 +f 1063/1831/430 1064/1832/428 1057/1825/456 +f 1064/1832/428 1065/1833/429 1057/1825/456 +f 1065/1833/429 1066/1834/428 1057/1825/456 +f 1066/1834/428 1067/1835/428 1057/1825/456 +f 1067/1835/428 1068/1836/428 1057/1825/456 +f 1068/1836/428 1069/1837/428 1057/1825/456 +f 1069/1837/428 1070/1838/428 1057/1825/456 +f 1070/1838/428 1071/1839/456 1057/1825/456 +f 1071/1839/456 1072/1840/456 1057/1825/456 +f 1072/1840/456 1073/1841/456 1057/1825/456 +f 1073/1841/456 1074/1842/428 1075/1843/430 1057/1825/456 +f 1074/1842/428 1076/1844/456 1077/1845/428 1075/1843/430 +f 1076/1844/456 1055/1823/456 1057/1825/456 1077/1845/428 +f 1075/1843/430 1077/1845/428 1057/1825/456 +s 2 +f 1014/1846/755 1056/1824/756 1055/1823/757 1015/1847/758 +f 1017/1848/759 1058/1826/760 1056/1824/756 1014/1846/755 +f 1019/1849/761 1059/1827/762 1058/1826/760 1017/1848/759 +f 1021/1850/763 1060/1828/764 1059/1827/762 1019/1849/761 +f 1023/1851/765 1061/1829/766 1060/1828/764 1021/1850/763 +f 1025/1852/767 1062/1830/768 1061/1829/766 1023/1851/765 +f 1027/1853/769 1063/1831/770 1062/1830/768 1025/1852/767 +f 1029/1854/771 1064/1832/772 1063/1831/770 1027/1853/769 +f 1031/1855/773 1065/1833/774 1064/1832/772 1029/1854/771 +f 1033/1856/775 1066/1834/776 1065/1833/774 1031/1855/773 +f 1035/1857/777 1067/1835/778 1066/1834/776 1033/1856/775 +f 1037/1858/779 1068/1836/780 1067/1835/778 1035/1857/777 +f 1039/1859/781 1069/1837/782 1068/1836/780 1037/1858/779 +f 1041/1860/783 1070/1838/784 1069/1837/782 1039/1859/781 +f 1043/1861/785 1071/1839/786 1070/1838/784 1041/1860/783 +f 1045/1862/787 1072/1840/788 1071/1839/786 1043/1861/785 +f 1047/1863/789 1073/1841/790 1072/1840/788 1045/1862/787 +f 1049/1864/791 1074/1842/792 1073/1841/790 1047/1863/789 +f 1051/1865/793 1076/1844/794 1074/1842/792 1049/1864/791 +f 1015/1847/758 1055/1823/757 1076/1844/794 1051/1865/793 +s 1 +f 1078/1866/795 1079/1867/795 1080/1868/795 1081/1869/795 +f 1082/1870/796 1083/1871/796 1084/1872/796 1085/1873/796 +s 2 +f 1083/1871/797 1086/1874/798 1087/1875/799 1084/1872/797 +f 1088/1876/800 1078/1866/801 1081/1869/801 1089/1877/802 +f 1090/1878/803 1080/1879/804 1091/1880/805 1092/1881/806 +f 1093/1882/807 1090/1878/803 1092/1881/806 1094/1883/808 +f 1082/1884/809 1085/1885/810 1095/1886/811 1096/1887/812 +f 1079/1888/813 1097/1889/814 1091/1880/805 1080/1879/804 +f 1093/1882/807 1094/1883/808 1095/1886/811 1085/1885/810 +s 1 +f 1095/1890/815 1098/1891/815 1099/1892/815 1096/1893/815 +s 4 +f 1094/1894/816 1100/1895/817 1098/1896/818 1095/1897/819 +s 1 +f 1092/1898/820 1101/1899/821 1100/1895/821 1094/1894/820 +s 4 +f 1092/1898/822 1091/1900/823 1102/1901/824 1101/1899/825 +s 1 +f 1091/1902/826 1097/1903/826 1103/1904/826 1102/1905/826 +s 4 +f 1080/1868/827 1104/1906/827 1105/1907/828 1081/1869/829 +s 2 +f 1090/1878/803 1106/1908/830 1104/1909/831 1080/1879/804 +f 1093/1882/807 1107/1910/832 1106/1908/830 1090/1878/803 +f 1085/1885/810 1108/1911/833 1107/1910/832 1093/1882/807 +s 4 +f 1084/1872/834 1109/1912/835 1108/1913/836 1085/1873/836 +f 1087/1875/837 1110/1914/838 1109/1912/835 1084/1872/834 +f 1081/1869/829 1105/1907/828 1111/1915/839 1089/1877/840 +s 1 +f 1112/1916/841 1113/1917/841 1114/1918/842 1115/1919/843 +f 1115/1919/843 1114/1918/842 1116/1920/604 1117/1921/396 +f 1118/1922/844 1119/1923/845 1099/1892/815 1098/1891/815 +s 4 +f 1120/1924/846 1118/1925/847 1098/1896/818 1100/1895/817 +s 1 +f 1121/1926/848 1120/1924/848 1100/1895/821 1101/1899/821 +s 4 +f 1122/1927/849 1121/1926/850 1101/1899/825 1102/1901/824 +s 1 +f 1123/1928/851 1122/1929/852 1102/1905/826 1103/1904/826 +f 1124/1930/853 1125/1931/854 1126/1932/855 1127/1933/856 +s 4 +f 1128/1934/857 1124/1935/858 1127/1936/859 1129/1937/860 +s 1 +f 1130/1938/861 1128/1934/861 1129/1937/862 1131/1939/862 +s 4 +f 1132/1940/863 1130/1938/864 1131/1939/865 1133/1941/866 +s 1 +f 1134/1942/867 1132/1943/868 1133/1944/869 1135/1945/870 +f 1118/1922/844 1127/1933/856 1126/1932/855 1119/1923/845 +s 4 +f 1120/1924/846 1129/1937/860 1127/1936/859 1118/1925/847 +s 1 +f 1121/1926/848 1131/1939/862 1129/1937/862 1120/1924/848 +s 4 +f 1122/1927/849 1133/1941/866 1131/1939/865 1121/1926/850 +s 1 +f 1123/1928/851 1135/1945/870 1133/1944/869 1122/1929/852 +f 1078/1866/795 1136/1946/795 1137/1947/795 1079/1867/795 +f 1082/1870/796 1138/1948/796 1139/1949/796 1083/1871/796 +s 2 +f 1083/1871/797 1139/1949/797 1140/1950/871 1086/1874/798 +f 1088/1876/800 1141/1951/872 1136/1946/801 1078/1866/801 +f 1142/1952/873 1143/1953/874 1144/1954/875 1137/1955/876 +f 1145/1956/877 1146/1957/878 1143/1953/874 1142/1952/873 +f 1082/1884/809 1096/1887/812 1147/1958/879 1138/1959/880 +f 1079/1888/813 1137/1955/876 1144/1954/875 1097/1889/814 +f 1145/1956/877 1138/1959/880 1147/1958/879 1146/1957/878 +s 4 +f 1147/1960/881 1096/1893/881 1099/1892/881 1148/1961/881 +s 1 +f 1146/1962/882 1147/1963/883 1148/1964/884 1149/1965/885 +s 4 +f 1143/1966/886 1146/1962/886 1149/1965/887 1150/1967/887 +s 1 +f 1143/1966/888 1150/1967/889 1151/1968/890 1144/1969/891 +s 4 +f 1144/1970/892 1151/1971/892 1103/1904/892 1097/1903/892 +f 1137/1947/893 1136/1946/894 1152/1972/895 1153/1973/893 +s 2 +f 1142/1952/873 1137/1955/876 1153/1974/896 1154/1975/897 +f 1145/1956/877 1142/1952/873 1154/1975/897 1155/1976/898 +f 1138/1959/880 1145/1956/877 1155/1976/898 1156/1977/899 +s 4 +f 1139/1949/900 1138/1948/901 1156/1978/901 1157/1979/902 +f 1140/1950/903 1139/1949/900 1157/1979/902 1158/1980/904 +f 1136/1946/894 1141/1951/905 1159/1981/906 1152/1972/895 +s 1 +f 1160/1982/907 1161/1983/908 1162/1984/908 1163/1985/907 +f 1161/1983/908 1117/1921/396 1116/1920/604 1162/1984/908 +s 4 +f 1164/1986/909 1148/1961/881 1099/1892/881 1119/1923/910 +s 1 +f 1165/1987/911 1149/1965/885 1148/1964/884 1164/1988/912 +s 4 +f 1166/1989/913 1150/1967/887 1149/1965/887 1165/1987/913 +s 1 +f 1167/1990/914 1151/1968/890 1150/1967/889 1166/1989/915 +s 4 +f 1123/1928/916 1103/1904/892 1151/1971/892 1167/1991/917 +f 1168/1992/918 1169/1993/919 1126/1932/920 1125/1931/921 +s 1 +f 1170/1994/922 1171/1995/923 1169/1996/924 1168/1997/925 +s 4 +f 1172/1998/926 1173/1999/927 1171/1995/927 1170/1994/926 +s 1 +f 1174/2000/928 1175/2001/929 1173/1999/930 1172/1998/931 +s 4 +f 1134/1942/932 1135/1945/933 1175/2002/934 1174/2003/935 +f 1164/1986/909 1119/1923/910 1126/1932/920 1169/1993/919 +s 1 +f 1165/1987/911 1164/1988/912 1169/1996/924 1171/1995/923 +s 4 +f 1166/1989/913 1165/1987/913 1171/1995/927 1173/1999/927 +s 1 +f 1167/1990/914 1166/1989/915 1173/1999/930 1175/2001/929 +s 4 +f 1123/1928/916 1167/1991/917 1175/2002/934 1135/1945/933 +s 1 +f 1105/2004/187 1104/2005/187 1176/2006/187 +f 1104/2005/187 1106/2007/187 1176/2006/187 +f 1106/2007/187 1107/2008/936 1176/2006/187 +f 1107/2008/936 1108/2009/936 1176/2006/187 +f 1108/2009/936 1109/2010/187 1176/2006/187 +f 1109/2010/187 1110/2011/187 1176/2006/187 +f 1110/2011/187 1111/2012/187 1176/2006/187 +f 1111/2012/187 1105/2004/187 1176/2006/187 +f 1153/2013/189 1152/2014/189 1177/2015/189 +f 1152/2014/189 1159/2016/189 1177/2015/189 +f 1159/2016/189 1158/2017/189 1177/2015/189 +f 1158/2017/189 1157/2018/190 1177/2015/189 +f 1157/2018/190 1156/2019/189 1177/2015/189 +f 1156/2019/189 1155/2020/189 1177/2015/189 +f 1155/2020/189 1154/2021/189 1177/2015/189 +f 1154/2021/189 1153/2013/189 1177/2015/189 +f 1178/2022/937 1179/2023/937 1180/2024/301 +f 1179/2023/937 1181/2025/938 1180/2024/301 +f 1181/2025/938 1182/2026/939 1180/2024/301 +f 1182/2026/939 1183/2027/940 1180/2024/301 +f 1183/2027/940 1184/2028/940 1180/2024/301 +f 1184/2028/940 1185/2029/941 1180/2024/301 +f 1185/2029/941 1186/2030/942 1180/2024/301 +f 1186/2030/942 1187/2031/943 1180/2024/301 +f 1187/2031/943 1188/2032/944 1180/2024/301 +f 1188/2032/944 1178/2022/937 1180/2024/301 +s 2 +f 1178/2033/945 1125/2034/945 1124/2035/946 1179/2036/946 +f 1179/2036/946 1124/2035/946 1128/2037/947 1181/2038/947 +f 1181/2039/947 1128/1934/947 1130/1938/948 1182/2040/948 +f 1182/2041/948 1130/2042/948 1132/2043/949 1183/2044/949 +f 1183/2045/949 1132/1943/949 1134/1942/950 1184/2046/950 +f 1188/2047/951 1168/2048/951 1125/2034/945 1178/2033/945 +f 1187/2049/952 1170/2050/952 1168/2051/951 1188/2052/951 +f 1186/2053/953 1172/1998/953 1170/1994/952 1187/2054/952 +f 1185/2055/954 1174/2056/954 1172/2057/953 1186/2058/953 +f 1184/2059/950 1134/2060/950 1174/2056/954 1185/2055/954 +f 1087/1875/799 1086/1874/798 1116/2061/955 1114/2062/956 +f 1086/1874/798 1140/1950/871 1162/2063/957 1116/2061/955 +f 1140/2064/871 1158/2065/958 1163/1985/959 1162/1984/957 +s 8 +f 1158/2017/960 1159/2016/960 1160/2066/960 1163/2067/960 +s 2 +f 1159/2068/961 1141/2069/872 1161/1983/962 1160/1982/963 +f 1141/1951/872 1088/1876/800 1117/2070/964 1161/2071/962 +f 1088/1876/800 1089/1877/802 1115/2072/965 1117/2070/964 +f 1089/2073/802 1111/2074/966 1112/1916/967 1115/1919/965 +s 8 +f 1111/2012/968 1110/2011/969 1113/2075/968 1112/2076/968 +s 2 +f 1110/2077/970 1087/2078/799 1114/1918/956 1113/1917/971 +s 1 +f 1189/2079/430 1190/2080/428 1191/2081/456 1192/2082/456 +f 1193/2083/972 1194/2084/973 1195/2085/974 1196/2086/974 +f 1193/2083/972 1197/2087/975 1198/2088/975 1194/2084/973 +s 2 +f 1197/2089/976 1199/2090/977 1200/2091/978 1198/2092/976 +f 1199/2090/977 1201/2093/979 1202/2094/980 1200/2091/978 +f 1201/2093/979 1203/2095/981 1204/2096/982 1202/2094/980 +f 1205/2097/983 1206/2098/984 1204/2096/982 1203/2095/981 +f 1205/2097/983 1207/2099/985 1208/2100/986 1206/2098/984 +f 1207/2101/985 1209/2102/987 1210/2103/988 1208/2104/986 +f 1211/2105/989 1212/2106/990 1210/2103/988 1209/2102/987 +f 1213/2107/991 1214/2108/992 1212/2109/990 1211/2110/989 +s 4 +f 1213/2111/455 1215/2112/455 1216/2113/455 1217/2114/455 +f 1213/2111/455 1211/2115/455 1215/2112/455 +f 1211/2115/455 1209/2116/455 1215/2112/455 +f 1209/2116/455 1207/2117/455 1218/2118/455 1215/2112/455 +f 1207/2117/455 1205/2119/455 1219/2120/455 1218/2118/455 +f 1205/2119/455 1203/2121/455 1220/2122/455 1219/2120/455 +f 1203/2121/455 1201/2123/455 1221/2124/455 1220/2122/455 +f 1201/2123/455 1199/2125/455 1222/2126/455 1221/2124/455 +f 1199/2125/455 1197/2127/455 1222/2126/455 +f 1197/2127/455 1193/2128/455 1222/2126/455 +s 1 +f 1223/2129/430 1224/2130/430 1225/2131/430 +f 1224/2130/430 1226/2132/430 1225/2131/430 +f 1226/2132/430 1227/2133/456 1189/2079/430 1225/2131/430 +f 1227/2133/456 1228/2134/428 1190/2080/428 1189/2079/430 +f 1228/2134/428 1229/2135/428 1230/2136/428 1190/2080/428 +f 1229/2135/428 1231/2137/429 1232/2138/430 1230/2136/428 +f 1231/2137/429 1233/2139/429 1234/2140/429 1232/2138/430 +f 1233/2139/429 1235/2141/429 1234/2140/429 +f 1235/2141/429 1236/2142/429 1234/2140/429 +f 1225/2131/430 1189/2079/430 1192/2082/456 1237/2143/456 +f 1191/2081/456 1190/2080/428 1230/2136/428 1238/2144/428 +f 1239/2145/430 1240/2146/430 1192/2082/456 1191/2081/456 +s 2 +f 1217/2147/993 1241/2148/994 1242/2149/995 1243/2150/996 +f 1213/2107/991 1217/2147/993 1243/2150/996 1214/2108/992 +s 4 +f 1244/2151/455 1245/2152/455 1216/2113/455 1246/2153/455 +f 1246/2153/455 1216/2113/455 1215/2112/455 1218/2118/455 +f 1245/2152/455 1241/2154/455 1217/2114/455 1216/2113/455 +f 1247/2155/455 1248/2156/455 1249/2157/455 1250/2158/455 +f 1196/2159/455 1250/2158/455 1222/2126/455 1193/2128/455 +f 1249/2157/455 1251/2160/455 1252/2161/455 1253/2162/455 +f 1222/2126/455 1249/2157/455 1253/2162/455 1221/2124/455 +f 1253/2162/455 1252/2161/455 1254/2163/455 1255/2164/455 +f 1221/2124/455 1253/2162/455 1255/2164/455 1220/2122/455 +f 1254/2163/455 1256/2165/455 1257/2166/455 1255/2164/455 +f 1255/2164/455 1257/2166/455 1219/2120/455 1220/2122/455 +f 1256/2165/455 1244/2151/455 1246/2153/455 1257/2166/455 +f 1257/2166/455 1246/2153/455 1218/2118/455 1219/2120/455 +s 1 +f 1258/2167/428 1259/2168/428 1260/2169/429 1261/2170/428 +f 1236/2142/429 1258/2167/428 1261/2170/428 1234/2140/429 +s 2 +f 1262/2171/428 1263/2172/428 1264/2173/456 1265/2174/456 +s 1 +f 1240/2146/430 1266/2175/430 1237/2143/456 1192/2082/456 +f 1267/2176/456 1268/2177/430 1269/2178/429 1238/2144/428 +f 1232/2138/430 1267/2176/456 1238/2144/428 1230/2136/428 +f 1238/2144/428 1269/2178/429 1239/2145/430 1191/2081/456 +f 1261/2170/428 1260/2169/429 1268/2177/430 1267/2176/456 +f 1234/2140/429 1261/2170/428 1267/2176/456 1232/2138/430 +f 1270/2179/430 1225/2131/430 1271/2180/428 +f 1272/2181/456 1266/2175/430 1273/2182/428 +s 2 +f 1274/2183/456 1265/2174/456 1264/2173/456 1195/2184/456 +s 1 +f 1275/2185/997 1276/2186/998 1263/2187/999 1277/2188/1000 +f 1272/2181/456 1237/2143/456 1266/2175/430 +f 1278/2189/428 1279/2190/428 1273/2182/428 1266/2175/430 +f 1270/2179/430 1280/2191/430 1223/2129/430 1225/2131/430 +f 1225/2131/430 1237/2143/456 1271/2180/428 +s 4 +f 1281/2192/1001 1282/2193/1002 1274/2194/1003 1195/2195/1004 +s 1 +f 1282/2193/749 1283/2196/749 1284/2197/749 1274/2194/749 +s 4 +f 1283/2198/1005 1285/2199/1005 1265/2200/1005 1284/2201/1005 +s 1 +f 1285/2199/1006 1286/2202/1006 1287/2203/1006 1265/2200/1006 +s 4 +f 1286/2204/736 1288/2205/736 1262/2206/736 1287/2207/736 +s 8 +f 1288/2205/1007 1277/2208/1008 1263/2209/1009 1262/2206/1010 +s 1 +f 1194/2084/973 1289/2210/1011 1281/2211/974 1195/2085/974 +f 1290/2212/975 1289/2210/1011 1194/2084/973 1198/2088/975 +s 2 +f 1291/2213/1012 1290/2214/976 1198/2092/976 1200/2091/978 +f 1292/2215/1013 1291/2213/1012 1200/2091/978 1202/2094/980 +f 1293/2216/1014 1292/2215/1013 1202/2094/980 1204/2096/982 +f 1206/2098/984 1294/2217/1015 1293/2216/1014 1204/2096/982 +f 1295/2218/1016 1294/2217/1015 1206/2098/984 1208/2100/986 +f 1296/2219/1017 1295/2220/1016 1208/2104/986 1210/2103/988 +f 1212/2106/990 1297/2221/1018 1296/2219/1017 1210/2103/988 +f 1214/2108/992 1298/2222/1019 1297/2223/1018 1212/2109/990 +f 1299/2224/1020 1300/2225/1021 1243/2150/996 1242/2149/995 +f 1300/2225/1021 1298/2222/1019 1214/2108/992 1243/2150/996 +s 1 +f 1263/2187/999 1247/2226/1022 1250/2227/1023 1264/2228/1024 +f 1264/2228/1024 1250/2227/1023 1196/2086/974 1195/2085/974 +f 1276/2186/998 1248/2229/974 1247/2226/1022 1263/2187/999 +s 2 +f 1278/2230/1025 1275/2185/1026 1277/2188/1027 1279/2231/1028 +s 8 +f 1223/2129/1029 1289/2232/1030 1290/2233/1031 1224/2130/1032 +f 1224/2130/1032 1290/2233/1031 1291/2234/1033 1226/2132/1034 +f 1226/2132/1034 1291/2234/1033 1292/2235/1035 1227/2133/1036 +f 1227/2133/1036 1292/2235/1035 1293/2236/1037 1228/2134/1038 +f 1228/2134/1038 1293/2236/1037 1294/2237/1039 1229/2135/1040 +f 1229/2135/1040 1294/2237/1039 1295/2238/1041 1231/2137/1042 +f 1231/2137/1042 1295/2238/1041 1296/2239/1043 1233/2139/1044 +f 1233/2139/1044 1296/2239/1043 1297/2240/1045 1235/2141/1046 +f 1235/2141/1046 1297/2240/1045 1298/2241/1047 1236/2142/1048 +f 1236/2242/1048 1298/2243/1047 1300/2244/1049 1258/2245/1050 +f 1258/2167/1050 1300/2246/1049 1299/2247/1051 1259/2168/1052 +s 16 +f 1283/2248/1053 1271/2180/1054 1237/2143/1055 1285/2249/1056 +f 1282/2250/1057 1270/2251/1058 1271/2252/1054 1283/2253/1053 +f 1285/2249/1056 1237/2143/1055 1272/2181/1059 1286/2254/1060 +f 1286/2254/1060 1272/2181/1059 1273/2182/1061 1288/2255/1062 +f 1288/2205/1062 1273/2256/1061 1279/2257/1063 1277/2208/1064 +s 8 +f 1280/2191/1065 1281/2258/1066 1289/2232/1030 1223/2129/1029 +s 16 +f 1281/2192/1067 1280/2259/1068 1270/2260/1058 1282/2193/1057 +s 1 +f 1301/2261/426 1302/2262/1069 1303/2263/1069 1304/2264/301 +f 1302/2262/1069 1305/2265/735 1306/2266/735 1303/2263/1069 +f 1305/2265/735 1307/2267/736 1308/2268/736 1306/2266/735 +f 1307/2269/736 1309/2270/1070 1310/2271/1070 1308/2272/736 +f 1309/2270/1070 1311/2273/188 1312/2274/188 1310/2271/1070 +s 2 +f 1302/2275/455 1301/2276/455 1313/2277/754 +f 1305/2278/455 1302/2275/455 1313/2277/754 +f 1307/2279/752 1305/2278/455 1313/2277/754 +f 1309/2280/752 1307/2279/752 1313/2277/754 +f 1311/2281/753 1309/2280/752 1313/2277/754 +s 1 +f 1314/2282/428 1315/2283/428 1316/2284/429 +f 1315/2283/428 1317/2285/429 1316/2284/429 +f 1317/2285/429 1318/2286/430 1316/2284/429 +f 1318/2286/430 1319/2287/456 1316/2284/429 +f 1319/2287/456 1320/2288/428 1316/2284/429 +s 2 +f 1303/2289/1071 1315/2283/1072 1314/2282/1073 1304/2290/1074 +f 1306/2291/1075 1317/2285/1076 1315/2283/1072 1303/2289/1071 +f 1308/2292/1077 1318/2286/1078 1317/2285/1076 1306/2291/1075 +f 1310/2293/1079 1319/2287/1080 1318/2286/1078 1308/2292/1077 +f 1312/2294/1081 1320/2288/1082 1319/2287/1080 1310/2293/1079 +s 1 +f 1321/2295/396 1322/2296/742 1323/2297/1083 1324/2298/1083 +f 1324/2298/1083 1323/2297/1083 1325/2299/740 1326/2300/740 +f 1326/2301/740 1325/2302/740 1327/2303/471 1328/2304/471 +f 1328/2304/471 1327/2303/471 1329/2305/1084 1330/2306/1084 +f 1330/2306/1084 1329/2305/1084 1312/2274/188 1311/2273/188 +s 2 +f 1324/2307/455 1313/2277/754 1321/2308/455 +f 1326/2309/455 1313/2277/754 1324/2307/455 +f 1328/2310/753 1313/2277/754 1326/2309/455 +f 1330/2311/753 1313/2277/754 1328/2310/753 +f 1311/2281/753 1313/2277/754 1330/2311/753 +s 1 +f 1331/2312/428 1316/2284/429 1332/2313/428 +f 1332/2313/428 1316/2284/429 1333/2314/430 +f 1333/2314/430 1316/2284/429 1334/2315/429 +f 1334/2315/429 1316/2284/429 1335/2316/428 +f 1335/2316/428 1316/2284/429 1320/2288/428 +s 2 +f 1323/2317/1085 1322/2318/1086 1331/2312/1087 1332/2313/1088 +f 1325/2319/1089 1323/2317/1085 1332/2313/1088 1333/2314/1090 +f 1327/2320/1091 1325/2319/1089 1333/2314/1090 1334/2315/1092 +f 1329/2321/1093 1327/2320/1091 1334/2315/1092 1335/2316/1094 +f 1312/2294/1081 1329/2321/1093 1335/2316/1094 1320/2288/1082 +s 1 +f 1321/2295/396 1336/2322/1095 1337/2323/1096 1322/2296/742 +f 1336/2322/1095 1338/2324/745 1339/2325/745 1337/2323/1096 +f 1338/2324/745 1340/2326/474 1341/2327/485 1339/2325/745 +f 1340/2328/474 1342/2329/1097 1343/2330/1097 1341/2331/485 +f 1342/2329/1097 1344/2332/395 1345/2333/395 1343/2330/1097 +s 2 +f 1336/2334/754 1321/2308/455 1313/2277/754 +f 1338/2335/754 1336/2334/754 1313/2277/754 +f 1340/2336/455 1338/2335/754 1313/2277/754 +f 1342/2337/455 1340/2336/455 1313/2277/754 +f 1344/2338/754 1342/2337/455 1313/2277/754 +s 1 +f 1331/2312/428 1346/2339/428 1316/2284/429 +f 1346/2339/428 1347/2340/428 1316/2284/429 +f 1347/2340/428 1348/2341/428 1316/2284/429 +f 1348/2341/428 1349/2342/428 1316/2284/429 +f 1349/2342/428 1350/2343/428 1316/2284/429 +s 2 +f 1337/2344/1098 1346/2339/1099 1331/2312/1087 1322/2318/1086 +f 1339/2345/1100 1347/2340/1101 1346/2339/1099 1337/2344/1098 +f 1341/2346/1102 1348/2341/1103 1347/2340/1101 1339/2345/1100 +f 1343/2347/1104 1349/2342/1105 1348/2341/1103 1341/2346/1102 +f 1345/2348/1106 1350/2343/1107 1349/2342/1105 1343/2347/1104 +s 1 +f 1301/2261/426 1304/2264/301 1351/2349/1108 1352/2350/1108 +f 1352/2350/1108 1351/2349/1108 1353/2351/1109 1354/2352/750 +f 1354/2353/750 1353/2354/1109 1355/2355/748 1356/2356/748 +f 1356/2356/748 1355/2355/748 1357/2357/1110 1358/2358/1111 +f 1358/2358/1111 1357/2357/1110 1345/2333/395 1344/2332/395 +s 2 +f 1352/2359/455 1313/2277/754 1301/2276/455 +f 1354/2360/455 1313/2277/754 1352/2359/455 +f 1356/2361/754 1313/2277/754 1354/2360/455 +f 1358/2362/754 1313/2277/754 1356/2361/754 +f 1344/2338/754 1313/2277/754 1358/2362/754 +s 1 +f 1314/2282/428 1316/2284/429 1359/2363/428 +f 1359/2363/428 1316/2284/429 1360/2364/428 +f 1360/2364/428 1316/2284/429 1361/2365/428 +f 1361/2365/428 1316/2284/429 1362/2366/428 +f 1362/2366/428 1316/2284/429 1350/2343/428 +s 2 +f 1351/2367/1112 1304/2290/1074 1314/2282/1073 1359/2363/1113 +f 1353/2368/1114 1351/2367/1112 1359/2363/1113 1360/2364/1115 +f 1355/2369/1116 1353/2368/1114 1360/2364/1115 1361/2365/1117 +f 1357/2370/1118 1355/2369/1116 1361/2365/1117 1362/2366/1119 +f 1345/2348/1106 1357/2370/1118 1362/2366/1119 1350/2343/1107 +s 1 +f 1363/2371/795 1364/2372/795 1365/2373/795 1366/2374/795 +f 1367/2375/796 1368/2376/796 1369/2377/796 1370/2378/796 +s 2 +f 1370/2378/797 1369/2377/797 1371/2379/1120 1372/2380/1121 +f 1373/2381/1122 1374/2382/1123 1364/2372/801 1363/2371/801 +f 1375/2383/873 1376/2384/874 1377/2385/875 1365/2386/876 +f 1378/2387/877 1379/2388/878 1376/2384/874 1375/2383/873 +f 1367/2389/812 1380/2390/809 1381/2391/879 1368/2392/880 +f 1366/2393/814 1365/2386/876 1377/2385/875 1382/2394/814 +f 1378/2387/877 1368/2392/880 1381/2391/879 1379/2388/878 +s 1 +f 1381/2395/881 1380/2396/881 1383/2397/881 1384/2398/881 +s 4 +f 1379/2399/882 1381/2400/883 1384/2401/884 1385/2402/885 +s 1 +f 1376/2403/886 1379/2399/886 1385/2402/887 1386/2404/887 +s 4 +f 1376/2403/888 1386/2404/889 1387/2405/890 1377/2406/891 +s 1 +f 1377/2407/892 1387/2408/892 1388/2409/892 1382/2410/892 +s 4 +f 1365/2373/893 1364/2372/894 1389/2411/895 1390/2412/893 +s 2 +f 1375/2383/873 1365/2386/876 1390/2413/896 1391/2414/897 +f 1378/2387/877 1375/2383/873 1391/2414/897 1392/2415/898 +f 1368/2392/880 1378/2387/877 1392/2415/898 1393/2416/899 +s 4 +f 1369/2377/900 1368/2376/901 1393/2417/901 1394/2418/902 +f 1371/2379/903 1369/2377/900 1394/2418/902 1395/2419/904 +f 1364/2372/894 1374/2382/905 1396/2420/906 1389/2411/895 +s 1 +f 1397/2421/1124 1398/2422/908 1399/2423/1125 1400/2424/1124 +f 1398/2422/908 1401/2425/604 1402/2426/396 1399/2423/1125 +f 1403/2427/909 1384/2398/881 1383/2397/881 1404/2428/910 +s 4 +f 1405/2429/911 1385/2402/885 1384/2401/884 1403/2430/912 +s 1 +f 1406/2431/1126 1386/2404/887 1385/2402/887 1405/2429/1126 +s 4 +f 1407/2432/914 1387/2405/890 1386/2404/889 1406/2431/915 +s 1 +f 1408/2433/916 1388/2409/892 1387/2408/892 1407/2434/917 +f 1409/2435/918 1410/2436/919 1411/2437/920 1412/2438/921 +s 4 +f 1413/2439/922 1414/2440/923 1410/2441/924 1409/2442/925 +s 1 +f 1415/2443/926 1416/2444/927 1414/2440/927 1413/2439/926 +s 4 +f 1417/2445/928 1418/2446/929 1416/2444/930 1415/2443/931 +s 1 +f 1419/2447/932 1420/2448/933 1418/2449/934 1417/2450/935 +f 1403/2427/909 1404/2428/910 1411/2437/920 1410/2436/919 +s 4 +f 1405/2429/911 1403/2430/912 1410/2441/924 1414/2440/923 +s 1 +f 1406/2431/1126 1405/2429/1126 1414/2440/927 1416/2444/927 +s 4 +f 1407/2432/914 1406/2431/915 1416/2444/930 1418/2446/929 +s 1 +f 1408/2433/916 1407/2434/917 1418/2449/934 1420/2448/933 +f 1363/2371/795 1366/2374/795 1421/2451/795 1422/2452/795 +f 1367/2375/796 1370/2378/796 1423/2453/796 1424/2454/796 +s 2 +f 1370/2378/797 1372/2380/1121 1425/2455/1127 1423/2453/797 +f 1373/2381/1122 1363/2371/801 1422/2452/801 1426/2456/1128 +f 1427/2457/803 1421/2458/804 1428/2459/805 1429/2460/806 +f 1430/2461/807 1427/2457/803 1429/2460/806 1431/2462/808 +f 1367/2389/812 1424/2463/810 1432/2464/811 1380/2390/809 +f 1366/2393/814 1382/2394/814 1428/2459/805 1421/2458/804 +f 1430/2461/807 1431/2462/808 1432/2464/811 1424/2463/810 +s 4 +f 1432/2465/815 1433/2466/815 1383/2397/815 1380/2396/815 +s 1 +f 1431/2467/816 1434/2468/817 1433/2469/818 1432/2470/819 +s 4 +f 1429/2471/820 1435/2472/821 1434/2468/821 1431/2467/820 +s 1 +f 1429/2471/822 1428/2473/823 1436/2474/824 1435/2472/825 +s 4 +f 1428/2475/826 1382/2410/826 1388/2409/826 1436/2476/826 +f 1421/2451/827 1437/2477/827 1438/2478/828 1422/2452/829 +s 2 +f 1427/2457/803 1439/2479/830 1437/2480/831 1421/2458/804 +f 1430/2461/807 1440/2481/832 1439/2479/830 1427/2457/803 +f 1424/2463/810 1441/2482/833 1440/2481/832 1430/2461/807 +s 4 +f 1423/2453/834 1442/2483/835 1441/2484/836 1424/2454/836 +f 1425/2455/837 1443/2485/838 1442/2483/835 1423/2453/834 +f 1422/2452/829 1438/2478/828 1444/2486/839 1426/2456/840 +s 1 +f 1445/2487/1129 1446/2488/1129 1447/2489/843 1448/2490/843 +f 1448/2490/843 1447/2489/843 1402/2426/396 1401/2425/604 +s 4 +f 1449/2491/844 1404/2428/845 1383/2397/815 1433/2466/815 +s 1 +f 1450/2492/846 1449/2493/847 1433/2469/818 1434/2468/817 +s 4 +f 1451/2494/1130 1450/2492/1131 1434/2468/821 1435/2472/821 +s 1 +f 1452/2495/849 1451/2494/850 1435/2472/825 1436/2474/824 +s 4 +f 1408/2433/851 1452/2496/852 1436/2476/826 1388/2409/826 +f 1453/2497/853 1412/2438/854 1411/2437/855 1454/2498/856 +s 1 +f 1455/2499/857 1453/2500/858 1454/2501/859 1456/2502/860 +s 4 +f 1457/2503/1132 1455/2499/1132 1456/2502/1133 1458/2504/1133 +s 1 +f 1459/2505/863 1457/2503/864 1458/2504/865 1460/2506/866 +s 4 +f 1419/2447/867 1459/2507/868 1460/2508/869 1420/2448/870 +f 1449/2491/844 1454/2498/856 1411/2437/855 1404/2428/845 +s 1 +f 1450/2492/846 1456/2502/860 1454/2501/859 1449/2493/847 +s 4 +f 1451/2494/1130 1458/2504/1133 1456/2502/1133 1450/2492/1131 +s 1 +f 1452/2495/849 1460/2506/866 1458/2504/865 1451/2494/850 +s 4 +f 1408/2433/851 1420/2448/870 1460/2508/869 1452/2496/852 +s 1 +f 1389/2509/189 1461/2510/189 1390/2511/189 +f 1390/2511/189 1461/2510/189 1391/2512/189 +f 1391/2512/189 1461/2510/189 1392/2513/189 +f 1392/2513/189 1461/2510/189 1393/2514/189 +f 1393/2514/189 1461/2510/189 1394/2515/189 +f 1394/2515/189 1461/2510/189 1395/2516/189 +f 1395/2516/189 1461/2510/189 1396/2517/189 +f 1396/2517/189 1461/2510/189 1389/2509/189 +f 1437/2518/187 1462/2519/187 1438/2520/187 +f 1438/2520/187 1462/2519/187 1444/2521/187 +f 1444/2521/187 1462/2519/187 1443/2522/187 +f 1443/2522/187 1462/2519/187 1442/2523/936 +f 1442/2523/936 1462/2519/187 1441/2524/187 +f 1441/2524/187 1462/2519/187 1440/2525/187 +f 1440/2525/187 1462/2519/187 1439/2526/187 +f 1439/2526/187 1462/2519/187 1437/2518/187 +f 1463/2527/937 1464/2528/974 1465/2529/944 +f 1465/2529/944 1464/2528/974 1466/2530/943 +f 1466/2530/943 1464/2528/974 1467/2531/942 +f 1467/2531/942 1464/2528/974 1468/2532/941 +f 1468/2532/941 1464/2528/974 1469/2533/940 +f 1469/2533/940 1464/2528/974 1470/2534/940 +f 1470/2534/940 1464/2528/974 1471/2535/939 +f 1471/2535/939 1464/2528/974 1472/2536/938 +f 1472/2536/938 1464/2528/974 1473/2537/937 +f 1473/2537/937 1464/2528/974 1463/2527/937 +s 2 +f 1463/2538/1134 1465/2539/951 1409/2540/951 1412/2541/1134 +f 1465/2539/951 1466/2542/952 1413/2543/952 1409/2540/951 +f 1466/2544/952 1467/2545/953 1415/2443/953 1413/2439/952 +f 1467/2546/953 1468/2547/954 1417/2548/954 1415/2549/953 +f 1468/2547/954 1469/2550/1135 1419/2551/1135 1417/2548/954 +f 1473/2552/946 1463/2538/1134 1412/2541/1134 1453/2553/946 +f 1472/2554/947 1473/2555/946 1453/2556/946 1455/2557/947 +f 1471/2558/948 1472/2559/947 1455/2499/947 1457/2503/948 +f 1470/2560/949 1471/2561/948 1457/2562/948 1459/2563/949 +f 1469/2564/1135 1470/2560/949 1459/2563/949 1419/2565/1135 +f 1371/2379/1120 1399/2566/1136 1402/2567/1137 1372/2380/1121 +f 1372/2380/1121 1402/2567/1137 1447/2568/1138 1425/2455/1127 +f 1425/2569/1127 1447/2489/1138 1446/2488/1139 1443/2570/1140 +s 8 +f 1443/2522/1141 1446/2571/1141 1445/2572/1141 1444/2521/1141 +s 2 +f 1444/2573/1142 1445/2487/1143 1448/2490/1144 1426/2574/1128 +f 1426/2456/1128 1448/2575/1144 1401/2576/1145 1373/2381/1122 +f 1373/2381/1122 1401/2576/1145 1398/2577/1146 1374/2382/1123 +f 1374/2578/1123 1398/2422/1146 1397/2421/1147 1396/2579/1148 +s 8 +f 1396/2517/1149 1397/2580/1149 1400/2581/1149 1395/2516/1150 +s 2 +f 1395/2582/1151 1400/2424/1152 1399/2423/1136 1371/2583/1120 +s 1 +f 1474/2584/456 1475/2585/430 1476/2586/429 1477/2587/428 +f 1478/2588/1153 1479/2589/974 1480/2590/974 1481/2591/1154 +f 1478/2588/1153 1481/2591/1154 1482/2592/1155 1483/2593/1155 +s 2 +f 1483/2594/1156 1482/2595/1156 1484/2596/1157 1485/2597/1158 +f 1485/2597/1158 1484/2596/1157 1486/2598/1159 1487/2599/1160 +f 1487/2599/1160 1486/2598/1159 1488/2600/1161 1489/2601/1162 +f 1490/2602/1163 1489/2601/1162 1488/2600/1161 1491/2603/1164 +f 1490/2602/1163 1491/2603/1164 1492/2604/1165 1493/2605/1166 +f 1493/2606/1166 1492/2607/1165 1494/2608/1167 1495/2609/1168 +f 1496/2610/1169 1495/2609/1168 1494/2608/1167 1497/2611/1170 +f 1498/2612/1171 1496/2613/1169 1497/2614/1170 1499/2615/1172 +s 4 +f 1498/2616/455 1500/2617/455 1501/2618/455 1502/2619/455 +f 1498/2616/455 1502/2619/455 1496/2620/455 +f 1496/2620/455 1502/2619/455 1495/2621/455 +f 1495/2621/455 1502/2619/455 1503/2622/455 1493/2623/455 +f 1493/2623/455 1503/2622/455 1504/2624/455 1490/2625/455 +f 1490/2625/455 1504/2624/455 1505/2626/455 1489/2627/455 +f 1489/2627/455 1505/2626/455 1506/2628/455 1487/2629/455 +f 1487/2629/455 1506/2628/455 1507/2630/455 1485/2631/455 +f 1485/2631/455 1507/2630/455 1483/2632/455 +f 1483/2632/455 1507/2630/455 1478/2633/455 +s 1 +f 1508/2634/456 1509/2635/456 1510/2636/456 +f 1510/2636/456 1509/2635/456 1511/2637/456 +f 1511/2637/456 1509/2635/456 1474/2584/456 1512/2638/430 +f 1512/2638/430 1474/2584/456 1477/2587/428 1513/2639/428 +f 1513/2639/428 1477/2587/428 1514/2640/429 1515/2641/429 +f 1515/2641/429 1514/2640/429 1516/2642/456 1517/2643/428 +f 1517/2643/428 1516/2642/456 1518/2644/428 1519/2645/428 +f 1519/2645/428 1518/2644/428 1520/2646/428 +f 1520/2646/428 1518/2644/428 1521/2647/428 +f 1509/2635/456 1522/2648/430 1475/2585/430 1474/2584/456 +f 1476/2586/429 1523/2649/429 1514/2640/429 1477/2587/428 +f 1239/2145/430 1476/2586/429 1475/2585/430 1240/2146/430 +s 2 +f 1500/2650/1173 1524/2651/1174 1242/2149/995 1241/2148/994 +f 1498/2612/1171 1499/2615/1172 1524/2651/1174 1500/2650/1173 +s 4 +f 1244/2151/455 1525/2652/455 1501/2618/455 1245/2152/455 +f 1525/2652/455 1503/2622/455 1502/2619/455 1501/2618/455 +f 1245/2152/455 1501/2618/455 1500/2617/455 1241/2154/455 +f 1526/2653/455 1248/2156/455 1527/2654/455 1528/2655/455 +f 1507/2630/455 1528/2655/455 1479/2656/455 1478/2633/455 +f 1526/2653/455 1529/2657/455 1252/2161/455 1251/2160/455 +f 1507/2630/455 1506/2628/455 1529/2657/455 1526/2653/455 +f 1529/2657/455 1530/2658/455 1254/2163/455 1252/2161/455 +f 1506/2628/455 1505/2626/455 1530/2658/455 1529/2657/455 +f 1254/2163/455 1530/2658/455 1531/2659/455 1256/2165/455 +f 1530/2658/455 1505/2626/455 1504/2624/455 1531/2659/455 +f 1256/2165/455 1531/2659/455 1525/2652/455 1244/2151/455 +f 1531/2659/455 1504/2624/455 1503/2622/455 1525/2652/455 +s 1 +f 1532/2660/429 1533/2661/429 1260/2169/429 1259/2168/428 +f 1521/2647/428 1518/2644/428 1533/2661/429 1532/2660/429 +s 2 +f 1534/2662/430 1535/2663/430 1536/2664/428 1537/2665/428 +s 1 +f 1240/2146/430 1475/2585/430 1522/2648/430 1266/2175/430 +f 1538/2666/430 1523/2649/429 1269/2178/429 1268/2177/430 +f 1516/2642/456 1514/2640/429 1523/2649/429 1538/2666/430 +f 1523/2649/429 1476/2586/429 1239/2145/430 1269/2178/429 +f 1533/2661/429 1538/2666/430 1268/2177/430 1260/2169/429 +f 1518/2644/428 1516/2642/456 1538/2666/430 1533/2661/429 +f 1539/2667/456 1540/2668/428 1509/2635/456 +f 1541/2669/430 1542/2670/428 1266/2175/430 +s 2 +f 1543/2671/430 1535/2663/430 1534/2662/430 1544/2672/430 +s 1 +f 1275/2185/997 1545/2673/1175 1546/2674/1176 1276/2186/998 +f 1541/2669/430 1266/2175/430 1522/2648/430 +f 1278/2189/428 1266/2175/430 1542/2670/428 1547/2675/428 +f 1539/2667/456 1509/2635/456 1508/2634/456 1548/2676/456 +f 1509/2635/456 1540/2668/428 1522/2648/430 +s 4 +f 1549/2677/1177 1480/2678/1178 1543/2679/1179 1550/2680/1180 +s 1 +f 1550/2680/1181 1543/2679/1181 1544/2681/1181 1551/2682/1181 +s 4 +f 1551/2683/1182 1544/2684/1182 1534/2685/1182 1552/2686/1182 +s 1 +f 1552/2686/1183 1534/2685/1183 1537/2687/1183 1553/2688/1183 +s 4 +f 1553/2689/748 1537/2690/748 1536/2691/748 1554/2692/748 +s 8 +f 1554/2692/1184 1536/2691/1185 1546/2693/1186 1545/2694/1187 +s 1 +f 1481/2591/1154 1480/2590/974 1549/2695/974 1555/2696/1188 +f 1556/2697/1155 1482/2592/1155 1481/2591/1154 1555/2696/1188 +s 2 +f 1557/2698/1189 1484/2596/1157 1482/2595/1156 1556/2699/1156 +f 1558/2700/1190 1486/2598/1159 1484/2596/1157 1557/2698/1189 +f 1559/2701/1191 1488/2600/1161 1486/2598/1159 1558/2700/1190 +f 1491/2603/1164 1488/2600/1161 1559/2701/1191 1560/2702/1192 +f 1561/2703/1193 1492/2604/1165 1491/2603/1164 1560/2702/1192 +f 1562/2704/1194 1494/2608/1167 1492/2607/1165 1561/2705/1193 +f 1497/2611/1170 1494/2608/1167 1562/2704/1194 1563/2706/1195 +f 1499/2615/1172 1497/2614/1170 1563/2707/1195 1564/2708/1196 +f 1299/2224/1020 1242/2149/995 1524/2651/1174 1565/2709/1197 +f 1565/2709/1197 1524/2651/1174 1499/2615/1172 1564/2708/1196 +s 1 +f 1546/2674/1176 1535/2710/1198 1528/2711/1199 1527/2712/1200 +f 1535/2710/1198 1480/2590/974 1479/2589/974 1528/2711/1199 +f 1276/2186/998 1546/2674/1176 1527/2712/1200 1248/2229/974 +s 2 +f 1278/2230/1025 1547/2713/1028 1545/2673/1201 1275/2185/1026 +s 8 +f 1508/2634/1202 1510/2636/1203 1556/2714/1204 1555/2715/1205 +f 1510/2636/1203 1511/2637/1206 1557/2716/1207 1556/2714/1204 +f 1511/2637/1206 1512/2638/1208 1558/2717/1209 1557/2716/1207 +f 1512/2638/1208 1513/2639/1210 1559/2718/1211 1558/2717/1209 +f 1513/2639/1210 1515/2641/1212 1560/2719/1213 1559/2718/1211 +f 1515/2641/1212 1517/2643/1214 1561/2720/1215 1560/2719/1213 +f 1517/2643/1214 1519/2645/1216 1562/2721/1217 1561/2720/1215 +f 1519/2645/1216 1520/2646/1218 1563/2722/1219 1562/2721/1217 +f 1520/2646/1218 1521/2647/1220 1564/2723/1221 1563/2722/1219 +f 1521/2724/1220 1532/2725/1222 1565/2726/1223 1564/2727/1221 +f 1532/2660/1222 1259/2168/1052 1299/2247/1051 1565/2728/1223 +s 16 +f 1551/2729/1224 1552/2730/1225 1522/2648/1226 1540/2668/1227 +f 1550/2731/1228 1551/2732/1224 1540/2733/1227 1539/2734/1229 +f 1552/2730/1225 1553/2735/1230 1541/2669/1231 1522/2648/1226 +f 1553/2735/1230 1554/2736/1232 1542/2670/1233 1541/2669/1231 +f 1554/2692/1232 1545/2694/1234 1547/2737/1235 1542/2738/1233 +s 8 +f 1548/2676/1236 1508/2634/1202 1555/2715/1205 1549/2739/1237 +s 16 +f 1549/2677/1238 1550/2680/1228 1539/2740/1229 1548/2741/1239 +s 1 +f 1566/2742/795 1567/2743/795 1568/2744/795 1569/2745/795 +f 1570/2746/796 1571/2747/796 1572/2748/796 1573/2749/796 +s 2 +f 1571/2747/797 1574/2750/798 1575/2751/799 1572/2748/797 +f 1576/2752/800 1566/2742/801 1569/2745/801 1577/2753/802 +f 1578/2754/803 1568/2755/804 1579/2756/805 1580/2757/806 +f 1581/2758/807 1578/2754/803 1580/2757/806 1582/2759/808 +f 1570/2760/812 1573/2761/810 1583/2762/811 1584/2763/812 +f 1567/2764/814 1585/2765/813 1579/2756/805 1568/2755/804 +f 1581/2758/807 1582/2759/808 1583/2762/811 1573/2761/810 +s 1 +f 1583/2766/815 1586/2767/815 1587/2768/815 1584/2769/815 +s 4 +f 1582/2770/816 1588/2771/817 1586/2772/818 1583/2773/819 +s 1 +f 1580/2774/1180 1589/2775/1240 1588/2771/1240 1582/2770/1180 +s 4 +f 1580/2774/822 1579/2776/823 1590/2777/824 1589/2775/825 +s 1 +f 1579/2778/826 1585/2779/826 1591/2780/826 1590/2781/826 +s 4 +f 1568/2744/1241 1592/2782/1241 1593/2783/828 1569/2745/829 +s 2 +f 1578/2754/803 1594/2784/1242 1592/2785/831 1568/2755/804 +f 1581/2758/807 1595/2786/832 1594/2784/1242 1578/2754/803 +f 1573/2761/810 1596/2787/833 1595/2786/832 1581/2758/807 +s 4 +f 1572/2748/834 1597/2788/835 1596/2789/1243 1573/2749/1243 +f 1575/2751/837 1598/2790/838 1597/2788/835 1572/2748/834 +f 1569/2745/829 1593/2783/828 1599/2791/839 1577/2753/840 +s 1 +f 1600/2792/841 1601/2793/841 1602/2794/842 1603/2795/842 +f 1603/2795/842 1602/2794/842 1604/2796/396 1605/2797/396 +f 1606/2798/844 1607/2799/845 1587/2768/815 1586/2767/815 +s 4 +f 1608/2800/846 1606/2801/847 1586/2772/818 1588/2771/817 +s 1 +f 1609/2802/1130 1608/2800/1130 1588/2771/1240 1589/2775/1240 +s 4 +f 1610/2803/849 1609/2802/850 1589/2775/825 1590/2777/824 +s 1 +f 1611/2804/851 1610/2805/852 1590/2781/826 1591/2780/826 +f 1612/2806/853 1613/2807/854 1614/2808/855 1615/2809/856 +s 4 +f 1616/2810/857 1612/2811/858 1615/2812/859 1617/2813/860 +s 1 +f 1618/2814/861 1616/2810/861 1617/2813/1133 1619/2815/862 +s 4 +f 1620/2816/863 1618/2814/864 1619/2815/865 1621/2817/866 +s 1 +f 1622/2818/867 1620/2819/868 1621/2820/869 1623/2821/870 +f 1606/2798/844 1615/2809/856 1614/2808/855 1607/2799/845 +s 4 +f 1608/2800/846 1617/2813/860 1615/2812/859 1606/2801/847 +s 1 +f 1609/2802/1130 1619/2815/862 1617/2813/1133 1608/2800/1130 +s 4 +f 1610/2803/849 1621/2817/866 1619/2815/865 1609/2802/850 +s 1 +f 1611/2804/851 1623/2821/870 1621/2820/869 1610/2805/852 +f 1566/2742/795 1624/2822/795 1625/2823/795 1567/2743/795 +f 1570/2746/796 1626/2824/796 1627/2825/796 1571/2747/796 +s 2 +f 1571/2747/797 1627/2825/797 1628/2826/1244 1574/2750/798 +f 1576/2752/800 1629/2827/1245 1624/2822/801 1566/2742/801 +f 1630/2828/873 1631/2829/874 1632/2830/875 1625/2831/876 +f 1633/2832/877 1634/2833/878 1631/2829/874 1630/2828/873 +f 1570/2760/812 1584/2763/812 1635/2834/879 1626/2835/880 +f 1567/2764/814 1625/2831/876 1632/2830/875 1585/2765/813 +f 1633/2832/877 1626/2835/880 1635/2834/879 1634/2833/878 +s 4 +f 1635/2836/881 1584/2769/881 1587/2768/881 1636/2837/881 +s 1 +f 1634/2838/882 1635/2839/883 1636/2840/884 1637/2841/885 +s 4 +f 1631/2842/886 1634/2838/886 1637/2841/887 1638/2843/887 +s 1 +f 1631/2842/888 1638/2843/889 1639/2844/890 1632/2845/891 +s 4 +f 1632/2846/892 1639/2847/892 1591/2780/892 1585/2779/892 +f 1625/2823/1246 1624/2822/894 1640/2848/895 1641/2849/1246 +s 2 +f 1630/2828/873 1625/2831/876 1641/2850/896 1642/2851/1247 +f 1633/2832/877 1630/2828/873 1642/2851/1247 1643/2852/898 +f 1626/2835/880 1633/2832/877 1643/2852/898 1644/2853/899 +s 4 +f 1627/2825/900 1626/2824/1248 1644/2854/1248 1645/2855/902 +f 1628/2826/903 1627/2825/900 1645/2855/902 1646/2856/904 +f 1624/2822/894 1629/2827/905 1647/2857/906 1640/2848/895 +s 1 +f 1648/2858/907 1649/2859/908 1650/2860/908 1651/2861/907 +f 1649/2859/908 1605/2797/396 1604/2796/396 1650/2860/908 +s 4 +f 1652/2862/909 1636/2837/881 1587/2768/881 1607/2799/910 +s 1 +f 1653/2863/911 1637/2841/885 1636/2840/884 1652/2864/912 +s 4 +f 1654/2865/913 1638/2843/887 1637/2841/887 1653/2863/913 +s 1 +f 1655/2866/914 1639/2844/890 1638/2843/889 1654/2865/915 +s 4 +f 1611/2804/916 1591/2780/892 1639/2847/892 1655/2867/917 +f 1656/2868/918 1657/2869/919 1614/2808/920 1613/2807/921 +s 1 +f 1658/2870/922 1659/2871/923 1657/2872/924 1656/2873/925 +s 4 +f 1660/2874/926 1661/2875/927 1659/2871/927 1658/2870/926 +s 1 +f 1662/2876/928 1663/2877/929 1661/2875/930 1660/2874/931 +s 4 +f 1622/2818/932 1623/2821/933 1663/2878/934 1662/2879/935 +f 1652/2862/909 1607/2799/910 1614/2808/920 1657/2869/919 +s 1 +f 1653/2863/911 1652/2864/912 1657/2872/924 1659/2871/923 +s 4 +f 1654/2865/913 1653/2863/913 1659/2871/927 1661/2875/927 +s 1 +f 1655/2866/914 1654/2865/915 1661/2875/930 1663/2877/929 +s 4 +f 1611/2804/916 1655/2867/917 1663/2878/934 1623/2821/933 +s 1 +f 1593/2880/187 1592/2881/187 1664/2882/936 +f 1592/2881/187 1594/2883/187 1664/2882/936 +f 1594/2883/187 1595/2884/936 1664/2882/936 +f 1595/2884/936 1596/2885/936 1664/2882/936 +f 1596/2885/936 1597/2886/186 1664/2882/936 +f 1597/2886/186 1598/2887/936 1664/2882/936 +f 1598/2887/936 1599/2888/187 1664/2882/936 +f 1599/2888/187 1593/2880/187 1664/2882/936 +f 1641/2889/189 1640/2890/189 1665/2891/189 +f 1640/2890/189 1647/2892/189 1665/2891/189 +f 1647/2892/189 1646/2893/189 1665/2891/189 +f 1646/2893/189 1645/2894/189 1665/2891/189 +f 1645/2894/189 1644/2895/189 1665/2891/189 +f 1644/2895/189 1643/2896/189 1665/2891/189 +f 1643/2896/189 1642/2897/189 1665/2891/189 +f 1642/2897/189 1641/2889/189 1665/2891/189 +f 1666/2898/974 1667/2899/974 1668/2900/974 +f 1667/2899/974 1669/2901/974 1668/2900/974 +f 1669/2901/974 1670/2902/974 1668/2900/974 +f 1670/2902/974 1671/2903/974 1668/2900/974 +f 1671/2903/974 1672/2904/974 1668/2900/974 +f 1672/2904/974 1673/2905/974 1668/2900/974 +f 1673/2905/974 1674/2906/974 1668/2900/974 +f 1674/2906/974 1675/2907/974 1668/2900/974 +f 1675/2907/974 1676/2908/974 1668/2900/974 +f 1676/2908/974 1666/2898/974 1668/2900/974 +s 2 +f 1666/2909/1249 1613/2910/1249 1612/2911/1250 1667/2912/1250 +f 1667/2912/1250 1612/2911/1250 1616/2913/1251 1669/2914/947 +f 1669/2915/947 1616/2810/1251 1618/2814/948 1670/2916/1252 +f 1670/2917/1252 1618/2918/948 1620/2919/1253 1671/2920/1253 +f 1671/2921/1253 1620/2819/1253 1622/2818/1254 1672/2922/1254 +f 1676/2923/1255 1656/2924/1255 1613/2910/1249 1666/2909/1249 +f 1675/2925/952 1658/2926/952 1656/2927/1255 1676/2928/1255 +f 1674/2929/953 1660/2874/1256 1658/2870/952 1675/2930/952 +f 1673/2931/1257 1662/2932/1257 1660/2933/1256 1674/2934/953 +f 1672/2935/1254 1622/2936/1254 1662/2932/1257 1673/2931/1257 +f 1575/2751/799 1574/2750/798 1604/2937/955 1602/2938/1258 +f 1574/2750/798 1628/2826/1244 1650/2939/1259 1604/2937/955 +f 1628/2940/1244 1646/2941/958 1651/2861/959 1650/2860/1259 +s 8 +f 1646/2893/960 1647/2892/960 1648/2942/960 1651/2943/960 +s 2 +f 1647/2944/961 1629/2945/1245 1649/2859/1260 1648/2858/963 +f 1629/2827/1245 1576/2752/800 1605/2946/964 1649/2947/1260 +f 1576/2752/800 1577/2753/802 1603/2948/965 1605/2946/964 +f 1577/2949/802 1599/2950/966 1600/2792/1261 1603/2795/965 +s 8 +f 1599/2888/968 1598/2887/969 1601/2951/968 1600/2952/968 +s 2 +f 1598/2953/970 1575/2954/799 1602/2794/1258 1601/2793/971 +s 1 +f 1677/2955/795 1678/2956/795 1679/2957/795 1680/2958/795 +f 1681/2959/796 1682/2960/796 1683/2961/796 1684/2962/796 +s 2 +f 1682/2960/797 1685/2963/798 1686/2964/799 1683/2961/797 +f 1687/2965/800 1677/2955/801 1680/2958/801 1688/2966/802 +f 1689/2967/803 1679/2968/804 1690/2969/805 1691/2970/806 +f 1692/2971/807 1689/2967/803 1691/2970/806 1693/2972/808 +f 1681/2973/812 1684/2974/810 1694/2975/811 1695/2976/812 +f 1678/2977/814 1696/2978/814 1690/2969/805 1679/2968/804 +f 1692/2971/807 1693/2972/808 1694/2975/811 1684/2974/810 +s 1 +f 1694/2979/815 1697/2980/815 1698/2981/815 1695/2982/815 +s 4 +f 1693/2983/816 1699/2984/817 1697/2985/818 1694/2986/819 +s 1 +f 1691/2987/820 1700/2988/821 1699/2984/821 1693/2983/820 +s 4 +f 1691/2987/822 1690/2989/823 1701/2990/824 1700/2988/825 +s 1 +f 1690/2991/826 1696/2992/826 1702/2993/826 1701/2994/826 +s 4 +f 1679/2957/1262 1703/2995/1262 1704/2996/828 1680/2958/829 +s 2 +f 1689/2967/803 1705/2997/1242 1703/2998/831 1679/2968/804 +f 1692/2971/807 1706/2999/832 1705/2997/1242 1689/2967/803 +f 1684/2974/810 1707/3000/833 1706/2999/832 1692/2971/807 +s 4 +f 1683/2961/834 1708/3001/835 1707/3002/1263 1684/2962/1263 +f 1686/2964/837 1709/3003/838 1708/3001/835 1683/2961/834 +f 1680/2958/829 1704/2996/828 1710/3004/839 1688/2966/840 +s 1 +f 1711/3005/1129 1712/3006/1129 1713/3007/843 1714/3008/843 +f 1714/3008/843 1713/3007/843 1715/3009/604 1716/3010/604 +f 1717/3011/844 1718/3012/845 1698/2981/815 1697/2980/815 +s 4 +f 1719/3013/846 1717/3014/847 1697/2985/818 1699/2984/817 +s 1 +f 1720/3015/1131 1719/3013/1131 1699/2984/821 1700/2988/821 +s 4 +f 1721/3016/849 1720/3015/850 1700/2988/825 1701/2990/824 +s 1 +f 1722/3017/851 1721/3018/852 1701/2994/826 1702/2993/826 +f 1723/3019/853 1724/3020/854 1725/3021/855 1726/3022/856 +s 4 +f 1727/3023/857 1723/3024/858 1726/3025/859 1728/3026/860 +s 1 +f 1729/3027/861 1727/3023/861 1728/3026/862 1730/3028/862 +s 4 +f 1731/3029/863 1729/3027/864 1730/3028/865 1732/3030/866 +s 1 +f 1733/3031/867 1731/3032/868 1732/3033/869 1734/3034/870 +f 1717/3011/844 1726/3022/856 1725/3021/855 1718/3012/845 +s 4 +f 1719/3013/846 1728/3026/860 1726/3025/859 1717/3014/847 +s 1 +f 1720/3015/1131 1730/3028/862 1728/3026/862 1719/3013/1131 +s 4 +f 1721/3016/849 1732/3030/866 1730/3028/865 1720/3015/850 +s 1 +f 1722/3017/851 1734/3034/870 1732/3033/869 1721/3018/852 +f 1677/2955/795 1735/3035/795 1736/3036/795 1678/2956/795 +f 1681/2959/796 1737/3037/796 1738/3038/796 1682/2960/796 +s 2 +f 1682/2960/797 1738/3038/797 1739/3039/1244 1685/2963/798 +f 1687/2965/800 1740/3040/1245 1735/3035/801 1677/2955/801 +f 1741/3041/873 1742/3042/874 1743/3043/875 1736/3044/876 +f 1744/3045/877 1745/3046/878 1742/3042/874 1741/3041/873 +f 1681/2973/812 1695/2976/812 1746/3047/879 1737/3048/880 +f 1678/2977/814 1736/3044/876 1743/3043/875 1696/2978/814 +f 1744/3045/877 1737/3048/880 1746/3047/879 1745/3046/878 +s 4 +f 1746/3049/881 1695/2982/881 1698/2981/881 1747/3050/881 +s 1 +f 1745/3051/882 1746/3052/883 1747/3053/884 1748/3054/885 +s 4 +f 1742/3055/886 1745/3051/886 1748/3054/887 1749/3056/887 +s 1 +f 1742/3055/888 1749/3056/889 1750/3057/890 1743/3058/891 +s 4 +f 1743/3059/892 1750/3060/892 1702/2993/892 1696/2992/892 +f 1736/3036/1246 1735/3035/894 1751/3061/895 1752/3062/1246 +s 2 +f 1741/3041/873 1736/3044/876 1752/3063/896 1753/3064/1247 +f 1744/3045/877 1741/3041/873 1753/3064/1247 1754/3065/898 +f 1737/3048/880 1744/3045/877 1754/3065/898 1755/3066/899 +s 4 +f 1738/3038/900 1737/3037/1264 1755/3067/1264 1756/3068/902 +f 1739/3039/903 1738/3038/900 1756/3068/902 1757/3069/904 +f 1735/3035/894 1740/3040/905 1758/3070/906 1751/3061/895 +s 1 +f 1759/3071/907 1760/3072/908 1761/3073/908 1762/3074/907 +f 1760/3072/908 1716/3010/604 1715/3009/604 1761/3073/908 +s 4 +f 1763/3075/909 1747/3050/881 1698/2981/881 1718/3012/910 +s 1 +f 1764/3076/911 1748/3054/885 1747/3053/884 1763/3077/912 +s 4 +f 1765/3078/913 1749/3056/887 1748/3054/887 1764/3076/913 +s 1 +f 1766/3079/914 1750/3057/890 1749/3056/889 1765/3078/915 +s 4 +f 1722/3017/916 1702/2993/892 1750/3060/892 1766/3080/917 +f 1767/3081/918 1768/3082/919 1725/3021/920 1724/3020/921 +s 1 +f 1769/3083/922 1770/3084/923 1768/3085/924 1767/3086/925 +s 4 +f 1771/3087/926 1772/3088/927 1770/3084/927 1769/3083/926 +s 1 +f 1773/3089/928 1774/3090/929 1772/3088/930 1771/3087/931 +s 4 +f 1733/3031/932 1734/3034/933 1774/3091/934 1773/3092/935 +f 1763/3075/909 1718/3012/910 1725/3021/920 1768/3082/919 +s 1 +f 1764/3076/911 1763/3077/912 1768/3085/924 1770/3084/923 +s 4 +f 1765/3078/913 1764/3076/913 1770/3084/927 1772/3088/927 +s 1 +f 1766/3079/914 1765/3078/915 1772/3088/930 1774/3090/929 +s 4 +f 1722/3017/916 1766/3080/917 1774/3091/934 1734/3034/933 +s 1 +f 1704/3093/187 1703/3094/187 1775/3095/187 +f 1703/3094/187 1705/3096/187 1775/3095/187 +f 1705/3096/187 1706/3097/187 1775/3095/187 +f 1706/3097/187 1707/3098/187 1775/3095/187 +f 1707/3098/187 1708/3099/187 1775/3095/187 +f 1708/3099/187 1709/3100/187 1775/3095/187 +f 1709/3100/187 1710/3101/187 1775/3095/187 +f 1710/3101/187 1704/3093/187 1775/3095/187 +f 1752/3102/189 1751/3103/189 1776/3104/189 +f 1751/3103/189 1758/3105/189 1776/3104/189 +f 1758/3105/189 1757/3106/190 1776/3104/189 +f 1757/3106/190 1756/3107/190 1776/3104/189 +f 1756/3107/190 1755/3108/189 1776/3104/189 +f 1755/3108/189 1754/3109/189 1776/3104/189 +f 1754/3109/189 1753/3110/189 1776/3104/189 +f 1753/3110/189 1752/3102/189 1776/3104/189 +f 1777/3111/974 1778/3112/974 1779/3113/974 +f 1778/3112/974 1780/3114/974 1779/3113/974 +f 1780/3114/974 1781/3115/974 1779/3113/974 +f 1781/3115/974 1782/3116/974 1779/3113/974 +f 1782/3116/974 1783/3117/974 1779/3113/974 +f 1783/3117/974 1784/3118/974 1779/3113/974 +f 1784/3118/974 1785/3119/974 1779/3113/974 +f 1785/3119/974 1786/3120/974 1779/3113/974 +f 1786/3120/974 1787/3121/974 1779/3113/974 +f 1787/3121/974 1777/3111/974 1779/3113/974 +s 2 +f 1777/3122/1249 1724/3123/1249 1723/3124/1250 1778/3125/1250 +f 1778/3125/1250 1723/3124/1250 1727/3126/1251 1780/3127/947 +f 1780/3128/947 1727/3023/1251 1729/3027/948 1781/3129/1252 +f 1781/3130/1252 1729/3131/948 1731/3132/1253 1782/3133/1253 +f 1782/3133/1253 1731/3132/1253 1733/3134/1254 1783/3135/1254 +f 1787/3136/1255 1767/3137/1255 1724/3123/1249 1777/3122/1249 +f 1786/3138/952 1769/3139/952 1767/3140/1255 1787/3141/1255 +f 1785/3142/953 1771/3087/953 1769/3083/952 1786/3143/952 +f 1784/3144/1257 1773/3145/1257 1771/3146/953 1785/3147/953 +f 1783/3148/1254 1733/3149/1254 1773/3145/1257 1784/3144/1257 +f 1686/2964/799 1685/2963/798 1715/3150/955 1713/3151/1258 +f 1685/2963/798 1739/3039/1244 1761/3152/1259 1715/3150/955 +f 1739/3153/1244 1757/3154/958 1762/3074/959 1761/3073/1259 +s 8 +f 1757/3106/960 1758/3105/960 1759/3155/960 1762/3156/960 +s 2 +f 1758/3157/961 1740/3158/1245 1760/3072/1260 1759/3071/963 +f 1740/3040/1245 1687/2965/800 1716/3159/964 1760/3160/1260 +f 1687/2965/800 1688/2966/802 1714/3161/965 1716/3159/964 +f 1688/3162/802 1710/3163/966 1711/3005/1261 1714/3008/965 +s 8 +f 1710/3101/969 1709/3100/969 1712/3164/969 1711/3165/969 +s 2 +f 1709/3166/970 1686/3167/799 1713/3007/1258 1712/3006/971 +s 1 +f 1788/3168/428 1789/3169/428 1790/3170/428 1791/3171/428 +f 1792/3172/1265 1793/3173/1266 1794/3174/1267 1795/3175/1268 +s 2 +f 1796/3176/974 1797/3177/974 1798/3178/974 1799/3179/974 +f 1800/3180/972 1801/3181/975 1802/3182/975 1803/3183/973 +s 1 +f 1801/3184/976 1804/3185/1269 1805/3186/1270 1802/3187/976 +f 1804/3185/1269 1806/3188/1271 1807/3189/1272 1805/3186/1270 +f 1806/3188/1271 1808/3190/1273 1809/3191/1274 1807/3189/1272 +f 1810/3192/1275 1811/3193/1276 1809/3191/1274 1808/3190/1273 +f 1810/3192/1275 1812/3194/1277 1813/3195/1278 1811/3193/1276 +f 1812/3196/1277 1814/3197/1279 1815/3198/1280 1813/3199/1278 +f 1816/3200/1281 1817/3201/1282 1815/3198/1280 1814/3197/1279 +f 1818/3202/1283 1819/3203/1284 1817/3204/1282 1816/3205/1281 +s 4 +f 1820/3206/455 1821/3207/455 1822/3208/455 1823/3209/455 +f 1793/3210/455 1821/3207/455 1824/3211/455 1825/3212/455 +f 1818/3213/455 1816/3214/455 1826/3215/455 +f 1816/3214/455 1814/3216/455 1826/3215/455 +f 1814/3216/455 1812/3217/455 1827/3218/455 1826/3215/455 +f 1812/3217/455 1810/3219/455 1828/3220/455 1827/3218/455 +f 1810/3219/455 1808/3221/455 1829/3222/455 1828/3220/455 +f 1808/3221/455 1806/3223/455 1830/3224/455 1829/3222/455 +f 1806/3223/455 1804/3225/455 1831/3226/455 1830/3224/455 +f 1804/3225/455 1801/3227/455 1831/3226/455 +f 1801/3227/455 1800/3228/455 1831/3226/455 +f 1832/3229/455 1796/3230/455 1833/3231/455 1834/3232/455 +f 1833/3231/455 1835/3233/455 1836/3234/455 1837/3235/455 +f 1837/3235/455 1836/3234/455 1838/3236/455 1839/3237/455 +f 1838/3236/455 1840/3238/455 1841/3239/455 1839/3237/455 +f 1840/3238/455 1820/3206/455 1823/3209/455 1841/3239/455 +s 1 +f 1842/3240/429 1843/3241/428 1844/3242/428 1845/3243/429 +f 1846/3244/430 1847/3245/430 1848/3246/430 +f 1847/3245/430 1849/3247/430 1848/3246/430 +f 1849/3247/430 1850/3248/456 1851/3249/430 1848/3246/430 +f 1850/3248/456 1852/3250/428 1853/3251/428 1851/3249/430 +f 1852/3250/428 1854/3252/428 1855/3253/428 1853/3251/428 +f 1854/3252/428 1856/3254/430 1857/3255/430 1855/3253/428 +f 1856/3254/430 1858/3256/429 1859/3257/429 1857/3255/430 +f 1858/3256/429 1860/3258/429 1859/3257/429 +f 1860/3258/429 1861/3259/429 1859/3257/429 +f 1862/3260/430 1788/3168/428 1791/3171/428 1863/3261/456 +f 1864/3262/456 1865/3263/456 1866/3264/428 1867/3265/428 +f 1790/3170/428 1789/3169/428 1866/3264/428 1868/3266/428 +f 1845/3243/429 1844/3242/428 1865/3263/456 1864/3262/456 +f 1851/3249/430 1853/3251/428 1869/3267/428 1870/3268/428 +f 1870/3268/428 1869/3267/428 1789/3169/428 1788/3168/428 +f 1871/3269/429 1872/3270/429 1791/3171/428 1790/3170/428 +f 1825/3271/1285 1873/3272/994 1874/3273/1286 1875/3274/1287 +f 1793/3173/1266 1825/3271/1285 1875/3274/1287 1794/3174/1267 +f 1876/3275/1288 1819/3203/1284 1795/3175/1268 1877/3276/1289 +s 2 +f 1878/3277/974 1800/3180/972 1803/3183/973 1879/3278/974 +f 1834/3279/974 1880/3280/974 1881/3281/974 1832/3282/974 +s 4 +f 1882/3283/455 1883/3284/455 1824/3211/455 1884/3285/455 +f 1884/3285/455 1824/3211/455 1821/3207/455 1820/3206/455 +f 1826/3215/455 1827/3218/455 1823/3209/455 1822/3208/455 +f 1818/3213/455 1826/3215/455 1822/3208/455 1792/3286/455 +f 1792/3286/455 1822/3208/455 1821/3207/455 1793/3210/455 +f 1883/3284/455 1873/3287/455 1825/3212/455 1824/3211/455 +f 1885/3288/455 1886/3289/455 1887/3290/455 1888/3291/455 +f 1799/3292/455 1888/3291/455 1835/3233/455 1796/3230/455 +f 1831/3226/455 1878/3293/455 1834/3232/455 1833/3231/455 +f 1887/3290/455 1889/3294/455 1890/3295/455 1891/3296/455 +f 1835/3233/455 1887/3290/455 1891/3296/455 1836/3234/455 +f 1837/3235/455 1830/3224/455 1831/3226/455 1833/3231/455 +f 1891/3296/455 1890/3295/455 1892/3297/455 1893/3298/455 +f 1836/3234/455 1891/3296/455 1893/3298/455 1838/3236/455 +f 1839/3237/455 1829/3222/455 1830/3224/455 1837/3235/455 +f 1892/3297/455 1894/3299/455 1895/3300/455 1893/3298/455 +f 1893/3298/455 1895/3300/455 1840/3238/455 1838/3236/455 +f 1828/3220/455 1829/3222/455 1839/3237/455 1841/3239/455 +f 1894/3299/455 1882/3283/455 1884/3285/455 1895/3300/455 +f 1895/3300/455 1884/3285/455 1820/3206/455 1840/3238/455 +f 1827/3218/455 1828/3220/455 1841/3239/455 1823/3209/455 +s 1 +f 1896/3301/428 1897/3302/428 1898/3303/428 1899/3304/428 +f 1843/3241/428 1896/3301/428 1899/3304/428 1844/3242/428 +f 1845/3243/429 1859/3257/429 1861/3259/429 1842/3240/429 +f 1880/3305/428 1900/3306/428 1901/3307/428 1902/3308/428 +f 1903/3309/428 1880/3305/428 1902/3308/428 1904/3310/428 +f 1905/3311/428 1906/3312/428 1907/3313/456 1908/3314/456 +f 1848/3246/430 1851/3249/430 1870/3268/428 1909/3315/428 +f 1909/3315/428 1870/3268/428 1788/3168/428 1862/3260/430 +f 1872/3270/429 1910/3316/430 1863/3261/456 1791/3171/428 +f 1911/3317/456 1912/3318/428 1913/3319/429 1868/3266/428 +f 1865/3263/456 1911/3317/456 1868/3266/428 1866/3264/428 +f 1867/3265/428 1855/3253/428 1857/3255/430 1864/3262/456 +f 1869/3267/428 1853/3251/428 1855/3253/428 1867/3265/428 +f 1789/3169/428 1869/3267/428 1867/3265/428 1866/3264/428 +f 1868/3266/428 1913/3319/429 1871/3269/429 1790/3170/428 +f 1899/3304/428 1898/3303/428 1912/3318/428 1911/3317/456 +f 1844/3242/428 1899/3304/428 1911/3317/456 1865/3263/456 +f 1864/3262/456 1857/3255/430 1859/3257/429 1845/3243/429 +f 1914/3320/430 1848/3246/430 1909/3315/428 +f 1915/3321/428 1862/3260/430 1916/3322/456 +f 1917/3323/430 1862/3260/430 1918/3324/428 +f 1919/3325/456 1910/3316/430 1920/3326/428 +f 1921/3327/456 1908/3314/456 1907/3313/456 1798/3328/456 +s 2 +f 1922/3329/974 1797/3177/974 1881/3281/974 1923/3330/974 +f 1924/3331/1290 1925/3332/1291 1906/3333/1292 1926/3334/1293 +s 1 +f 1919/3325/456 1863/3261/456 1910/3316/430 +f 1927/3335/428 1928/3336/428 1920/3326/428 1910/3316/430 +f 1917/3323/430 1929/3337/456 1930/3338/456 1862/3260/430 +f 1862/3260/430 1863/3261/456 1918/3324/428 +f 1915/3321/428 1909/3315/428 1862/3260/430 +f 1930/3338/456 1931/3339/456 1916/3322/456 1862/3260/430 +f 1932/3340/456 1846/3244/430 1848/3246/430 1933/3341/456 +f 1914/3320/430 1933/3341/456 1848/3246/430 +s 4 +f 1934/3342/1294 1935/3343/1295 1900/3344/1296 1879/3345/1297 +s 2 +f 1935/3343/748 1936/3346/748 1901/3347/748 1900/3344/748 +s 4 +f 1936/3348/1298 1937/3349/1298 1902/3350/1298 1901/3351/1298 +s 2 +f 1937/3349/1299 1938/3352/1299 1904/3353/1299 1902/3350/1299 +s 4 +f 1938/3354/736 1939/3355/736 1903/3356/736 1904/3357/736 +s 8 +f 1939/3355/1300 1923/3358/1301 1881/3359/1302 1903/3356/1303 +s 4 +f 1940/3360/1001 1941/3361/1002 1921/3362/1003 1798/3363/1004 +s 2 +f 1941/3361/749 1942/3364/749 1943/3365/749 1921/3362/749 +s 4 +f 1942/3366/1005 1944/3367/1005 1908/3368/1005 1943/3369/1005 +s 2 +f 1944/3367/1006 1945/3370/1006 1946/3371/1006 1908/3368/1006 +s 4 +f 1945/3372/736 1947/3373/736 1905/3374/736 1946/3375/736 +s 8 +f 1947/3373/1007 1926/3376/1008 1906/3377/1009 1905/3374/1010 +s 1 +f 1948/3378/1304 1877/3276/1289 1795/3175/1268 1794/3174/1267 +s 2 +f 1797/3177/974 1922/3329/974 1940/3379/974 1798/3178/974 +f 1949/3380/975 1950/3381/1305 1803/3183/973 1802/3182/975 +s 1 +f 1951/3382/1306 1949/3383/976 1802/3187/976 1805/3186/1270 +f 1952/3384/1307 1951/3382/1306 1805/3186/1270 1807/3189/1272 +f 1953/3385/1308 1952/3384/1307 1807/3189/1272 1809/3191/1274 +f 1811/3193/1276 1954/3386/1309 1953/3385/1308 1809/3191/1274 +f 1955/3387/1310 1954/3386/1309 1811/3193/1276 1813/3195/1278 +f 1956/3388/1311 1955/3389/1310 1813/3199/1278 1815/3198/1280 +f 1817/3201/1282 1957/3390/1312 1956/3388/1311 1815/3198/1280 +f 1819/3203/1284 1876/3275/1288 1957/3391/1312 1817/3204/1282 +f 1958/3392/1313 1959/3393/1314 1875/3274/1287 1874/3273/1286 +f 1959/3393/1314 1948/3378/1304 1794/3174/1267 1875/3274/1287 +f 1819/3203/1284 1818/3202/1283 1792/3172/1265 1795/3175/1268 +s 2 +f 1950/3381/1305 1934/3394/974 1879/3278/974 1803/3183/973 +f 1906/3333/1292 1885/3395/1315 1888/3396/1023 1907/3397/1024 +f 1834/3279/974 1878/3277/974 1879/3278/974 1880/3280/974 +f 1796/3176/974 1832/3282/974 1881/3281/974 1797/3177/974 +f 1907/3397/1024 1888/3396/1023 1799/3179/974 1798/3178/974 +f 1925/3332/1291 1886/3398/974 1885/3395/1315 1906/3333/1292 +s 8 +f 1861/3259/1316 1876/3399/1317 1877/3400/1318 1842/3240/1319 +s 4 +f 1927/3401/1025 1924/3331/1026 1926/3334/1320 1928/3402/1028 +s 8 +f 1846/3244/1321 1950/3403/1322 1949/3404/1031 1847/3245/1032 +f 1847/3245/1032 1949/3404/1031 1951/3405/1323 1849/3247/1324 +f 1849/3247/1324 1951/3405/1323 1952/3406/1325 1850/3248/1326 +f 1850/3248/1326 1952/3406/1325 1953/3407/1327 1852/3250/1328 +f 1852/3250/1328 1953/3407/1327 1954/3408/1329 1854/3252/1330 +f 1854/3252/1330 1954/3408/1329 1955/3409/1331 1856/3254/1332 +f 1856/3254/1332 1955/3409/1331 1956/3410/1333 1858/3256/1334 +f 1858/3256/1334 1956/3410/1333 1957/3411/1335 1860/3258/1336 +f 1860/3412/1336 1957/3413/1335 1876/3414/1317 1861/3415/1316 +f 1842/3240/1319 1877/3400/1318 1948/3416/1337 1843/3241/1338 +f 1843/3241/1338 1948/3416/1337 1959/3417/1339 1896/3301/1340 +f 1896/3301/1340 1959/3417/1339 1958/3418/1341 1897/3302/1052 +s 16 +f 1930/3338/1026 1922/3419/1026 1923/3420/1026 1931/3339/1342 +s 8 +f 1932/3340/1343 1934/3421/1344 1950/3403/1322 1846/3244/1321 +s 32 +f 1934/3342/1345 1932/3422/1346 1933/3423/1347 1935/3343/1348 +f 1935/3424/1348 1933/3425/1347 1914/3426/1349 1936/3427/1350 +f 1936/3427/1350 1914/3426/1349 1909/3428/1351 1937/3429/1352 +f 1937/3430/1352 1909/3315/1351 1915/3321/1353 1938/3431/1354 +f 1938/3431/1354 1915/3321/1353 1916/3322/1355 1939/3432/1356 +f 1939/3355/1356 1916/3433/1355 1931/3434/1357 1923/3358/1358 +f 1942/3435/1359 1918/3324/1054 1863/3261/1055 1944/3436/1056 +f 1941/3437/1057 1917/3438/1058 1918/3439/1054 1942/3440/1359 +f 1944/3436/1056 1863/3261/1055 1919/3325/1059 1945/3441/1360 +f 1945/3441/1360 1919/3325/1059 1920/3326/1061 1947/3442/1361 +f 1947/3373/1361 1920/3443/1061 1928/3444/1063 1926/3376/1064 +s 16 +f 1929/3337/1362 1940/3445/1362 1922/3419/1026 1930/3338/1026 +s 32 +f 1940/3360/1067 1929/3446/1068 1917/3447/1058 1941/3361/1057 +s 1 +f 1960/3448/795 1961/3449/795 1962/3450/795 1963/3451/795 +f 1964/3452/796 1965/3453/796 1966/3454/796 1967/3455/796 +s 2 +f 1967/3455/797 1966/3454/797 1968/3456/1120 1969/3457/1121 +f 1970/3458/1122 1971/3459/1123 1961/3449/801 1960/3448/801 +f 1972/3460/873 1973/3461/874 1974/3462/875 1962/3463/876 +f 1975/3464/877 1976/3465/878 1973/3461/874 1972/3460/873 +f 1964/3466/809 1977/3467/812 1978/3468/879 1965/3469/880 +f 1963/3470/813 1962/3463/876 1974/3462/875 1979/3471/813 +f 1975/3464/877 1965/3469/880 1978/3468/879 1976/3465/878 +s 1 +f 1978/3472/881 1977/3473/881 1980/3474/881 1981/3475/881 +s 4 +f 1976/3476/882 1978/3477/883 1981/3478/884 1982/3479/885 +s 1 +f 1973/3480/886 1976/3476/886 1982/3479/887 1983/3481/887 +s 4 +f 1973/3480/888 1983/3481/889 1984/3482/890 1974/3483/891 +s 1 +f 1974/3484/892 1984/3485/892 1985/3486/892 1979/3487/892 +s 4 +f 1962/3450/1363 1961/3449/894 1986/3488/895 1987/3489/1363 +s 2 +f 1972/3460/873 1962/3463/876 1987/3490/896 1988/3491/1247 +f 1975/3464/877 1972/3460/873 1988/3491/1247 1989/3492/898 +f 1965/3469/880 1975/3464/877 1989/3492/898 1990/3493/899 +s 4 +f 1966/3454/900 1965/3453/1248 1990/3494/1248 1991/3495/902 +f 1968/3456/903 1966/3454/900 1991/3495/902 1992/3496/904 +f 1961/3449/894 1971/3459/905 1993/3497/906 1986/3488/895 +s 1 +f 1994/3498/907 1995/3499/908 1996/3500/908 1997/3501/907 +f 1995/3499/908 1998/3502/396 1999/3503/396 1996/3500/908 +f 2000/3504/909 1981/3475/881 1980/3474/881 2001/3505/910 +s 4 +f 2002/3506/911 1982/3479/885 1981/3478/884 2000/3507/912 +s 1 +f 2003/3508/913 1983/3481/887 1982/3479/887 2002/3506/913 +s 4 +f 2004/3509/914 1984/3482/890 1983/3481/889 2003/3508/915 +s 1 +f 2005/3510/916 1985/3486/892 1984/3485/892 2004/3511/917 +f 2006/3512/918 2007/3513/919 2008/3514/920 2009/3515/921 +s 4 +f 2010/3516/922 2011/3517/923 2007/3518/924 2006/3519/925 +s 1 +f 2012/3520/926 2013/3521/927 2011/3517/927 2010/3516/926 +s 4 +f 2014/3522/928 2015/3523/929 2013/3521/930 2012/3520/931 +s 1 +f 2016/3524/932 2017/3525/933 2015/3526/934 2014/3527/935 +f 2000/3504/909 2001/3505/910 2008/3514/920 2007/3513/919 +s 4 +f 2002/3506/911 2000/3507/912 2007/3518/924 2011/3517/923 +s 1 +f 2003/3508/913 2002/3506/913 2011/3517/927 2013/3521/927 +s 4 +f 2004/3509/914 2003/3508/915 2013/3521/930 2015/3523/929 +s 1 +f 2005/3510/916 2004/3511/917 2015/3526/934 2017/3525/933 +f 1960/3448/795 1963/3451/795 2018/3528/795 2019/3529/795 +f 1964/3452/796 1967/3455/796 2020/3530/796 2021/3531/796 +s 2 +f 1967/3455/797 1969/3457/1121 2022/3532/1364 2020/3530/797 +f 1970/3458/1122 1960/3448/801 2019/3529/801 2023/3533/1365 +f 2024/3534/803 2018/3535/804 2025/3536/805 2026/3537/806 +f 2027/3538/807 2024/3534/803 2026/3537/806 2028/3539/808 +f 1964/3466/809 2021/3540/810 2029/3541/811 1977/3467/812 +f 1963/3470/813 1979/3471/813 2025/3536/805 2018/3535/804 +f 2027/3538/807 2028/3539/808 2029/3541/811 2021/3540/810 +s 4 +f 2029/3542/815 2030/3543/815 1980/3474/815 1977/3473/815 +s 1 +f 2028/3544/816 2031/3545/817 2030/3546/818 2029/3547/819 +s 4 +f 2026/3548/820 2032/3549/821 2031/3545/821 2028/3544/820 +s 1 +f 2026/3548/822 2025/3550/823 2033/3551/824 2032/3549/825 +s 4 +f 2025/3552/826 1979/3487/826 1985/3486/826 2033/3553/826 +f 2018/3528/1262 2034/3554/1262 2035/3555/828 2019/3529/829 +s 2 +f 2024/3534/803 2036/3556/1242 2034/3557/831 2018/3535/804 +f 2027/3538/807 2037/3558/832 2036/3556/1242 2024/3534/803 +f 2021/3540/810 2038/3559/833 2037/3558/832 2027/3538/807 +s 4 +f 2020/3530/834 2039/3560/835 2038/3561/1243 2021/3531/1243 +f 2022/3532/837 2040/3562/838 2039/3560/835 2020/3530/834 +f 2019/3529/829 2035/3555/828 2041/3563/839 2023/3533/840 +s 1 +f 2042/3564/1129 2043/3565/1129 2044/3566/843 2045/3567/843 +f 2045/3567/843 2044/3566/843 1999/3503/396 1998/3502/396 +s 4 +f 2046/3568/844 2001/3505/845 1980/3474/815 2030/3543/815 +s 1 +f 2047/3569/846 2046/3570/847 2030/3546/818 2031/3545/817 +s 4 +f 2048/3571/1131 2047/3569/1131 2031/3545/821 2032/3549/821 +s 1 +f 2049/3572/849 2048/3571/850 2032/3549/825 2033/3551/824 +s 4 +f 2005/3510/851 2049/3573/852 2033/3553/826 1985/3486/826 +f 2050/3574/853 2009/3515/854 2008/3514/855 2051/3575/856 +s 1 +f 2052/3576/857 2050/3577/858 2051/3578/859 2053/3579/860 +s 4 +f 2054/3580/861 2052/3576/861 2053/3579/862 2055/3581/862 +s 1 +f 2056/3582/863 2054/3580/864 2055/3581/865 2057/3583/866 +s 4 +f 2016/3524/867 2056/3584/868 2057/3585/869 2017/3525/870 +f 2046/3568/844 2051/3575/856 2008/3514/855 2001/3505/845 +s 1 +f 2047/3569/846 2053/3579/860 2051/3578/859 2046/3570/847 +s 4 +f 2048/3571/1131 2055/3581/862 2053/3579/862 2047/3569/1131 +s 1 +f 2049/3572/849 2057/3583/866 2055/3581/865 2048/3571/850 +s 4 +f 2005/3510/851 2017/3525/870 2057/3585/869 2049/3573/852 +s 1 +f 1986/3586/395 2058/3587/395 1987/3588/584 +f 1987/3588/584 2058/3587/395 1988/3589/584 +f 1988/3589/584 2058/3587/395 1989/3590/395 +f 1989/3590/395 2058/3587/395 1990/3591/395 +f 1990/3591/395 2058/3587/395 1991/3592/584 +f 1991/3592/584 2058/3587/395 1992/3593/189 +f 1992/3593/189 2058/3587/395 1993/3594/189 +f 1993/3594/189 2058/3587/395 1986/3586/395 +f 2034/3595/187 2059/3596/187 2035/3597/187 +f 2035/3597/187 2059/3596/187 2041/3598/187 +f 2041/3598/187 2059/3596/187 2040/3599/187 +f 2040/3599/187 2059/3596/187 2039/3600/187 +f 2039/3600/187 2059/3596/187 2038/3601/187 +f 2038/3601/187 2059/3596/187 2037/3602/187 +f 2037/3602/187 2059/3596/187 2036/3603/187 +f 2036/3603/187 2059/3596/187 2034/3595/187 +f 2060/3604/974 2061/3605/974 2062/3606/974 +f 2062/3606/974 2061/3605/974 2063/3607/974 +f 2063/3607/974 2061/3605/974 2064/3608/974 +f 2064/3608/974 2061/3605/974 2065/3609/974 +f 2065/3609/974 2061/3605/974 2066/3610/974 +f 2066/3610/974 2061/3605/974 2067/3611/974 +f 2067/3611/974 2061/3605/974 2068/3612/974 +f 2068/3612/974 2061/3605/974 2069/3613/974 +f 2069/3613/974 2061/3605/974 2070/3614/974 +f 2070/3614/974 2061/3605/974 2060/3604/974 +s 2 +f 2060/3615/1366 2062/3616/1255 2006/3617/1255 2009/3618/1366 +f 2062/3616/1255 2063/3619/952 2010/3620/952 2006/3617/1255 +f 2063/3621/952 2064/3622/953 2012/3520/953 2010/3516/952 +f 2064/3623/953 2065/3624/1257 2014/3625/1257 2012/3626/953 +f 2065/3627/1257 2066/3628/1367 2016/3524/1367 2014/3527/1257 +f 2070/3629/1250 2060/3615/1366 2009/3618/1366 2050/3630/1250 +f 2069/3631/947 2070/3632/1250 2050/3633/1250 2052/3634/947 +f 2068/3635/948 2069/3636/947 2052/3576/947 2054/3580/1252 +f 2067/3637/1253 2068/3638/948 2054/3639/1252 2056/3640/1253 +f 2066/3641/1367 2067/3637/1253 2056/3640/1253 2016/3642/1367 +f 1968/3456/1120 1996/3643/1368 1999/3644/1137 1969/3457/1121 +f 1969/3457/1121 1999/3644/1137 2044/3645/1369 2022/3532/1364 +f 2022/3646/1364 2044/3566/1369 2043/3565/1139 2040/3647/1140 +s 8 +f 2040/3599/1141 2043/3648/1141 2042/3649/1141 2041/3598/1141 +s 2 +f 2041/3650/1142 2042/3564/1143 2045/3567/1370 2023/3651/1365 +f 2023/3533/1365 2045/3652/1370 1998/3653/1145 1970/3458/1122 +f 1970/3458/1122 1998/3653/1145 1995/3654/1146 1971/3459/1123 +f 1971/3655/1123 1995/3499/1146 1994/3498/1371 1993/3656/1148 +s 8 +f 1993/3594/1150 1994/3657/1150 1997/3658/1150 1992/3593/1150 +s 2 +f 1992/3659/1151 1997/3501/1152 1996/3500/1368 1968/3660/1120 +s 1 +f 2071/3661/795 2072/3662/795 2073/3663/795 2074/3664/795 +f 2075/3665/796 2076/3666/796 2077/3667/796 2078/3668/796 +s 2 +f 2078/3668/797 2077/3667/797 2079/3669/1120 2080/3670/1121 +f 2081/3671/1122 2082/3672/1123 2072/3662/801 2071/3661/801 +f 2083/3673/873 2084/3674/874 2085/3675/875 2073/3676/876 +f 2086/3677/877 2087/3678/878 2084/3674/874 2083/3673/873 +f 2075/3679/809 2088/3680/809 2089/3681/879 2076/3682/880 +f 2074/3683/814 2073/3676/876 2085/3675/875 2090/3684/814 +f 2086/3677/877 2076/3682/880 2089/3681/879 2087/3678/878 +s 1 +f 2089/3685/881 2088/3686/881 2091/3687/881 2092/3688/881 +s 4 +f 2087/3689/882 2089/3690/883 2092/3691/884 2093/3692/885 +s 1 +f 2084/3693/886 2087/3689/886 2093/3692/887 2094/3694/887 +s 4 +f 2084/3693/888 2094/3694/889 2095/3695/890 2085/3696/891 +s 1 +f 2085/3697/892 2095/3698/892 2096/3699/892 2090/3700/892 +s 4 +f 2073/3663/1246 2072/3662/894 2097/3701/895 2098/3702/1246 +s 2 +f 2083/3673/873 2073/3676/876 2098/3703/896 2099/3704/1247 +f 2086/3677/877 2083/3673/873 2099/3704/1247 2100/3705/898 +f 2076/3682/880 2086/3677/877 2100/3705/898 2101/3706/899 +s 4 +f 2077/3667/900 2076/3666/1248 2101/3707/1248 2102/3708/902 +f 2079/3669/903 2077/3667/900 2102/3708/902 2103/3709/904 +f 2072/3662/894 2082/3672/905 2104/3710/906 2097/3701/895 +s 1 +f 2105/3711/1124 2106/3712/1125 2107/3713/1125 2108/3714/907 +f 2106/3712/1125 2109/3715/396 2110/3716/742 2107/3713/1125 +f 2111/3717/909 2092/3688/881 2091/3687/881 2112/3718/910 +s 4 +f 2113/3719/911 2093/3692/885 2092/3691/884 2111/3720/912 +s 1 +f 2114/3721/913 2094/3694/887 2093/3692/887 2113/3719/913 +s 4 +f 2115/3722/914 2095/3695/890 2094/3694/889 2114/3721/915 +s 1 +f 2116/3723/916 2096/3699/892 2095/3698/892 2115/3724/917 +f 2117/3725/918 2118/3726/919 2119/3727/920 2120/3728/921 +s 4 +f 2121/3729/922 2122/3730/923 2118/3731/924 2117/3732/925 +s 1 +f 2123/3733/926 2124/3734/927 2122/3730/927 2121/3729/926 +s 4 +f 2125/3735/928 2126/3736/929 2124/3734/930 2123/3733/931 +s 1 +f 2127/3737/932 2128/3738/933 2126/3739/934 2125/3740/935 +f 2111/3717/909 2112/3718/910 2119/3727/920 2118/3726/919 +s 4 +f 2113/3719/911 2111/3720/912 2118/3731/924 2122/3730/923 +s 1 +f 2114/3721/913 2113/3719/913 2122/3730/927 2124/3734/927 +s 4 +f 2115/3722/914 2114/3721/915 2124/3734/930 2126/3736/929 +s 1 +f 2116/3723/916 2115/3724/917 2126/3739/934 2128/3738/933 +f 2071/3661/795 2074/3664/795 2129/3741/795 2130/3742/795 +f 2075/3665/796 2078/3668/796 2131/3743/796 2132/3744/796 +s 2 +f 2078/3668/797 2080/3670/1121 2133/3745/1364 2131/3743/797 +f 2081/3671/1122 2071/3661/801 2130/3742/801 2134/3746/1365 +f 2135/3747/803 2129/3748/804 2136/3749/805 2137/3750/806 +f 2138/3751/807 2135/3747/803 2137/3750/806 2139/3752/808 +f 2075/3679/809 2132/3753/810 2140/3754/811 2088/3680/809 +f 2074/3683/814 2090/3684/814 2136/3749/805 2129/3748/804 +f 2138/3751/807 2139/3752/808 2140/3754/811 2132/3753/810 +s 4 +f 2140/3755/815 2141/3756/815 2091/3687/815 2088/3686/815 +s 1 +f 2139/3757/816 2142/3758/817 2141/3759/818 2140/3760/819 +s 4 +f 2137/3761/820 2143/3762/821 2142/3758/821 2139/3757/820 +s 1 +f 2137/3761/822 2136/3763/823 2144/3764/824 2143/3762/825 +s 4 +f 2136/3765/826 2090/3700/826 2096/3699/826 2144/3766/826 +f 2129/3741/1262 2145/3767/1262 2146/3768/828 2130/3742/829 +s 2 +f 2135/3747/803 2147/3769/1242 2145/3770/831 2129/3748/804 +f 2138/3751/807 2148/3771/832 2147/3769/1242 2135/3747/803 +f 2132/3753/810 2149/3772/833 2148/3771/832 2138/3751/807 +s 4 +f 2131/3743/834 2150/3773/835 2149/3774/1263 2132/3744/1263 +f 2133/3745/837 2151/3775/838 2150/3773/835 2131/3743/834 +f 2130/3742/829 2146/3768/828 2152/3776/839 2134/3746/840 +s 1 +f 2153/3777/1129 2154/3778/1129 2155/3779/843 2156/3780/843 +f 2156/3780/843 2155/3779/843 2110/3716/742 2109/3715/396 +s 4 +f 2157/3781/844 2112/3718/845 2091/3687/815 2141/3756/815 +s 1 +f 2158/3782/846 2157/3783/847 2141/3759/818 2142/3758/817 +s 4 +f 2159/3784/1131 2158/3782/1131 2142/3758/821 2143/3762/821 +s 1 +f 2160/3785/849 2159/3784/850 2143/3762/825 2144/3764/824 +s 4 +f 2116/3723/851 2160/3786/852 2144/3766/826 2096/3699/826 +f 2161/3787/853 2120/3728/854 2119/3727/855 2162/3788/856 +s 1 +f 2163/3789/857 2161/3790/858 2162/3791/859 2164/3792/860 +s 4 +f 2165/3793/861 2163/3789/861 2164/3792/862 2166/3794/862 +s 1 +f 2167/3795/863 2165/3793/864 2166/3794/865 2168/3796/866 +s 4 +f 2127/3737/867 2167/3797/868 2168/3798/869 2128/3738/870 +f 2157/3781/844 2162/3788/856 2119/3727/855 2112/3718/845 +s 1 +f 2158/3782/846 2164/3792/860 2162/3791/859 2157/3783/847 +s 4 +f 2159/3784/1131 2166/3794/862 2164/3792/862 2158/3782/1131 +s 1 +f 2160/3785/849 2168/3796/866 2166/3794/865 2159/3784/850 +s 4 +f 2116/3723/851 2128/3738/870 2168/3798/869 2160/3786/852 +s 1 +f 2097/3799/189 2169/3800/584 2098/3801/189 +f 2098/3801/189 2169/3800/584 2099/3802/189 +f 2099/3802/189 2169/3800/584 2100/3803/189 +f 2100/3803/189 2169/3800/584 2101/3804/584 +f 2101/3804/584 2169/3800/584 2102/3805/584 +f 2102/3805/584 2169/3800/584 2103/3806/584 +f 2103/3806/584 2169/3800/584 2104/3807/584 +f 2104/3807/584 2169/3800/584 2097/3799/189 +f 2145/3808/187 2170/3809/187 2146/3810/187 +f 2146/3810/187 2170/3809/187 2152/3811/187 +f 2152/3811/187 2170/3809/187 2151/3812/936 +f 2151/3812/936 2170/3809/187 2150/3813/936 +f 2150/3813/936 2170/3809/187 2149/3814/187 +f 2149/3814/187 2170/3809/187 2148/3815/187 +f 2148/3815/187 2170/3809/187 2147/3816/187 +f 2147/3816/187 2170/3809/187 2145/3808/187 +f 2171/3817/974 2172/3818/974 2173/3819/974 +f 2173/3819/974 2172/3818/974 2174/3820/974 +f 2174/3820/974 2172/3818/974 2175/3821/974 +f 2175/3821/974 2172/3818/974 2176/3822/974 +f 2176/3822/974 2172/3818/974 2177/3823/974 +f 2177/3823/974 2172/3818/974 2178/3824/974 +f 2178/3824/974 2172/3818/974 2179/3825/974 +f 2179/3825/974 2172/3818/974 2180/3826/974 +f 2180/3826/974 2172/3818/974 2181/3827/974 +f 2181/3827/974 2172/3818/974 2171/3817/974 +s 2 +f 2171/3828/1366 2173/3829/1255 2117/3830/1255 2120/3831/1366 +f 2173/3829/1255 2174/3832/952 2121/3833/952 2117/3830/1255 +f 2174/3834/952 2175/3835/953 2123/3733/953 2121/3729/952 +f 2175/3836/953 2176/3837/1257 2125/3838/1257 2123/3839/953 +f 2176/3840/1257 2177/3841/1367 2127/3737/1367 2125/3740/1257 +f 2181/3842/1250 2171/3828/1366 2120/3831/1366 2161/3843/1250 +f 2180/3844/947 2181/3845/1250 2161/3846/1250 2163/3847/947 +f 2179/3848/948 2180/3849/947 2163/3789/947 2165/3793/948 +f 2178/3850/1253 2179/3851/948 2165/3852/948 2167/3853/1253 +f 2177/3854/1367 2178/3850/1253 2167/3853/1253 2127/3855/1367 +f 2079/3669/1120 2107/3856/1368 2110/3857/1137 2080/3670/1121 +f 2080/3670/1121 2110/3857/1137 2155/3858/1369 2133/3745/1364 +f 2133/3859/1364 2155/3779/1369 2154/3778/1139 2151/3860/1140 +s 8 +f 2151/3812/1141 2154/3861/1141 2153/3862/1141 2152/3811/1141 +s 2 +f 2152/3863/1142 2153/3777/1143 2156/3780/1370 2134/3864/1365 +f 2134/3746/1365 2156/3865/1370 2109/3866/1145 2081/3671/1122 +f 2081/3671/1122 2109/3866/1145 2106/3867/1146 2082/3672/1123 +f 2082/3868/1123 2106/3712/1146 2105/3711/1372 2104/3869/1148 +s 8 +f 2104/3807/1150 2105/3870/1150 2108/3871/1150 2103/3806/1150 +s 2 +f 2103/3872/1151 2108/3714/1152 2107/3713/1368 2079/3873/1120 +s 1 +f 2182/3874/428 2183/3875/429 2184/3876/430 2185/3877/428 +f 2186/3878/1373 2187/3879/1374 2188/3880/1375 2189/3881/1376 +s 2 +f 2190/3882/974 2191/3883/974 2192/3884/974 2193/3885/974 +f 2194/3886/1153 2195/3887/1154 2196/3888/1155 2197/3889/1155 +s 1 +f 2197/3890/1156 2196/3891/1156 2198/3892/1377 2199/3893/1378 +f 2199/3893/1378 2198/3892/1377 2200/3894/1379 2201/3895/1380 +f 2201/3895/1380 2200/3894/1379 2202/3896/1381 2203/3897/1382 +f 2204/3898/1383 2203/3897/1382 2202/3896/1381 2205/3899/1384 +f 2204/3898/1383 2205/3899/1384 2206/3900/1385 2207/3901/1386 +f 2207/3902/1386 2206/3903/1385 2208/3904/1387 2209/3905/1388 +f 2210/3906/1389 2209/3905/1388 2208/3904/1387 2211/3907/1390 +f 2212/3908/1391 2210/3909/1389 2211/3910/1390 2213/3911/1392 +s 4 +f 2214/3912/455 2215/3913/455 2216/3914/455 2217/3915/455 +f 2189/3916/455 2218/3917/455 2219/3918/455 2217/3915/455 +f 2212/3919/455 2220/3920/455 2210/3921/455 +f 2210/3921/455 2220/3920/455 2209/3922/455 +f 2209/3922/455 2220/3920/455 2221/3923/455 2207/3924/455 +f 2207/3924/455 2221/3923/455 2222/3925/455 2204/3926/455 +f 2204/3926/455 2222/3925/455 2223/3927/455 2203/3928/455 +f 2203/3928/455 2223/3927/455 2224/3929/455 2201/3930/455 +f 2201/3930/455 2224/3929/455 2225/3931/455 2199/3932/455 +f 2199/3932/455 2225/3931/455 2197/3933/455 +f 2197/3933/455 2225/3931/455 2194/3934/455 +f 2226/3935/455 2190/3936/455 2227/3937/455 2228/3938/455 +f 2226/3935/455 2229/3939/455 2230/3940/455 2231/3941/455 +f 2229/3939/455 2232/3942/455 2233/3943/455 2230/3940/455 +f 2233/3943/455 2232/3942/455 2234/3944/455 2235/3945/455 +f 2235/3945/455 2234/3944/455 2215/3913/455 2214/3912/455 +s 1 +f 2236/3946/428 2237/3947/428 2238/3948/429 2239/3949/429 +f 2240/3950/456 2241/3951/456 2242/3952/456 +f 2242/3952/456 2241/3951/456 2243/3953/456 +f 2243/3953/456 2241/3951/456 2244/3954/456 2245/3955/430 +f 2245/3955/430 2244/3954/456 2246/3956/428 2247/3957/428 +f 2247/3957/428 2246/3956/428 2248/3958/429 2249/3959/429 +f 2249/3959/429 2248/3958/429 2250/3960/456 2251/3961/456 +f 2251/3961/456 2250/3960/456 2252/3962/428 2253/3963/428 +f 2253/3963/428 2252/3962/428 2254/3964/428 +f 2254/3964/428 2252/3962/428 2255/3965/428 +f 2256/3966/456 2257/3967/430 2183/3875/429 2182/3874/428 +f 2258/3968/430 2259/3969/428 2260/3970/428 2261/3971/430 +f 2184/3876/430 2262/3972/429 2260/3970/428 2185/3877/428 +f 2237/3947/428 2258/3968/430 2261/3971/430 2238/3948/429 +f 2244/3954/456 2263/3973/428 2264/3974/428 2246/3956/428 +f 2263/3973/428 2182/3874/428 2185/3877/428 2264/3974/428 +f 1871/3269/429 2184/3876/430 2183/3875/429 1872/3270/429 +f 2218/3975/1393 2265/3976/1394 1874/3273/1286 1873/3272/994 +f 2189/3881/1376 2188/3880/1375 2265/3976/1394 2218/3975/1393 +f 2266/3977/1395 2267/3978/1396 2187/3879/1374 2213/3911/1392 +s 2 +f 2268/3979/974 2269/3980/974 2195/3887/1154 2194/3886/1153 +f 2228/3981/974 2227/3982/974 2270/3983/974 2271/3984/974 +s 4 +f 1882/3283/455 2272/3985/455 2219/3918/455 1883/3284/455 +f 2272/3985/455 2214/3912/455 2217/3915/455 2219/3918/455 +f 2220/3920/455 2216/3914/455 2215/3913/455 2221/3923/455 +f 2212/3919/455 2186/3986/455 2216/3914/455 2220/3920/455 +f 2186/3986/455 2189/3916/455 2217/3915/455 2216/3914/455 +f 1883/3284/455 2219/3918/455 2218/3917/455 1873/3287/455 +f 2273/3987/455 1886/3289/455 2274/3988/455 2275/3989/455 +f 2231/3941/455 2275/3989/455 2191/3990/455 2190/3936/455 +f 2228/3938/455 2268/3991/455 2225/3931/455 2226/3935/455 +f 2273/3987/455 2276/3992/455 1890/3295/455 1889/3294/455 +f 2231/3941/455 2230/3940/455 2276/3992/455 2273/3987/455 +f 2229/3939/455 2226/3935/455 2225/3931/455 2224/3929/455 +f 2276/3992/455 2277/3993/455 1892/3297/455 1890/3295/455 +f 2230/3940/455 2233/3943/455 2277/3993/455 2276/3992/455 +f 2232/3942/455 2229/3939/455 2224/3929/455 2223/3927/455 +f 1892/3297/455 2277/3993/455 2278/3994/455 1894/3299/455 +f 2277/3993/455 2233/3943/455 2235/3945/455 2278/3994/455 +f 2222/3925/455 2234/3944/455 2232/3942/455 2223/3927/455 +f 1894/3299/455 2278/3994/455 2272/3985/455 1882/3283/455 +f 2278/3994/455 2235/3945/455 2214/3912/455 2272/3985/455 +f 2221/3923/455 2215/3913/455 2234/3944/455 2222/3925/455 +s 1 +f 2279/3995/428 2280/3996/429 1898/3303/428 1897/3302/428 +f 2239/3949/429 2238/3948/429 2280/3996/429 2279/3995/428 +f 2237/3947/428 2236/3946/428 2255/3965/428 2252/3962/428 +f 2271/3997/429 2281/3998/429 2282/3999/429 2269/4000/430 +f 2283/4001/428 2284/4002/428 2271/3997/429 2270/4003/428 +f 2285/4004/430 2286/4005/430 2287/4006/428 2288/4007/428 +f 2241/3951/456 2289/4008/428 2263/3973/428 2244/3954/456 +f 2289/4008/428 2256/3966/456 2182/3874/428 2263/3973/428 +f 1872/3270/429 2183/3875/429 2257/3967/430 1910/3316/430 +f 2290/4009/430 2262/3972/429 1913/3319/429 1912/3318/428 +f 2261/3971/430 2260/3970/428 2262/3972/429 2290/4009/430 +f 2259/3969/428 2258/3968/430 2250/3960/456 2248/3958/429 +f 2264/3974/428 2259/3969/428 2248/3958/429 2246/3956/428 +f 2185/3877/428 2260/3970/428 2259/3969/428 2264/3974/428 +f 2262/3972/429 2184/3876/430 1871/3269/429 1913/3319/429 +f 2280/3996/429 2290/4009/430 1912/3318/428 1898/3303/428 +f 2238/3948/429 2261/3971/430 2290/4009/430 2280/3996/429 +f 2258/3968/430 2237/3947/428 2252/3962/428 2250/3960/456 +f 2291/4010/456 2289/4008/428 2241/3951/456 +f 2292/4011/428 2293/4012/430 2256/3966/456 +f 2294/4013/456 2295/4014/428 2256/3966/456 +f 2296/4015/430 2297/4016/428 1910/3316/430 +f 2298/4017/430 2286/4005/430 2285/4004/430 2299/4018/430 +s 2 +f 2300/4019/974 2301/4020/974 2270/3983/974 2193/3885/974 +f 1924/3331/1290 2302/4021/1397 2303/4022/1398 1925/3332/1291 +s 1 +f 2296/4015/430 1910/3316/430 2257/3967/430 +f 1927/3335/428 1910/3316/430 2297/4016/428 2304/4023/428 +f 2294/4013/456 2256/3966/456 2305/4024/430 2306/4025/456 +f 2256/3966/456 2295/4014/428 2257/3967/430 +f 2292/4011/428 2256/3966/456 2289/4008/428 +f 2305/4024/430 2256/3966/456 2293/4012/430 2307/4026/456 +f 2308/4027/430 2309/4028/430 2241/3951/456 2240/3950/456 +f 2291/4010/456 2241/3951/456 2309/4028/430 +s 4 +f 2310/4029/1399 2269/4030/1400 2282/4031/1401 2311/4032/1402 +s 2 +f 2311/4032/736 2282/4031/736 2281/4033/736 2312/4034/736 +s 4 +f 2312/4035/1403 2281/4036/1403 2284/4037/1403 2313/4038/1403 +s 2 +f 2313/4038/1404 2284/4037/1404 2314/4039/1404 2315/4040/1404 +s 4 +f 2315/4041/749 2314/4042/749 2283/4043/749 2316/4044/749 +s 8 +f 2316/4044/1405 2283/4043/1406 2270/4045/1407 2301/4046/1408 +s 4 +f 2317/4047/1177 2192/4048/1178 2298/4049/1179 2318/4050/1180 +s 2 +f 2318/4050/1181 2298/4049/1181 2299/4051/1181 2319/4052/1181 +s 4 +f 2319/4053/1182 2299/4054/1182 2285/4055/1182 2320/4056/1182 +s 2 +f 2320/4056/1183 2285/4055/1183 2288/4057/1183 2321/4058/1183 +s 4 +f 2321/4059/748 2288/4060/748 2287/4061/748 2322/4062/748 +s 8 +f 2322/4062/1184 2287/4061/1185 2303/4063/1186 2302/4064/1187 +s 1 +f 2323/4065/1409 2188/3880/1375 2187/3879/1374 2267/3978/1396 +s 2 +f 2193/3885/974 2192/3884/974 2317/4066/974 2300/4019/974 +f 2324/4067/1155 2196/3888/1155 2195/3887/1154 2325/4068/1410 +s 1 +f 2326/4069/1411 2198/3892/1377 2196/3891/1156 2324/4070/1156 +f 2327/4071/1412 2200/3894/1379 2198/3892/1377 2326/4069/1411 +f 2328/4072/1413 2202/3896/1381 2200/3894/1379 2327/4071/1412 +f 2205/3899/1384 2202/3896/1381 2328/4072/1413 2329/4073/1414 +f 2330/4074/1415 2206/3900/1385 2205/3899/1384 2329/4073/1414 +f 2331/4075/1416 2208/3904/1387 2206/3903/1385 2330/4076/1415 +f 2211/3907/1390 2208/3904/1387 2331/4075/1416 2332/4077/1417 +f 2213/3911/1392 2211/3910/1390 2332/4078/1417 2266/3977/1395 +f 1958/3392/1313 1874/3273/1286 2265/3976/1394 2333/4079/1418 +f 2333/4079/1418 2265/3976/1394 2188/3880/1375 2323/4065/1409 +f 2213/3911/1392 2187/3879/1374 2186/3878/1373 2212/3908/1391 +s 2 +f 2325/4068/1410 2195/3887/1154 2269/3980/974 2310/4080/974 +f 2303/4022/1398 2286/4081/1198 2275/4082/1199 2274/4083/1419 +f 2228/3981/974 2271/3984/974 2269/3980/974 2268/3979/974 +f 2190/3882/974 2193/3885/974 2270/3983/974 2227/3982/974 +f 2286/4081/1198 2192/3884/974 2191/3883/974 2275/4082/1199 +f 1925/3332/1291 2303/4022/1398 2274/4083/1419 1886/3398/974 +s 8 +f 2255/3965/1420 2236/3946/1421 2267/4084/1422 2266/4085/1423 +s 4 +f 1927/3401/1025 2304/4086/1028 2302/4021/1424 1924/3331/1026 +s 8 +f 2240/3950/1425 2242/3952/1203 2324/4087/1204 2325/4088/1426 +f 2242/3952/1203 2243/3953/1427 2326/4089/1428 2324/4087/1204 +f 2243/3953/1427 2245/3955/1429 2327/4090/1430 2326/4089/1428 +f 2245/3955/1429 2247/3957/1431 2328/4091/1432 2327/4090/1430 +f 2247/3957/1431 2249/3959/1433 2329/4092/1434 2328/4091/1432 +f 2249/3959/1433 2251/3961/1435 2330/4093/1436 2329/4092/1434 +f 2251/3961/1435 2253/3963/1437 2331/4094/1438 2330/4093/1436 +f 2253/3963/1437 2254/3964/1439 2332/4095/1440 2331/4094/1438 +f 2254/4096/1439 2255/4097/1420 2266/4098/1423 2332/4099/1440 +f 2236/3946/1421 2239/3949/1441 2323/4100/1442 2267/4084/1422 +f 2239/3949/1441 2279/3995/1443 2333/4101/1444 2323/4100/1442 +f 2279/3995/1443 1897/3302/1052 1958/3418/1341 2333/4101/1444 +s 16 +f 2305/4024/1362 2307/4026/1342 2301/4102/1362 2300/4103/1362 +s 8 +f 2308/4027/1445 2240/3950/1425 2325/4088/1426 2310/4104/1446 +s 32 +f 2310/4029/1447 2311/4032/1448 2309/4105/1449 2308/4106/1450 +f 2311/4107/1448 2312/4108/1451 2291/4109/1452 2309/4110/1449 +f 2312/4108/1451 2313/4111/1453 2289/4112/1454 2291/4109/1452 +f 2313/4113/1453 2315/4114/1455 2292/4011/1456 2289/4008/1454 +f 2315/4114/1455 2316/4115/1457 2293/4012/1458 2292/4011/1456 +f 2316/4044/1457 2301/4046/1459 2307/4116/1460 2293/4117/1458 +f 2319/4118/1461 2320/4119/1225 2257/3967/1226 2295/4014/1227 +f 2318/4120/1228 2319/4121/1461 2295/4122/1227 2294/4123/1229 +f 2320/4119/1225 2321/4124/1462 2296/4015/1231 2257/3967/1226 +f 2321/4124/1462 2322/4125/1463 2297/4016/1233 2296/4015/1231 +f 2322/4062/1463 2302/4064/1234 2304/4126/1235 2297/4127/1233 +s 16 +f 2306/4025/1026 2305/4024/1362 2300/4103/1362 2317/4128/1026 +s 32 +f 2317/4047/1238 2318/4050/1228 2294/4129/1229 2306/4130/1239 +s 1 +f 2334/4131/604 2335/4132/743 2336/4133/1464 2337/4134/1465 +f 2335/4132/743 2338/4135/744 2339/4136/745 2336/4133/1464 +f 2338/4137/744 2340/4138/474 2341/4139/474 2339/4140/745 +f 2340/4138/474 2342/4141/746 2343/4142/746 2341/4139/474 +f 2342/4141/746 2344/4143/395 2345/4144/395 2343/4142/746 +f 2344/4143/395 2346/4145/1466 2347/4146/747 2345/4144/395 +f 2346/4145/1466 2348/4147/748 2349/4148/748 2347/4146/747 +f 2348/4149/748 2350/4150/750 2351/4151/750 2349/4152/748 +f 2350/4150/750 2352/4153/1467 2353/4154/751 2351/4151/750 +f 2352/4153/1467 2354/4155/426 2355/4156/301 2353/4154/751 +f 2354/4155/426 2356/4157/733 2357/4158/733 2355/4156/301 +f 2356/4157/733 2358/4159/735 2359/4160/735 2357/4158/733 +f 2358/4161/735 2360/4162/736 2361/4163/736 2359/4164/735 +f 2360/4162/736 2362/4165/737 2363/4166/737 2361/4163/736 +f 2362/4165/737 2364/4167/187 2365/4168/187 2363/4166/737 +f 2364/4167/187 2366/4169/738 2367/4170/738 2365/4168/187 +f 2366/4169/738 2368/4171/471 2369/4172/471 2367/4170/738 +f 2368/4173/471 2370/4174/740 2371/4175/740 2369/4176/471 +f 2370/4174/740 2372/4177/1468 2373/4178/1468 2371/4175/740 +f 2372/4177/1468 2334/4131/604 2337/4134/1465 2373/4178/1468 +s 2 +f 2335/4179/455 2334/4180/455 2374/4181/754 +f 2338/4182/754 2335/4179/455 2374/4181/754 +f 2340/4183/455 2338/4182/754 2374/4181/754 +f 2342/4184/752 2340/4183/455 2374/4181/754 +f 2344/4185/455 2342/4184/752 2374/4181/754 +f 2346/4186/753 2344/4185/455 2374/4181/754 +f 2348/4187/754 2346/4186/753 2374/4181/754 +f 2350/4188/455 2348/4187/754 2374/4181/754 +f 2352/4189/455 2350/4188/455 2374/4181/754 +f 2354/4190/455 2352/4189/455 2374/4181/754 +f 2356/4191/455 2354/4190/455 2374/4181/754 +f 2358/4192/752 2356/4191/455 2374/4181/754 +f 2360/4193/753 2358/4192/752 2374/4181/754 +f 2362/4194/754 2360/4193/753 2374/4181/754 +f 2364/4195/455 2362/4194/754 2374/4181/754 +f 2366/4196/455 2364/4195/455 2374/4181/754 +f 2368/4197/752 2366/4196/455 2374/4181/754 +f 2370/4198/753 2368/4197/752 2374/4181/754 2375/4199/455 +f 2372/4200/455 2370/4198/753 2375/4199/455 2376/4201/455 +f 2334/4180/455 2372/4200/455 2376/4201/455 2374/4181/754 +f 2376/4201/455 2375/4199/455 2374/4181/754 +s 1 +f 2377/4202/429 2378/4203/428 2379/4204/428 +f 2378/4203/428 2380/4205/428 2379/4204/428 +f 2380/4205/428 2381/4206/428 2379/4204/428 +f 2381/4206/428 2382/4207/428 2379/4204/428 +f 2382/4207/428 2383/4208/428 2379/4204/428 +f 2383/4208/428 2384/4209/456 2379/4204/428 +f 2384/4209/456 2385/4210/456 2379/4204/428 +f 2385/4210/456 2386/4211/456 2379/4204/428 +f 2386/4211/456 2387/4212/456 2379/4204/428 +f 2387/4212/456 2388/4213/430 2379/4204/428 +f 2388/4213/430 2389/4214/430 2379/4204/428 +f 2389/4214/430 2390/4215/456 2379/4204/428 +f 2390/4215/456 2391/4216/429 2379/4204/428 +f 2391/4216/429 2392/4217/429 2379/4204/428 +f 2392/4217/429 2393/4218/429 2379/4204/428 +f 2393/4218/429 2394/4219/430 2379/4204/428 +f 2394/4219/430 2395/4220/428 2379/4204/428 +f 2395/4220/428 2396/4221/428 2397/4222/428 2379/4204/428 +f 2396/4221/428 2398/4223/429 2399/4224/430 2397/4222/428 +f 2398/4223/429 2377/4202/429 2379/4204/428 2399/4224/430 +f 2397/4222/428 2399/4224/430 2379/4204/428 +s 2 +f 2336/4225/1469 2378/4203/1470 2377/4202/1471 2337/4226/1472 +f 2339/4227/1473 2380/4205/1474 2378/4203/1470 2336/4225/1469 +f 2341/4228/1475 2381/4206/1476 2380/4205/1474 2339/4227/1473 +f 2343/4229/1477 2382/4207/1478 2381/4206/1476 2341/4228/1475 +f 2345/4230/1479 2383/4208/1480 2382/4207/1478 2343/4229/1477 +f 2347/4231/1481 2384/4209/1482 2383/4208/1480 2345/4230/1479 +f 2349/4232/1483 2385/4210/1484 2384/4209/1482 2347/4231/1481 +f 2351/4233/1485 2386/4211/1486 2385/4210/1484 2349/4232/1483 +f 2353/4234/1487 2387/4212/1488 2386/4211/1486 2351/4233/1485 +f 2355/4235/1489 2388/4213/1490 2387/4212/1488 2353/4234/1487 +f 2357/4236/1491 2389/4214/1492 2388/4213/1490 2355/4235/1489 +f 2359/4237/1493 2390/4215/1494 2389/4214/1492 2357/4236/1491 +f 2361/4238/1495 2391/4216/1496 2390/4215/1494 2359/4237/1493 +f 2363/4239/1497 2392/4217/1498 2391/4216/1496 2361/4238/1495 +f 2365/4240/1499 2393/4218/1500 2392/4217/1498 2363/4239/1497 +f 2367/4241/1501 2394/4219/1502 2393/4218/1500 2365/4240/1499 +f 2369/4242/1503 2395/4220/1504 2394/4219/1502 2367/4241/1501 +f 2371/4243/1505 2396/4221/1506 2395/4220/1504 2369/4242/1503 +f 2373/4244/1507 2398/4223/1508 2396/4221/1506 2371/4243/1505 +f 2337/4226/1472 2377/4202/1471 2398/4223/1508 2373/4244/1507 +s 1 +f 2400/4245/428 2401/4246/428 2402/4247/428 +f 2403/4248/974 2404/4249/1509 2405/4250/1509 2406/4251/301 +s 2 +f 2407/4252/1510 2408/4253/1510 2405/4250/1510 2404/4249/1510 +s 4 +f 2409/4254/1511 2410/4255/1511 2411/4256/1511 2412/4257/1511 +s 2 +f 2413/4258/974 2414/4259/974 2415/4260/974 2416/4261/974 +s 4 +f 2417/4262/1512 2418/4263/1513 2419/4264/1513 2420/4265/1512 +f 2418/4266/1513 2421/4267/1514 2422/4268/1514 2419/4269/1513 +f 2421/4270/1514 2423/4271/1515 2402/4272/1515 2422/4273/1514 +f 2423/4271/1515 2424/4274/1516 2400/4275/1516 2402/4272/1515 +f 2424/4274/1516 2425/4276/188 2426/4277/188 2400/4275/1516 +f 2425/4276/188 2427/4278/1517 2428/4279/1517 2426/4277/188 +f 2427/4278/1517 2429/4280/1518 2430/4281/1518 2428/4279/1517 +f 2429/4280/1518 2431/4282/1519 2432/4283/1519 2430/4281/1518 +f 2431/4284/1519 2433/4285/1520 2434/4286/1520 2432/4287/1519 +f 2433/4285/1520 2435/4288/1521 2436/4289/1521 2434/4286/1520 +f 2435/4288/1521 2437/4290/1522 2438/4291/1522 2436/4289/1521 +f 2437/4290/1522 2439/4292/604 2440/4293/604 2438/4291/1522 +f 2439/4292/604 2441/4294/1523 2442/4295/1523 2440/4293/604 +f 2441/4294/1523 2443/4296/1524 2444/4297/1524 2442/4295/1523 +f 2443/4296/1524 2445/4298/1525 2446/4299/1525 2444/4297/1524 +f 2445/4298/1525 2447/4300/1526 2448/4301/1526 2446/4299/1525 +s 2 +f 2447/4300/1527 2449/4302/1527 2450/4303/1527 2448/4301/1527 +s 8 +f 2449/4302/396 2451/4304/1528 2452/4305/1529 2450/4303/396 +f 2451/4304/1528 2453/4306/1528 2454/4307/1528 2452/4305/1529 +f 2453/4306/1528 2455/4308/396 2456/4309/396 2454/4307/1528 +s 1 +f 2457/4310/429 2450/4311/429 2452/4312/429 2458/4313/429 +f 2405/4250/1509 2459/4314/1509 2460/4315/974 2406/4251/301 +s 2 +f 2408/4253/1510 2461/4316/1530 2459/4314/1530 2405/4250/1510 +s 4 +f 2410/4255/1511 2462/4317/1511 2463/4318/1511 2411/4256/1511 +f 2452/4319/187 2464/4320/187 2465/4321/187 2458/4322/187 +s 8 +f 2454/4307/1528 2466/4323/1528 2464/4324/1531 2452/4305/1529 +f 2456/4309/396 2467/4325/396 2466/4323/1528 2454/4307/1528 +f 2468/4326/1531 2469/4327/1528 2470/4328/1528 2471/4329/1531 +f 2469/4327/1528 2472/4330/396 2473/4331/396 2470/4328/1528 +s 4 +f 2416/4332/1511 2415/4333/1402 2474/4334/1511 2475/4335/1511 +f 2415/4333/1402 2476/4336/1532 2477/4337/1511 2474/4334/1511 +s 1 +f 2478/4338/430 2479/4339/428 2480/4340/428 2481/4341/429 +s 4 +f 2468/4342/187 2471/4343/187 2480/4344/187 2482/4345/187 +f 2468/4342/187 2482/4345/187 2465/4321/187 2464/4320/187 +s 8 +f 2469/4327/1528 2468/4326/1531 2464/4324/1531 2466/4323/1528 +f 2472/4330/396 2469/4327/1528 2466/4323/1528 2467/4325/396 +s 4 +f 2483/4346/1533 2484/4347/1402 2477/4337/1511 2476/4336/1532 +s 2 +f 2482/4348/1534 2480/4349/1534 2485/4350/1535 2486/4351/1535 +f 2487/4352/974 2484/4353/974 2488/4354/1536 2489/4355/1536 +f 2487/4352/974 2490/4356/974 2491/4357/974 2484/4353/974 +f 2484/4353/974 2491/4357/974 2492/4358/974 2477/4359/974 +s 1 +f 2493/4360/428 2494/4361/428 2495/4362/428 2496/4363/428 +s 2 +f 2485/4350/1535 2497/4364/1537 2498/4365/1537 2486/4351/1535 +f 2497/4366/1537 2499/4367/1538 2500/4368/1538 2498/4369/1537 +f 2499/4367/1538 2501/4370/1539 2502/4371/1539 2500/4368/1538 +f 2501/4370/1539 2503/4372/1540 2504/4373/1540 2502/4371/1539 +f 2503/4372/1540 2505/4374/1541 2506/4375/1541 2504/4373/1540 +f 2505/4374/1541 2507/4376/1542 2508/4377/1542 2506/4375/1541 +f 2507/4378/1542 2489/4355/1536 2488/4354/1536 2508/4379/1542 +s 1 +f 2489/4380/428 2507/4381/428 2509/4382/428 +f 2486/4383/753 2498/4384/754 2510/4385/753 +f 2487/4386/428 2489/4380/428 2509/4382/428 2479/4339/428 +f 2490/4387/430 2487/4386/428 2479/4339/428 2478/4338/430 +f 2485/4388/428 2480/4340/428 2479/4339/428 2509/4382/428 +f 2499/4389/428 2497/4390/428 2509/4382/428 +f 2497/4390/428 2485/4388/428 2509/4382/428 +f 2503/4391/428 2501/4392/428 2509/4382/428 +f 2501/4392/428 2499/4389/428 2509/4382/428 +f 2507/4381/428 2505/4393/428 2509/4382/428 +f 2505/4393/428 2503/4391/428 2509/4382/428 +f 2486/4383/753 2510/4385/753 2483/4394/753 2482/4395/455 +f 2510/4385/753 2488/4396/752 2484/4397/753 2483/4394/753 +f 2508/4398/455 2488/4396/752 2510/4385/753 +f 2506/4399/455 2508/4398/455 2510/4385/753 +f 2504/4400/455 2506/4399/455 2510/4385/753 +f 2502/4401/754 2504/4400/455 2510/4385/753 +f 2498/4384/754 2500/4402/754 2510/4385/753 +f 2500/4402/754 2502/4401/754 2510/4385/753 +s 8 +f 2492/4403/429 2511/4404/430 2512/4405/428 2477/4406/428 +f 2459/4407/428 2461/4408/428 2513/4409/428 +f 2462/4410/428 2514/4411/428 2515/4412/428 2463/4413/428 +s 1 +f 2459/4414/1509 2516/4415/1509 2517/4416/301 2460/4417/974 +s 4 +f 2513/4418/1543 2518/4419/1543 2516/4415/1543 2459/4414/1543 +s 1 +f 2514/4420/187 2519/4421/187 2520/4422/187 2515/4423/187 +s 2 +f 2511/4424/396 2521/4425/396 2522/4426/396 2512/4427/396 +s 1 +f 2523/4428/1544 2524/4429/301 2525/4430/301 2526/4431/1544 +s 4 +f 2527/4432/1545 2528/4433/1545 2529/4434/1543 2530/4435/1543 +s 1 +f 2531/4436/187 2532/4437/187 2533/4438/187 2534/4439/187 +s 2 +f 2535/4440/396 2531/4441/396 2534/4442/396 2536/4443/396 +s 1 +f 2496/4363/428 2495/4362/428 2537/4444/428 +s 2 +f 2538/4445/1546 2539/4446/1547 2526/4431/1548 2525/4430/1549 +s 4 +f 2539/4446/1550 2540/4447/1551 2541/4448/1552 2542/4449/1552 +s 2 +f 2412/4257/1510 2411/4256/1530 2408/4253/1510 2407/4252/1510 +f 2411/4256/1530 2463/4318/1510 2461/4316/1530 2408/4253/1510 +s 8 +f 2527/4450/429 2543/4451/430 2544/4452/429 2528/4453/429 +f 2515/4412/428 2513/4409/428 2461/4408/428 2463/4413/428 +s 4 +f 2515/4423/1543 2520/4422/1543 2518/4419/1543 2513/4418/1543 +f 2540/4447/1551 2539/4446/1550 2529/4434/1543 2528/4433/1545 +f 2540/4447/1551 2528/4433/1545 2545/4454/1545 2546/4455/1553 +s 1 +f 2528/4456/1465 2544/4457/604 2547/4458/1465 2545/4459/1465 +f 2524/4429/301 2523/4428/1544 2548/4460/1544 2549/4461/301 +s 4 +f 2541/4448/1552 2540/4447/1551 2546/4455/1553 2550/4462/1552 +s 1 +f 2539/4446/1509 2538/4445/301 2517/4416/301 2516/4415/1509 +s 4 +f 2529/4434/1543 2539/4446/1550 2516/4415/1543 2518/4419/1543 +s 2 +f 2551/4463/187 2552/4464/187 2553/4465/187 2554/4466/187 +s 1 +f 2555/4467/604 2556/4468/604 2557/4469/604 2558/4470/604 +s 4 +f 2530/4435/1543 2529/4434/1543 2518/4419/1543 2520/4422/1543 +s 8 +f 2534/4471/430 2533/4472/456 2552/4473/430 2551/4474/430 +s 2 +f 2530/4475/974 2520/4476/974 2559/4477/1554 2560/4478/1554 +s 8 +f 2520/4479/455 2519/4480/455 2559/4481/455 +f 2522/4482/455 2521/4483/455 2558/4484/455 2557/4485/455 +f 2536/4486/428 2534/4471/430 2556/4487/430 2555/4488/428 +s 2 +f 2561/4489/1555 2562/4490/1556 2563/4491/1556 2564/4492/1555 +f 2565/4493/1557 2561/4489/1555 2564/4492/1555 2566/4494/1557 +f 2567/4495/1558 2565/4496/1557 2566/4497/1557 2568/4498/1558 +f 2559/4477/1554 2567/4495/1558 2568/4498/1558 2560/4478/1554 +s 8 +f 2534/4471/430 2551/4474/430 2556/4487/430 +f 2522/4482/455 2557/4485/455 2554/4499/455 +s 4 +f 2554/4500/1559 2557/4469/1559 2556/4468/1559 2551/4501/1559 +s 2 +f 2417/4502/974 2420/4503/974 2414/4259/974 2413/4258/974 +s 1 +f 2401/4246/428 2448/4504/428 2450/4311/429 2457/4310/429 +s 4 +f 2483/4346/1533 2476/4336/1532 2465/4321/187 2482/4345/187 +f 2476/4336/1532 2415/4333/1402 2458/4322/187 2465/4321/187 +s 1 +f 2458/4313/429 2415/4505/429 2414/4506/430 2457/4310/429 +f 2414/4506/430 2419/4507/428 2401/4246/428 2457/4310/429 +f 2446/4508/428 2448/4504/428 2401/4246/428 +f 2444/4509/428 2446/4508/428 2401/4246/428 +f 2401/4246/428 2419/4507/428 2422/4510/428 +f 2401/4246/428 2422/4510/428 2402/4247/428 +f 2426/4511/456 2428/4512/456 2401/4246/428 +f 2400/4245/428 2426/4511/456 2401/4246/428 +f 2442/4513/428 2444/4509/428 2401/4246/428 +f 2440/4514/428 2442/4513/428 2401/4246/428 +f 2436/4515/428 2438/4516/428 2401/4246/428 +f 2438/4516/428 2440/4514/428 2401/4246/428 +f 2432/4517/456 2434/4518/428 2401/4246/428 +f 2434/4518/428 2436/4515/428 2401/4246/428 +f 2428/4512/456 2430/4519/456 2401/4246/428 +f 2430/4519/456 2432/4517/456 2401/4246/428 +s 8 +f 2522/4482/455 2554/4499/455 2553/4520/455 2519/4480/455 +f 2481/4521/974 2480/4522/974 2569/4523/974 2570/4524/974 +s 4 +f 2480/4344/187 2471/4343/187 2571/4525/187 2569/4526/187 +s 8 +f 2471/4329/1531 2470/4328/1528 2572/4527/1528 2571/4528/1531 +f 2470/4328/1528 2473/4331/396 2573/4529/396 2572/4527/1528 +s 4 +f 2475/4335/1511 2474/4334/1511 2410/4255/1511 2409/4254/1511 +f 2474/4334/1511 2477/4337/1511 2462/4317/1511 2410/4255/1511 +s 8 +f 2462/4410/428 2477/4406/428 2512/4405/428 2514/4411/428 +s 1 +f 2512/4530/187 2522/4531/187 2519/4421/187 2514/4420/187 +f 2527/4432/187 2530/4435/187 2533/4438/187 2532/4437/187 +f 2574/4532/428 2575/4533/428 2576/4534/428 2577/4535/428 +s 2 +f 2563/4491/1556 2562/4490/1556 2553/4465/187 2552/4464/187 +s 8 +f 2533/4472/456 2563/4536/428 2552/4473/430 +f 2533/4472/456 2530/4537/428 2560/4538/428 +f 2533/4472/456 2560/4538/428 2568/4539/428 +f 2533/4472/456 2568/4539/428 2566/4540/428 +f 2533/4472/456 2566/4540/428 2564/4541/428 +f 2533/4472/456 2564/4541/428 2563/4536/428 +f 2519/4480/455 2565/4542/455 2567/4543/455 +f 2519/4480/455 2567/4543/455 2559/4481/455 +f 2553/4520/455 2562/4544/455 2519/4480/455 +f 2519/4480/455 2562/4544/455 2561/4545/455 +f 2519/4480/455 2561/4545/455 2565/4542/455 +f 2531/4546/429 2535/4547/429 2578/4548/429 2579/4549/429 +f 2532/4550/430 2580/4551/430 2543/4451/430 +f 2532/4550/430 2531/4546/429 2581/4552/430 2580/4551/430 +s 2 +f 2578/4553/396 2582/4554/396 2583/4555/396 2579/4556/396 +f 2580/4557/1560 2584/4558/974 2585/4559/1561 2543/4560/1562 +s 1 +f 2581/4561/188 2586/4562/188 2584/4563/187 2580/4564/187 +s 2 +f 2587/4565/396 2588/4566/396 2583/4555/396 2582/4554/396 +f 2577/4567/974 2576/4568/974 2585/4559/1561 2584/4558/974 +f 2589/4569/1563 2590/4570/1564 2591/4571/1565 2592/4572/1566 +s 1 +f 2574/4532/428 2593/4573/428 2594/4574/428 2588/4575/428 +s 2 +f 2577/4567/974 2584/4558/974 2595/4576/1567 2596/4577/1568 +s 4 +f 2586/4578/1569 2597/4579/1569 2595/4580/1569 2584/4581/1569 +s 2 +f 2583/4555/396 2588/4566/396 2594/4582/1570 2598/4583/1571 +f 2599/4584/1572 2591/4571/1565 2590/4570/1564 2600/4585/1573 +f 2601/4586/1574 2589/4569/1563 2592/4572/1566 2602/4587/1575 +f 2603/4588/1576 2599/4584/1572 2600/4585/1573 2604/4589/1577 +f 2605/4590/1578 2603/4591/1576 2604/4592/1577 2606/4593/1579 +f 2595/4576/1567 2605/4590/1578 2606/4593/1579 2596/4577/1568 +f 2607/4594/1580 2601/4586/1574 2602/4587/1575 2608/4595/1581 +f 2609/4596/1582 2607/4597/1580 2608/4598/1581 2610/4599/1583 +f 2594/4582/1570 2609/4596/1582 2610/4599/1583 2598/4583/1571 +s 1 +f 2596/4600/428 2606/4601/428 2593/4573/428 +f 2588/4575/428 2587/4602/428 2575/4533/428 2574/4532/428 +f 2577/4535/428 2596/4600/428 2593/4573/428 2574/4532/428 +f 2607/4603/428 2609/4604/428 2593/4573/428 +f 2609/4604/428 2594/4574/428 2593/4573/428 +f 2589/4605/428 2601/4606/428 2593/4573/428 +f 2601/4606/428 2607/4603/428 2593/4573/428 +f 2600/4607/428 2590/4608/428 2593/4573/428 +f 2590/4608/428 2589/4605/428 2593/4573/428 +f 2606/4601/428 2604/4609/428 2593/4573/428 +f 2604/4609/428 2600/4607/428 2593/4573/428 +s 4 +f 2598/4610/1584 2610/4611/1584 2608/4612/1569 2597/4579/1569 +s 8 +f 2531/4546/429 2579/4549/429 2581/4552/430 +s 1 +f 2579/4613/188 2583/4614/187 2586/4562/188 2581/4561/188 +s 4 +f 2583/4615/1569 2598/4610/1584 2597/4579/1569 2586/4578/1569 +f 2603/4616/1584 2605/4617/1569 2597/4579/1569 +f 2605/4617/1569 2595/4580/1569 2597/4579/1569 +f 2602/4618/1569 2592/4619/1584 2597/4579/1569 +f 2592/4619/1584 2591/4620/1569 2597/4579/1569 +f 2608/4612/1569 2602/4618/1569 2597/4579/1569 +f 2599/4621/1584 2603/4616/1584 2597/4579/1569 +f 2591/4620/1569 2599/4621/1584 2597/4579/1569 +s 1 +f 2611/4622/456 2572/4623/430 2612/4624/456 +f 2613/4625/428 2614/4626/428 2569/4627/428 +f 2614/4626/428 2615/4628/428 2570/4629/429 2569/4627/428 +f 2616/4630/428 2613/4625/428 2569/4627/428 +f 2617/4631/428 2616/4630/428 2569/4627/428 +f 2618/4632/456 2617/4631/428 2569/4627/428 +f 2619/4633/456 2620/4634/456 2572/4623/430 +f 2618/4632/456 2571/4635/430 2572/4623/430 2620/4634/456 +f 2611/4622/456 2621/4636/456 2572/4623/430 +f 2572/4623/430 2573/4637/430 2612/4624/456 +f 2621/4636/456 2619/4633/456 2572/4623/430 +s 2 +f 2615/4638/426 2614/4639/1585 2622/4640/1585 2623/4641/974 +f 2614/4639/1585 2613/4642/1586 2624/4643/1586 2622/4640/1585 +f 2613/4644/1586 2616/4645/1587 2625/4646/1587 2624/4647/1586 +f 2616/4645/1587 2617/4648/1588 2626/4649/1588 2625/4646/1587 +f 2617/4648/1588 2618/4650/1589 2627/4651/1589 2626/4649/1588 +f 2618/4650/1589 2620/4652/1590 2628/4653/1590 2627/4651/1589 +f 2620/4652/1590 2619/4654/1591 2629/4655/1591 2628/4653/1590 +f 2619/4654/1591 2621/4656/1592 2630/4657/1592 2629/4655/1591 +f 2621/4656/1592 2611/4658/1593 2631/4659/1593 2630/4657/1592 +f 2611/4660/1593 2612/4661/1594 2632/4662/1594 2631/4663/1593 +f 2612/4661/1594 2573/4664/396 2633/4665/742 2632/4662/1594 +s 1 +f 2634/4666/456 2635/4667/456 2636/4668/428 +f 2403/4248/974 2406/4251/301 2637/4669/1595 2638/4670/1595 +s 2 +f 2639/4671/1596 2638/4670/1597 2637/4669/1596 2640/4672/1596 +s 4 +f 2641/4673/1598 2642/4674/1598 2643/4675/1598 2644/4676/1598 +s 2 +f 2645/4677/974 2646/4678/974 2647/4679/974 2648/4680/974 +s 4 +f 2649/4681/1599 2650/4682/1599 2651/4683/1600 2652/4684/1600 +f 2652/4685/1600 2651/4686/1600 2653/4687/1601 2654/4688/1601 +f 2654/4689/1601 2653/4690/1601 2635/4691/1602 2655/4692/1602 +f 2655/4692/1602 2635/4691/1602 2634/4693/1603 2656/4694/1603 +f 2656/4694/1603 2634/4693/1603 2657/4695/189 2658/4696/584 +f 2658/4696/584 2657/4695/189 2659/4697/1604 2660/4698/1604 +f 2660/4698/1604 2659/4697/1604 2661/4699/1605 2662/4700/1605 +f 2662/4700/1605 2661/4699/1605 2663/4701/1606 2664/4702/1606 +f 2664/4703/1606 2663/4704/1606 2665/4705/1525 2666/4706/1525 +f 2666/4706/1525 2665/4705/1525 2667/4707/1524 2668/4708/1524 +f 2668/4708/1524 2667/4707/1524 2669/4709/1523 2670/4710/1523 +f 2670/4710/1523 2669/4709/1523 2671/4711/396 2672/4712/396 +f 2672/4712/396 2671/4711/396 2673/4713/1522 2674/4714/1522 +f 2674/4714/1522 2673/4713/1522 2675/4715/1521 2676/4716/1521 +f 2676/4716/1521 2675/4715/1521 2677/4717/1520 2678/4718/1520 +f 2678/4718/1520 2677/4717/1520 2679/4719/1607 2680/4720/1607 +s 2 +f 2680/4720/1608 2679/4719/1608 2681/4721/1608 2682/4722/1608 +s 8 +f 2682/4722/396 2681/4721/396 2683/4723/1609 2684/4724/1610 +f 2684/4724/1610 2683/4723/1609 2685/4725/1610 2686/4726/1610 +f 2686/4726/1610 2685/4725/1610 2456/4309/396 2455/4308/396 +s 1 +f 2687/4727/430 2688/4728/430 2683/4729/430 2681/4730/430 +f 2637/4669/1595 2406/4251/301 2460/4315/974 2689/4731/1595 +s 2 +f 2640/4672/1596 2637/4669/1596 2689/4731/1597 2690/4732/1597 +s 4 +f 2644/4676/1598 2643/4675/1598 2691/4733/1598 2692/4734/1598 +f 2683/4735/189 2688/4736/395 2693/4737/395 2694/4738/190 +s 8 +f 2685/4725/1610 2683/4723/1609 2694/4739/1611 2695/4740/1610 +f 2456/4309/396 2685/4725/1610 2695/4740/1610 2467/4325/396 +f 2696/4741/1611 2697/4742/1612 2698/4743/1610 2699/4744/1613 +f 2699/4744/1613 2698/4743/1610 2473/4331/396 2472/4330/396 +s 4 +f 2646/4745/1598 2700/4746/1598 2701/4747/1598 2647/4748/1295 +f 2647/4748/1295 2701/4747/1598 2702/4749/1598 2703/4750/1614 +s 1 +f 2478/4338/430 2481/4341/429 2704/4751/428 2705/4752/428 +s 4 +f 2696/4753/190 2706/4754/189 2704/4755/189 2697/4756/189 +f 2696/4753/190 2694/4738/190 2693/4737/395 2706/4754/189 +s 8 +f 2699/4744/1613 2695/4740/1610 2694/4739/1611 2696/4741/1611 +f 2472/4330/396 2467/4325/396 2695/4740/1610 2699/4744/1613 +s 4 +f 2707/4757/1615 2703/4750/1614 2702/4749/1598 2708/4758/1616 +s 16 +f 2706/4759/1617 2709/4760/1618 2710/4761/1618 2704/4762/1617 +s 2 +f 2711/4763/974 2712/4764/974 2713/4765/974 2708/4766/974 +f 2711/4763/974 2708/4766/974 2491/4357/974 2490/4356/974 +f 2708/4766/974 2702/4767/974 2492/4358/974 2491/4357/974 +s 1 +f 2714/4768/428 2715/4769/428 2495/4362/428 2494/4361/428 +s 16 +f 2710/4761/1618 2709/4760/1618 2716/4770/1619 2717/4771/1619 +f 2717/4772/1619 2716/4773/1619 2718/4774/1620 2719/4775/1620 +f 2719/4775/1620 2718/4774/1620 2720/4776/1621 2721/4777/1621 +f 2721/4777/1621 2720/4776/1621 2722/4778/1622 2723/4779/1622 +f 2723/4779/1622 2722/4778/1622 2724/4780/1623 2725/4781/1623 +f 2725/4781/1623 2724/4780/1623 2726/4782/1624 2727/4783/1624 +f 2727/4784/1624 2726/4785/1624 2713/4765/1625 2712/4764/1625 +s 1 +f 2712/4786/428 2728/4787/428 2727/4788/456 +f 2709/4789/753 2729/4790/753 2716/4791/753 +f 2711/4792/428 2705/4752/428 2728/4787/428 2712/4786/428 +f 2490/4387/430 2478/4338/430 2705/4752/428 2711/4792/428 +f 2710/4793/428 2728/4787/428 2705/4752/428 2704/4751/428 +f 2719/4794/428 2728/4787/428 2717/4795/428 +f 2717/4795/428 2728/4787/428 2710/4793/428 +f 2723/4796/456 2728/4787/428 2721/4797/428 +f 2721/4797/428 2728/4787/428 2719/4794/428 +f 2727/4788/456 2728/4787/428 2725/4798/456 +f 2725/4798/456 2728/4787/428 2723/4796/456 +f 2709/4789/753 2706/4799/752 2707/4800/753 2729/4790/753 +f 2729/4790/753 2707/4800/753 2708/4801/455 2713/4802/752 +f 2726/4803/752 2729/4790/753 2713/4802/752 +f 2724/4804/752 2729/4790/753 2726/4803/752 +f 2722/4805/752 2729/4790/753 2724/4804/752 +f 2720/4806/753 2729/4790/753 2722/4805/752 +f 2716/4791/753 2729/4790/753 2718/4807/753 +f 2718/4807/753 2729/4790/753 2720/4806/753 +s 8 +f 2492/4403/429 2702/4808/429 2730/4809/429 2511/4404/430 +f 2689/4810/429 2731/4811/429 2690/4812/429 +f 2692/4813/428 2691/4814/428 2732/4815/429 2733/4816/428 +s 1 +f 2689/4817/1595 2460/4417/974 2517/4416/301 2734/4818/1595 +s 4 +f 2731/4819/1626 2689/4817/1626 2734/4818/1627 2735/4820/1627 +s 1 +f 2733/4821/189 2732/4822/189 2736/4823/189 2737/4824/189 +s 2 +f 2511/4424/396 2730/4825/396 2738/4826/396 2521/4425/396 +s 1 +f 2739/4827/1628 2740/4828/1628 2525/4430/301 2524/4429/301 +s 4 +f 2741/4829/1626 2742/4830/1627 2743/4831/1627 2744/4832/1627 +s 1 +f 2745/4833/189 2746/4834/189 2747/4835/189 2748/4836/189 +s 2 +f 2535/4440/396 2536/4443/396 2746/4837/396 2745/4838/396 +s 1 +f 2715/4769/428 2749/4839/428 2495/4362/428 +s 2 +f 2538/4445/1546 2525/4430/1549 2750/4840/1629 2751/4841/1630 +s 4 +f 2751/4841/1631 2750/4840/1632 2752/4842/1632 2753/4843/1633 +s 2 +f 2642/4674/1596 2639/4671/1596 2640/4672/1596 2643/4675/1597 +f 2643/4675/1597 2640/4672/1596 2690/4732/1597 2691/4733/1597 +s 8 +f 2544/4452/429 2543/4451/430 2741/4844/428 2744/4845/428 +f 2732/4815/429 2691/4814/428 2690/4812/429 2731/4811/429 +s 4 +f 2732/4822/1626 2731/4819/1626 2735/4820/1627 2736/4823/1627 +f 2753/4843/1633 2744/4832/1627 2743/4831/1627 2751/4841/1631 +f 2753/4843/1633 2754/4846/1634 2755/4847/1627 2744/4832/1627 +s 1 +f 2744/4848/396 2755/4849/396 2547/4458/1465 2544/4457/604 +f 2524/4429/301 2549/4461/301 2756/4850/1628 2739/4827/1628 +s 4 +f 2752/4842/1632 2757/4851/1632 2754/4846/1634 2753/4843/1633 +s 1 +f 2751/4841/1595 2734/4818/1595 2517/4416/301 2538/4445/301 +s 4 +f 2743/4831/1627 2735/4820/1627 2734/4818/1627 2751/4841/1631 +s 2 +f 2758/4852/189 2759/4853/189 2760/4854/189 2761/4855/189 +s 1 +f 2555/4467/604 2558/4470/604 2762/4856/396 2763/4857/396 +s 4 +f 2742/4830/1627 2736/4823/1627 2735/4820/1627 2743/4831/1627 +s 8 +f 2746/4858/428 2758/4859/428 2761/4860/456 2747/4861/456 +s 2 +f 2742/4862/974 2764/4863/1635 2765/4864/1635 2736/4865/974 +s 8 +f 2736/4866/455 2765/4867/455 2737/4868/455 +f 2738/4869/455 2762/4870/455 2558/4484/455 2521/4483/455 +f 2536/4486/428 2555/4488/428 2763/4871/428 2746/4858/428 +s 2 +f 2766/4872/1636 2767/4873/1636 2768/4874/1637 2769/4875/1637 +f 2770/4876/1638 2771/4877/1638 2767/4873/1636 2766/4872/1636 +f 2772/4878/1639 2773/4879/1639 2771/4880/1638 2770/4881/1638 +f 2765/4864/1635 2764/4863/1635 2773/4879/1639 2772/4878/1639 +s 8 +f 2746/4858/428 2763/4871/428 2758/4859/428 +f 2738/4869/455 2759/4882/455 2762/4870/455 +s 4 +f 2759/4883/1640 2758/4884/1640 2763/4857/1640 2762/4856/1640 +s 2 +f 2649/4885/974 2645/4677/974 2648/4680/974 2650/4886/974 +s 1 +f 2636/4668/428 2687/4727/430 2681/4730/430 2679/4887/428 +s 4 +f 2707/4757/1615 2706/4754/189 2693/4737/395 2703/4750/1614 +f 2703/4750/1614 2693/4737/395 2688/4736/395 2647/4748/1295 +s 1 +f 2688/4728/430 2687/4727/430 2648/4888/430 2647/4889/429 +f 2636/4668/428 2651/4890/428 2648/4888/430 2687/4727/430 +f 2677/4891/428 2636/4668/428 2679/4887/428 +f 2675/4892/428 2636/4668/428 2677/4891/428 +f 2636/4668/428 2653/4893/428 2651/4890/428 +f 2636/4668/428 2635/4667/456 2653/4893/428 +f 2657/4894/428 2636/4668/428 2659/4895/428 +f 2634/4666/456 2636/4668/428 2657/4894/428 +f 2673/4896/428 2636/4668/428 2675/4892/428 +f 2671/4897/428 2636/4668/428 2673/4896/428 +f 2667/4898/428 2636/4668/428 2669/4899/428 +f 2669/4899/428 2636/4668/428 2671/4897/428 +f 2663/4900/456 2636/4668/428 2665/4901/456 +f 2665/4901/456 2636/4668/428 2667/4898/428 +f 2659/4895/428 2636/4668/428 2661/4902/428 +f 2661/4902/428 2636/4668/428 2663/4900/456 +s 8 +f 2738/4869/455 2737/4868/455 2760/4903/455 2759/4882/455 +f 2481/4521/974 2570/4524/974 2774/4904/974 2704/4905/974 +s 4 +f 2704/4755/189 2774/4906/189 2775/4907/189 2697/4756/189 +s 8 +f 2697/4742/1612 2775/4908/1612 2776/4909/1610 2698/4743/1610 +f 2698/4743/1610 2776/4909/1610 2573/4529/396 2473/4331/396 +s 4 +f 2700/4746/1598 2641/4673/1598 2644/4676/1598 2701/4747/1598 +f 2701/4747/1598 2644/4676/1598 2692/4734/1598 2702/4749/1598 +s 8 +f 2692/4813/428 2733/4816/428 2730/4809/429 2702/4808/429 +s 1 +f 2730/4910/189 2733/4821/189 2737/4824/189 2738/4911/189 +f 2741/4829/189 2748/4836/189 2747/4835/189 2742/4830/189 +f 2777/4912/428 2778/4913/428 2576/4534/428 2575/4533/428 +s 2 +f 2768/4874/1637 2761/4855/189 2760/4854/189 2769/4875/1637 +s 8 +f 2747/4861/456 2761/4860/456 2768/4914/428 +f 2747/4861/456 2764/4915/428 2742/4916/428 +f 2747/4861/456 2773/4917/428 2764/4915/428 +f 2747/4861/456 2771/4918/428 2773/4917/428 +f 2747/4861/456 2767/4919/428 2771/4918/428 +f 2747/4861/456 2768/4914/428 2767/4919/428 +f 2737/4868/455 2772/4920/455 2770/4921/455 +f 2737/4868/455 2765/4867/455 2772/4920/455 +f 2760/4903/455 2737/4868/455 2769/4922/455 +f 2737/4868/455 2766/4923/455 2769/4922/455 +f 2737/4868/455 2770/4921/455 2766/4923/455 +f 2745/4924/428 2779/4925/428 2578/4548/429 2535/4547/429 +f 2543/4451/430 2780/4926/428 2748/4927/428 +f 2748/4927/428 2780/4926/428 2781/4928/428 2745/4924/428 +s 2 +f 2578/4553/396 2779/4929/396 2782/4930/396 2582/4554/396 +f 2780/4931/1641 2543/4560/1562 2585/4559/1561 2783/4932/974 +s 1 +f 2781/4933/189 2780/4934/189 2783/4935/189 2784/4936/189 +s 2 +f 2587/4565/396 2582/4554/396 2782/4930/396 2785/4937/396 +f 2778/4938/974 2783/4932/974 2585/4559/1561 2576/4568/974 +f 2786/4939/1642 2787/4940/1643 2788/4941/1644 2789/4942/1645 +s 1 +f 2777/4912/428 2785/4943/428 2790/4944/428 2791/4945/428 +s 2 +f 2778/4938/974 2792/4946/1646 2793/4947/1647 2783/4932/974 +s 4 +f 2784/4948/1648 2783/4949/1648 2793/4950/1648 2794/4951/1648 +s 2 +f 2782/4930/396 2795/4952/1649 2790/4953/1650 2785/4937/396 +f 2796/4954/1651 2797/4955/1652 2789/4942/1645 2788/4941/1644 +f 2798/4956/1653 2799/4957/1654 2787/4940/1643 2786/4939/1642 +f 2800/4958/1655 2801/4959/1656 2797/4955/1652 2796/4954/1651 +f 2802/4960/1657 2803/4961/1658 2801/4962/1656 2800/4963/1655 +f 2793/4947/1647 2792/4946/1646 2803/4961/1658 2802/4960/1657 +f 2804/4964/1659 2805/4965/1660 2799/4957/1654 2798/4956/1653 +f 2806/4966/1661 2807/4967/1662 2805/4968/1660 2804/4969/1659 +f 2790/4953/1650 2795/4952/1649 2807/4967/1662 2806/4966/1661 +s 1 +f 2792/4970/428 2791/4945/428 2803/4971/428 +f 2785/4943/428 2777/4912/428 2575/4533/428 2587/4602/428 +f 2778/4913/428 2777/4912/428 2791/4945/428 2792/4970/428 +f 2804/4972/428 2791/4945/428 2806/4973/428 +f 2806/4973/428 2791/4945/428 2790/4944/428 +f 2786/4974/428 2791/4945/428 2798/4975/428 +f 2798/4975/428 2791/4945/428 2804/4972/428 +f 2797/4976/428 2791/4945/428 2789/4977/428 +f 2789/4977/428 2791/4945/428 2786/4974/428 +f 2803/4971/428 2791/4945/428 2801/4978/428 +f 2801/4978/428 2791/4945/428 2797/4976/428 +s 4 +f 2795/4979/1663 2794/4951/1648 2805/4980/1648 2807/4981/1663 +s 8 +f 2745/4924/428 2781/4928/428 2779/4925/428 +s 1 +f 2779/4982/189 2781/4933/189 2784/4936/189 2782/4983/189 +s 4 +f 2782/4984/1648 2784/4948/1648 2794/4951/1648 2795/4979/1663 +f 2800/4985/1663 2794/4951/1648 2802/4986/1648 +f 2802/4986/1648 2794/4951/1648 2793/4950/1648 +f 2799/4987/1648 2794/4951/1648 2787/4988/1663 +f 2787/4988/1663 2794/4951/1648 2788/4989/1648 +f 2805/4980/1648 2794/4951/1648 2799/4987/1648 +f 2796/4990/1663 2794/4951/1648 2800/4985/1663 +f 2788/4989/1648 2794/4951/1648 2796/4990/1663 +s 1 +f 2808/4991/430 2809/4992/430 2776/4993/430 +f 2810/4994/429 2774/4995/429 2811/4996/429 +f 2811/4996/429 2774/4995/429 2570/4629/429 2615/4628/428 +f 2812/4997/429 2774/4995/429 2810/4994/429 +f 2813/4998/429 2774/4995/429 2812/4997/429 +f 2814/4999/430 2774/4995/429 2813/4998/429 +f 2815/5000/430 2776/4993/430 2816/5001/430 +f 2776/4993/430 2775/5002/430 2814/4999/430 2816/5001/430 +f 2808/4991/430 2776/4993/430 2817/5003/430 +f 2776/4993/430 2809/4992/430 2573/4637/430 +f 2817/5003/430 2776/4993/430 2815/5000/430 +s 2 +f 2615/4638/426 2623/4641/974 2818/5004/1664 2811/5005/1665 +f 2811/5005/1665 2818/5004/1664 2819/5006/1666 2810/5007/1666 +f 2810/5008/1666 2819/5009/1666 2820/5010/1667 2812/5011/1668 +f 2812/5011/1668 2820/5010/1667 2821/5012/1669 2813/5013/1669 +f 2813/5013/1669 2821/5012/1669 2822/5014/1670 2814/5015/1670 +f 2814/5015/1670 2822/5014/1670 2823/5016/1671 2816/5017/1672 +f 2816/5017/1672 2823/5016/1671 2824/5018/1673 2815/5019/1673 +f 2815/5019/1673 2824/5018/1673 2825/5020/1674 2817/5021/1674 +f 2817/5021/1674 2825/5020/1674 2826/5022/1675 2808/5023/1675 +f 2808/5024/1675 2826/5025/1675 2827/5026/1676 2809/5027/1677 +f 2809/5027/1677 2827/5026/1676 2633/4665/742 2573/4664/396 +s 1 +f 2623/5028/428 2622/5029/428 2828/5030/428 2829/5031/428 +f 2622/5029/428 2624/5032/428 2830/5033/428 2828/5030/428 +f 2624/5032/428 2625/5034/428 2831/5035/428 2830/5033/428 +f 2625/5034/428 2626/5036/428 2832/5037/428 2831/5035/428 +f 2626/5036/428 2627/5038/428 2833/5039/428 2832/5037/428 +f 2627/5038/428 2628/5040/428 2834/5041/428 2833/5039/428 +f 2628/5040/428 2629/5042/428 2835/5043/428 2834/5041/428 +f 2629/5042/428 2630/5044/428 2836/5045/428 2835/5043/428 +f 2630/5044/428 2631/5046/428 2837/5047/428 2836/5045/428 +f 2631/5046/428 2632/5048/428 2838/5049/428 2837/5047/428 +f 2632/5048/428 2633/5050/428 2839/5051/428 2838/5049/428 +f 2633/5050/428 2827/5052/428 2840/5053/428 2839/5051/428 +f 2827/5052/428 2826/5054/428 2841/5055/428 2840/5053/428 +f 2826/5054/428 2825/5056/428 2842/5057/428 2841/5055/428 +f 2825/5056/428 2824/5058/428 2843/5059/428 2842/5057/428 +f 2824/5058/428 2823/5060/428 2844/5061/428 2843/5059/428 +f 2823/5060/428 2822/5062/428 2845/5063/428 2844/5061/428 +f 2822/5062/428 2821/5064/428 2846/5065/428 2845/5063/428 +f 2821/5064/428 2820/5066/428 2847/5067/428 2846/5065/428 +f 2820/5066/428 2819/5068/428 2848/5069/428 2847/5067/428 +f 2819/5068/428 2818/5070/428 2849/5071/428 2848/5069/428 +f 2818/5070/428 2623/5028/428 2829/5031/428 2849/5071/428 +s 2 +f 2829/5072/974 2828/5073/1678 2850/5074/1678 2851/5075/300 +f 2828/5073/1678 2830/5076/1679 2852/5077/1679 2850/5074/1678 +f 2830/5076/1679 2831/5078/1680 2853/5079/1680 2852/5077/1679 +f 2831/5080/1680 2832/5081/1681 2854/5082/1681 2853/5083/1680 +f 2832/5081/1681 2833/5084/1682 2855/5085/1682 2854/5082/1681 +f 2833/5084/1682 2834/5086/1683 2856/5087/1683 2855/5085/1682 +f 2834/5086/1683 2835/5088/1684 2857/5089/1684 2856/5087/1683 +f 2835/5090/1684 2836/5091/1685 2858/5092/1685 2857/5093/1684 +f 2836/5091/1685 2837/5094/1686 2859/5095/1686 2858/5092/1685 +f 2837/5094/1686 2838/5096/1687 2860/5097/1687 2859/5095/1686 +f 2838/5098/1687 2839/5099/742 2861/5100/396 2860/5101/1687 +f 2839/5099/742 2840/5102/1676 2862/5103/1676 2861/5100/396 +f 2840/5102/1676 2841/5104/1688 2863/5105/1675 2862/5103/1676 +f 2841/5106/1688 2842/5107/1689 2864/5108/1689 2863/5109/1675 +f 2842/5107/1689 2843/5110/1690 2865/5111/1690 2864/5108/1689 +f 2843/5110/1690 2844/5112/1671 2866/5113/1671 2865/5111/1690 +f 2844/5112/1671 2845/5114/1670 2867/5115/1670 2866/5113/1671 +f 2845/5116/1670 2846/5117/1669 2868/5118/1669 2867/5119/1670 +f 2846/5117/1669 2847/5120/1668 2869/5121/1668 2868/5118/1669 +f 2847/5120/1668 2848/5122/1666 2870/5123/1691 2869/5121/1668 +f 2848/5124/1666 2849/5125/1665 2871/5126/1665 2870/5127/1691 +f 2849/5125/1665 2829/5072/974 2851/5075/300 2871/5126/1665 +s 1 +f 2851/5128/428 2850/5129/428 2872/5130/428 2873/5131/428 +f 2850/5129/428 2852/5132/428 2874/5133/428 2872/5130/428 +f 2852/5132/428 2853/5134/428 2875/5135/428 2874/5133/428 +f 2853/5134/428 2854/5136/428 2876/5137/428 2875/5135/428 +f 2854/5136/428 2855/5138/428 2877/5139/428 2876/5137/428 +f 2855/5138/428 2856/5140/428 2878/5141/428 2877/5139/428 +f 2856/5140/428 2857/5142/428 2879/5143/428 2878/5141/428 +f 2857/5142/428 2858/5144/428 2880/5145/428 2879/5143/428 +f 2858/5144/428 2859/5146/428 2881/5147/428 2880/5145/428 +f 2859/5146/428 2860/5148/428 2882/5149/428 2881/5147/428 +f 2860/5148/428 2861/5150/428 2883/5151/428 2882/5149/428 +f 2861/5150/428 2862/5152/428 2884/5153/428 2883/5151/428 +f 2862/5152/428 2863/5154/428 2885/5155/428 2884/5153/428 +f 2863/5154/428 2864/5156/428 2886/5157/428 2885/5155/428 +f 2864/5156/428 2865/5158/428 2887/5159/428 2886/5157/428 +f 2865/5158/428 2866/5160/428 2888/5161/428 2887/5159/428 +f 2866/5160/428 2867/5162/428 2889/5163/428 2888/5161/428 +f 2867/5162/428 2868/5164/428 2890/5165/428 2889/5163/428 +f 2868/5164/428 2869/5166/428 2891/5167/428 2890/5165/428 +f 2869/5166/428 2870/5168/428 2892/5169/428 2891/5167/428 +f 2870/5168/428 2871/5170/428 2893/5171/428 2892/5169/428 +f 2871/5170/428 2851/5128/428 2873/5131/428 2893/5171/428 +s 2 +f 2873/5172/396 2872/5173/1677 2894/5174/1677 2895/5175/742 +f 2872/5173/1677 2874/5176/1692 2896/5177/1692 2894/5174/1677 +f 2874/5178/1692 2875/5179/1689 2897/5180/1689 2896/5181/1692 +f 2875/5179/1689 2876/5182/1690 2898/5183/1690 2897/5180/1689 +f 2876/5182/1690 2877/5184/1671 2899/5185/1671 2898/5183/1690 +f 2877/5184/1671 2878/5186/1670 2900/5187/1670 2899/5185/1671 +f 2878/5186/1670 2879/5188/1669 2901/5189/1669 2900/5187/1670 +f 2879/5188/1669 2880/5190/1668 2902/5191/1668 2901/5189/1669 +f 2880/5190/1668 2881/5192/1691 2903/5193/1691 2902/5191/1668 +f 2881/5194/1691 2882/5195/1664 2904/5196/1664 2903/5197/1691 +f 2882/5195/1664 2883/5198/301 2905/5199/301 2904/5196/1664 +f 2883/5198/301 2884/5200/1678 2906/5201/1678 2905/5199/301 +f 2884/5200/1678 2885/5202/1679 2907/5203/1679 2906/5201/1678 +f 2885/5204/1679 2886/5205/1680 2908/5206/1680 2907/5207/1679 +f 2886/5205/1680 2887/5208/1681 2909/5209/1681 2908/5206/1680 +f 2887/5208/1681 2888/5210/1682 2910/5211/1682 2909/5209/1681 +f 2888/5210/1682 2889/5212/1683 2911/5213/1683 2910/5211/1682 +f 2889/5212/1683 2890/5214/1684 2912/5215/1684 2911/5213/1683 +f 2890/5214/1684 2891/5216/1685 2913/5217/1685 2912/5215/1684 +f 2891/5216/1685 2892/5218/1693 2914/5219/1694 2913/5217/1685 +f 2892/5220/1693 2893/5221/1594 2915/5222/1594 2914/5223/1694 +f 2893/5221/1594 2873/5172/396 2895/5175/742 2915/5222/1594 +s 1 +f 2895/5224/428 2894/5225/428 2916/5226/428 +f 2894/5225/428 2896/5227/428 2916/5226/428 +f 2896/5227/428 2897/5228/428 2916/5226/428 +f 2897/5228/428 2898/5229/428 2916/5226/428 +f 2898/5229/428 2899/5230/428 2916/5226/428 +f 2899/5230/428 2900/5231/428 2916/5226/428 +f 2900/5231/428 2901/5232/428 2916/5226/428 +f 2901/5232/428 2902/5233/428 2916/5226/428 +f 2902/5233/428 2903/5234/428 2916/5226/428 +f 2903/5234/428 2904/5235/428 2916/5226/428 +f 2904/5235/428 2905/5236/428 2916/5226/428 +f 2905/5236/428 2906/5237/428 2916/5226/428 +f 2906/5237/428 2907/5238/428 2916/5226/428 +f 2907/5238/428 2908/5239/428 2916/5226/428 +f 2908/5239/428 2909/5240/428 2916/5226/428 +f 2909/5240/428 2910/5241/428 2916/5226/428 +f 2910/5241/428 2911/5242/428 2916/5226/428 +f 2911/5242/428 2912/5243/428 2916/5226/428 +f 2912/5243/428 2913/5244/428 2916/5226/428 +f 2913/5244/428 2914/5245/428 2916/5226/428 +f 2914/5245/428 2915/5246/428 2916/5226/428 +f 2915/5246/428 2895/5224/428 2916/5226/428 +f 2917/5247/1695 2918/5248/1696 2919/5249/1695 2920/5250/1695 +s 2 +f 2918/5251/1526 2921/5252/1620 2922/5253/1620 2919/5254/1526 +f 2921/5252/1620 2923/5255/584 2924/5256/584 2922/5253/1620 +f 2923/5257/584 2925/5258/1697 2926/5259/1697 2924/5260/584 +s 1 +f 2925/5261/1638 2927/5262/1698 2928/5263/1625 2926/5264/1638 +f 2927/5262/1698 2929/5265/1699 2930/5266/1699 2928/5263/1625 +s 2 +f 2929/5265/1536 2931/5267/1700 2932/5268/1700 2930/5266/1536 +f 2931/5267/1700 2933/5269/1557 2934/5270/1557 2932/5268/1700 +s 1 +f 2933/5271/1701 2935/5272/188 2936/5273/188 2934/5274/1701 +f 2935/5272/188 2937/5275/1702 2938/5276/1702 2936/5273/188 +s 2 +f 2937/5277/1607 2939/5278/1703 2940/5279/1703 2938/5280/1607 +f 2939/5278/1703 2917/5247/1704 2920/5250/1704 2940/5279/1703 +s 1 +f 2941/5281/455 2942/5282/455 2943/5283/455 2944/5284/455 +f 2945/5285/455 2941/5281/455 2944/5284/455 2946/5286/455 +f 2947/5287/455 2945/5285/455 2946/5286/455 2948/5288/455 +f 2949/5289/455 2947/5287/455 2948/5288/455 2950/5290/455 +f 2951/5291/455 2949/5289/455 2950/5290/455 2952/5292/455 +f 2953/5293/455 2951/5291/455 2952/5292/455 2954/5294/455 +f 2955/5295/455 2953/5293/455 2954/5294/455 2956/5296/455 +f 2957/5297/455 2955/5295/455 2956/5296/455 2958/5298/455 +f 2959/5299/455 2957/5297/455 2958/5298/455 2960/5300/455 +f 2961/5301/455 2959/5299/455 2960/5300/455 2962/5302/455 +f 2963/5303/455 2961/5301/455 2962/5302/455 2964/5304/455 +f 2942/5282/455 2963/5303/455 2964/5304/455 2943/5283/455 +f 2965/5305/455 2966/5306/455 2967/5307/455 +f 2968/5308/455 2965/5305/455 2967/5307/455 +f 2969/5309/455 2968/5308/455 2967/5307/455 +f 2970/5310/455 2969/5309/455 2967/5307/455 +f 2971/5311/455 2970/5310/455 2967/5307/455 +f 2972/5312/455 2971/5311/455 2967/5307/455 +f 2973/5313/455 2972/5312/455 2967/5307/455 +f 2974/5314/455 2973/5313/455 2967/5307/455 +f 2975/5315/455 2974/5314/455 2967/5307/455 +f 2976/5316/455 2975/5315/455 2967/5307/455 +f 2977/5317/455 2976/5316/455 2967/5307/455 +f 2966/5306/455 2977/5317/455 2967/5307/455 +s 4 +f 2978/5318/1705 2979/5319/1706 2980/5320/1707 2981/5321/1708 +f 2979/5319/1706 2982/5322/1709 2983/5323/1710 2980/5320/1707 +f 2982/5322/1709 2984/5324/1711 2985/5325/1712 2983/5323/1710 +f 2984/5324/1711 2986/5326/1713 2987/5327/1714 2985/5325/1712 +f 2986/5326/1713 2988/5328/1715 2989/5329/1716 2987/5327/1714 +f 2988/5328/1715 2990/5330/1717 2991/5331/1718 2989/5329/1716 +f 2990/5330/1717 2992/5332/1719 2993/5333/1720 2991/5331/1718 +f 2992/5332/1719 2994/5334/1721 2995/5335/1722 2993/5333/1720 +f 2994/5334/1721 2996/5336/1723 2997/5337/1724 2995/5335/1722 +f 2996/5336/1723 2998/5338/1725 2999/5339/1726 2997/5337/1724 +f 2998/5338/1725 3000/5340/1727 3001/5341/1728 2999/5339/1726 +f 3000/5340/1727 2978/5318/1705 2981/5321/1708 3001/5341/1728 +f 2981/5321/1708 2980/5320/1707 3002/5342/428 +f 2980/5320/1707 2983/5323/1710 3002/5342/428 +f 2983/5323/1710 2985/5325/1712 3002/5342/428 +f 2985/5325/1712 2987/5327/1714 3002/5342/428 +f 2987/5327/1714 2989/5329/1716 3002/5342/428 +f 2989/5329/1716 2991/5331/1718 3002/5342/428 +f 2991/5331/1718 2993/5333/1720 3002/5342/428 +f 2993/5333/1720 2995/5335/1722 3002/5342/428 +f 2995/5335/1722 2997/5337/1724 3002/5342/428 +f 2997/5337/1724 2999/5339/1726 3002/5342/428 +f 2999/5339/1726 3001/5341/1728 3002/5342/428 +f 3001/5341/1728 2981/5321/1708 3002/5342/428 +f 2917/5343/1729 2942/5282/1729 2941/5281/1730 2918/5344/1730 +f 2919/5345/1731 2979/5319/1706 2978/5318/1705 2920/5346/1732 +f 2918/5344/1730 2941/5281/1730 2945/5285/1733 2921/5347/1733 +f 2922/5348/1734 2982/5322/1709 2979/5319/1706 2919/5345/1731 +f 2921/5347/1733 2945/5285/1733 2947/5287/1735 2923/5349/1735 +f 2924/5350/1736 2984/5324/1711 2982/5322/1709 2922/5348/1734 +f 2923/5349/1735 2947/5287/1735 2949/5289/1737 2925/5351/1737 +f 2926/5352/1738 2986/5326/1713 2984/5324/1711 2924/5350/1736 +f 2925/5351/1737 2949/5289/1737 2951/5291/1739 2927/5353/1739 +f 2928/5354/1740 2988/5328/1715 2986/5326/1713 2926/5352/1738 +f 2927/5353/1739 2951/5291/1739 2953/5293/1741 2929/5355/1741 +f 2930/5356/1742 2990/5330/1717 2988/5328/1715 2928/5354/1740 +f 2929/5355/1741 2953/5293/1741 2955/5295/1743 2931/5357/1743 +f 2932/5358/1744 2992/5332/1719 2990/5330/1717 2930/5356/1742 +f 2931/5357/1743 2955/5295/1743 2957/5297/1745 2933/5359/1745 +f 2934/5360/1746 2994/5334/1721 2992/5332/1719 2932/5358/1744 +f 2933/5359/1745 2957/5297/1745 2959/5299/1747 2935/5361/1747 +f 2936/5362/1748 2996/5336/1723 2994/5334/1721 2934/5360/1746 +f 2935/5361/1747 2959/5299/1747 2961/5301/1749 2937/5363/1749 +f 2938/5364/1750 2998/5338/1725 2996/5336/1723 2936/5362/1748 +f 2937/5363/1749 2961/5301/1749 2963/5303/1751 2939/5365/1751 +f 2940/5366/1752 3000/5340/1727 2998/5338/1725 2938/5364/1750 +f 2939/5365/1751 2963/5303/1751 2942/5282/1729 2917/5343/1729 +f 2920/5346/1732 2978/5318/1705 3000/5340/1727 2940/5366/1752 +s 2 +f 2944/5367/1696 2943/5368/1696 2966/5369/1696 2965/5370/1696 +s 4 +f 2943/5368/1704 2964/5371/1704 2977/5372/1704 2966/5369/1704 +s 2 +f 2964/5373/1607 2962/5374/1538 2976/5375/1538 2977/5376/1607 +f 2962/5374/1538 2960/5377/188 2975/5378/188 2976/5375/1538 +f 2960/5379/188 2958/5380/1701 2974/5381/1701 2975/5382/188 +s 4 +f 2958/5383/1557 2956/5384/1700 2973/5385/1700 2974/5386/1557 +f 2956/5384/1700 2954/5387/1536 2972/5388/1536 2973/5385/1700 +s 2 +f 2954/5387/1753 2952/5389/1625 2971/5390/1625 2972/5388/1753 +f 2952/5389/1625 2950/5391/1638 2970/5392/1638 2971/5390/1625 +s 4 +f 2950/5393/1697 2948/5394/1697 2969/5395/1697 2970/5396/1697 +s 8 +f 2948/5394/1754 2946/5397/1620 2968/5398/1620 2969/5395/1754 +f 2946/5399/1620 2944/5400/1526 2965/5401/1526 2968/5402/1620 +s 1 +f 3003/5403/1696 3004/5404/1755 3005/5405/1756 3006/5406/1696 +f 3004/5404/1755 3007/5407/1757 3008/5408/1757 3005/5405/1756 +s 2 +f 3007/5409/1758 3009/5410/584 3010/5411/395 3008/5412/1758 +f 3009/5410/584 3011/5413/1697 3012/5414/1697 3010/5411/395 +s 1 +f 3011/5415/1638 3013/5416/1625 3014/5417/1625 3012/5418/1638 +f 3013/5416/1625 3015/5419/1753 3016/5420/1753 3014/5417/1625 +s 2 +f 3015/5419/1536 3017/5421/1700 3018/5422/1700 3016/5420/1536 +f 3017/5421/1700 3019/5423/1557 3020/5424/1557 3018/5422/1700 +s 1 +f 3019/5425/1701 3021/5426/188 3022/5427/188 3020/5428/1701 +f 3021/5426/188 3023/5429/1702 3024/5430/1702 3022/5427/188 +s 2 +f 3023/5431/1607 3025/5432/1703 3026/5433/1703 3024/5434/1607 +f 3025/5432/1703 3003/5403/1704 3006/5406/1704 3026/5433/1703 +s 1 +f 3027/5435/455 3028/5436/455 3029/5437/455 3030/5438/455 +f 3031/5439/455 3027/5435/455 3030/5438/455 3032/5440/455 +f 3033/5441/455 3031/5439/455 3032/5440/455 3034/5442/455 +f 3035/5443/455 3033/5441/455 3034/5442/455 3036/5444/455 +f 3037/5445/455 3035/5443/455 3036/5444/455 3038/5446/455 +f 3039/5447/455 3037/5445/455 3038/5446/455 3040/5448/455 +f 3041/5449/455 3039/5447/455 3040/5448/455 3042/5450/455 +f 3043/5451/455 3041/5449/455 3042/5450/455 3044/5452/455 +f 3045/5453/455 3043/5451/455 3044/5452/455 3046/5454/455 +f 3047/5455/455 3045/5453/455 3046/5454/455 3048/5456/455 +f 3049/5457/455 3047/5455/455 3048/5456/455 3050/5458/455 +f 3028/5436/455 3049/5457/455 3050/5458/455 3029/5437/455 +f 3051/5459/455 3052/5460/455 3053/5461/455 +f 3054/5462/455 3051/5459/455 3053/5461/455 +f 3055/5463/455 3054/5462/455 3053/5461/455 +f 3056/5464/455 3055/5463/455 3053/5461/455 +f 3057/5465/455 3056/5464/455 3053/5461/455 +f 3058/5466/455 3057/5465/455 3053/5461/455 +f 3059/5467/455 3058/5466/455 3053/5461/455 +f 3060/5468/455 3059/5467/455 3053/5461/455 +f 3061/5469/455 3060/5468/455 3053/5461/455 +f 3062/5470/455 3061/5469/455 3053/5461/455 +f 3063/5471/455 3062/5470/455 3053/5461/455 +f 3052/5460/455 3063/5471/455 3053/5461/455 +s 4 +f 3064/5472/1705 3065/5473/1706 3066/5474/1707 3067/5475/1708 +f 3065/5473/1706 3068/5476/1709 3069/5477/1710 3066/5474/1707 +f 3068/5476/1709 3070/5478/1711 3071/5479/1712 3069/5477/1710 +f 3070/5478/1711 3072/5480/1713 3073/5481/1714 3071/5479/1712 +f 3072/5480/1713 3074/5482/1715 3075/5483/1716 3073/5481/1714 +f 3074/5482/1715 3076/5484/1717 3077/5485/1718 3075/5483/1716 +f 3076/5484/1717 3078/5486/1719 3079/5487/1720 3077/5485/1718 +f 3078/5486/1719 3080/5488/1721 3081/5489/1722 3079/5487/1720 +f 3080/5488/1721 3082/5490/1723 3083/5491/1724 3081/5489/1722 +f 3082/5490/1723 3084/5492/1725 3085/5493/1726 3083/5491/1724 +f 3084/5492/1725 3086/5494/1759 3087/5495/1728 3085/5493/1726 +f 3086/5494/1759 3064/5472/1705 3067/5475/1708 3087/5495/1728 +f 3067/5475/1708 3066/5474/1707 3088/5496/429 +f 3066/5474/1707 3069/5477/1710 3088/5496/429 +f 3069/5477/1710 3071/5479/1712 3088/5496/429 +f 3071/5479/1712 3073/5481/1714 3088/5496/429 +f 3073/5481/1714 3075/5483/1716 3088/5496/429 +f 3075/5483/1716 3077/5485/1718 3088/5496/429 +f 3077/5485/1718 3079/5487/1720 3088/5496/429 +f 3079/5487/1720 3081/5489/1722 3088/5496/429 +f 3081/5489/1722 3083/5491/1724 3088/5496/429 +f 3083/5491/1724 3085/5493/1726 3088/5496/429 +f 3085/5493/1726 3087/5495/1728 3088/5496/429 +f 3087/5495/1728 3067/5475/1708 3088/5496/429 +f 3003/5497/1729 3028/5436/1729 3027/5435/1730 3004/5498/1730 +f 3005/5499/1731 3065/5473/1706 3064/5472/1705 3006/5500/1732 +f 3004/5498/1730 3027/5435/1730 3031/5439/1733 3007/5501/1733 +f 3008/5502/1734 3068/5476/1709 3065/5473/1706 3005/5499/1731 +f 3007/5501/1733 3031/5439/1733 3033/5441/1735 3009/5503/1735 +f 3010/5504/1736 3070/5478/1711 3068/5476/1709 3008/5502/1734 +f 3009/5503/1735 3033/5441/1735 3035/5443/1737 3011/5505/1737 +f 3012/5506/1738 3072/5480/1713 3070/5478/1711 3010/5504/1736 +f 3011/5505/1737 3035/5443/1737 3037/5445/1739 3013/5507/1739 +f 3014/5508/1740 3074/5482/1715 3072/5480/1713 3012/5506/1738 +f 3013/5507/1739 3037/5445/1739 3039/5447/1741 3015/5509/1741 +f 3016/5510/1742 3076/5484/1717 3074/5482/1715 3014/5508/1740 +f 3015/5509/1741 3039/5447/1741 3041/5449/1743 3017/5511/1743 +f 3018/5512/1744 3078/5486/1719 3076/5484/1717 3016/5510/1742 +f 3017/5511/1743 3041/5449/1743 3043/5451/1745 3019/5513/1745 +f 3020/5514/1746 3080/5488/1721 3078/5486/1719 3018/5512/1744 +f 3019/5513/1745 3043/5451/1745 3045/5453/1760 3021/5515/1760 +f 3022/5516/1748 3082/5490/1723 3080/5488/1721 3020/5514/1746 +f 3021/5515/1760 3045/5453/1760 3047/5455/1749 3023/5517/1749 +f 3024/5518/1761 3084/5492/1725 3082/5490/1723 3022/5516/1748 +f 3023/5517/1749 3047/5455/1749 3049/5457/1751 3025/5519/1751 +f 3026/5520/1752 3086/5494/1759 3084/5492/1725 3024/5518/1761 +f 3025/5519/1751 3049/5457/1751 3028/5436/1729 3003/5497/1729 +f 3006/5500/1732 3064/5472/1705 3086/5494/1759 3026/5520/1752 +s 2 +f 3030/5521/1756 3029/5522/1696 3052/5523/1696 3051/5524/1756 +s 4 +f 3029/5522/1704 3050/5525/1703 3063/5526/1703 3052/5523/1704 +f 3050/5525/1703 3048/5527/1607 3062/5528/1607 3063/5526/1703 +s 2 +f 3048/5529/1702 3046/5530/1702 3061/5531/1702 3062/5532/1702 +s 4 +f 3046/5530/1701 3044/5533/1541 3060/5534/1541 3061/5531/1701 +f 3044/5535/1541 3042/5536/1557 3059/5537/1557 3060/5538/1541 +s 2 +f 3042/5539/1536 3040/5540/1536 3058/5541/1536 3059/5542/1536 +s 4 +f 3040/5540/1753 3038/5543/1753 3057/5544/1753 3058/5541/1753 +s 2 +f 3038/5545/1638 3036/5546/1623 3056/5547/1623 3057/5548/1638 +f 3036/5546/1623 3034/5549/1697 3055/5550/1697 3056/5547/1623 +s 4 +f 3034/5551/1754 3032/5552/1754 3054/5553/1754 3055/5554/1754 +s 2 +f 3032/5555/1526 3030/5521/1756 3051/5524/1756 3054/5556/1526 +s 1 +f 3089/5557/1762 3090/5558/1762 3091/5559/1762 3092/5560/1763 +s 2 +f 3090/5561/396 3093/5562/396 3094/5563/396 3091/5564/396 +s 1 +f 3095/5565/974 3096/5566/974 3097/5567/974 3098/5568/974 +f 3099/5569/1764 3100/5570/1765 3101/5571/1765 3102/5572/1766 +f 3100/5570/1765 3103/5573/1767 3104/5574/1767 3101/5571/1765 +f 3103/5573/1767 3105/5575/1768 3106/5576/1768 3104/5574/1767 +f 3105/5575/1768 3107/5577/1769 3108/5578/1769 3106/5576/1768 +f 3107/5577/1769 3109/5579/1770 3110/5580/1770 3108/5578/1769 +f 3109/5579/1770 3111/5581/1771 3112/5582/1771 3110/5580/1770 +f 3111/5581/1771 3113/5583/1772 3114/5584/1772 3112/5582/1771 +f 3113/5585/1772 3115/5586/1515 3116/5587/1515 3114/5588/1772 +f 3115/5586/1515 3117/5589/1516 3118/5590/1516 3116/5587/1515 +f 3117/5589/1516 3119/5591/1773 3120/5592/1773 3118/5590/1516 +f 3119/5591/1773 3121/5593/1774 3122/5594/1774 3120/5592/1773 +f 3121/5593/1774 3123/5595/1775 3124/5596/1775 3122/5594/1774 +f 3123/5595/1775 3125/5597/1776 3126/5598/1776 3124/5596/1775 +f 3125/5597/1776 3127/5599/1777 3128/5600/1777 3126/5598/1776 +f 3127/5599/1777 3129/5601/1778 3130/5602/1778 3128/5600/1777 +s 2 +f 3129/5603/396 3131/5604/396 3132/5605/396 3130/5606/396 +s 4 +f 3131/5607/187 3133/5608/1779 3134/5609/1780 3132/5610/187 +f 3133/5608/1779 3089/5557/1781 3092/5560/1782 3134/5609/1780 +s 1 +f 3092/5560/1763 3091/5559/1762 3135/5611/1783 3136/5612/1784 +s 2 +f 3091/5564/396 3094/5563/396 3137/5613/396 3135/5614/396 +s 1 +f 3096/5566/974 3138/5615/974 3139/5616/974 3097/5567/974 +s 4 +f 3140/5617/187 3141/5618/187 3142/5619/187 3102/5620/187 +f 3132/5610/187 3134/5609/1780 3143/5621/1785 3144/5622/187 +f 3134/5609/1780 3092/5560/1782 3136/5612/1786 3143/5621/1785 +s 1 +f 3145/5623/429 3146/5624/429 3147/5625/430 3148/5626/429 +s 8 +f 3143/5627/428 3136/5628/428 3149/5629/428 3150/5630/428 +f 3143/5627/428 3150/5630/428 3151/5631/456 3144/5632/428 +f 3102/5633/428 3101/5634/428 3140/5635/428 +f 3101/5634/428 3104/5636/428 3140/5635/428 +f 3104/5636/428 3106/5637/428 3140/5635/428 +f 3106/5637/428 3108/5638/428 3140/5635/428 +f 3108/5638/428 3110/5639/428 3140/5635/428 +f 3110/5639/428 3112/5640/428 3140/5635/428 +f 3112/5640/428 3114/5641/428 3140/5635/428 +f 3114/5641/428 3116/5642/428 3140/5635/428 +f 3116/5642/428 3118/5643/428 3140/5635/428 +f 3118/5643/428 3120/5644/428 3140/5635/428 +f 3120/5644/428 3122/5645/428 3140/5635/428 +f 3122/5645/428 3124/5646/428 3140/5635/428 +f 3124/5646/428 3126/5647/428 3140/5635/428 +f 3128/5648/428 3132/5649/428 3140/5635/428 3126/5647/428 +f 3128/5648/428 3130/5650/428 3132/5649/428 +s 4 +f 3132/5610/187 3144/5622/187 3141/5618/187 3140/5617/187 +s 8 +f 3136/5628/428 3135/5651/428 3152/5652/428 3149/5629/428 +f 3135/5651/428 3137/5653/428 3153/5654/428 3152/5652/428 +s 1 +f 3152/5655/1787 3154/5656/1787 3155/5657/1787 3149/5658/1787 +s 2 +f 3153/5659/396 3156/5660/396 3154/5661/396 3152/5662/396 +f 3149/5663/974 3155/5664/974 3157/5665/974 3158/5666/974 +s 4 +f 3159/5667/1788 3160/5668/1788 3161/5669/1788 3162/5670/1788 +s 2 +f 3163/5671/396 3159/5672/396 3162/5673/396 3164/5674/396 +f 3147/5675/974 3146/5676/974 3157/5665/974 3155/5664/974 +s 1 +f 3148/5626/429 3147/5625/430 3160/5677/430 3159/5678/429 +s 2 +f 3147/5675/974 3155/5664/974 3161/5679/974 3160/5680/974 +s 8 +f 3155/5681/1789 3154/5682/1790 3162/5683/1791 3161/5684/1792 +f 3154/5682/1790 3156/5685/1793 3164/5686/1793 3162/5683/1791 +s 1 +f 3145/5623/429 3148/5626/429 3159/5678/429 3163/5687/430 +s 8 +f 3141/5688/456 3144/5632/428 3151/5631/456 3165/5689/456 +s 1 +f 3099/5569/1764 3102/5572/1766 3096/5566/974 3095/5565/974 +f 3102/5572/1766 3142/5690/974 3138/5615/974 3096/5566/974 +s 8 +f 3166/5691/430 3167/5692/430 3151/5631/456 3150/5630/428 +f 3142/5693/428 3141/5688/456 3165/5689/456 3138/5694/428 +f 3158/5695/429 3166/5691/430 3150/5630/428 3149/5629/428 +f 3168/5696/428 3138/5694/428 3169/5697/428 +f 3170/5698/428 3151/5631/456 3171/5699/428 +f 3172/5700/428 3173/5701/428 3138/5694/428 +f 3173/5701/428 3174/5702/428 3139/5703/429 3138/5694/428 +f 3168/5696/428 3172/5700/428 3138/5694/428 +f 3138/5694/428 3165/5689/456 3175/5704/428 3169/5697/428 +f 3176/5705/428 3177/5706/428 3165/5689/456 +f 3178/5707/428 3176/5705/428 3165/5689/456 +f 3165/5689/456 3177/5706/428 3175/5704/428 +f 3170/5698/428 3178/5707/428 3165/5689/456 3151/5631/456 +f 3151/5631/456 3179/5708/428 3171/5699/428 +f 3151/5631/456 3167/5692/430 3180/5709/430 3179/5708/428 +s 1 +f 3174/5710/426 3173/5711/1585 3181/5712/1585 3182/5713/301 +f 3173/5711/1585 3172/5714/1794 3183/5715/1794 3181/5712/1585 +f 3172/5714/1794 3168/5716/1587 3184/5717/1587 3183/5715/1794 +f 3168/5718/1587 3169/5719/1588 3185/5720/1588 3184/5721/1587 +f 3169/5719/1588 3175/5722/1589 3186/5723/1589 3185/5720/1588 +f 3175/5722/1589 3177/5724/186 3187/5725/186 3186/5723/1589 +f 3177/5724/186 3176/5726/1590 3188/5727/1590 3187/5725/186 +f 3176/5726/1590 3178/5728/1591 3189/5729/1591 3188/5727/1590 +f 3178/5728/1591 3170/5730/1795 3190/5731/1795 3189/5729/1591 +f 3170/5730/1795 3171/5732/1796 3191/5733/1796 3190/5731/1795 +f 3171/5734/1796 3179/5735/1594 3192/5736/1594 3191/5737/1796 +f 3179/5735/1594 3180/5738/396 3193/5739/742 3192/5736/1594 +f 3194/5740/1797 3195/5741/1798 3196/5742/1797 3197/5743/1797 +s 2 +f 3197/5744/396 3196/5745/396 3094/5563/396 3093/5562/396 +s 1 +f 3198/5746/974 3098/5568/974 3097/5567/974 3199/5747/974 +f 3200/5748/1799 3201/5749/1800 3202/5750/1801 3203/5751/1801 +f 3203/5751/1801 3202/5750/1801 3204/5752/1802 3205/5753/1802 +f 3205/5753/1802 3204/5752/1802 3206/5754/1803 3207/5755/1803 +f 3207/5755/1803 3206/5754/1803 3208/5756/1804 3209/5757/1804 +f 3209/5757/1804 3208/5756/1804 3210/5758/1805 3211/5759/1805 +f 3211/5759/1805 3210/5758/1805 3212/5760/1806 3213/5761/1806 +f 3213/5761/1806 3212/5760/1806 3214/5762/1807 3215/5763/1807 +f 3215/5764/1807 3214/5765/1807 3216/5766/1602 3217/5767/1602 +f 3217/5767/1602 3216/5766/1602 3218/5768/1603 3219/5769/1603 +f 3219/5769/1603 3218/5768/1603 3220/5770/1808 3221/5771/1808 +f 3221/5771/1808 3220/5770/1808 3222/5772/1809 3223/5773/1809 +f 3223/5773/1809 3222/5772/1809 3224/5774/1810 3225/5775/1810 +f 3225/5775/1810 3224/5774/1810 3226/5776/1811 3227/5777/1811 +f 3227/5777/1811 3226/5776/1811 3228/5778/1812 3229/5779/1812 +f 3229/5779/1812 3228/5778/1812 3230/5780/1813 3231/5781/1813 +s 2 +f 3231/5782/396 3230/5783/396 3232/5784/396 3233/5785/396 +s 4 +f 3233/5786/189 3232/5787/189 3234/5788/1814 3235/5789/1815 +f 3235/5789/1815 3234/5788/1814 3195/5741/1816 3194/5740/1817 +s 1 +f 3195/5741/1798 3236/5790/1818 3237/5791/1819 3196/5742/1797 +s 2 +f 3196/5745/396 3237/5792/396 3137/5613/396 3094/5563/396 +s 1 +f 3199/5747/974 3097/5567/974 3139/5616/974 3238/5793/974 +s 4 +f 3239/5794/584 3201/5795/584 3240/5796/584 3241/5797/584 +f 3232/5787/189 3242/5798/190 3243/5799/1820 3234/5788/1814 +f 3234/5788/1814 3243/5799/1820 3236/5790/1821 3195/5741/1816 +s 1 +f 3145/5623/429 3244/5800/428 3245/5801/428 3146/5624/429 +s 8 +f 3243/5802/429 3246/5803/429 3247/5804/430 3236/5805/430 +f 3243/5802/429 3242/5806/428 3248/5807/430 3246/5803/429 +f 3201/5808/428 3239/5809/428 3202/5810/428 +f 3202/5810/428 3239/5809/428 3204/5811/428 +f 3204/5811/428 3239/5809/428 3206/5812/428 +f 3206/5812/428 3239/5809/428 3208/5813/428 +f 3208/5813/428 3239/5809/428 3210/5814/428 +f 3210/5814/428 3239/5809/428 3212/5815/428 +f 3212/5815/428 3239/5809/428 3214/5816/428 +f 3214/5816/428 3239/5809/428 3216/5817/428 +f 3216/5817/428 3239/5809/428 3218/5818/428 +f 3218/5818/428 3239/5809/428 3220/5819/428 +f 3220/5819/428 3239/5809/428 3222/5820/428 +f 3222/5820/428 3239/5809/428 3224/5821/428 +f 3224/5821/428 3239/5809/428 3226/5822/428 +f 3228/5823/428 3226/5822/428 3239/5809/428 3232/5824/428 +f 3228/5823/428 3232/5824/428 3230/5825/428 +s 4 +f 3232/5787/189 3239/5794/584 3241/5797/584 3242/5798/190 +s 8 +f 3236/5805/430 3247/5804/430 3249/5826/429 3237/5827/429 +f 3237/5827/429 3249/5826/429 3153/5654/428 3137/5653/428 +s 1 +f 3249/5828/1822 3247/5829/1822 3250/5830/1822 3251/5831/1822 +s 2 +f 3153/5659/396 3249/5832/396 3251/5833/396 3156/5660/396 +f 3247/5834/974 3158/5666/974 3157/5665/974 3250/5835/974 +s 4 +f 3252/5836/1823 3253/5837/1823 3254/5838/1823 3255/5839/1823 +s 2 +f 3163/5671/396 3164/5674/396 3253/5840/396 3252/5841/396 +f 3245/5842/974 3250/5835/974 3157/5665/974 3146/5676/974 +s 1 +f 3244/5800/428 3252/5843/428 3255/5844/428 3245/5801/428 +s 2 +f 3245/5842/974 3255/5845/974 3254/5846/974 3250/5835/974 +s 8 +f 3250/5847/1824 3254/5848/1825 3253/5849/1826 3251/5850/1827 +f 3251/5850/1827 3253/5849/1826 3164/5686/1793 3156/5685/1793 +s 1 +f 3145/5623/429 3163/5687/430 3252/5843/428 3244/5800/428 +s 8 +f 3241/5851/428 3256/5852/430 3248/5807/430 3242/5806/428 +s 1 +f 3200/5748/1799 3198/5746/974 3199/5747/974 3201/5749/1800 +f 3201/5749/1800 3199/5747/974 3238/5793/974 3240/5853/974 +s 8 +f 3166/5691/430 3246/5803/429 3248/5807/430 3167/5692/430 +f 3240/5854/428 3238/5855/429 3256/5852/430 3241/5851/428 +f 3158/5695/429 3247/5804/430 3246/5803/429 3166/5691/430 +f 3257/5856/429 3258/5857/429 3238/5855/429 +f 3259/5858/430 3260/5859/430 3248/5807/430 +f 3261/5860/429 3238/5855/429 3262/5861/429 +f 3262/5861/429 3238/5855/429 3139/5703/429 3174/5702/428 +f 3257/5856/429 3238/5855/429 3261/5860/429 +f 3238/5855/429 3258/5857/429 3263/5862/429 3256/5852/430 +f 3264/5863/430 3256/5852/430 3265/5864/429 +f 3266/5865/430 3256/5852/430 3264/5863/430 +f 3256/5852/430 3263/5862/429 3265/5864/429 +f 3259/5858/430 3248/5807/430 3256/5852/430 3266/5865/430 +f 3248/5807/430 3260/5859/430 3267/5866/430 +f 3248/5807/430 3267/5866/430 3180/5709/430 3167/5692/430 +s 1 +f 3174/5710/426 3182/5713/301 3268/5867/1664 3262/5868/1664 +f 3262/5868/1664 3268/5867/1664 3269/5869/1828 3261/5870/1828 +f 3261/5870/1828 3269/5869/1828 3270/5871/1668 3257/5872/1668 +f 3257/5873/1668 3270/5874/1668 3271/5875/1669 3258/5876/1669 +f 3258/5876/1669 3271/5875/1669 3272/5877/1670 3263/5878/1670 +f 3263/5878/1670 3272/5877/1670 3273/5879/584 3265/5880/584 +f 3265/5880/584 3273/5879/584 3274/5881/1671 3264/5882/1671 +f 3264/5882/1671 3274/5881/1671 3275/5883/1690 3266/5884/1690 +f 3266/5884/1690 3275/5883/1690 3276/5885/1829 3259/5886/1829 +f 3259/5886/1829 3276/5885/1829 3277/5887/1830 3260/5888/1830 +f 3260/5889/1830 3277/5890/1830 3278/5891/1677 3267/5892/1677 +f 3267/5892/1677 3278/5891/1677 3193/5739/742 3180/5738/396 +s 2 +f 3182/5893/428 3181/5894/428 3279/5895/428 3280/5896/428 +f 3181/5894/428 3183/5897/428 3281/5898/428 3279/5895/428 +f 3183/5897/428 3184/5899/428 3282/5900/428 3281/5898/428 +f 3184/5899/428 3185/5901/428 3283/5902/428 3282/5900/428 +f 3185/5901/428 3186/5903/428 3284/5904/428 3283/5902/428 +f 3186/5903/428 3187/5905/428 3285/5906/428 3284/5904/428 +f 3187/5905/428 3188/5907/428 3286/5908/428 3285/5906/428 +f 3188/5907/428 3189/5909/428 3287/5910/428 3286/5908/428 +f 3189/5909/428 3190/5911/428 3288/5912/428 3287/5910/428 +f 3190/5911/428 3191/5913/428 3289/5914/428 3288/5912/428 +f 3191/5913/428 3192/5915/428 3290/5916/428 3289/5914/428 +f 3192/5915/428 3193/5917/428 3291/5918/428 3290/5916/428 +f 3193/5917/428 3278/5919/428 3292/5920/428 3291/5918/428 +f 3278/5919/428 3277/5921/428 3293/5922/428 3292/5920/428 +f 3277/5921/428 3276/5923/428 3294/5924/428 3293/5922/428 +f 3276/5923/428 3275/5925/428 3295/5926/428 3294/5924/428 +f 3275/5925/428 3274/5927/428 3296/5928/428 3295/5926/428 +f 3274/5927/428 3273/5929/428 3297/5930/428 3296/5928/428 +f 3273/5929/428 3272/5931/428 3298/5932/428 3297/5930/428 +f 3272/5931/428 3271/5933/428 3299/5934/428 3298/5932/428 +f 3271/5933/428 3270/5935/428 3300/5936/428 3299/5934/428 +f 3270/5935/428 3269/5937/428 3301/5938/428 3300/5936/428 +f 3269/5937/428 3268/5939/428 3302/5940/428 3301/5938/428 +f 3268/5939/428 3182/5893/428 3280/5896/428 3302/5940/428 +s 1 +f 3280/5941/301 3279/5942/1678 3303/5943/1678 3304/5944/426 +f 3279/5942/1678 3281/5945/1679 3305/5946/1679 3303/5943/1678 +f 3281/5947/1679 3282/5948/1680 3306/5949/1680 3305/5950/1679 +f 3282/5948/1680 3283/5951/1681 3307/5952/1681 3306/5949/1680 +f 3283/5951/1681 3284/5953/1682 3308/5954/1682 3307/5952/1681 +f 3284/5953/1682 3285/5955/188 3309/5956/188 3308/5954/1682 +f 3285/5955/188 3286/5957/1683 3310/5958/1683 3309/5956/188 +f 3286/5957/1683 3287/5959/1684 3311/5960/1684 3310/5958/1683 +f 3287/5959/1684 3288/5961/1685 3312/5962/1685 3311/5960/1684 +f 3288/5963/1685 3289/5964/1694 3313/5965/1694 3312/5966/1685 +f 3289/5964/1694 3290/5967/1687 3314/5968/1687 3313/5965/1694 +f 3290/5967/1687 3291/5969/742 3315/5970/396 3314/5968/1687 +f 3291/5969/742 3292/5971/1676 3316/5972/1676 3315/5970/396 +f 3292/5971/1676 3293/5973/1692 3317/5974/1831 3316/5972/1676 +f 3293/5973/1692 3294/5975/1829 3318/5976/1829 3317/5974/1831 +f 3294/5977/1829 3295/5978/1690 3319/5979/1690 3318/5980/1829 +f 3295/5978/1690 3296/5981/1671 3320/5982/1671 3319/5979/1690 +f 3296/5981/1671 3297/5983/584 3321/5984/584 3320/5982/1671 +f 3297/5983/584 3298/5985/1670 3322/5986/1670 3321/5984/584 +f 3298/5985/1670 3299/5987/1832 3323/5988/1669 3322/5986/1670 +f 3299/5987/1832 3300/5989/1667 3324/5990/1667 3323/5988/1669 +f 3300/5989/1667 3301/5991/1666 3325/5992/1666 3324/5990/1667 +f 3301/5993/1666 3302/5994/1665 3326/5995/1665 3325/5996/1666 +f 3302/5994/1665 3280/5941/301 3304/5944/426 3326/5995/1665 +s 2 +f 3304/5997/428 3303/5998/428 3327/5999/428 3328/6000/428 +f 3303/5998/428 3305/6001/428 3329/6002/428 3327/5999/428 +f 3305/6001/428 3306/6003/428 3330/6004/428 3329/6002/428 +f 3306/6003/428 3307/6005/428 3331/6006/428 3330/6004/428 +f 3307/6005/428 3308/6007/428 3332/6008/428 3331/6006/428 +f 3308/6007/428 3309/6009/428 3333/6010/428 3332/6008/428 +f 3309/6009/428 3310/6011/428 3334/6012/428 3333/6010/428 +f 3310/6011/428 3311/6013/428 3335/6014/428 3334/6012/428 +f 3311/6013/428 3312/6015/428 3336/6016/428 3335/6014/428 +f 3312/6015/428 3313/6017/428 3337/6018/428 3336/6016/428 +f 3313/6017/428 3314/6019/428 3338/6020/428 3337/6018/428 +f 3314/6019/428 3315/6021/428 3339/6022/428 3338/6020/428 +f 3315/6021/428 3316/6023/428 3340/6024/428 3339/6022/428 +f 3316/6023/428 3317/6025/428 3341/6026/428 3340/6024/428 +f 3317/6025/428 3318/6027/428 3342/6028/428 3341/6026/428 +f 3318/6027/428 3319/6029/428 3343/6030/428 3342/6028/428 +f 3319/6029/428 3320/6031/428 3344/6032/428 3343/6030/428 +f 3320/6031/428 3321/6033/428 3345/6034/428 3344/6032/428 +f 3321/6033/428 3322/6035/428 3346/6036/428 3345/6034/428 +f 3322/6035/428 3323/6037/428 3347/6038/428 3346/6036/428 +f 3323/6037/428 3324/6039/428 3348/6040/428 3347/6038/428 +f 3324/6039/428 3325/6041/428 3349/6042/428 3348/6040/428 +f 3325/6041/428 3326/6043/428 3350/6044/428 3349/6042/428 +f 3326/6043/428 3304/5997/428 3328/6000/428 3350/6044/428 +s 1 +f 3328/6045/742 3327/6046/1677 3351/6047/1677 3352/6048/396 +f 3327/6046/1677 3329/6049/1830 3353/6050/1830 3351/6047/1677 +f 3329/6049/1830 3330/6051/1829 3354/6052/1829 3353/6050/1830 +f 3330/6053/1829 3331/6054/1690 3355/6055/1690 3354/6056/1829 +f 3331/6054/1690 3332/6057/1671 3356/6058/1671 3355/6055/1690 +f 3332/6057/1671 3333/6059/189 3357/6060/189 3356/6058/1671 +f 3333/6059/189 3334/6061/1670 3358/6062/1670 3357/6060/189 +f 3334/6061/1670 3335/6063/1669 3359/6064/1669 3358/6062/1670 +f 3335/6065/1669 3336/6066/1833 3360/6067/1833 3359/6068/1669 +f 3336/6066/1833 3337/6069/1834 3361/6070/1834 3360/6067/1833 +f 3337/6069/1834 3338/6071/1664 3362/6072/1664 3361/6070/1834 +f 3338/6073/1664 3339/6074/974 3363/6075/300 3362/6076/1664 +f 3339/6074/974 3340/6077/1678 3364/6078/1585 3363/6075/300 +f 3340/6077/1678 3341/6079/1835 3365/6080/1835 3364/6078/1585 +f 3341/6081/1835 3342/6082/1836 3366/6083/1836 3365/6084/1835 +f 3342/6082/1836 3343/6085/1681 3367/6086/1681 3366/6083/1836 +f 3343/6085/1681 3344/6087/1682 3368/6088/1682 3367/6086/1681 +f 3344/6087/1682 3345/6089/187 3369/6090/187 3368/6088/1682 +f 3345/6089/187 3346/6091/1683 3370/6092/1683 3369/6090/187 +f 3346/6093/1683 3347/6094/1684 3371/6095/1684 3370/6096/1683 +f 3347/6094/1684 3348/6097/1837 3372/6098/1837 3371/6095/1684 +f 3348/6097/1837 3349/6099/1838 3373/6100/1838 3372/6098/1837 +f 3349/6101/1838 3350/6102/1594 3374/6103/1687 3373/6104/1838 +f 3350/6102/1594 3328/6045/742 3352/6048/396 3374/6103/1687 +s 2 +f 3352/6105/428 3351/6106/428 3375/6107/456 +f 3351/6106/428 3353/6108/428 3375/6107/456 +f 3353/6108/428 3354/6109/428 3375/6107/456 +f 3354/6109/428 3355/6110/428 3375/6107/456 +f 3355/6110/428 3356/6111/428 3375/6107/456 +f 3356/6111/428 3357/6112/428 3375/6107/456 +f 3357/6112/428 3358/6113/456 3375/6107/456 +f 3358/6113/456 3359/6114/456 3375/6107/456 +f 3359/6114/456 3360/6115/456 3375/6107/456 +f 3360/6115/456 3361/6116/456 3375/6107/456 +f 3361/6116/456 3362/6117/456 3375/6107/456 +f 3362/6117/456 3363/6118/456 3375/6107/456 +f 3363/6118/456 3364/6119/430 3375/6107/456 +f 3364/6119/430 3365/6120/430 3375/6107/456 +f 3365/6120/430 3366/6121/430 3375/6107/456 +f 3366/6121/430 3367/6122/430 3375/6107/456 +f 3367/6122/430 3368/6123/430 3375/6107/456 +f 3368/6123/430 3369/6124/429 3375/6107/456 +f 3369/6124/429 3370/6125/429 3375/6107/456 +f 3370/6125/429 3371/6126/429 3375/6107/456 +f 3371/6126/429 3372/6127/429 3375/6107/456 +f 3372/6127/429 3373/6128/429 3375/6107/456 +f 3373/6128/429 3374/6129/429 3375/6107/456 +f 3374/6129/429 3352/6105/428 3375/6107/456 +s 1 +f 3376/6130/1696 3377/6131/1696 3378/6132/1696 3379/6133/1696 +s 2 +f 3377/6134/1526 3380/6135/1620 3381/6136/1620 3378/6137/1526 +f 3380/6135/1620 3382/6138/1754 3383/6139/1754 3381/6136/1620 +s 1 +f 3382/6140/1697 3384/6141/1623 3385/6142/1623 3383/6143/1697 +f 3384/6141/1623 3386/6144/1638 3387/6145/1638 3385/6142/1623 +s 2 +f 3386/6146/1753 3388/6147/1753 3389/6148/1753 3387/6149/1753 +s 1 +f 3388/6147/1839 3390/6150/1536 3391/6151/1839 3389/6148/1839 +s 2 +f 3390/6152/1557 3392/6153/1541 3393/6154/1541 3391/6155/1557 +f 3392/6153/1541 3394/6156/1701 3395/6157/1701 3393/6154/1541 +s 1 +f 3394/6158/1702 3396/6159/1702 3397/6160/1702 3395/6161/1702 +s 2 +f 3396/6162/1607 3398/6163/1703 3399/6164/1703 3397/6165/1607 +f 3398/6163/1703 3376/6130/1704 3379/6133/1704 3399/6164/1703 +s 1 +f 3400/6166/455 3401/6167/455 3402/6168/455 3403/6169/455 +f 3404/6170/455 3400/6166/455 3403/6169/455 3405/6171/455 +f 3406/6172/455 3404/6170/455 3405/6171/455 3407/6173/455 +f 3408/6174/455 3406/6172/455 3407/6173/455 3409/6175/455 +f 3410/6176/455 3408/6174/455 3409/6175/455 3411/6177/455 +f 3412/6178/455 3410/6176/455 3411/6177/455 3413/6179/455 +f 3414/6180/455 3412/6178/455 3413/6179/455 3415/6181/455 +f 3416/6182/455 3414/6180/455 3415/6181/455 3417/6183/455 +f 3418/6184/455 3416/6182/455 3417/6183/455 3419/6185/455 +f 3420/6186/455 3418/6184/455 3419/6185/455 3421/6187/455 +f 3422/6188/455 3420/6186/455 3421/6187/455 3423/6189/455 +f 3401/6167/455 3422/6188/455 3423/6189/455 3402/6168/455 +f 3424/6190/455 3425/6191/455 3426/6192/455 +f 3427/6193/455 3424/6190/455 3426/6192/455 +f 3428/6194/455 3427/6193/455 3426/6192/455 +f 3429/6195/455 3428/6194/455 3426/6192/455 +f 3430/6196/455 3429/6195/455 3426/6192/455 +f 3431/6197/455 3430/6196/455 3426/6192/455 +f 3432/6198/455 3431/6197/455 3426/6192/455 +f 3433/6199/455 3432/6198/455 3426/6192/455 +f 3434/6200/455 3433/6199/455 3426/6192/455 +f 3435/6201/455 3434/6200/455 3426/6192/455 +f 3436/6202/455 3435/6201/455 3426/6192/455 +f 3425/6191/455 3436/6202/455 3426/6192/455 +s 4 +f 3437/6203/1705 3438/6204/1840 3439/6205/1707 3440/6206/1708 +f 3438/6204/1840 3441/6207/1709 3442/6208/1710 3439/6205/1707 +f 3441/6207/1709 3443/6209/1711 3444/6210/1841 3442/6208/1710 +f 3443/6209/1711 3445/6211/1713 3446/6212/1714 3444/6210/1841 +f 3445/6211/1713 3447/6213/1842 3448/6214/1716 3446/6212/1714 +f 3447/6213/1842 3449/6215/1843 3450/6216/1844 3448/6214/1716 +f 3449/6215/1843 3451/6217/1845 3452/6218/1720 3450/6216/1844 +f 3451/6217/1845 3453/6219/1721 3454/6220/1722 3452/6218/1720 +f 3453/6219/1721 3455/6221/1723 3456/6222/1846 3454/6220/1722 +f 3455/6221/1723 3457/6223/1725 3458/6224/1726 3456/6222/1846 +f 3457/6223/1725 3459/6225/1727 3460/6226/1728 3458/6224/1726 +f 3459/6225/1727 3437/6203/1705 3440/6206/1708 3460/6226/1728 +f 3440/6206/1708 3439/6205/1707 3461/6227/429 +f 3439/6205/1707 3442/6208/1710 3461/6227/429 +f 3442/6208/1710 3444/6210/1841 3461/6227/429 +f 3444/6210/1841 3446/6212/1714 3461/6227/429 +f 3446/6212/1714 3448/6214/1716 3461/6227/429 +f 3448/6214/1716 3450/6216/1844 3461/6227/429 +f 3450/6216/1844 3452/6218/1720 3461/6227/429 +f 3452/6218/1720 3454/6220/1722 3461/6227/429 +f 3454/6220/1722 3456/6222/1846 3461/6227/429 +f 3456/6222/1846 3458/6224/1726 3461/6227/429 +f 3458/6224/1726 3460/6226/1728 3461/6227/429 +f 3460/6226/1728 3440/6206/1708 3461/6227/429 +f 3376/6228/1729 3401/6167/1729 3400/6166/1847 3377/6229/1730 +f 3378/6230/1731 3438/6204/1840 3437/6203/1705 3379/6231/1732 +f 3377/6229/1730 3400/6166/1847 3404/6170/1733 3380/6232/1733 +f 3381/6233/1734 3441/6207/1709 3438/6204/1840 3378/6230/1731 +f 3380/6232/1733 3404/6170/1733 3406/6172/1735 3382/6234/1848 +f 3383/6235/1849 3443/6209/1711 3441/6207/1709 3381/6233/1734 +f 3382/6234/1848 3406/6172/1735 3408/6174/1737 3384/6236/1737 +f 3385/6237/1738 3445/6211/1713 3443/6209/1711 3383/6235/1849 +f 3384/6236/1737 3408/6174/1737 3410/6176/1850 3386/6238/1739 +f 3387/6239/1740 3447/6213/1842 3445/6211/1713 3385/6237/1738 +f 3386/6238/1739 3410/6176/1850 3412/6178/1851 3388/6240/1851 +f 3389/6241/1852 3449/6215/1843 3447/6213/1842 3387/6239/1740 +f 3388/6240/1851 3412/6178/1851 3414/6180/1853 3390/6242/1743 +f 3391/6243/1744 3451/6217/1845 3449/6215/1843 3389/6241/1852 +f 3390/6242/1743 3414/6180/1853 3416/6182/1745 3392/6244/1745 +f 3393/6245/1746 3453/6219/1721 3451/6217/1845 3391/6243/1744 +f 3392/6244/1745 3416/6182/1745 3418/6184/1760 3394/6246/1760 +f 3395/6247/1748 3455/6221/1723 3453/6219/1721 3393/6245/1746 +f 3394/6246/1760 3418/6184/1760 3420/6186/1749 3396/6248/1749 +f 3397/6249/1761 3457/6223/1725 3455/6221/1723 3395/6247/1748 +f 3396/6248/1749 3420/6186/1749 3422/6188/1854 3398/6250/1751 +f 3399/6251/1752 3459/6225/1727 3457/6223/1725 3397/6249/1761 +f 3398/6250/1751 3422/6188/1854 3401/6167/1729 3376/6228/1729 +f 3379/6231/1732 3437/6203/1705 3459/6225/1727 3399/6251/1752 +s 2 +f 3403/6252/1696 3402/6253/604 3425/6254/604 3424/6255/1696 +f 3402/6253/604 3423/6256/1704 3436/6257/1704 3425/6254/604 +s 4 +f 3423/6258/1607 3421/6259/1538 3435/6260/1538 3436/6261/1607 +f 3421/6259/1538 3419/6262/1702 3434/6263/1702 3435/6260/1538 +s 2 +f 3419/6264/1701 3417/6265/1541 3433/6266/1541 3434/6267/1701 +f 3417/6265/1541 3415/6268/1557 3432/6269/1557 3433/6266/1541 +s 4 +f 3415/6270/1839 3413/6271/426 3431/6272/301 3432/6273/1536 +f 3413/6271/426 3411/6274/1753 3430/6275/1753 3431/6272/301 +s 2 +f 3411/6276/1638 3409/6277/1623 3429/6278/1623 3430/6279/1638 +f 3409/6277/1623 3407/6280/1697 3428/6281/1697 3429/6278/1623 +s 4 +f 3407/6282/1754 3405/6283/1620 3427/6284/1620 3428/6285/1754 +f 3405/6283/1620 3403/6286/1526 3424/6287/1526 3427/6284/1620 +s 1 +f 3462/6288/1696 3463/6289/1756 3464/6290/1756 3465/6291/1696 +f 3463/6289/1756 3466/6292/1526 3467/6293/1526 3464/6290/1756 +s 2 +f 3466/6294/1754 3468/6295/584 3469/6296/584 3467/6297/1754 +f 3468/6295/584 3470/6298/1623 3471/6299/1623 3469/6296/584 +f 3470/6300/1623 3472/6301/1638 3473/6302/1638 3471/6303/1623 +s 1 +f 3472/6304/1699 3474/6305/1699 3475/6306/1699 3473/6307/1753 +s 2 +f 3474/6305/1536 3476/6308/1536 3477/6309/1536 3475/6306/1536 +s 1 +f 3476/6310/1557 3478/6311/1541 3479/6312/1541 3477/6313/1557 +f 3478/6311/1541 3480/6314/1701 3481/6315/1701 3479/6312/1541 +s 2 +f 3480/6316/1855 3482/6317/1856 3483/6318/1856 3481/6319/1702 +f 3482/6317/1856 3484/6320/1857 3485/6321/1857 3483/6318/1856 +s 4 +f 3484/6322/1858 3462/6288/1704 3465/6291/1858 3485/6323/1858 +s 1 +f 3486/6324/455 3487/6325/455 3488/6326/455 3489/6327/455 +f 3490/6328/455 3486/6324/455 3489/6327/455 3491/6329/455 +f 3492/6330/455 3490/6328/455 3491/6329/455 3493/6331/455 +f 3494/6332/455 3492/6330/455 3493/6331/455 3495/6333/455 +f 3496/6334/455 3494/6332/455 3495/6333/455 3497/6335/455 +f 3498/6336/455 3496/6334/455 3497/6335/455 3499/6337/455 +f 3500/6338/455 3498/6336/455 3499/6337/455 3501/6339/455 +f 3502/6340/455 3500/6338/455 3501/6339/455 3503/6341/455 +f 3504/6342/455 3502/6340/455 3503/6341/455 3505/6343/455 +f 3506/6344/455 3504/6342/455 3505/6343/455 3507/6345/455 +f 3508/6346/455 3506/6344/455 3507/6345/455 3509/6347/455 +f 3487/6325/455 3508/6346/455 3509/6347/455 3488/6326/455 +f 3510/6348/455 3511/6349/455 3512/6350/455 +f 3513/6351/455 3510/6348/455 3512/6350/455 +f 3514/6352/455 3513/6351/455 3512/6350/455 +f 3515/6353/455 3514/6352/455 3512/6350/455 +f 3516/6354/455 3515/6353/455 3512/6350/455 +f 3517/6355/455 3516/6354/455 3512/6350/455 +f 3518/6356/455 3517/6355/455 3512/6350/455 +f 3519/6357/455 3518/6356/455 3512/6350/455 +f 3520/6358/455 3519/6357/455 3512/6350/455 +f 3521/6359/455 3520/6358/455 3512/6350/455 +f 3522/6360/455 3521/6359/455 3512/6350/455 +f 3511/6349/455 3522/6360/455 3512/6350/455 +s 8 +f 3523/6361/1705 3524/6362/1706 3525/6363/1707 3526/6364/1708 +f 3524/6362/1706 3527/6365/1859 3528/6366/1710 3525/6363/1707 +f 3527/6365/1859 3529/6367/1711 3530/6368/1841 3528/6366/1710 +f 3529/6367/1711 3531/6369/1713 3532/6370/1714 3530/6368/1841 +f 3531/6369/1713 3533/6371/1842 3534/6372/1716 3532/6370/1714 +f 3533/6371/1842 3535/6373/1843 3536/6374/1844 3534/6372/1716 +f 3535/6373/1843 3537/6375/1845 3538/6376/1720 3536/6374/1844 +f 3537/6375/1845 3539/6377/1721 3540/6378/1722 3538/6376/1720 +f 3539/6377/1721 3541/6379/1723 3542/6380/1846 3540/6378/1722 +f 3541/6379/1723 3543/6381/1725 3544/6382/1726 3542/6380/1846 +f 3543/6381/1725 3545/6383/1727 3546/6384/1728 3544/6382/1726 +f 3545/6383/1727 3523/6361/1705 3526/6364/1708 3546/6384/1728 +f 3526/6364/1708 3525/6363/1707 3547/6385/429 +f 3525/6363/1707 3528/6366/1710 3547/6385/429 +f 3528/6366/1710 3530/6368/1841 3547/6385/429 +f 3530/6368/1841 3532/6370/1714 3547/6385/429 +f 3532/6370/1714 3534/6372/1716 3547/6385/429 +f 3534/6372/1716 3536/6374/1844 3547/6385/429 +f 3536/6374/1844 3538/6376/1720 3547/6385/429 +f 3538/6376/1720 3540/6378/1722 3547/6385/429 +f 3540/6378/1722 3542/6380/1846 3547/6385/429 +f 3542/6380/1846 3544/6382/1726 3547/6385/429 +f 3544/6382/1726 3546/6384/1728 3547/6385/429 +f 3546/6384/1728 3526/6364/1708 3547/6385/429 +f 3462/6386/1729 3487/6325/1860 3486/6324/1730 3463/6387/1730 +f 3464/6388/1731 3524/6362/1706 3523/6361/1705 3465/6389/1732 +f 3463/6387/1730 3486/6324/1730 3490/6328/1733 3466/6390/1733 +f 3467/6391/1734 3527/6365/1859 3524/6362/1706 3464/6388/1731 +f 3466/6390/1733 3490/6328/1733 3492/6330/1735 3468/6392/1735 +f 3469/6393/1736 3529/6367/1711 3527/6365/1859 3467/6391/1734 +f 3468/6392/1735 3492/6330/1735 3494/6332/1737 3470/6394/1737 +f 3471/6395/1738 3531/6369/1713 3529/6367/1711 3469/6393/1736 +f 3470/6394/1737 3494/6332/1737 3496/6334/1850 3472/6396/1739 +f 3473/6397/1740 3533/6371/1842 3531/6369/1713 3471/6395/1738 +f 3472/6396/1739 3496/6334/1850 3498/6336/1851 3474/6398/1851 +f 3475/6399/1852 3535/6373/1843 3533/6371/1842 3473/6397/1740 +f 3474/6398/1851 3498/6336/1851 3500/6338/1853 3476/6400/1743 +f 3477/6401/1744 3537/6375/1845 3535/6373/1843 3475/6399/1852 +f 3476/6400/1743 3500/6338/1853 3502/6340/1745 3478/6402/1745 +f 3479/6403/1746 3539/6377/1721 3537/6375/1845 3477/6401/1744 +f 3478/6402/1745 3502/6340/1745 3504/6342/1747 3480/6404/1747 +f 3481/6405/1748 3541/6379/1723 3539/6377/1721 3479/6403/1746 +f 3480/6404/1747 3504/6342/1747 3506/6344/1749 3482/6406/1749 +f 3483/6407/1761 3543/6381/1725 3541/6379/1723 3481/6405/1748 +f 3482/6406/1749 3506/6344/1749 3508/6346/1854 3484/6408/1751 +f 3485/6409/1752 3545/6383/1727 3543/6381/1725 3483/6407/1761 +f 3484/6408/1751 3508/6346/1854 3487/6325/1860 3462/6386/1729 +f 3465/6389/1732 3523/6361/1705 3545/6383/1727 3485/6409/1752 +s 2 +f 3489/6410/1696 3488/6411/604 3511/6412/604 3510/6413/1696 +f 3488/6411/604 3509/6414/1704 3522/6415/1704 3511/6412/604 +s 4 +f 3509/6416/1607 3507/6417/1538 3521/6418/1538 3522/6419/1607 +f 3507/6417/1538 3505/6420/1702 3520/6421/1702 3521/6418/1538 +s 2 +f 3505/6422/1701 3503/6423/1541 3519/6424/1541 3520/6425/1701 +f 3503/6423/1541 3501/6426/1557 3518/6427/1557 3519/6424/1541 +s 4 +f 3501/6428/1536 3499/6429/301 3517/6430/301 3518/6431/1536 +f 3499/6429/301 3497/6432/1753 3516/6433/1753 3517/6430/301 +s 2 +f 3497/6434/1638 3495/6435/1623 3515/6436/1623 3516/6437/1638 +f 3495/6435/1623 3493/6438/1697 3514/6439/1697 3515/6436/1623 +s 4 +f 3493/6440/1754 3491/6441/1620 3513/6442/1620 3514/6443/1754 +f 3491/6441/1620 3489/6444/1526 3510/6445/1526 3513/6442/1620 +s 1 +f 3548/6446/1861 3549/6447/1862 3550/6448/1863 3551/6449/1861 +s 2 +f 3552/6450/1864 3553/6451/1865 3549/6452/1866 3548/6453/1864 +s 1 +f 3554/6454/1867 3555/6455/1868 3553/6451/1868 3552/6450/1867 +s 2 +f 3556/6456/1869 3557/6457/1869 3555/6458/1869 3554/6459/1869 +s 1 +f 3558/6460/1870 3559/6461/1870 3557/6457/1870 3556/6456/1870 +s 2 +f 3560/6462/1871 3561/6463/1872 3559/6464/1873 3558/6465/1871 +s 1 +f 3562/6466/1874 3563/6467/1875 3561/6463/1876 3560/6462/1874 +s 2 +f 3551/6449/1877 3550/6448/1878 3563/6468/1879 3562/6469/1877 +s 4 +f 3548/6470/455 3551/6471/455 3564/6472/455 3565/6473/455 +f 3552/6474/455 3548/6470/455 3565/6473/455 3566/6475/455 +f 3554/6476/455 3552/6474/455 3566/6475/455 3567/6477/455 +f 3556/6478/455 3554/6476/455 3567/6477/455 3568/6479/455 +f 3558/6480/455 3556/6478/455 3568/6479/455 3569/6481/455 +f 3560/6482/455 3558/6480/455 3569/6481/455 3570/6483/455 +f 3562/6484/455 3560/6482/455 3570/6483/455 3571/6485/455 +f 3551/6471/455 3562/6484/455 3571/6485/455 3564/6472/455 +f 3565/6473/455 3564/6472/455 3572/6486/455 +f 3566/6475/455 3565/6473/455 3572/6486/455 +f 3567/6477/455 3566/6475/455 3572/6486/455 +f 3568/6479/455 3567/6477/455 3572/6486/455 +f 3569/6481/455 3568/6479/455 3572/6486/455 +f 3570/6483/455 3569/6481/455 3572/6486/455 +f 3571/6485/455 3570/6483/455 3572/6486/455 +f 3564/6472/455 3571/6485/455 3572/6486/455 +s 1 +f 3573/6487/428 3574/6488/428 3575/6489/428 +f 3574/6488/428 3576/6490/428 3575/6489/428 +f 3577/6491/428 3578/6492/428 3575/6489/428 +f 3578/6492/428 3579/6493/428 3575/6489/428 +f 3579/6493/428 3573/6487/428 3575/6489/428 +f 3580/6494/1880 3581/6495/1880 3550/6448/1863 3549/6447/1862 +s 2 +f 3582/6496/1881 3580/6497/1882 3549/6452/1866 3553/6451/1865 +f 3583/6498/1883 3584/6499/1884 3559/6464/1873 3561/6463/1872 +s 1 +f 3585/6500/1885 3583/6501/1885 3561/6502/1876 3563/6503/1875 +s 2 +f 3581/6495/1886 3585/6504/1886 3563/6468/1879 3550/6448/1878 +s 1 +f 3586/6505/1887 3587/6506/1887 3588/6507/1887 3589/6508/1888 +s 4 +f 3590/6509/1889 3591/6510/1889 3587/6511/1889 3586/6512/1889 +s 1 +f 3592/6513/1890 3593/6514/1890 3591/6510/1890 3590/6509/1890 +s 4 +f 3594/6515/1891 3595/6516/1892 3593/6517/1891 3592/6518/1891 +s 2 +f 3586/6519/455 3589/6520/455 3596/6521/455 3597/6522/455 +f 3590/6523/455 3586/6519/455 3597/6522/455 3598/6524/455 +f 3592/6525/455 3590/6523/455 3598/6524/455 3599/6526/455 +f 3594/6527/455 3592/6525/455 3599/6526/455 3600/6528/455 +f 3597/6522/455 3596/6521/455 3601/6529/455 +f 3598/6524/455 3597/6522/455 3601/6529/455 +f 3599/6526/455 3598/6524/455 3601/6529/455 +f 3600/6528/455 3599/6526/455 3601/6529/455 +s 1 +f 3602/6530/428 3603/6531/428 3604/6532/428 3605/6533/428 +f 3603/6531/428 3577/6491/428 3606/6534/428 3604/6532/428 +f 3577/6491/428 3575/6489/428 3607/6535/428 3606/6534/428 +f 3575/6489/428 3576/6490/428 3608/6536/428 3607/6535/428 +f 3609/6537/1888 3610/6538/1888 3588/6507/1887 3587/6506/1887 +s 8 +f 3553/6539/455 3555/6540/455 3593/6541/455 3595/6542/455 +f 3555/6540/455 3557/6543/455 3591/6544/455 3593/6541/455 +s 16 +f 3557/6545/455 3559/6546/455 3587/6547/455 3591/6548/455 +s 2 +f 3584/6499/1884 3609/6549/1893 3587/6550/1893 3559/6464/1873 +s 1 +f 3611/6551/1894 3612/6552/1894 3613/6553/1895 3614/6554/1896 +s 16 +f 3615/6555/1897 3611/6556/1897 3614/6557/1898 3616/6558/1899 +s 1 +f 3617/6559/1900 3615/6555/1900 3616/6558/1901 3618/6560/1901 +s 2 +f 3619/6561/1902 3617/6562/1902 3618/6563/1903 3620/6564/1903 +s 1 +f 3621/6565/1904 3619/6561/1904 3620/6564/1905 3622/6566/1905 +s 2 +f 3623/6567/1906 3621/6568/1906 3622/6569/1907 3624/6570/1908 +s 1 +f 3625/6571/1909 3623/6567/1909 3624/6570/1910 3626/6572/1911 +s 2 +f 3612/6552/1912 3625/6573/1912 3626/6574/1913 3613/6553/1914 +s 4 +f 3611/6575/455 3627/6576/455 3628/6577/752 3612/6578/752 +f 3615/6579/455 3629/6580/455 3627/6576/455 3611/6575/455 +f 3617/6581/455 3630/6582/455 3629/6580/455 3615/6579/455 +f 3619/6583/752 3631/6584/753 3630/6582/455 3617/6581/455 +f 3621/6585/753 3632/6586/753 3631/6584/753 3619/6583/752 +f 3623/6587/455 3633/6588/752 3632/6586/753 3621/6585/753 +f 3625/6589/752 3634/6590/752 3633/6588/752 3623/6587/455 +f 3612/6578/752 3628/6577/752 3634/6590/752 3625/6589/752 +f 3627/6576/455 3635/6591/752 3628/6577/752 +f 3629/6580/455 3635/6591/752 3627/6576/455 +f 3630/6582/455 3635/6591/752 3629/6580/455 +f 3631/6584/753 3635/6591/752 3630/6582/455 +f 3632/6586/753 3635/6591/752 3631/6584/753 +f 3633/6588/752 3635/6591/752 3632/6586/753 +f 3634/6590/752 3635/6591/752 3633/6588/752 +f 3628/6577/752 3635/6591/752 3634/6590/752 +s 1 +f 3636/6592/428 3637/6593/428 3638/6594/428 +f 3638/6594/428 3637/6593/428 3576/6490/428 +f 3639/6595/428 3637/6593/428 3640/6596/428 +f 3640/6596/428 3637/6593/428 3641/6597/428 +f 3641/6597/428 3637/6593/428 3636/6592/428 +f 3613/6553/1895 3642/6598/1915 3643/6599/1915 3614/6554/1896 +s 16 +f 3614/6557/1898 3643/6600/1885 3644/6601/1916 3616/6558/1899 +s 2 +f 3622/6569/1907 3645/6602/1917 3646/6603/1918 3624/6570/1908 +s 1 +f 3624/6604/1910 3646/6605/1882 3647/6606/1882 3626/6607/1911 +s 2 +f 3626/6574/1913 3647/6608/1880 3642/6598/1880 3613/6553/1914 +s 4 +f 3648/6609/1919 3589/6508/1919 3588/6507/1919 3649/6610/1919 +s 1 +f 3650/6611/1918 3648/6612/1918 3649/6613/1918 3651/6614/1918 +s 4 +f 3652/6615/1882 3650/6611/1882 3651/6614/1882 3653/6616/1882 +s 1 +f 3594/6515/1920 3652/6617/1920 3653/6618/1920 3595/6516/1920 +s 2 +f 3648/6619/455 3654/6620/455 3596/6521/455 3589/6520/455 +f 3650/6621/455 3655/6622/455 3654/6620/455 3648/6619/455 +f 3652/6623/455 3656/6624/455 3655/6622/455 3650/6621/455 +f 3594/6527/455 3600/6528/455 3656/6624/455 3652/6623/455 +f 3654/6620/455 3601/6529/455 3596/6521/455 +f 3655/6622/455 3601/6529/455 3654/6620/455 +f 3656/6624/455 3601/6529/455 3655/6622/455 +f 3600/6528/455 3601/6529/455 3656/6624/455 +s 1 +f 3602/6530/428 3605/6533/428 3657/6625/428 3658/6626/428 +f 3658/6626/428 3657/6625/428 3659/6627/428 3639/6595/428 +f 3639/6595/428 3659/6627/428 3660/6628/428 3637/6593/428 +f 3637/6593/428 3660/6628/428 3608/6536/428 3576/6490/428 +s 4 +f 3588/6507/1919 3610/6538/1919 3661/6629/1919 3649/6610/1919 +s 32 +f 3616/6630/455 3595/6631/455 3653/6632/455 3618/6633/455 +f 3618/6633/455 3653/6632/455 3651/6634/455 3620/6635/455 +s 8 +f 3620/6636/455 3651/6637/455 3649/6638/455 3622/6639/455 +s 2 +f 3649/6640/1921 3661/6641/1921 3645/6602/1917 3622/6569/1907 +f 3662/6642/396 3663/6643/396 3664/6644/396 3665/6645/396 +f 3666/6646/1922 3667/6647/1923 3668/6648/1923 3669/6649/1922 +s 4 +f 3670/6650/1924 3666/6646/1925 3669/6649/1926 3671/6651/1924 +s 2 +f 3663/6643/396 3670/6652/396 3671/6653/396 3664/6644/396 +s 4 +f 3672/6654/974 3673/6655/974 3674/6656/974 3675/6657/974 +s 2 +f 3553/6451/1865 3595/6658/1927 3676/6659/1928 3582/6496/1881 +f 3667/6647/1923 3672/6660/1929 3675/6661/1929 3668/6648/1923 +f 3677/6662/604 3678/6663/396 3679/6664/396 3680/6665/604 +f 3681/6666/1930 3682/6667/1931 3683/6668/1931 3684/6669/1932 +s 4 +f 3682/6667/1933 3685/6670/1933 3686/6671/1933 3683/6668/1933 +s 2 +f 3685/6672/604 3677/6662/604 3680/6665/604 3686/6673/604 +s 4 +f 3673/6655/974 3687/6674/974 3688/6675/974 3674/6656/974 +s 16 +f 3595/6676/1934 3616/6558/1899 3644/6601/1916 3676/6677/1935 +s 2 +f 3687/6678/1936 3681/6666/1930 3684/6669/1932 3688/6679/1936 +s 1 +f 3576/6490/428 3574/6488/428 3689/6680/428 +s 2 +f 3665/6645/396 3690/6681/396 3691/6682/396 3662/6642/396 +s 8 +f 3582/6683/455 3692/6684/455 3693/6685/1937 3580/6686/1938 +f 3676/6687/455 3692/6684/455 3582/6683/455 +s 1 +f 3689/6680/428 3638/6594/428 3576/6490/428 +s 2 +f 3679/6664/396 3678/6663/396 3691/6682/396 3690/6681/396 +s 8 +f 3644/6688/455 3643/6689/1939 3693/6685/1937 3692/6684/455 +f 3676/6687/455 3644/6688/455 3692/6684/455 +s 1 +f 3694/6690/1887 3695/6691/1887 3696/6692/1887 3697/6693/1888 +f 3574/6488/428 3573/6487/428 3663/6694/428 3662/6695/428 +f 3573/6487/428 3579/6493/428 3670/6696/428 3663/6694/428 +f 3579/6493/428 3578/6492/428 3666/6697/428 3670/6696/428 +f 3578/6492/428 3577/6491/428 3667/6698/428 3666/6697/428 +f 3577/6491/428 3603/6531/428 3672/6699/428 3667/6698/428 +f 3603/6531/428 3602/6530/428 3673/6700/428 3672/6699/428 +f 3602/6530/428 3658/6626/428 3687/6701/428 3673/6700/428 +f 3658/6626/428 3639/6595/428 3681/6702/428 3687/6701/428 +f 3639/6595/428 3640/6596/428 3682/6703/428 3681/6702/428 +f 3640/6596/428 3641/6597/428 3685/6704/428 3682/6703/428 +f 3641/6597/428 3636/6592/428 3677/6705/428 3685/6704/428 +f 3636/6592/428 3638/6594/428 3678/6706/428 3677/6705/428 +f 3638/6594/428 3689/6680/428 3691/6707/428 3678/6706/428 +f 3689/6680/428 3574/6488/428 3662/6695/428 3691/6707/428 +s 8 +f 3581/6708/1940 3580/6686/1938 3665/6709/1941 3664/6710/1942 +f 3580/6686/1938 3693/6685/1937 3690/6711/1943 3665/6709/1941 +f 3693/6685/1937 3643/6689/1939 3679/6712/1943 3690/6711/1943 +f 3643/6689/1939 3642/6713/1944 3680/6714/1942 3679/6712/1943 +f 3642/6713/1944 3647/6715/1945 3686/6716/1946 3680/6714/1942 +f 3647/6715/1945 3646/6717/1947 3683/6718/1948 3686/6716/1946 +f 3646/6717/1947 3645/6719/1949 3684/6720/1950 3683/6718/1948 +f 3645/6719/1949 3661/6721/1951 3688/6722/1952 3684/6720/1950 +f 3661/6721/1951 3610/6723/1953 3674/6724/1954 3688/6722/1952 +f 3610/6723/1953 3609/6725/1955 3675/6726/1956 3674/6724/1954 +f 3609/6725/1955 3584/6727/1957 3668/6728/1958 3675/6726/1956 +f 3584/6727/1957 3583/6729/1959 3669/6730/1960 3668/6728/1958 +f 3583/6729/1959 3585/6731/1961 3671/6732/1962 3669/6730/1960 +f 3585/6731/1961 3581/6708/1940 3664/6710/1942 3671/6732/1962 +s 2 +f 3605/6733/1888 3604/6734/1888 3698/6735/1888 3697/6693/1888 +s 4 +f 3604/6736/1883 3606/6737/1883 3699/6738/1883 3698/6739/1883 +s 2 +f 3699/6738/1885 3606/6737/1885 3607/6740/1885 3700/6741/1885 +s 4 +f 3700/6742/1892 3607/6743/1892 3608/6744/1892 3701/6745/1892 +s 1 +f 3702/6746/187 3703/6747/187 3704/6748/187 +f 3703/6747/187 3705/6749/187 3706/6750/187 3704/6748/187 +f 3705/6749/187 3707/6751/187 3708/6752/187 3706/6750/187 +f 3708/6752/187 3707/6751/187 3709/6753/187 +s 2 +f 3608/6744/1963 3660/6754/1963 3710/6755/1963 3701/6745/1920 +s 4 +f 3660/6756/1964 3659/6757/1882 3711/6758/1964 3710/6759/1964 +s 2 +f 3711/6758/1965 3659/6757/1918 3657/6760/1965 3712/6761/1965 +s 4 +f 3712/6762/1966 3657/6763/1966 3605/6733/1966 3697/6693/1919 +s 1 +f 3713/6764/189 3714/6765/189 3715/6766/189 +f 3714/6765/189 3716/6767/584 3717/6768/584 3715/6766/189 +f 3716/6767/584 3718/6769/584 3719/6770/584 3717/6768/584 +f 3719/6770/584 3718/6769/584 3720/6771/584 +s 2 +f 3721/6772/1967 3694/6773/1967 3707/6774/1967 3705/6775/1967 +s 8 +f 3694/6690/1968 3697/6693/1968 3709/6776/1968 3707/6777/1969 +s 16 +f 3697/6693/1970 3698/6735/1970 3708/6778/1970 3709/6776/1970 +s 8 +f 3698/6779/1971 3699/6780/1971 3706/6781/1971 3708/6782/1971 +s 16 +f 3699/6780/1972 3700/6783/1972 3704/6784/1972 3706/6781/1972 +s 8 +f 3700/6742/1973 3701/6745/1973 3702/6785/1973 3704/6786/1973 +s 16 +f 3701/6745/1974 3722/6787/1975 3703/6788/1974 3702/6785/1974 +s 4 +f 3722/6789/1976 3721/6790/1976 3705/6791/1976 3703/6792/1976 +s 32 +f 3723/6793/1974 3701/6745/1974 3720/6794/1974 3718/6795/1974 +s 64 +f 3701/6745/1973 3710/6755/1973 3719/6796/1977 3720/6794/1977 +s 8 +f 3710/6797/1972 3711/6798/1972 3717/6799/1972 3719/6800/1972 +s 16 +f 3711/6798/1978 3712/6801/1978 3715/6802/1978 3717/6799/1978 +s 32 +f 3712/6762/1970 3697/6693/1970 3713/6803/1970 3715/6804/1970 +s 64 +f 3697/6693/1969 3724/6805/1969 3714/6806/1969 3713/6803/1969 +s 2 +f 3724/6807/1979 3725/6808/1979 3716/6809/1979 3714/6810/1980 +s 4 +f 3725/6808/1981 3723/6811/1981 3718/6812/1981 3716/6809/1981 +s 2 +f 3726/6813/1888 3727/6814/1888 3728/6815/1888 3696/6692/1888 +s 1 +f 3729/6816/1883 3730/6817/1883 3727/6818/1883 3726/6819/1883 +s 2 +f 3731/6820/1885 3730/6817/1885 3729/6816/1885 3732/6821/1885 +s 1 +f 3733/6822/1892 3731/6823/1892 3732/6824/1892 3734/6825/1892 +s 2 +f 3735/6826/1963 3736/6827/1963 3733/6822/1963 3734/6825/1963 +s 1 +f 3737/6828/1964 3738/6829/1964 3736/6830/1964 3735/6831/1964 +s 2 +f 3739/6832/1965 3738/6829/1965 3737/6828/1965 3740/6833/1965 +s 4 +f 3728/6815/1966 3739/6834/1966 3740/6835/1966 3696/6692/1966 +s 16 +f 3695/6836/1889 3694/6837/1889 3721/6838/1889 3741/6839/1889 +s 1 +f 3741/6839/1890 3721/6838/1890 3722/6840/1890 3742/6841/1890 +s 128 +f 3742/6842/1891 3722/6787/1891 3701/6745/1891 3734/6825/1892 +s 1 +f 3743/6843/187 3744/6844/187 3745/6845/187 +f 3744/6844/187 3746/6846/187 3747/6847/187 3745/6845/187 +f 3746/6846/187 3748/6848/187 3749/6849/187 3747/6847/187 +f 3749/6849/187 3748/6848/187 3750/6850/187 +s 256 +f 3701/6745/1920 3723/6793/1920 3751/6851/1920 3734/6825/1920 +s 1 +f 3723/6852/1882 3725/6853/1882 3752/6854/1882 3751/6855/1882 +s 8 +f 3752/6854/1918 3725/6853/1918 3724/6856/1918 3753/6857/1918 +s 128 +f 3724/6805/1919 3697/6693/1919 3696/6692/1919 3753/6858/1919 +s 1 +f 3754/6859/584 3755/6860/584 3756/6861/584 +f 3755/6860/584 3757/6862/189 3758/6863/189 3756/6861/584 +f 3757/6862/189 3759/6864/189 3760/6865/189 3758/6863/189 +f 3760/6865/189 3759/6864/189 3761/6866/189 +s 4 +f 3729/6867/1967 3726/6868/1967 3748/6869/1967 3746/6870/1967 +s 8 +f 3726/6813/1969 3696/6692/1969 3750/6871/1969 3748/6872/1969 +s 32 +f 3696/6692/1970 3695/6691/1970 3749/6873/1970 3750/6871/1970 +s 2 +f 3695/6874/1971 3741/6875/1971 3747/6876/1971 3749/6877/1971 +s 4 +f 3741/6875/1972 3742/6878/1972 3745/6879/1972 3747/6876/1972 +s 8 +f 3742/6842/1973 3734/6825/1973 3743/6880/1973 3745/6881/1973 +s 4 +f 3734/6825/1975 3732/6824/1975 3744/6882/1975 3743/6880/1975 +s 8 +f 3732/6883/1976 3729/6867/1976 3746/6870/1976 3744/6884/1976 +s 16 +f 3735/6826/1974 3734/6825/1974 3761/6885/1974 3759/6886/1975 +s 32 +f 3734/6825/1977 3751/6851/1973 3760/6887/1977 3761/6885/1977 +s 2 +f 3751/6888/1972 3752/6889/1972 3758/6890/1972 3760/6891/1972 +s 4 +f 3752/6889/1971 3753/6892/1971 3756/6893/1971 3758/6890/1971 +s 16 +f 3753/6858/1970 3696/6692/1970 3754/6894/1970 3756/6895/1970 +s 64 +f 3696/6692/1969 3740/6835/1969 3755/6896/1969 3754/6894/1969 +s 8 +f 3740/6897/1967 3737/6898/1967 3757/6899/1967 3755/6900/1967 +s 4 +f 3737/6898/1976 3735/6901/1976 3759/6902/1976 3757/6899/1976 +s 1 +f 3762/6903/1982 3763/6904/1983 3764/6905/1984 3765/6906/1982 +s 2 +f 3766/6907/1985 3767/6908/1986 3763/6909/1987 3762/6910/1985 +s 1 +f 3768/6911/1988 3769/6912/1988 3767/6913/1988 3766/6914/1988 +s 2 +f 3770/6915/1989 3771/6916/1990 3769/6917/1990 3768/6918/1989 +s 1 +f 3772/6919/1991 3773/6920/1991 3771/6916/1991 3770/6915/1991 +s 2 +f 3774/6921/1992 3775/6922/1993 3773/6923/1994 3772/6924/1992 +s 1 +f 3776/6925/1995 3777/6926/1996 3775/6927/1997 3774/6928/1995 +s 2 +f 3765/6906/1998 3764/6905/1999 3777/6929/2000 3776/6930/1998 +s 4 +f 3762/6931/455 3765/6932/455 3778/6933/455 3779/6934/455 +f 3766/6935/455 3762/6931/455 3779/6934/455 3780/6936/455 +f 3768/6937/455 3766/6935/455 3780/6936/455 3781/6938/455 +f 3770/6939/455 3768/6937/455 3781/6938/455 3782/6940/455 +f 3772/6941/455 3770/6939/455 3782/6940/455 3783/6942/455 +f 3774/6943/455 3772/6941/455 3783/6942/455 3784/6944/455 +f 3776/6945/455 3774/6943/455 3784/6944/455 3785/6946/455 +f 3765/6932/455 3776/6945/455 3785/6946/455 3778/6933/455 +f 3779/6934/455 3778/6933/455 3786/6947/455 +f 3780/6936/455 3779/6934/455 3786/6947/455 +f 3781/6938/455 3780/6936/455 3786/6947/455 +f 3782/6940/455 3781/6938/455 3786/6947/455 +f 3783/6942/455 3782/6940/455 3786/6947/455 +f 3784/6944/455 3783/6942/455 3786/6947/455 +f 3785/6946/455 3784/6944/455 3786/6947/455 +f 3778/6933/455 3785/6946/455 3786/6947/455 +s 1 +f 3787/6948/428 3788/6949/428 3789/6950/428 +f 3788/6949/428 3790/6951/428 3789/6950/428 +f 3791/6952/428 3792/6953/428 3789/6950/428 +f 3792/6953/428 3793/6954/428 3789/6950/428 +f 3793/6954/428 3787/6948/428 3789/6950/428 +f 3794/6955/2001 3795/6956/2001 3764/6905/1984 3763/6904/1983 +s 2 +f 3796/6957/2002 3794/6958/1883 3763/6909/1987 3767/6908/1986 +f 3797/6959/1882 3798/6960/2003 3773/6923/1994 3775/6922/1993 +s 1 +f 3799/6961/1918 3797/6962/1918 3775/6927/1997 3777/6926/1996 +s 2 +f 3795/6956/2004 3799/6963/2004 3777/6929/2000 3764/6905/1999 +s 1 +f 3800/6964/1963 3801/6965/1963 3802/6966/1963 3803/6967/1963 +s 4 +f 3804/6968/1964 3805/6969/1882 3801/6970/1964 3800/6971/1964 +s 1 +f 3806/6972/1965 3807/6973/1965 3805/6974/1965 3804/6975/1918 +s 4 +f 3808/6976/1966 3809/6977/1966 3807/6978/1966 3806/6979/1966 +s 2 +f 3800/6980/455 3803/6981/455 3810/6982/455 3811/6983/455 +f 3804/6984/455 3800/6980/455 3811/6983/455 3812/6985/455 +f 3806/6986/455 3804/6984/455 3812/6985/455 3813/6987/455 +f 3808/6988/455 3806/6986/455 3813/6987/455 3814/6989/455 +f 3811/6983/455 3810/6982/455 3815/6990/455 +f 3812/6985/455 3811/6983/455 3815/6990/455 +f 3813/6987/455 3812/6985/455 3815/6990/455 +f 3814/6989/455 3813/6987/455 3815/6990/455 +s 1 +f 3816/6991/428 3817/6992/428 3818/6993/428 3819/6994/428 +f 3817/6992/428 3791/6952/428 3820/6995/428 3818/6993/428 +f 3791/6952/428 3789/6950/428 3821/6996/428 3820/6995/428 +f 3789/6950/428 3790/6951/428 3822/6997/428 3821/6996/428 +f 3823/6998/1963 3824/6999/1920 3802/6966/1963 3801/6965/1963 +s 8 +f 3767/7000/455 3769/7001/455 3807/7002/455 3809/7003/455 +f 3769/7001/455 3771/7004/455 3805/7005/455 3807/7002/455 +s 16 +f 3771/7006/455 3773/7007/455 3801/7008/455 3805/7009/455 +s 2 +f 3798/6960/2003 3823/7010/2005 3801/7011/2005 3773/6923/1994 +s 1 +f 3825/7012/2006 3826/7013/2006 3827/7014/2007 3828/7015/2008 +s 16 +f 3829/7016/2009 3825/7017/2009 3828/7018/2010 3830/7019/2011 +s 1 +f 3831/7020/2012 3829/7021/2012 3830/7022/2012 3832/7023/2012 +s 2 +f 3833/7024/2013 3831/7025/2013 3832/7026/2013 3834/7027/2013 +s 1 +f 3835/7028/2014 3833/7024/2014 3834/7027/2014 3836/7029/2014 +s 2 +f 3837/7030/2015 3835/7031/2015 3836/7032/2016 3838/7033/2017 +s 1 +f 3839/7034/2018 3837/7035/2018 3838/7036/2019 3840/7037/2020 +s 2 +f 3826/7013/2021 3839/7038/2021 3840/7039/2022 3827/7014/2023 +s 4 +f 3825/7040/455 3841/7041/455 3842/7042/753 3826/7043/752 +f 3829/7044/455 3843/7045/455 3841/7041/455 3825/7040/455 +f 3831/7046/455 3844/7047/455 3843/7045/455 3829/7044/455 +f 3833/7048/752 3845/7049/753 3844/7047/455 3831/7046/455 +f 3835/7050/753 3846/7051/753 3845/7049/753 3833/7048/752 +f 3837/7052/455 3847/7053/753 3846/7051/753 3835/7050/753 +f 3839/7054/752 3848/7055/752 3847/7053/753 3837/7052/455 +f 3826/7043/752 3842/7042/753 3848/7055/752 3839/7054/752 +f 3841/7041/455 3849/7056/753 3842/7042/753 +f 3843/7045/455 3849/7056/753 3841/7041/455 +f 3844/7047/455 3849/7056/753 3843/7045/455 +f 3845/7049/753 3849/7056/753 3844/7047/455 +f 3846/7051/753 3849/7056/753 3845/7049/753 +f 3847/7053/753 3849/7056/753 3846/7051/753 +f 3848/7055/752 3849/7056/753 3847/7053/753 +f 3842/7042/753 3849/7056/753 3848/7055/752 +s 1 +f 3850/7057/428 3851/7058/428 3852/7059/428 +f 3852/7059/428 3851/7058/428 3790/6951/428 +f 3853/7060/428 3851/7058/428 3854/7061/428 +f 3854/7061/428 3851/7058/428 3855/7062/428 +f 3855/7062/428 3851/7058/428 3850/7057/428 +f 3827/7014/2007 3856/7063/2004 3857/7064/2004 3828/7015/2008 +s 16 +f 3828/7018/2010 3857/7065/1918 3858/7066/2024 3830/7019/2011 +s 2 +f 3836/7032/2016 3859/7067/2025 3860/7068/1885 3838/7033/2017 +s 1 +f 3838/7036/2019 3860/7069/1883 3861/7070/1883 3840/7037/2020 +s 2 +f 3840/7039/2022 3861/7071/2026 3856/7063/2026 3827/7014/2023 +s 4 +f 3862/7072/1892 3803/6967/1892 3802/6966/1892 3863/7073/1892 +s 1 +f 3864/7074/1885 3862/7075/1885 3863/7076/1885 3865/7077/1885 +s 4 +f 3866/7078/1883 3864/7079/1883 3865/7080/1883 3867/7081/1883 +s 1 +f 3808/6976/1888 3866/7082/1888 3867/7083/1888 3809/6977/1888 +s 2 +f 3862/7084/455 3868/7085/455 3810/6982/455 3803/6981/455 +f 3864/7086/455 3869/7087/455 3868/7085/455 3862/7084/455 +f 3866/7088/455 3870/7089/455 3869/7087/455 3864/7086/455 +f 3808/6988/455 3814/6989/455 3870/7089/455 3866/7088/455 +f 3868/7085/455 3815/6990/455 3810/6982/455 +f 3869/7087/455 3815/6990/455 3868/7085/455 +f 3870/7089/455 3815/6990/455 3869/7087/455 +f 3814/6989/455 3815/6990/455 3870/7089/455 +s 1 +f 3816/6991/428 3819/6994/428 3871/7090/428 3872/7091/428 +f 3872/7091/428 3871/7090/428 3873/7092/428 3853/7060/428 +f 3853/7060/428 3873/7092/428 3874/7093/428 3851/7058/428 +f 3851/7058/428 3874/7093/428 3822/6997/428 3790/6951/428 +s 4 +f 3802/6966/1892 3824/6999/1892 3875/7094/1892 3863/7073/1892 +s 32 +f 3830/7095/455 3809/7096/455 3867/7097/455 3832/7098/455 +f 3832/7098/455 3867/7097/455 3865/7099/455 3834/7100/455 +s 8 +f 3834/7101/455 3865/7102/455 3863/7103/455 3836/7104/455 +s 2 +f 3863/7105/2027 3875/7106/2027 3859/7067/2025 3836/7032/2016 +f 3876/7107/974 3877/7108/974 3878/7109/974 3879/7110/974 +f 3880/7111/2028 3881/7112/2029 3882/7113/2029 3883/7114/2028 +s 4 +f 3884/7115/2030 3880/7116/2031 3883/7117/2031 3885/7118/2032 +s 2 +f 3877/7108/974 3884/7119/974 3885/7120/974 3878/7109/974 +s 4 +f 3886/7121/396 3887/7122/396 3888/7123/396 3889/7124/396 +s 2 +f 3767/6908/1986 3809/7125/2033 3890/7126/2033 3796/6957/2002 +f 3881/7112/2029 3886/7127/2034 3889/7128/2034 3882/7113/2029 +f 3891/7129/974 3892/7130/974 3893/7131/974 3894/7132/974 +f 3895/7133/2035 3896/7134/2036 3897/7135/2036 3898/7136/2037 +s 4 +f 3896/7137/2038 3899/7138/2038 3900/7139/2038 3897/7140/2038 +s 2 +f 3899/7141/974 3891/7129/974 3894/7132/974 3900/7142/974 +s 4 +f 3887/7122/396 3901/7143/396 3902/7144/396 3888/7123/396 +s 16 +f 3809/7145/2039 3830/7019/2011 3858/7066/2024 3890/7146/2039 +s 2 +f 3901/7147/2040 3895/7133/2035 3898/7136/2037 3902/7148/2040 +s 1 +f 3790/6951/428 3788/6949/428 3903/7149/428 +s 2 +f 3879/7110/974 3904/7150/974 3905/7151/974 3876/7107/974 +s 8 +f 3796/7152/455 3906/7153/455 3907/7154/2041 3794/7155/2042 +f 3890/7156/455 3906/7153/455 3796/7152/455 +s 1 +f 3903/7149/428 3852/7059/428 3790/6951/428 +s 2 +f 3893/7131/974 3892/7130/974 3905/7151/974 3904/7150/974 +s 8 +f 3858/7157/455 3857/7158/2043 3907/7154/2041 3906/7153/455 +f 3890/7156/455 3858/7157/455 3906/7153/455 +s 1 +f 3908/7159/2044 3909/7160/2045 3910/7161/2046 3911/7162/1963 +f 3788/6949/428 3787/6948/428 3877/7163/428 3876/7164/428 +f 3787/6948/428 3793/6954/428 3884/7165/428 3877/7163/428 +f 3793/6954/428 3792/6953/428 3880/7166/428 3884/7165/428 +f 3792/6953/428 3791/6952/428 3881/7167/428 3880/7166/428 +f 3791/6952/428 3817/6992/428 3886/7168/428 3881/7167/428 +f 3817/6992/428 3816/6991/428 3887/7169/428 3886/7168/428 +f 3816/6991/428 3872/7091/428 3901/7170/428 3887/7169/428 +f 3872/7091/428 3853/7060/428 3895/7171/428 3901/7170/428 +f 3853/7060/428 3854/7061/428 3896/7172/428 3895/7171/428 +f 3854/7061/428 3855/7062/428 3899/7173/428 3896/7172/428 +f 3855/7062/428 3850/7057/428 3891/7174/428 3899/7173/428 +f 3850/7057/428 3852/7059/428 3892/7175/428 3891/7174/428 +f 3852/7059/428 3903/7149/428 3905/7176/428 3892/7175/428 +f 3903/7149/428 3788/6949/428 3876/7164/428 3905/7176/428 +s 8 +f 3795/7177/2047 3794/7155/2042 3879/7178/2048 3878/7179/2049 +f 3794/7155/2042 3907/7154/2041 3904/7180/2050 3879/7178/2048 +f 3907/7154/2041 3857/7158/2043 3893/7181/2050 3904/7180/2050 +f 3857/7158/2043 3856/7182/2051 3894/7183/2049 3893/7181/2050 +f 3856/7182/2051 3861/7184/2052 3900/7185/2053 3894/7183/2049 +f 3861/7184/2052 3860/7186/2054 3897/7187/2055 3900/7185/2053 +f 3860/7186/2054 3859/7188/2056 3898/7189/2057 3897/7187/2055 +f 3859/7188/2056 3875/7190/2058 3902/7191/2059 3898/7189/2057 +f 3875/7190/2058 3824/7192/2060 3888/7193/2061 3902/7191/2059 +f 3824/7192/2060 3823/7194/2062 3889/7195/2063 3888/7193/2061 +f 3823/7194/2062 3798/7196/2064 3882/7197/2065 3889/7195/2063 +f 3798/7196/2064 3797/7198/2066 3883/7199/2067 3882/7197/2065 +f 3797/7198/2066 3799/7200/2068 3885/7201/2069 3883/7199/2067 +f 3799/7200/2068 3795/7177/2047 3878/7179/2049 3885/7201/2069 +s 2 +f 3819/7202/1920 3818/7203/1920 3912/7204/1920 3911/7162/1920 +s 4 +f 3818/7205/1882 3820/7206/1882 3913/7207/1882 3912/7208/1882 +s 2 +f 3913/7209/1918 3820/7210/1918 3821/7211/1918 3914/7212/1918 +s 4 +f 3914/7213/2070 3821/7214/2070 3822/7215/2070 3915/7216/2070 +s 1 +f 3916/7217/189 3917/7218/584 3918/7219/584 +f 3917/7218/584 3919/7220/584 3920/7221/584 3918/7219/584 +f 3919/7220/584 3921/7222/584 3922/7223/584 3920/7221/584 +f 3922/7223/584 3921/7222/584 3923/7224/189 +s 2 +f 3822/7215/2071 3874/7225/2071 3924/7226/2071 3915/7216/2072 +s 4 +f 3874/7227/1889 3873/7228/1889 3925/7229/1889 3924/7230/1889 +s 2 +f 3925/7231/1890 3873/7232/1890 3871/7233/1890 3926/7234/1890 +s 4 +f 3926/7235/1891 3871/7236/1891 3819/7202/1891 3911/7162/1891 +s 1 +f 3927/7237/187 3928/7238/187 3929/7239/187 +f 3928/7238/187 3930/7240/187 3931/7241/187 3929/7239/187 +f 3930/7240/187 3932/7242/187 3933/7243/187 3931/7241/187 +f 3933/7243/187 3932/7242/187 3934/7244/187 +s 2 +f 3935/7245/1976 3908/7246/1976 3921/7247/1976 3919/7248/1976 +s 8 +f 3908/7159/1975 3911/7162/1975 3923/7249/1975 3921/7250/1975 +s 16 +f 3911/7162/1973 3912/7204/1973 3922/7251/1973 3923/7249/1973 +s 8 +f 3912/7252/1972 3913/7253/1972 3920/7254/1972 3922/7255/1972 +s 16 +f 3913/7253/1971 3914/7256/1971 3918/7257/1971 3920/7254/1971 +s 8 +f 3914/7213/2073 3915/7216/2073 3916/7258/2073 3918/7259/2073 +s 16 +f 3915/7216/2074 3936/7260/2074 3917/7261/2074 3916/7258/2074 +s 4 +f 3936/7262/1967 3935/7263/1967 3919/7264/1967 3917/7265/1967 +s 32 +f 3937/7266/2074 3915/7216/2074 3934/7267/2074 3932/7268/2074 +s 64 +f 3915/7216/2073 3924/7226/2073 3933/7269/2073 3934/7267/2073 +s 8 +f 3924/7270/1971 3925/7271/1971 3931/7272/1971 3933/7273/1971 +s 16 +f 3925/7271/2075 3926/7274/2075 3929/7275/2075 3931/7272/2075 +s 32 +f 3926/7235/1973 3911/7162/1973 3927/7276/1973 3929/7277/1973 +s 64 +f 3911/7162/1975 3938/7278/1975 3928/7279/1975 3927/7276/1975 +s 2 +f 3938/7280/2076 3939/7281/2076 3930/7282/2076 3928/7283/2076 +s 4 +f 3939/7281/1967 3937/7284/1967 3932/7285/1967 3930/7282/1967 +s 2 +f 3940/7286/2077 3941/7287/2077 3942/7288/2077 3910/7161/2077 +s 1 +f 3943/7289/2078 3944/7290/2078 3941/7291/2078 3940/7292/2078 +s 2 +f 3945/7293/2079 3944/7290/2079 3943/7289/2079 3946/7294/2079 +s 1 +f 3947/7295/2080 3945/7296/2080 3946/7297/2080 3948/7298/2080 +s 2 +f 3949/7299/2081 3950/7300/2081 3947/7295/2081 3948/7298/2081 +s 1 +f 3951/7301/2082 3952/7302/2082 3950/7303/2082 3949/7304/2082 +s 2 +f 3953/7305/2083 3952/7302/2083 3951/7301/2083 3954/7306/2083 +s 4 +f 3942/7288/2084 3953/7307/2084 3954/7308/2084 3910/7161/2084 +s 16 +f 3909/7309/2085 3908/7310/2086 3935/7311/2087 3955/7312/2088 +s 1 +f 3955/7312/2089 3935/7311/2090 3936/7313/2091 3956/7314/2092 +s 128 +f 3956/7315/2093 3936/7260/2094 3915/7216/2095 3948/7298/2096 +s 1 +f 3957/7316/395 3958/7317/584 3959/7318/395 +f 3958/7317/584 3960/7319/584 3961/7320/584 3959/7318/395 +f 3960/7319/584 3962/7321/584 3963/7322/584 3961/7320/584 +f 3963/7322/584 3962/7321/584 3964/7323/189 +s 256 +f 3915/7216/2097 3937/7266/2098 3965/7324/2099 3948/7298/2100 +s 1 +f 3937/7325/2101 3939/7326/2102 3966/7327/2103 3965/7328/2104 +s 8 +f 3966/7327/2105 3939/7326/2106 3938/7329/2107 3967/7330/2108 +s 128 +f 3938/7278/2109 3911/7162/1892 3910/7161/2110 3967/7331/2111 +s 1 +f 3968/7332/187 3969/7333/187 3970/7334/187 +f 3969/7333/187 3971/7335/187 3972/7336/187 3970/7334/187 +f 3971/7335/187 3973/7337/187 3974/7338/187 3972/7336/187 +f 3974/7338/187 3973/7337/187 3975/7339/187 +s 4 +f 3943/7340/2076 3940/7341/2076 3962/7342/2076 3960/7343/2076 +s 8 +f 3940/7286/1975 3910/7161/1975 3964/7344/1975 3962/7345/1975 +s 32 +f 3910/7161/1973 3909/7160/1973 3963/7346/1973 3964/7344/1973 +s 2 +f 3909/7347/1972 3955/7348/1972 3961/7349/1972 3963/7350/1972 +s 4 +f 3955/7348/1971 3956/7351/1971 3959/7352/1971 3961/7349/1971 +s 8 +f 3956/7315/2073 3948/7298/2073 3957/7353/2073 3959/7354/2073 +s 4 +f 3948/7298/2074 3946/7297/2074 3958/7355/2074 3957/7353/2074 +s 8 +f 3946/7356/1967 3943/7340/1967 3960/7343/1967 3958/7357/1967 +s 16 +f 3949/7299/2074 3948/7298/2074 3975/7358/2074 3973/7359/2074 +s 32 +f 3948/7298/2073 3965/7324/2073 3974/7360/2073 3975/7358/2073 +s 2 +f 3965/7361/1971 3966/7362/1971 3972/7363/1971 3974/7364/1971 +s 4 +f 3966/7362/2075 3967/7365/2075 3970/7366/2075 3972/7363/2075 +s 16 +f 3967/7331/1973 3910/7161/1973 3968/7367/1973 3970/7368/1973 +s 64 +f 3910/7161/1975 3954/7308/1975 3969/7369/1975 3968/7367/1975 +s 8 +f 3954/7370/1976 3951/7371/1976 3971/7372/1976 3969/7373/1976 +s 4 +f 3951/7371/1967 3949/7374/1967 3973/7375/1967 3971/7372/1967 +s 1 +f 3976/7376/1467 3977/7377/974 3978/7378/300 3979/7379/1467 +f 3980/7380/1109 3976/7376/1467 3979/7379/1467 3981/7381/1109 +f 3982/7382/749 3980/7380/1109 3981/7381/1109 3983/7383/749 +f 3984/7384/747 3982/7385/749 3983/7386/749 3985/7387/747 +f 3986/7388/190 3984/7384/747 3985/7387/747 3987/7389/2112 +f 3988/7390/2113 3989/7391/746 3986/7388/190 3987/7389/2112 +f 3990/7392/2114 3991/7393/485 3989/7391/746 3988/7390/2113 +f 3992/7394/1757 3993/7395/2115 3991/7396/485 3990/7397/2114 +f 3994/7398/396 3995/7399/396 3996/7400/396 3997/7401/396 +f 3998/7402/396 3999/7403/396 4000/7404/2116 4001/7405/2117 +f 4002/7406/751 4003/7407/974 3977/7377/974 3976/7376/1467 +f 4004/7408/750 4002/7406/751 3976/7376/1467 3980/7380/1109 +f 4005/7409/748 4004/7408/750 3980/7380/1109 3982/7382/749 +f 4006/7410/1466 4005/7411/748 3982/7385/749 3984/7384/747 +f 4007/7412/189 4006/7410/1466 3984/7384/747 3986/7388/190 +f 3989/7391/746 4008/7413/2118 4007/7412/189 3986/7388/190 +f 3991/7393/485 4009/7414/485 4008/7413/2118 3989/7391/746 +f 3993/7395/2115 4010/7415/2119 4009/7416/485 3991/7396/485 +f 4000/7404/2116 4011/7417/2120 4010/7415/2119 3993/7395/2115 +f 3999/7403/396 4012/7418/396 4011/7417/2120 4000/7404/2116 +s 2 +f 3993/7419/187 3992/7420/187 4013/7421/187 +f 4001/7422/189 4000/7423/189 4014/7424/189 4015/7425/190 +s 4 +f 3993/7426/428 4013/7427/428 4014/7428/428 4000/7429/428 +s 2 +f 4016/7430/188 3997/7431/188 3996/7432/188 4013/7421/187 +f 3995/7433/190 3994/7434/190 4015/7425/190 4014/7424/189 +s 4 +f 4013/7427/428 3996/7435/428 3995/7436/428 4014/7428/428 +f 4016/7437/2121 4017/7438/2122 4018/7439/2123 3997/7440/2124 +f 4017/7438/2122 4016/7437/2121 4019/7441/2125 +s 1 +f 4020/7442/733 4021/7443/733 3978/7378/300 3977/7377/974 +f 4022/7444/735 4023/7445/735 4021/7443/733 4020/7442/733 +f 4024/7446/736 4025/7447/736 4023/7445/735 4022/7444/735 +f 4026/7448/737 4027/7449/737 4025/7450/736 4024/7451/736 +f 4028/7452/187 4029/7453/2126 4027/7449/737 4026/7448/737 +f 4030/7454/2127 4029/7453/2126 4028/7452/187 4031/7455/738 +f 4032/7456/2128 4030/7454/2127 4031/7455/738 4033/7457/471 +f 4034/7458/1607 4032/7459/2128 4033/7460/471 4035/7461/2129 +f 4036/7462/396 4037/7463/396 4038/7464/396 4039/7465/396 +f 3998/7402/396 4040/7466/2130 4041/7467/2131 3999/7403/396 +f 4042/7468/733 4020/7442/733 3977/7377/974 4003/7407/974 +f 4043/7469/735 4022/7444/735 4020/7442/733 4042/7468/733 +f 4044/7470/736 4024/7446/736 4022/7444/735 4043/7469/735 +f 4045/7471/737 4026/7448/737 4024/7451/736 4044/7472/736 +f 4046/7473/187 4028/7452/187 4026/7448/737 4045/7471/737 +f 4031/7455/738 4028/7452/187 4046/7473/187 4047/7474/738 +f 4033/7457/471 4031/7455/738 4047/7474/738 4048/7475/471 +f 4035/7461/2129 4033/7460/471 4048/7476/471 4049/7477/2132 +f 4041/7467/2131 4035/7461/2129 4049/7477/2132 4050/7478/2133 +f 3999/7403/396 4041/7467/2131 4050/7478/2133 4012/7418/396 +s 2 +f 4035/7479/584 4051/7480/584 4034/7481/584 +f 4040/7482/187 4052/7483/188 4053/7484/187 4041/7485/187 +s 4 +f 4035/7486/428 4041/7487/428 4053/7488/428 4051/7489/428 +s 2 +f 4054/7490/190 4051/7480/584 4038/7491/190 4037/7492/190 +f 4039/7493/188 4053/7484/187 4052/7483/188 4036/7494/188 +s 4 +f 4051/7489/428 4053/7488/428 4039/7495/428 4038/7496/428 +f 4054/7497/2134 4037/7498/2135 4055/7499/2136 4056/7500/2137 +f 4056/7500/2137 4057/7501/2138 4054/7497/2134 +f 4058/7502/428 4059/7503/428 4060/7504/428 +f 4052/7505/2139 4061/7506/2140 4062/7507/2141 4036/7508/2142 +f 4037/7498/2135 4036/7508/2142 4063/7509/2143 4064/7510/2144 +f 4040/7511/2145 3998/7512/2146 4061/7506/2140 4052/7505/2139 +f 4065/7513/428 4064/7510/2144 4063/7509/2143 4066/7514/428 +f 4067/7515/428 4065/7513/428 4066/7514/428 4059/7503/428 +f 4015/7516/2139 3994/7517/2147 4062/7507/2141 4061/7506/2140 +f 4062/7507/2141 3994/7517/2147 4063/7509/2143 +f 4063/7509/2143 4068/7518/2148 4069/7519/428 4066/7514/428 +f 4066/7514/428 4069/7519/428 4070/7520/428 4059/7503/428 +f 4001/7521/2149 4015/7516/2139 4061/7506/2140 3998/7512/2146 +f 4058/7502/428 4071/7522/428 4059/7503/428 +f 4059/7503/428 4072/7523/428 4060/7504/428 +f 4059/7503/428 4070/7520/428 4072/7523/428 +f 4071/7522/428 4073/7524/428 4059/7503/428 +f 4073/7524/428 4067/7515/428 4059/7503/428 +s 8 +f 3978/7378/2150 4058/7525/2151 4060/7526/2152 3979/7379/2153 +f 3979/7527/2153 4060/7528/2152 4072/7529/2154 3981/7530/2155 +f 3981/7530/2155 4072/7529/2154 4070/7531/2156 3983/7532/2157 +f 3983/7532/2157 4070/7531/2156 4069/7533/2158 3985/7534/2159 +f 3985/7534/2159 4069/7533/2158 4068/7535/2160 3987/7536/2161 +f 3987/7537/2161 4068/7538/2160 4018/7539/2162 3988/7540/2163 +f 3988/7540/2163 4018/7539/2162 4017/7541/2164 3990/7542/2165 +f 3990/7542/2165 4017/7541/2164 4019/7543/2166 3992/7544/2167 +f 4021/7443/2168 4071/7545/2169 4058/7525/2151 3978/7378/2150 +f 4023/7546/2170 4073/7547/2171 4071/7548/2169 4021/7549/2168 +f 4025/7550/2172 4067/7551/2173 4073/7552/2171 4023/7553/2170 +f 4027/7554/2174 4065/7555/2175 4067/7551/2173 4025/7550/2172 +f 4029/7556/2176 4064/7557/2177 4065/7555/2175 4027/7554/2174 +f 4030/7558/2178 4055/7559/2179 4064/7560/2177 4029/7561/2176 +f 4032/7562/2180 4056/7563/2181 4055/7559/2179 4030/7558/2178 +f 4034/7564/2182 4057/7565/2183 4056/7563/2181 4032/7562/2180 +s 2 +f 4019/7566/187 4016/7430/188 4013/7421/187 +f 3992/7420/187 4019/7566/187 4013/7421/187 +f 4051/7480/584 4057/7567/584 4034/7481/584 +f 4051/7480/584 4054/7490/190 4057/7567/584 +f 4003/7568/455 4002/7569/455 4074/7570/455 +f 4002/7569/455 4004/7571/455 4074/7570/455 +f 4004/7571/455 4005/7572/455 4074/7570/455 +f 4005/7572/455 4006/7573/455 4074/7570/455 +f 4006/7573/455 4007/7574/455 4074/7570/455 +f 4007/7574/455 4008/7575/455 4074/7570/455 +f 4008/7575/455 4009/7576/455 4074/7570/455 +f 4009/7576/455 4010/7577/455 4074/7570/455 +f 4010/7577/455 4011/7578/455 4074/7570/455 +f 4011/7578/455 4012/7579/455 4074/7570/455 +f 4012/7579/455 4050/7580/455 4074/7570/455 +f 4050/7580/455 4049/7581/455 4074/7570/455 +f 4049/7581/455 4048/7582/455 4074/7570/455 +f 4048/7582/455 4047/7583/455 4074/7570/455 +f 4047/7583/455 4046/7584/455 4074/7570/455 +f 4046/7584/455 4045/7585/455 4074/7570/455 +f 4045/7585/455 4044/7586/455 4074/7570/455 +f 4044/7586/455 4043/7587/455 4074/7570/455 +f 4043/7587/455 4042/7588/455 4074/7570/455 +f 4042/7588/455 4003/7568/455 4074/7570/455 +s 1 +f 4075/7589/252 4076/7590/252 4077/7591/252 4078/7592/252 +f 4079/7593/253 4080/7594/253 4081/7595/253 4082/7596/253 +s 2 +f 4080/7594/254 4083/7597/2184 4084/7598/2185 4081/7595/2186 +f 4085/7599/2187 4075/7589/258 4078/7592/2188 4086/7600/2189 +s 4 +f 4087/7601/260 4077/7602/261 4088/7603/262 4089/7604/2190 +f 4090/7605/264 4087/7601/260 4089/7604/2190 4091/7606/2191 +f 4079/7607/571 4082/7608/267 4092/7609/268 4093/7610/571 +f 4076/7611/270 4094/7612/270 4088/7603/262 4077/7602/261 +f 4090/7605/264 4091/7606/2191 4092/7609/268 4082/7608/267 +s 1 +f 4092/7613/271 4095/7614/271 4096/7615/271 4093/7616/271 +s 2 +f 4091/7617/272 4097/7618/273 4095/7619/274 4092/7620/275 +s 1 +f 4089/7621/278 4098/7622/423 4097/7618/423 4091/7617/278 +s 2 +f 4089/7621/279 4088/7623/280 4099/7624/281 4098/7622/282 +s 1 +f 4088/7625/283 4094/7626/283 4100/7627/283 4099/7628/283 +s 2 +f 4077/7591/2192 4101/7629/2193 4102/7630/2194 4078/7592/2188 +s 4 +f 4087/7601/260 4103/7631/2195 4101/7632/2196 4077/7602/261 +f 4090/7605/264 4104/7633/2197 4103/7631/2195 4087/7601/260 +f 4082/7608/267 4105/7634/290 4104/7633/2197 4090/7605/264 +s 2 +f 4081/7595/2186 4106/7635/292 4105/7636/2198 4082/7596/2199 +f 4084/7598/2185 4107/7637/2200 4106/7635/292 4081/7595/2186 +f 4078/7592/2188 4102/7630/2194 4108/7638/2201 4086/7600/2189 +s 1 +f 4109/7639/974 4110/7640/974 4111/7641/974 4112/7642/974 +f 4112/7642/974 4111/7641/974 4113/7643/974 4114/7644/974 +f 4115/7645/302 4116/7646/303 4096/7615/271 4095/7614/271 +s 2 +f 4117/7647/304 4115/7648/305 4095/7619/274 4097/7618/273 +s 1 +f 4118/7649/307 4117/7647/307 4097/7618/423 4098/7622/423 +s 2 +f 4119/7650/308 4118/7649/309 4098/7622/282 4099/7624/281 +s 1 +f 4120/7651/310 4119/7652/311 4099/7628/283 4100/7627/283 +f 4121/7653/312 4122/7654/313 4123/7655/314 4124/7656/315 +s 2 +f 4125/7657/316 4121/7658/317 4124/7659/318 4126/7660/319 +s 1 +f 4127/7661/320 4125/7657/320 4126/7660/321 4128/7662/321 +s 2 +f 4129/7663/322 4127/7661/323 4128/7662/324 4130/7664/325 +s 1 +f 4131/7665/327 4129/7666/327 4130/7667/328 4132/7668/329 +f 4115/7645/302 4124/7656/315 4123/7655/314 4116/7646/303 +s 2 +f 4117/7647/304 4126/7660/319 4124/7659/318 4115/7648/305 +s 1 +f 4118/7649/307 4128/7662/321 4126/7660/321 4117/7647/307 +s 2 +f 4119/7650/308 4130/7664/325 4128/7662/324 4118/7649/309 +s 1 +f 4120/7651/310 4132/7668/329 4130/7667/328 4119/7652/311 +f 4075/7589/252 4133/7669/252 4134/7670/252 4076/7590/252 +f 4079/7593/253 4135/7671/253 4136/7672/253 4080/7594/253 +s 2 +f 4080/7594/254 4136/7672/2202 4137/7673/2203 4083/7597/2184 +f 4085/7599/2187 4138/7674/2204 4133/7669/2205 4075/7589/258 +s 4 +f 4139/7675/332 4140/7676/2206 4141/7677/334 4134/7678/335 +f 4142/7679/336 4143/7680/2207 4140/7676/2206 4139/7675/332 +f 4079/7607/571 4093/7610/571 4144/7681/338 4135/7682/339 +f 4076/7611/270 4134/7678/335 4141/7677/334 4094/7612/270 +f 4142/7679/336 4135/7682/339 4144/7681/338 4143/7680/2207 +s 2 +f 4144/7683/340 4093/7616/340 4096/7615/340 4145/7684/340 +s 1 +f 4143/7685/341 4144/7686/342 4145/7687/343 4146/7688/344 +s 2 +f 4140/7689/2208 4143/7685/2208 4146/7688/346 4147/7690/346 +s 1 +f 4140/7689/347 4147/7690/348 4148/7691/349 4141/7692/350 +s 2 +f 4141/7693/351 4148/7694/351 4100/7627/351 4094/7626/351 +f 4134/7670/2209 4133/7669/2205 4149/7695/2210 4150/7696/2209 +s 4 +f 4139/7675/332 4134/7678/335 4150/7697/2211 4151/7698/2212 +f 4142/7679/336 4139/7675/332 4151/7698/2212 4152/7699/2213 +f 4135/7682/339 4142/7679/336 4152/7699/2213 4153/7700/358 +s 2 +f 4136/7672/2202 4135/7671/2214 4153/7701/2214 4154/7702/361 +f 4137/7673/2203 4136/7672/2202 4154/7702/361 4155/7703/2215 +f 4133/7669/2205 4138/7674/2204 4156/7704/2216 4149/7695/2210 +s 1 +f 4157/7705/974 4158/7706/974 4159/7707/974 4160/7708/974 +f 4158/7706/974 4114/7644/974 4113/7643/974 4159/7707/974 +s 2 +f 4161/7709/368 4145/7684/340 4096/7615/340 4116/7646/369 +s 1 +f 4162/7710/370 4146/7688/344 4145/7687/343 4161/7711/371 +s 2 +f 4163/7712/372 4147/7690/346 4146/7688/346 4162/7710/372 +s 1 +f 4164/7713/373 4148/7691/349 4147/7690/348 4163/7712/374 +s 2 +f 4120/7651/375 4100/7627/351 4148/7694/351 4164/7714/376 +f 4165/7715/377 4166/7716/2217 4123/7655/379 4122/7654/380 +s 1 +f 4167/7717/381 4168/7718/382 4166/7719/383 4165/7720/384 +s 2 +f 4169/7721/385 4170/7722/386 4168/7718/386 4167/7717/385 +s 1 +f 4171/7723/387 4172/7724/388 4170/7722/579 4169/7721/390 +s 2 +f 4131/7665/394 4132/7668/392 4172/7725/393 4171/7726/394 +f 4161/7709/368 4116/7646/369 4123/7655/379 4166/7716/2217 +s 1 +f 4162/7710/370 4161/7711/371 4166/7719/383 4168/7718/382 +s 2 +f 4163/7712/372 4162/7710/372 4168/7718/386 4170/7722/386 +s 1 +f 4164/7713/373 4163/7712/374 4170/7722/579 4172/7724/388 +s 2 +f 4120/7651/375 4164/7714/376 4172/7725/393 4132/7668/392 +s 8 +f 4102/7727/189 4101/7728/189 4173/7729/189 +f 4101/7728/189 4103/7730/189 4173/7729/189 +f 4103/7730/189 4104/7731/189 4173/7729/189 +f 4104/7731/189 4105/7732/189 4173/7729/189 +f 4105/7732/189 4106/7733/189 4173/7729/189 +f 4106/7733/189 4107/7734/2218 4173/7729/189 +f 4107/7734/2218 4108/7735/2219 4173/7729/189 +f 4108/7735/2219 4102/7727/189 4173/7729/189 +f 4150/7736/187 4149/7737/187 4174/7738/187 +f 4149/7737/187 4156/7739/2220 4174/7738/187 +f 4156/7739/2220 4155/7740/2221 4174/7738/187 +f 4155/7740/2221 4154/7741/187 4174/7738/187 +f 4154/7741/187 4153/7742/187 4174/7738/187 +f 4153/7742/187 4152/7743/187 4174/7738/187 +f 4152/7743/187 4151/7744/187 4174/7738/187 +f 4151/7744/187 4150/7736/187 4174/7738/187 +s 1 +f 4175/7745/396 4176/7746/396 4177/7747/396 +f 4176/7746/396 4178/7748/396 4177/7747/396 +f 4178/7748/396 4179/7749/396 4177/7747/396 +f 4179/7749/396 4180/7750/396 4177/7747/396 +f 4180/7750/396 4181/7751/396 4177/7747/396 +f 4181/7751/396 4182/7752/396 4177/7747/396 +f 4182/7752/396 4183/7753/396 4177/7747/396 +f 4183/7753/396 4184/7754/396 4177/7747/396 +f 4184/7754/396 4185/7755/396 4177/7747/396 +f 4185/7755/396 4175/7745/396 4177/7747/396 +s 4 +f 4175/7756/2222 4122/7757/2222 4121/7758/2223 4176/7759/2223 +f 4176/7759/2223 4121/7758/2223 4125/7760/2224 4178/7761/2224 +f 4178/7762/2224 4125/7657/2224 4127/7661/2225 4179/7763/2225 +f 4179/7764/2225 4127/7765/2225 4129/7766/2226 4180/7767/2226 +f 4180/7767/2226 4129/7766/2226 4131/7768/2227 4181/7769/2227 +f 4185/7770/2228 4165/7771/2228 4122/7757/2222 4175/7756/2222 +f 4184/7772/2229 4167/7773/2229 4165/7774/2228 4185/7775/2228 +f 4183/7721/2230 4169/7721/2230 4167/7717/2229 4184/7776/2229 +f 4182/7777/2231 4171/7778/2232 4169/7779/2230 4183/7780/2230 +f 4181/7781/2227 4131/7782/2227 4171/7778/2232 4182/7777/2231 +s 2 +f 4084/7598/2185 4083/7597/2184 4113/7783/2233 4111/7784/2234 +f 4083/7597/2184 4137/7673/2203 4159/7785/2235 4113/7783/2233 +f 4137/7673/2203 4155/7703/2215 4160/7786/2236 4159/7785/2235 +s 8 +f 4155/7740/2221 4156/7739/2220 4157/7787/2237 4160/7788/2237 +s 2 +f 4156/7704/2216 4138/7674/2204 4158/7789/2238 4157/7790/2239 +f 4138/7674/2204 4085/7599/2187 4114/7791/2240 4158/7789/2238 +f 4085/7599/2187 4086/7600/2189 4112/7792/2241 4114/7791/2240 +f 4086/7600/2189 4108/7638/2201 4109/7793/2242 4112/7792/2241 +s 8 +f 4108/7735/2219 4107/7734/2218 4110/7794/2243 4109/7795/2243 +s 2 +f 4107/7637/2200 4084/7598/2185 4111/7784/2234 4110/7796/2244 +s 1 +f 4186/7797/252 4187/7798/252 4188/7799/252 4189/7800/252 +f 4190/7801/253 4191/7802/253 4192/7803/253 4193/7804/253 +s 2 +f 4191/7802/254 4194/7805/2184 4195/7806/2185 4192/7803/2186 +f 4196/7807/2187 4186/7797/258 4189/7800/2188 4197/7808/2189 +s 4 +f 4198/7809/260 4188/7810/261 4199/7811/262 4200/7812/2190 +f 4201/7813/264 4198/7809/260 4200/7812/2190 4202/7814/2191 +f 4190/7815/266 4193/7816/267 4203/7817/268 4204/7818/266 +f 4187/7819/269 4205/7820/269 4199/7811/262 4188/7810/261 +f 4201/7813/264 4202/7814/2191 4203/7817/268 4193/7816/267 +s 1 +f 4203/7821/271 4206/7822/271 4207/7823/271 4204/7824/271 +s 2 +f 4202/7825/272 4208/7826/273 4206/7827/274 4203/7828/275 +s 1 +f 4200/7829/2245 4209/7830/423 4208/7826/423 4202/7825/2245 +s 2 +f 4200/7829/279 4199/7831/280 4210/7832/2246 4209/7830/282 +s 1 +f 4199/7833/283 4205/7834/283 4211/7835/283 4210/7836/283 +s 2 +f 4188/7799/2247 4212/7837/2247 4213/7838/2194 4189/7800/2188 +s 4 +f 4198/7809/260 4214/7839/2195 4212/7840/2196 4188/7810/261 +f 4201/7813/264 4215/7841/2197 4214/7839/2195 4198/7809/260 +f 4193/7816/267 4216/7842/290 4215/7841/2197 4201/7813/264 +s 2 +f 4192/7803/2186 4217/7843/292 4216/7844/2248 4193/7804/2248 +f 4195/7806/2185 4218/7845/2249 4217/7843/292 4192/7803/2186 +f 4189/7800/2188 4213/7838/2194 4219/7846/2201 4197/7808/2189 +s 1 +f 4220/7847/974 4221/7848/974 4222/7849/974 4223/7850/974 +f 4223/7850/974 4222/7849/974 4224/7851/974 4225/7852/974 +f 4226/7853/302 4227/7854/303 4207/7823/271 4206/7822/271 +s 2 +f 4228/7855/304 4226/7856/305 4206/7827/274 4208/7826/273 +s 1 +f 4229/7857/307 4228/7855/307 4208/7826/423 4209/7830/423 +s 2 +f 4230/7858/308 4229/7857/309 4209/7830/282 4210/7832/2246 +s 1 +f 4231/7859/310 4230/7860/311 4210/7836/283 4211/7835/283 +f 4232/7861/312 4233/7862/313 4234/7863/314 4235/7864/315 +s 2 +f 4236/7865/316 4232/7866/317 4235/7867/318 4237/7868/319 +s 1 +f 4238/7869/320 4236/7865/320 4237/7868/321 4239/7870/321 +s 2 +f 4240/7871/322 4238/7869/323 4239/7870/324 4241/7872/325 +s 1 +f 4242/7873/327 4240/7874/327 4241/7875/328 4243/7876/329 +f 4226/7853/302 4235/7864/315 4234/7863/314 4227/7854/303 +s 2 +f 4228/7855/304 4237/7868/319 4235/7867/318 4226/7856/305 +s 1 +f 4229/7857/307 4239/7870/321 4237/7868/321 4228/7855/307 +s 2 +f 4230/7858/308 4241/7872/325 4239/7870/324 4229/7857/309 +s 1 +f 4231/7859/310 4243/7876/329 4241/7875/328 4230/7860/311 +f 4186/7797/252 4244/7877/252 4245/7878/252 4187/7798/252 +f 4190/7801/253 4246/7879/253 4247/7880/253 4191/7802/253 +s 2 +f 4191/7802/254 4247/7880/2202 4248/7881/2203 4194/7805/2184 +f 4196/7807/2187 4249/7882/2204 4244/7877/2205 4186/7797/258 +s 4 +f 4250/7883/332 4251/7884/2206 4252/7885/334 4245/7886/335 +f 4253/7887/336 4254/7888/2207 4251/7884/2206 4250/7883/332 +f 4190/7815/266 4204/7818/266 4255/7889/338 4246/7890/339 +f 4187/7819/269 4245/7886/335 4252/7885/334 4205/7820/269 +f 4253/7887/336 4246/7890/339 4255/7889/338 4254/7888/2207 +s 2 +f 4255/7891/340 4204/7824/340 4207/7823/340 4256/7892/340 +s 1 +f 4254/7893/341 4255/7894/342 4256/7895/343 4257/7896/344 +s 2 +f 4251/7897/2208 4254/7893/2208 4257/7896/346 4258/7898/346 +s 1 +f 4251/7897/347 4258/7898/348 4259/7899/2250 4252/7900/350 +s 2 +f 4252/7901/351 4259/7902/351 4211/7835/351 4205/7834/351 +f 4245/7878/2209 4244/7877/2205 4260/7903/2210 4261/7904/2209 +s 4 +f 4250/7883/332 4245/7886/335 4261/7905/2211 4262/7906/2212 +f 4253/7887/336 4250/7883/332 4262/7906/2212 4263/7907/2213 +f 4246/7890/339 4253/7887/336 4263/7907/2213 4264/7908/358 +s 2 +f 4247/7880/2202 4246/7879/2251 4264/7909/2251 4265/7910/361 +f 4248/7881/2203 4247/7880/2202 4265/7910/361 4266/7911/2215 +f 4244/7877/2205 4249/7882/2204 4267/7912/2216 4260/7903/2210 +s 1 +f 4268/7913/974 4269/7914/974 4270/7915/974 4271/7916/974 +f 4269/7914/974 4225/7852/974 4224/7851/974 4270/7915/974 +s 2 +f 4272/7917/368 4256/7892/340 4207/7823/340 4227/7854/369 +s 1 +f 4273/7918/370 4257/7896/344 4256/7895/343 4272/7919/371 +s 2 +f 4274/7920/372 4258/7898/346 4257/7896/346 4273/7918/372 +s 1 +f 4275/7921/373 4259/7899/2250 4258/7898/348 4274/7920/374 +s 2 +f 4231/7859/375 4211/7835/351 4259/7902/351 4275/7922/376 +f 4276/7923/377 4277/7924/378 4234/7863/379 4233/7862/380 +s 1 +f 4278/7925/381 4279/7926/382 4277/7927/383 4276/7928/381 +s 2 +f 4280/7929/385 4281/7930/386 4279/7926/386 4278/7925/385 +s 1 +f 4282/7931/387 4283/7932/388 4281/7930/579 4280/7929/387 +s 2 +f 4242/7873/394 4243/7876/392 4283/7933/393 4282/7934/394 +f 4272/7917/368 4227/7854/369 4234/7863/379 4277/7924/378 +s 1 +f 4273/7918/370 4272/7919/371 4277/7927/383 4279/7926/382 +s 2 +f 4274/7920/372 4273/7918/372 4279/7926/386 4281/7930/386 +s 1 +f 4275/7921/373 4274/7920/374 4281/7930/579 4283/7932/388 +s 2 +f 4231/7859/375 4275/7922/376 4283/7933/393 4243/7876/392 +s 8 +f 4213/7935/189 4212/7936/189 4284/7937/189 +f 4212/7936/189 4214/7938/189 4284/7937/189 +f 4214/7938/189 4215/7939/189 4284/7937/189 +f 4215/7939/189 4216/7940/189 4284/7937/189 +f 4216/7940/189 4217/7941/189 4284/7937/189 +f 4217/7941/189 4218/7942/2218 4284/7937/189 +f 4218/7942/2218 4219/7943/2219 4284/7937/189 +f 4219/7943/2219 4213/7935/189 4284/7937/189 +f 4261/7944/188 4260/7945/187 4285/7946/188 +f 4260/7945/187 4267/7947/2220 4285/7946/188 +f 4267/7947/2220 4266/7948/2221 4285/7946/188 +f 4266/7948/2221 4265/7949/186 4285/7946/188 +f 4265/7949/186 4264/7950/188 4285/7946/188 +f 4264/7950/188 4263/7951/188 4285/7946/188 +f 4263/7951/188 4262/7952/188 4285/7946/188 +f 4262/7952/188 4261/7944/188 4285/7946/188 +s 1 +f 4286/7953/396 4287/7954/396 4288/7955/396 +f 4287/7954/396 4289/7956/396 4288/7955/396 +f 4289/7956/396 4290/7957/396 4288/7955/396 +f 4290/7957/396 4291/7958/396 4288/7955/396 +f 4291/7958/396 4292/7959/396 4288/7955/396 +f 4292/7959/396 4293/7960/396 4288/7955/396 +f 4293/7960/396 4294/7961/396 4288/7955/396 +f 4294/7961/396 4295/7962/396 4288/7955/396 +f 4295/7962/396 4296/7963/396 4288/7955/396 +f 4296/7963/396 4286/7953/396 4288/7955/396 +s 4 +f 4286/7964/2222 4233/7965/2222 4232/7966/2252 4287/7967/2223 +f 4287/7967/2223 4232/7966/2252 4236/7968/2224 4289/7969/2224 +f 4289/7970/2224 4236/7865/2224 4238/7869/2225 4290/7971/2225 +f 4290/7972/2225 4238/7973/2225 4240/7974/2226 4291/7975/2226 +f 4291/7975/2226 4240/7974/2226 4242/7976/2227 4292/7977/2227 +f 4296/7978/2253 4276/7979/2228 4233/7965/2222 4286/7964/2222 +f 4295/7980/2229 4278/7981/2229 4276/7982/2228 4296/7983/2253 +f 4294/7984/2230 4280/7929/2230 4278/7925/2229 4295/7985/2229 +f 4293/7986/2232 4282/7987/2232 4280/7988/2230 4294/7989/2230 +f 4292/7990/2227 4242/7991/2227 4282/7987/2232 4293/7986/2232 +s 2 +f 4195/7806/2185 4194/7805/2184 4224/7992/2233 4222/7993/2234 +f 4194/7805/2184 4248/7881/2203 4270/7994/2235 4224/7992/2233 +f 4248/7881/2203 4266/7911/2215 4271/7995/2236 4270/7994/2235 +s 8 +f 4266/7948/2221 4267/7947/2220 4268/7996/2237 4271/7997/2237 +s 2 +f 4267/7912/2216 4249/7882/2204 4269/7998/2238 4268/7999/2239 +f 4249/7882/2204 4196/7807/2187 4225/8000/2240 4269/7998/2238 +f 4196/7807/2187 4197/7808/2189 4223/8001/2241 4225/8000/2240 +f 4197/7808/2189 4219/7846/2201 4220/8002/2242 4223/8001/2241 +s 8 +f 4219/7943/2219 4218/7942/2218 4221/8003/2243 4220/8004/2243 +s 2 +f 4218/7845/2249 4195/7806/2185 4222/7993/2234 4221/8005/2244 +s 1 +f 4297/8006/751 4298/8007/301 4299/8008/301 4300/8009/751 +f 4301/8010/750 4297/8006/751 4300/8009/751 4302/8011/750 +f 4303/8012/748 4301/8010/750 4302/8011/750 4304/8013/748 +f 4305/8014/1466 4303/8015/748 4304/8016/748 4306/8017/1466 +f 4307/8018/189 4305/8014/1466 4306/8017/1466 4308/8019/2254 +f 4309/8020/2255 4310/8021/746 4307/8018/189 4308/8019/2254 +f 4311/8022/2114 4312/8023/474 4310/8021/746 4309/8020/2255 +f 4313/8024/1757 4314/8025/2115 4312/8023/474 4311/8022/2114 +f 4315/8026/396 4316/8027/396 4317/8028/396 4318/8029/396 +f 4319/8030/396 4320/8031/396 4321/8032/2116 4322/8033/2117 +f 4323/8034/751 4324/8035/301 4298/8007/301 4297/8006/751 +f 4325/8036/750 4323/8034/751 4297/8006/751 4301/8010/750 +f 4326/8037/748 4325/8036/750 4301/8010/750 4303/8012/748 +f 4327/8038/1466 4326/8039/748 4303/8015/748 4305/8014/1466 +f 4328/8040/189 4327/8038/1466 4305/8014/1466 4307/8018/189 +f 4310/8021/746 4329/8041/2118 4328/8040/189 4307/8018/189 +f 4312/8023/474 4330/8042/485 4329/8041/2118 4310/8021/746 +f 4314/8025/2115 4331/8043/2119 4330/8042/485 4312/8023/474 +f 4321/8032/2116 4332/8044/2120 4331/8045/2119 4314/8046/2115 +f 4320/8031/396 4333/8047/396 4332/8044/2120 4321/8032/2116 +s 2 +f 4314/8048/187 4313/8049/187 4334/8050/187 +f 4322/8051/189 4321/8052/189 4335/8053/189 4336/8054/190 +s 4 +f 4314/8055/428 4334/8056/428 4335/8057/428 4321/8058/428 +s 2 +f 4337/8059/187 4318/8060/187 4317/8061/187 4334/8050/187 +f 4316/8062/190 4315/8063/190 4336/8054/190 4335/8053/189 +s 4 +f 4334/8056/428 4317/8064/428 4316/8065/428 4335/8057/428 +f 4337/8066/2121 4338/8067/2122 4339/8068/2123 4318/8069/2256 +f 4338/8067/2122 4337/8066/2121 4340/8070/2125 +s 1 +f 4341/8071/733 4342/8072/733 4299/8008/301 4298/8007/301 +f 4343/8073/735 4344/8074/735 4342/8072/733 4341/8071/733 +f 4345/8075/736 4346/8076/736 4344/8074/735 4343/8073/735 +f 4347/8077/737 4348/8078/737 4346/8079/736 4345/8080/736 +f 4349/8081/188 4350/8082/2126 4348/8078/737 4347/8077/737 +f 4351/8083/2127 4350/8082/2126 4349/8081/188 4352/8084/738 +f 4353/8085/2128 4351/8083/2127 4352/8084/738 4354/8086/471 +f 4355/8087/1607 4353/8085/2128 4354/8086/471 4356/8088/2129 +f 4357/8089/396 4358/8090/396 4359/8091/396 4360/8092/396 +f 4319/8030/396 4361/8093/2130 4362/8094/2131 4320/8031/396 +f 4363/8095/733 4341/8071/733 4298/8007/301 4324/8035/301 +f 4364/8096/735 4343/8073/735 4341/8071/733 4363/8095/733 +f 4365/8097/736 4345/8075/736 4343/8073/735 4364/8096/735 +f 4366/8098/737 4347/8077/737 4345/8080/736 4365/8099/736 +f 4367/8100/188 4349/8081/188 4347/8077/737 4366/8098/737 +f 4352/8084/738 4349/8081/188 4367/8100/188 4368/8101/738 +f 4354/8086/471 4352/8084/738 4368/8101/738 4369/8102/471 +f 4356/8088/2129 4354/8086/471 4369/8102/471 4370/8103/2132 +f 4362/8094/2131 4356/8104/2129 4370/8105/2132 4371/8106/2133 +f 4320/8031/396 4362/8094/2131 4371/8106/2133 4333/8047/396 +s 2 +f 4356/8107/189 4372/8108/189 4355/8109/189 +f 4361/8110/187 4373/8111/187 4374/8112/187 4362/8113/187 +s 4 +f 4356/8114/428 4362/8115/428 4374/8116/428 4372/8117/428 +s 2 +f 4375/8118/189 4372/8108/189 4359/8119/189 4358/8120/189 +f 4360/8121/187 4374/8112/187 4373/8111/187 4357/8122/187 +s 4 +f 4372/8117/428 4374/8116/428 4360/8123/428 4359/8124/428 +f 4375/8125/2134 4358/8126/2135 4376/8127/2136 4377/8128/2137 +f 4377/8128/2137 4378/8129/2138 4375/8125/2134 +f 4379/8130/428 4380/8131/429 4381/8132/428 +f 4373/8133/2139 4382/8134/2140 4383/8135/2141 4357/8136/2142 +f 4358/8126/2135 4357/8136/2142 4384/8137/2143 4385/8138/2144 +f 4361/8139/2145 4319/8140/2146 4382/8134/2140 4373/8133/2139 +f 4386/8141/430 4385/8138/2144 4384/8137/2143 4387/8142/430 +f 4388/8143/430 4386/8141/430 4387/8142/430 4380/8131/429 +f 4336/8144/2139 4315/8145/2257 4383/8135/2141 4382/8134/2140 +f 4383/8135/2141 4315/8145/2257 4384/8137/2143 +f 4384/8137/2143 4389/8146/2148 4390/8147/428 4387/8142/430 +f 4387/8142/430 4390/8147/428 4391/8148/428 4380/8131/429 +f 4322/8149/2149 4336/8144/2139 4382/8134/2140 4319/8140/2146 +f 4379/8130/428 4392/8150/429 4380/8131/429 +f 4380/8131/429 4393/8151/428 4381/8132/428 +f 4380/8131/429 4391/8148/428 4393/8151/428 +f 4392/8150/429 4394/8152/430 4380/8131/429 +f 4394/8152/430 4388/8143/430 4380/8131/429 +s 8 +f 4299/8008/2150 4379/8153/2258 4381/8154/2259 4300/8009/2260 +f 4300/8155/2260 4381/8156/2259 4393/8157/2154 4302/8158/2261 +f 4302/8158/2261 4393/8157/2154 4391/8159/2156 4304/8160/2157 +f 4304/8160/2157 4391/8159/2156 4390/8161/2158 4306/8162/2159 +f 4306/8162/2159 4390/8161/2158 4389/8163/2160 4308/8164/2161 +f 4308/8165/2161 4389/8166/2160 4339/8167/2162 4309/8168/2262 +f 4309/8168/2262 4339/8167/2162 4338/8169/2164 4311/8170/2263 +f 4311/8170/2263 4338/8169/2164 4340/8171/2264 4313/8172/2265 +f 4342/8072/2266 4392/8173/2267 4379/8153/2258 4299/8008/2150 +f 4344/8174/2268 4394/8175/2171 4392/8176/2267 4342/8177/2266 +f 4346/8178/2172 4388/8179/2173 4394/8180/2171 4344/8181/2268 +f 4348/8182/2174 4386/8183/2175 4388/8179/2173 4346/8178/2172 +f 4350/8184/2176 4385/8185/2177 4386/8183/2175 4348/8182/2174 +f 4351/8186/2269 4376/8187/2270 4385/8188/2177 4350/8189/2176 +f 4353/8190/2271 4377/8191/2272 4376/8187/2270 4351/8186/2269 +f 4355/8192/2273 4378/8193/2274 4377/8191/2272 4353/8190/2271 +s 2 +f 4340/8194/187 4337/8059/187 4334/8050/187 +f 4313/8049/187 4340/8194/187 4334/8050/187 +f 4372/8108/189 4378/8195/189 4355/8109/189 +f 4372/8108/189 4375/8118/189 4378/8195/189 +f 4324/8196/455 4323/8197/455 4395/8198/752 +f 4323/8197/455 4325/8199/455 4395/8198/752 +f 4325/8199/455 4326/8200/455 4395/8198/752 +f 4326/8200/455 4327/8201/455 4395/8198/752 +f 4327/8201/455 4328/8202/754 4395/8198/752 +f 4328/8202/754 4329/8203/754 4395/8198/752 +f 4329/8203/754 4330/8204/455 4395/8198/752 +f 4330/8204/455 4331/8205/455 4395/8198/752 +f 4331/8205/455 4332/8206/455 4395/8198/752 +f 4332/8206/455 4333/8207/455 4395/8198/752 +f 4333/8207/455 4371/8208/455 4395/8198/752 +f 4371/8208/455 4370/8209/753 4395/8198/752 +f 4370/8209/753 4369/8210/753 4395/8198/752 +f 4369/8210/753 4368/8211/752 4395/8198/752 +f 4368/8211/752 4367/8212/752 4395/8198/752 +f 4367/8212/752 4366/8213/753 4395/8198/752 +f 4366/8213/753 4365/8214/752 4395/8198/752 +f 4365/8214/752 4364/8215/752 4395/8198/752 +f 4364/8215/752 4363/8216/455 4395/8198/752 +f 4363/8216/455 4324/8196/455 4395/8198/752 +s 1 +f 4396/8217/252 4397/8218/252 4398/8219/252 4399/8220/252 +f 4400/8221/253 4401/8222/253 4402/8223/253 4403/8224/253 +s 2 +f 4401/8222/254 4404/8225/2184 4405/8226/2185 4402/8223/2186 +f 4406/8227/2187 4396/8217/258 4399/8220/2188 4407/8228/2189 +s 4 +f 4408/8229/260 4398/8230/2275 4409/8231/262 4410/8232/2276 +f 4411/8233/264 4408/8229/260 4410/8232/2276 4412/8234/2277 +f 4400/8235/571 4403/8236/267 4413/8237/268 4414/8238/2278 +f 4397/8239/270 4415/8240/2279 4409/8231/262 4398/8230/2275 +f 4411/8233/264 4412/8234/2277 4413/8237/268 4403/8236/267 +s 1 +f 4413/8241/271 4416/8242/271 4417/8243/271 4414/8244/271 +s 2 +f 4412/8245/272 4418/8246/273 4416/8247/274 4413/8248/275 +s 1 +f 4410/8249/2245 4419/8250/423 4418/8246/423 4412/8245/2245 +s 2 +f 4410/8249/279 4409/8251/280 4420/8252/281 4419/8250/282 +s 1 +f 4409/8253/283 4415/8254/283 4421/8255/283 4420/8256/283 +s 2 +f 4398/8219/2193 4422/8257/2193 4423/8258/285 4399/8220/2188 +s 4 +f 4408/8229/260 4424/8259/2195 4422/8260/2280 4398/8230/2275 +f 4411/8233/264 4425/8261/289 4424/8259/2195 4408/8229/260 +f 4403/8236/267 4426/8262/2281 4425/8261/289 4411/8233/264 +s 2 +f 4402/8223/2186 4427/8263/292 4426/8264/2198 4403/8224/2198 +f 4405/8226/2185 4428/8265/2200 4427/8263/292 4402/8223/2186 +f 4399/8220/2188 4423/8258/285 4429/8266/2201 4407/8228/2189 +s 1 +f 4430/8267/974 4431/8268/974 4432/8269/974 4433/8270/974 +f 4433/8270/974 4432/8269/974 4434/8271/974 4435/8272/974 +f 4436/8273/302 4437/8274/303 4417/8243/271 4416/8242/271 +s 2 +f 4438/8275/304 4436/8276/305 4416/8247/274 4418/8246/273 +s 1 +f 4439/8277/2282 4438/8275/2282 4418/8246/423 4419/8250/423 +s 2 +f 4440/8278/308 4439/8277/309 4419/8250/282 4420/8252/281 +s 1 +f 4441/8279/310 4440/8280/311 4420/8256/283 4421/8255/283 +f 4442/8281/312 4443/8282/313 4444/8283/314 4445/8284/315 +s 2 +f 4446/8285/316 4442/8286/317 4445/8287/318 4447/8288/319 +s 1 +f 4448/8289/320 4446/8285/320 4447/8288/321 4449/8290/321 +s 2 +f 4450/8291/322 4448/8289/323 4449/8290/324 4451/8292/325 +s 1 +f 4452/8293/326 4450/8294/327 4451/8295/328 4453/8296/329 +f 4436/8273/302 4445/8284/315 4444/8283/314 4437/8274/303 +s 2 +f 4438/8275/304 4447/8288/319 4445/8287/318 4436/8276/305 +s 1 +f 4439/8277/2282 4449/8290/321 4447/8288/321 4438/8275/2282 +s 2 +f 4440/8278/308 4451/8292/325 4449/8290/324 4439/8277/309 +s 1 +f 4441/8279/310 4453/8296/329 4451/8295/328 4440/8280/311 +f 4396/8217/252 4454/8297/252 4455/8298/252 4397/8218/252 +f 4400/8221/253 4456/8299/253 4457/8300/253 4401/8222/253 +s 2 +f 4401/8222/254 4457/8300/2202 4458/8301/2203 4404/8225/2184 +f 4406/8227/2187 4459/8302/2204 4454/8297/2205 4396/8217/258 +s 4 +f 4460/8303/332 4461/8304/2283 4462/8305/334 4455/8306/335 +f 4463/8307/336 4464/8308/2284 4461/8304/2283 4460/8303/332 +f 4400/8235/571 4414/8238/2278 4465/8309/338 4456/8310/339 +f 4397/8239/270 4455/8306/335 4462/8305/334 4415/8240/2279 +f 4463/8307/336 4456/8310/339 4465/8309/338 4464/8308/2284 +s 2 +f 4465/8311/340 4414/8244/340 4417/8243/340 4466/8312/340 +s 1 +f 4464/8313/341 4465/8314/342 4466/8315/343 4467/8316/344 +s 2 +f 4461/8317/2208 4464/8313/2208 4467/8316/346 4468/8318/346 +s 1 +f 4461/8317/347 4468/8318/348 4469/8319/349 4462/8320/350 +s 2 +f 4462/8321/351 4469/8322/351 4421/8255/351 4415/8254/351 +f 4455/8298/352 4454/8297/2205 4470/8323/2210 4471/8324/352 +s 4 +f 4460/8303/332 4455/8306/335 4471/8325/2285 4472/8326/2212 +f 4463/8307/336 4460/8303/332 4472/8326/2212 4473/8327/2213 +f 4456/8310/339 4463/8307/336 4473/8327/2213 4474/8328/2286 +s 2 +f 4457/8300/2202 4456/8299/2287 4474/8329/2287 4475/8330/361 +f 4458/8301/2203 4457/8300/2202 4475/8330/361 4476/8331/2215 +f 4454/8297/2205 4459/8302/2204 4477/8332/2216 4470/8323/2210 +s 1 +f 4478/8333/974 4479/8334/974 4480/8335/974 4481/8336/974 +f 4479/8334/974 4435/8272/974 4434/8271/974 4480/8335/974 +s 2 +f 4482/8337/368 4466/8312/340 4417/8243/340 4437/8274/369 +s 1 +f 4483/8338/370 4467/8316/344 4466/8315/343 4482/8339/371 +s 2 +f 4484/8340/2288 4468/8318/346 4467/8316/346 4483/8338/2288 +s 1 +f 4485/8341/373 4469/8319/349 4468/8318/348 4484/8340/374 +s 2 +f 4441/8279/375 4421/8255/351 4469/8322/351 4485/8342/376 +f 4486/8343/377 4487/8344/378 4444/8283/379 4443/8282/380 +s 1 +f 4488/8345/381 4489/8346/382 4487/8347/383 4486/8348/384 +s 2 +f 4490/8349/385 4491/8350/386 4489/8346/386 4488/8345/385 +s 1 +f 4492/8351/387 4493/8352/388 4491/8350/579 4490/8349/390 +s 2 +f 4452/8293/391 4453/8296/392 4493/8353/393 4492/8354/394 +f 4482/8337/368 4437/8274/369 4444/8283/379 4487/8344/378 +s 1 +f 4483/8338/370 4482/8339/371 4487/8347/383 4489/8346/382 +s 2 +f 4484/8340/2288 4483/8338/2288 4489/8346/386 4491/8350/386 +s 1 +f 4485/8341/373 4484/8340/374 4491/8350/579 4493/8352/388 +s 2 +f 4441/8279/375 4485/8342/376 4493/8353/393 4453/8296/392 +s 8 +f 4423/8355/189 4422/8356/189 4494/8357/189 +f 4422/8356/189 4424/8358/189 4494/8357/189 +f 4424/8358/189 4425/8359/189 4494/8357/189 +f 4425/8359/189 4426/8360/189 4494/8357/189 +f 4426/8360/189 4427/8361/189 4494/8357/189 +f 4427/8361/189 4428/8362/2218 4494/8357/189 +f 4428/8362/2218 4429/8363/2219 4494/8357/189 +f 4429/8363/2219 4423/8355/189 4494/8357/189 +f 4471/8364/187 4470/8365/187 4495/8366/187 +f 4470/8365/187 4477/8367/2220 4495/8366/187 +f 4477/8367/2220 4476/8368/2289 4495/8366/187 +f 4476/8368/2289 4475/8369/187 4495/8366/187 +f 4475/8369/187 4474/8370/187 4495/8366/187 +f 4474/8370/187 4473/8371/187 4495/8366/187 +f 4473/8371/187 4472/8372/187 4495/8366/187 +f 4472/8372/187 4471/8364/187 4495/8366/187 +s 1 +f 4496/8373/396 4497/8374/396 4498/8375/396 +f 4497/8374/396 4499/8376/396 4498/8375/396 +f 4499/8376/396 4500/8377/396 4498/8375/396 +f 4500/8377/396 4501/8378/396 4498/8375/396 +f 4501/8378/396 4502/8379/396 4498/8375/396 +f 4502/8379/396 4503/8380/396 4498/8375/396 +f 4503/8380/396 4504/8381/396 4498/8375/396 +f 4504/8381/396 4505/8382/396 4498/8375/396 +f 4505/8382/396 4506/8383/396 4498/8375/396 +f 4506/8383/396 4496/8373/396 4498/8375/396 +s 4 +f 4496/8384/2290 4443/8385/2290 4442/8386/2291 4497/8387/2291 +f 4497/8387/2291 4442/8386/2291 4446/8388/399 4499/8389/399 +f 4499/8390/399 4446/8285/399 4448/8289/400 4500/8391/400 +f 4500/8392/400 4448/8393/400 4450/8394/2292 4501/8395/2292 +f 4501/8396/2292 4450/8294/2292 4452/8293/2293 4502/8397/2293 +f 4506/8398/2294 4486/8399/2294 4443/8385/2290 4496/8384/2290 +f 4505/8400/404 4488/8401/404 4486/8402/2294 4506/8403/2294 +f 4504/8404/405 4490/8349/405 4488/8345/404 4505/8405/404 +f 4503/8406/2295 4492/8407/2295 4490/8408/405 4504/8409/405 +f 4502/8410/2293 4452/8411/2293 4492/8407/2295 4503/8406/2295 +s 2 +f 4405/8226/2185 4404/8225/2184 4434/8412/2233 4432/8413/2234 +f 4404/8225/2184 4458/8301/2203 4480/8414/2235 4434/8412/2233 +f 4458/8301/2203 4476/8331/2215 4481/8415/2236 4480/8414/2235 +s 8 +f 4476/8368/2289 4477/8367/2220 4478/8416/2237 4481/8417/2237 +s 2 +f 4477/8332/2216 4459/8302/2204 4479/8418/2238 4478/8419/2239 +f 4459/8302/2204 4406/8227/2187 4435/8420/2240 4479/8418/2238 +f 4406/8227/2187 4407/8228/2189 4433/8421/2241 4435/8420/2240 +f 4407/8228/2189 4429/8266/2201 4430/8422/2242 4433/8421/2241 +s 8 +f 4429/8363/2219 4428/8362/2218 4431/8423/2243 4430/8424/2243 +s 2 +f 4428/8265/2200 4405/8226/2185 4432/8413/2234 4431/8425/2244 +s 1 +f 4507/8426/252 4508/8427/252 4509/8428/252 4510/8429/252 +f 4511/8430/253 4512/8431/253 4513/8432/253 4514/8433/253 +s 2 +f 4512/8431/254 4515/8434/2184 4516/8435/2185 4513/8432/2186 +f 4517/8436/2187 4507/8426/258 4510/8429/2188 4518/8437/2189 +s 4 +f 4519/8438/260 4509/8439/2275 4520/8440/262 4521/8441/2276 +f 4522/8442/264 4519/8438/260 4521/8441/2276 4523/8443/2277 +f 4511/8444/266 4514/8445/267 4524/8446/268 4525/8447/2296 +f 4508/8448/269 4526/8449/2297 4520/8440/262 4509/8439/2275 +f 4522/8442/264 4523/8443/2277 4524/8446/268 4514/8445/267 +s 1 +f 4524/8450/271 4527/8451/271 4528/8452/271 4525/8453/271 +s 2 +f 4523/8454/272 4529/8455/273 4527/8456/274 4524/8457/275 +s 1 +f 4521/8458/278 4530/8459/423 4529/8455/423 4523/8454/278 +s 2 +f 4521/8458/279 4520/8460/280 4531/8461/281 4530/8459/282 +s 1 +f 4520/8462/283 4526/8463/283 4532/8464/283 4531/8465/283 +s 2 +f 4509/8428/2193 4533/8466/2193 4534/8467/285 4510/8429/2188 +s 4 +f 4519/8438/260 4535/8468/2195 4533/8469/2280 4509/8439/2275 +f 4522/8442/264 4536/8470/289 4535/8468/2195 4519/8438/260 +f 4514/8445/267 4537/8471/2281 4536/8470/289 4522/8442/264 +s 2 +f 4513/8432/2186 4538/8472/292 4537/8473/2198 4514/8433/2198 +f 4516/8435/2185 4539/8474/2200 4538/8472/292 4513/8432/2186 +f 4510/8429/2188 4534/8467/285 4540/8475/2201 4518/8437/2189 +s 1 +f 4541/8476/974 4542/8477/974 4543/8478/974 4544/8479/974 +f 4544/8479/974 4543/8478/974 4545/8480/974 4546/8481/974 +f 4547/8482/302 4548/8483/303 4528/8452/271 4527/8451/271 +s 2 +f 4549/8484/304 4547/8485/305 4527/8456/274 4529/8455/273 +s 1 +f 4550/8486/2282 4549/8484/2282 4529/8455/423 4530/8459/423 +s 2 +f 4551/8487/308 4550/8486/309 4530/8459/282 4531/8461/281 +s 1 +f 4552/8488/310 4551/8489/311 4531/8465/283 4532/8464/283 +f 4553/8490/312 4554/8491/313 4555/8492/314 4556/8493/315 +s 2 +f 4557/8494/316 4553/8495/317 4556/8496/318 4558/8497/319 +s 1 +f 4559/8498/320 4557/8494/320 4558/8497/321 4560/8499/321 +s 2 +f 4561/8500/322 4559/8498/323 4560/8499/324 4562/8501/325 +s 1 +f 4563/8502/326 4561/8503/327 4562/8504/328 4564/8505/329 +f 4547/8482/302 4556/8493/315 4555/8492/314 4548/8483/303 +s 2 +f 4549/8484/304 4558/8497/319 4556/8496/318 4547/8485/305 +s 1 +f 4550/8486/2282 4560/8499/321 4558/8497/321 4549/8484/2282 +s 2 +f 4551/8487/308 4562/8501/325 4560/8499/324 4550/8486/309 +s 1 +f 4552/8488/310 4564/8505/329 4562/8504/328 4551/8489/311 +f 4507/8426/252 4565/8506/252 4566/8507/252 4508/8427/252 +f 4511/8430/253 4567/8508/253 4568/8509/253 4512/8431/253 +s 2 +f 4512/8431/254 4568/8509/2202 4569/8510/2203 4515/8434/2184 +f 4517/8436/2187 4570/8511/2204 4565/8506/2205 4507/8426/258 +s 4 +f 4571/8512/332 4572/8513/2283 4573/8514/334 4566/8515/2298 +f 4574/8516/336 4575/8517/2284 4572/8513/2283 4571/8512/332 +f 4511/8444/266 4525/8447/2296 4576/8518/338 4567/8519/339 +f 4508/8448/269 4566/8515/2298 4573/8514/334 4526/8449/2297 +f 4574/8516/336 4567/8519/339 4576/8518/338 4575/8517/2284 +s 2 +f 4576/8520/340 4525/8453/340 4528/8452/340 4577/8521/340 +s 1 +f 4575/8522/341 4576/8523/342 4577/8524/343 4578/8525/344 +s 2 +f 4572/8526/2208 4575/8522/2208 4578/8525/346 4579/8527/346 +s 1 +f 4572/8526/347 4579/8527/348 4580/8528/2250 4573/8529/350 +s 2 +f 4573/8530/351 4580/8531/351 4532/8464/351 4526/8463/351 +f 4566/8507/2299 4565/8506/2205 4581/8532/2300 4582/8533/2299 +s 4 +f 4571/8512/332 4566/8515/2298 4582/8534/2285 4583/8535/2212 +f 4574/8516/336 4571/8512/332 4583/8535/2212 4584/8536/2213 +f 4567/8519/339 4574/8516/336 4584/8536/2213 4585/8537/2286 +s 2 +f 4568/8509/2202 4567/8508/2287 4585/8538/2287 4586/8539/361 +f 4569/8510/2203 4568/8509/2202 4586/8539/361 4587/8540/2215 +f 4565/8506/2205 4570/8511/2204 4588/8541/2216 4581/8532/2300 +s 1 +f 4589/8542/974 4590/8543/974 4591/8544/974 4592/8545/974 +f 4590/8543/974 4546/8481/974 4545/8480/974 4591/8544/974 +s 2 +f 4593/8546/368 4577/8521/340 4528/8452/340 4548/8483/369 +s 1 +f 4594/8547/370 4578/8525/344 4577/8524/343 4593/8548/371 +s 2 +f 4595/8549/372 4579/8527/346 4578/8525/346 4594/8547/372 +s 1 +f 4596/8550/373 4580/8528/2250 4579/8527/348 4595/8549/374 +s 2 +f 4552/8488/375 4532/8464/351 4580/8531/351 4596/8551/376 +f 4597/8552/377 4598/8553/378 4555/8492/379 4554/8491/380 +s 1 +f 4599/8554/381 4600/8555/382 4598/8556/383 4597/8557/381 +s 2 +f 4601/8558/385 4602/8559/386 4600/8555/386 4599/8554/385 +s 1 +f 4603/8560/387 4604/8561/388 4602/8559/579 4601/8558/390 +s 2 +f 4563/8502/391 4564/8505/392 4604/8562/393 4603/8563/394 +f 4593/8546/368 4548/8483/369 4555/8492/379 4598/8553/378 +s 1 +f 4594/8547/370 4593/8548/371 4598/8556/383 4600/8555/382 +s 2 +f 4595/8549/372 4594/8547/372 4600/8555/386 4602/8559/386 +s 1 +f 4596/8550/373 4595/8549/374 4602/8559/579 4604/8561/388 +s 2 +f 4552/8488/375 4596/8551/376 4604/8562/393 4564/8505/392 +s 8 +f 4534/8564/189 4533/8565/189 4605/8566/189 +f 4533/8565/189 4535/8567/189 4605/8566/189 +f 4535/8567/189 4536/8568/189 4605/8566/189 +f 4536/8568/189 4537/8569/189 4605/8566/189 +f 4537/8569/189 4538/8570/189 4605/8566/189 +f 4538/8570/189 4539/8571/2218 4605/8566/189 +f 4539/8571/2218 4540/8572/2219 4605/8566/189 +f 4540/8572/2219 4534/8564/189 4605/8566/189 +f 4582/8573/187 4581/8574/187 4606/8575/187 +f 4581/8574/187 4588/8576/2220 4606/8575/187 +f 4588/8576/2220 4587/8577/2221 4606/8575/187 +f 4587/8577/2221 4586/8578/187 4606/8575/187 +f 4586/8578/187 4585/8579/187 4606/8575/187 +f 4585/8579/187 4584/8580/187 4606/8575/187 +f 4584/8580/187 4583/8581/187 4606/8575/187 +f 4583/8581/187 4582/8573/187 4606/8575/187 +s 1 +f 4607/8582/396 4608/8583/396 4609/8584/396 +f 4608/8583/396 4610/8585/396 4609/8584/396 +f 4610/8585/396 4611/8586/396 4609/8584/396 +f 4611/8586/396 4612/8587/396 4609/8584/396 +f 4612/8587/396 4613/8588/396 4609/8584/396 +f 4613/8588/396 4614/8589/396 4609/8584/396 +f 4614/8589/396 4615/8590/396 4609/8584/396 +f 4615/8590/396 4616/8591/396 4609/8584/396 +f 4616/8591/396 4617/8592/396 4609/8584/396 +f 4617/8592/396 4607/8582/396 4609/8584/396 +s 4 +f 4607/8593/2290 4554/8594/2290 4553/8595/2291 4608/8596/2291 +f 4608/8596/2291 4553/8595/2291 4557/8597/399 4610/8598/399 +f 4610/8599/399 4557/8494/399 4559/8498/400 4611/8600/400 +f 4611/8601/400 4559/8602/400 4561/8603/2292 4612/8604/2292 +f 4612/8605/2292 4561/8503/2292 4563/8502/2293 4613/8606/2293 +f 4617/8607/2294 4597/8608/2294 4554/8594/2290 4607/8593/2290 +f 4616/8609/404 4599/8610/404 4597/8611/2294 4617/8612/2294 +f 4615/8613/405 4601/8558/405 4599/8554/404 4616/8614/404 +f 4614/8615/2295 4603/8616/2295 4601/8617/405 4615/8618/405 +f 4613/8619/2293 4563/8620/2293 4603/8616/2295 4614/8615/2295 +s 2 +f 4516/8435/2185 4515/8434/2184 4545/8621/2233 4543/8622/2301 +f 4515/8434/2184 4569/8510/2203 4591/8623/2302 4545/8621/2233 +f 4569/8510/2203 4587/8540/2215 4592/8624/2236 4591/8623/2302 +s 8 +f 4587/8577/2221 4588/8576/2220 4589/8625/2237 4592/8626/2237 +s 2 +f 4588/8541/2216 4570/8511/2204 4590/8627/2238 4589/8628/2239 +f 4570/8511/2204 4517/8436/2187 4546/8629/2303 4590/8627/2238 +f 4517/8436/2187 4518/8437/2189 4544/8630/2304 4546/8629/2303 +f 4518/8437/2189 4540/8475/2201 4541/8631/2242 4544/8630/2304 +s 8 +f 4540/8572/2219 4539/8571/2218 4542/8632/2243 4541/8633/2243 +s 2 +f 4539/8474/2200 4516/8435/2185 4543/8622/2301 4542/8634/2244 +s 1 +f 4618/8635/1467 4619/8636/301 4620/8637/426 4621/8638/1467 +f 4622/8639/1109 4618/8635/1467 4621/8638/1467 4623/8640/1109 +f 4624/8641/749 4622/8639/1109 4623/8640/1109 4625/8642/749 +f 4626/8643/747 4624/8644/749 4625/8645/749 4627/8646/747 +f 4628/8647/190 4626/8643/747 4627/8646/747 4629/8648/2254 +f 4630/8649/2255 4631/8650/2118 4628/8647/190 4629/8648/2254 +f 4632/8651/2305 4633/8652/485 4631/8650/2118 4630/8649/2255 +f 4634/8653/1526 4635/8654/2115 4633/8655/485 4632/8656/2305 +f 4636/8657/396 4637/8658/396 4638/8659/396 4639/8660/396 +f 4640/8661/604 4641/8662/396 4642/8663/2116 4643/8664/2117 +f 4644/8665/751 4645/8666/301 4619/8636/301 4618/8635/1467 +f 4646/8667/750 4644/8665/751 4618/8635/1467 4622/8639/1109 +f 4647/8668/748 4646/8667/750 4622/8639/1109 4624/8641/749 +f 4648/8669/1466 4647/8670/748 4624/8644/749 4626/8643/747 +f 4649/8671/189 4648/8669/1466 4626/8643/747 4628/8647/190 +f 4631/8650/2118 4650/8672/2118 4649/8671/189 4628/8647/190 +f 4633/8652/485 4651/8673/485 4650/8672/2118 4631/8650/2118 +f 4635/8654/2115 4652/8674/2119 4651/8675/485 4633/8655/485 +f 4642/8663/2116 4653/8676/2120 4652/8674/2119 4635/8654/2115 +f 4641/8662/396 4654/8677/396 4653/8676/2120 4642/8663/2116 +s 2 +f 4635/8678/187 4634/8679/187 4655/8680/187 +f 4643/8681/189 4642/8682/189 4656/8683/189 4657/8684/190 +s 4 +f 4635/8685/428 4655/8686/428 4656/8687/428 4642/8688/428 +s 2 +f 4658/8689/187 4639/8690/188 4638/8691/188 4655/8680/187 +f 4637/8692/190 4636/8693/190 4657/8684/190 4656/8683/189 +s 4 +f 4655/8686/428 4638/8694/428 4637/8695/428 4656/8687/428 +f 4658/8696/2121 4659/8697/2306 4660/8698/2123 4639/8699/2124 +f 4659/8697/2306 4658/8696/2121 4661/8700/2125 +s 1 +f 4662/8701/733 4663/8702/733 4620/8637/426 4619/8636/301 +f 4664/8703/735 4665/8704/735 4663/8702/733 4662/8701/733 +f 4666/8705/736 4667/8706/736 4665/8704/735 4664/8703/735 +f 4668/8707/737 4669/8708/737 4667/8709/736 4666/8710/736 +f 4670/8711/187 4671/8712/2126 4669/8708/737 4668/8707/737 +f 4672/8713/2127 4671/8712/2126 4670/8711/187 4673/8714/738 +f 4674/8715/2128 4672/8713/2127 4673/8714/738 4675/8716/471 +f 4676/8717/1607 4674/8718/2128 4675/8719/471 4677/8720/2129 +f 4678/8721/396 4679/8722/396 4680/8723/396 4681/8724/396 +f 4640/8661/604 4682/8725/2130 4683/8726/2131 4641/8662/396 +f 4684/8727/733 4662/8701/733 4619/8636/301 4645/8666/301 +f 4685/8728/735 4664/8703/735 4662/8701/733 4684/8727/733 +f 4686/8729/736 4666/8705/736 4664/8703/735 4685/8728/735 +f 4687/8730/737 4668/8707/737 4666/8710/736 4686/8731/736 +f 4688/8732/187 4670/8711/187 4668/8707/737 4687/8730/737 +f 4673/8714/738 4670/8711/187 4688/8732/187 4689/8733/738 +f 4675/8716/471 4673/8714/738 4689/8733/738 4690/8734/471 +f 4677/8720/2129 4675/8719/471 4690/8735/471 4691/8736/2132 +f 4683/8726/2131 4677/8720/2129 4691/8736/2132 4692/8737/2133 +f 4641/8662/396 4683/8726/2131 4692/8737/2133 4654/8677/396 +s 2 +f 4677/8738/189 4693/8739/189 4676/8740/189 +f 4682/8741/936 4694/8742/936 4695/8743/936 4683/8744/187 +s 4 +f 4677/8745/428 4683/8746/428 4695/8747/428 4693/8748/428 +s 2 +f 4696/8749/190 4693/8739/189 4680/8750/190 4679/8751/190 +f 4681/8752/936 4695/8743/936 4694/8742/936 4678/8753/188 +s 4 +f 4693/8748/428 4695/8747/428 4681/8754/428 4680/8755/428 +f 4696/8756/2134 4679/8757/2307 4697/8758/2136 4698/8759/2137 +f 4698/8759/2137 4699/8760/2138 4696/8756/2134 +f 4700/8761/428 4701/8762/428 4702/8763/428 +f 4694/8764/2139 4703/8765/2308 4704/8766/2141 4678/8767/2309 +f 4705/8768/2144 4679/8757/2307 4678/8767/2309 4706/8769/2310 +f 4682/8770/2145 4640/8771/2311 4703/8765/2308 4694/8764/2139 +f 4707/8772/456 4705/8768/2144 4706/8769/2310 4708/8773/456 +f 4709/8774/456 4707/8772/456 4708/8773/456 4701/8762/428 +f 4657/8775/2312 4636/8776/2147 4704/8766/2141 4703/8765/2308 +f 4704/8766/2141 4636/8776/2147 4706/8769/2310 +f 4706/8769/2310 4710/8777/2148 4711/8778/428 4708/8773/456 +f 4708/8773/456 4711/8778/428 4712/8779/428 4701/8762/428 +f 4643/8780/2149 4657/8775/2312 4703/8765/2308 4640/8771/2311 +f 4700/8761/428 4713/8781/428 4701/8762/428 +f 4701/8762/428 4714/8782/428 4702/8763/428 +f 4701/8762/428 4712/8779/428 4714/8782/428 +f 4713/8781/428 4715/8783/428 4701/8762/428 +f 4715/8783/428 4709/8774/456 4701/8762/428 +s 8 +f 4620/8637/2150 4700/8784/2151 4702/8785/2259 4621/8638/2313 +f 4621/8786/2313 4702/8787/2259 4714/8788/2154 4623/8789/2155 +f 4623/8789/2155 4714/8788/2154 4712/8790/2156 4625/8791/2157 +f 4625/8791/2157 4712/8790/2156 4711/8792/2158 4627/8793/2159 +f 4627/8793/2159 4711/8792/2158 4710/8794/2160 4629/8795/2161 +f 4629/8796/2161 4710/8797/2160 4660/8798/2162 4630/8799/2163 +f 4630/8799/2163 4660/8798/2162 4659/8800/2164 4632/8801/2165 +f 4632/8801/2165 4659/8800/2164 4661/8802/2166 4634/8803/2167 +f 4663/8702/2168 4713/8804/2169 4700/8784/2151 4620/8637/2150 +f 4665/8805/2170 4715/8806/2171 4713/8807/2169 4663/8808/2168 +f 4667/8809/2172 4709/8810/2173 4715/8811/2171 4665/8812/2170 +f 4669/8813/2174 4707/8814/2175 4709/8810/2173 4667/8809/2172 +f 4671/8815/2176 4705/8816/2177 4707/8814/2175 4669/8813/2174 +f 4672/8817/2269 4697/8818/2179 4705/8819/2177 4671/8820/2176 +f 4674/8821/2180 4698/8822/2181 4697/8818/2179 4672/8817/2269 +f 4676/8823/2182 4699/8824/2183 4698/8822/2181 4674/8821/2180 +s 2 +f 4661/8825/187 4658/8689/187 4655/8680/187 +f 4634/8679/187 4661/8825/187 4655/8680/187 +f 4693/8739/189 4699/8826/189 4676/8740/189 +f 4693/8739/189 4696/8749/190 4699/8826/189 +f 4645/8827/455 4644/8828/752 4716/8829/455 +f 4644/8828/752 4646/8830/752 4716/8829/455 +f 4646/8830/752 4647/8831/752 4716/8829/455 +f 4647/8831/752 4648/8832/752 4716/8829/455 +f 4648/8832/752 4649/8833/754 4716/8829/455 +f 4649/8833/754 4650/8834/753 4716/8829/455 +f 4650/8834/753 4651/8835/753 4716/8829/455 +f 4651/8835/753 4652/8836/753 4716/8829/455 +f 4652/8836/753 4653/8837/753 4716/8829/455 +f 4653/8837/753 4654/8838/754 4716/8829/455 +f 4654/8838/754 4692/8839/754 4716/8829/455 +f 4692/8839/754 4691/8840/754 4716/8829/455 +f 4691/8840/754 4690/8841/754 4716/8829/455 +f 4690/8841/754 4689/8842/455 4716/8829/455 +f 4689/8842/455 4688/8843/455 4716/8829/455 +f 4688/8843/455 4687/8844/754 4716/8829/455 +f 4687/8844/754 4686/8845/455 4716/8829/455 +f 4686/8845/455 4685/8846/455 4716/8829/455 +f 4685/8846/455 4684/8847/455 4716/8829/455 +f 4684/8847/455 4645/8827/455 4716/8829/455 +s 1 +f 4717/8848/252 4718/8849/252 4719/8850/252 4720/8851/252 +f 4721/8852/253 4722/8853/253 4723/8854/253 4724/8855/253 +s 2 +f 4722/8853/254 4725/8856/2184 4726/8857/2185 4723/8854/2186 +f 4727/8858/2187 4717/8848/258 4720/8851/2188 4728/8859/2189 +s 4 +f 4729/8860/2314 4719/8861/261 4730/8862/262 4731/8863/2190 +f 4732/8864/2315 4729/8860/2314 4731/8863/2190 4733/8865/2191 +f 4721/8866/266 4724/8867/267 4734/8868/268 4735/8869/266 +f 4718/8870/269 4736/8871/269 4730/8862/262 4719/8861/261 +f 4732/8864/2315 4733/8865/2191 4734/8868/268 4724/8867/267 +s 1 +f 4734/8872/271 4737/8873/271 4738/8874/271 4735/8875/271 +s 2 +f 4733/8876/272 4739/8877/273 4737/8878/274 4734/8879/275 +s 1 +f 4731/8880/278 4740/8881/423 4739/8877/423 4733/8876/278 +s 2 +f 4731/8880/279 4730/8882/280 4741/8883/281 4740/8881/2316 +s 1 +f 4730/8884/283 4736/8885/283 4742/8886/283 4741/8887/283 +s 2 +f 4719/8850/2193 4743/8888/2193 4744/8889/285 4720/8851/2188 +s 4 +f 4729/8860/2314 4745/8890/2317 4743/8891/2196 4719/8861/261 +f 4732/8864/2315 4746/8892/2318 4745/8890/2317 4729/8860/2314 +f 4724/8867/267 4747/8893/2319 4746/8892/2318 4732/8864/2315 +s 2 +f 4723/8854/2186 4748/8894/292 4747/8895/2198 4724/8855/2198 +f 4726/8857/2185 4749/8896/2200 4748/8894/292 4723/8854/2186 +f 4720/8851/2188 4744/8889/285 4750/8897/2201 4728/8859/2189 +s 1 +f 4751/8898/974 4752/8899/974 4753/8900/974 4754/8901/974 +f 4754/8901/974 4753/8900/974 4755/8902/974 4756/8903/974 +f 4757/8904/302 4758/8905/303 4738/8874/271 4737/8873/271 +s 2 +f 4759/8906/304 4757/8907/305 4737/8878/274 4739/8877/273 +s 1 +f 4760/8908/2282 4759/8906/2282 4739/8877/423 4740/8881/423 +s 2 +f 4761/8909/308 4760/8908/309 4740/8881/2316 4741/8883/281 +s 1 +f 4762/8910/310 4761/8911/311 4741/8887/283 4742/8886/283 +f 4763/8912/312 4764/8913/313 4765/8914/314 4766/8915/315 +s 2 +f 4767/8916/316 4763/8917/317 4766/8918/318 4768/8919/319 +s 1 +f 4769/8920/320 4767/8916/320 4768/8919/321 4770/8921/321 +s 2 +f 4771/8922/322 4769/8920/323 4770/8921/324 4772/8923/325 +s 1 +f 4773/8924/327 4771/8925/327 4772/8926/328 4774/8927/329 +f 4757/8904/302 4766/8915/315 4765/8914/314 4758/8905/303 +s 2 +f 4759/8906/304 4768/8919/319 4766/8918/318 4757/8907/305 +s 1 +f 4760/8908/2282 4770/8921/321 4768/8919/321 4759/8906/2282 +s 2 +f 4761/8909/308 4772/8923/325 4770/8921/324 4760/8908/309 +s 1 +f 4762/8910/310 4774/8927/329 4772/8926/328 4761/8911/311 +f 4717/8848/252 4775/8928/252 4776/8929/252 4718/8849/252 +f 4721/8852/253 4777/8930/253 4778/8931/253 4722/8853/253 +s 2 +f 4722/8853/254 4778/8931/2202 4779/8932/2203 4725/8856/2184 +f 4727/8858/2187 4780/8933/2204 4775/8928/2205 4717/8848/258 +s 4 +f 4781/8934/2320 4782/8935/2206 4783/8936/334 4776/8937/335 +f 4784/8938/2321 4785/8939/2207 4782/8935/2206 4781/8934/2320 +f 4721/8866/266 4735/8869/266 4786/8940/338 4777/8941/339 +f 4718/8870/269 4776/8937/335 4783/8936/334 4736/8871/269 +f 4784/8938/2321 4777/8941/339 4786/8940/338 4785/8939/2207 +s 2 +f 4786/8942/340 4735/8875/340 4738/8874/340 4787/8943/340 +s 1 +f 4785/8944/341 4786/8945/342 4787/8946/343 4788/8947/344 +s 2 +f 4782/8948/345 4785/8944/345 4788/8947/346 4789/8949/346 +s 1 +f 4782/8948/347 4789/8949/348 4790/8950/349 4783/8951/350 +s 2 +f 4783/8952/351 4790/8953/351 4742/8886/351 4736/8885/351 +f 4776/8929/2322 4775/8928/2205 4791/8954/2210 4792/8955/2299 +s 4 +f 4781/8934/2320 4776/8937/335 4792/8956/2211 4793/8957/2323 +f 4784/8938/2321 4781/8934/2320 4793/8957/2323 4794/8958/2324 +f 4777/8941/339 4784/8938/2321 4794/8958/2324 4795/8959/358 +s 2 +f 4778/8931/2202 4777/8930/2251 4795/8960/2287 4796/8961/361 +f 4779/8932/2203 4778/8931/2202 4796/8961/361 4797/8962/2215 +f 4775/8928/2205 4780/8933/2204 4798/8963/2216 4791/8954/2210 +s 1 +f 4799/8964/974 4800/8965/974 4801/8966/974 4802/8967/974 +f 4800/8965/974 4756/8903/974 4755/8902/974 4801/8966/974 +s 2 +f 4803/8968/368 4787/8943/340 4738/8874/340 4758/8905/369 +s 1 +f 4804/8969/370 4788/8947/344 4787/8946/343 4803/8970/371 +s 2 +f 4805/8971/372 4789/8949/346 4788/8947/346 4804/8969/372 +s 1 +f 4806/8972/373 4790/8950/349 4789/8949/348 4805/8971/374 +s 2 +f 4762/8910/375 4742/8886/351 4790/8953/351 4806/8973/376 +f 4807/8974/377 4808/8975/378 4765/8914/379 4764/8913/380 +s 1 +f 4809/8976/381 4810/8977/382 4808/8978/383 4807/8979/381 +s 2 +f 4811/8980/385 4812/8981/386 4810/8977/386 4809/8976/385 +s 1 +f 4813/8982/387 4814/8983/388 4812/8981/579 4811/8980/387 +s 2 +f 4773/8924/394 4774/8927/392 4814/8984/393 4813/8985/394 +f 4803/8968/368 4758/8905/369 4765/8914/379 4808/8975/378 +s 1 +f 4804/8969/370 4803/8970/371 4808/8978/383 4810/8977/382 +s 2 +f 4805/8971/372 4804/8969/372 4810/8977/386 4812/8981/386 +s 1 +f 4806/8972/373 4805/8971/374 4812/8981/579 4814/8983/388 +s 2 +f 4762/8910/375 4806/8973/376 4814/8984/393 4774/8927/392 +s 8 +f 4744/8986/189 4743/8987/189 4815/8988/189 +f 4743/8987/189 4745/8989/189 4815/8988/189 +f 4745/8989/189 4746/8990/189 4815/8988/189 +f 4746/8990/189 4747/8991/189 4815/8988/189 +f 4747/8991/189 4748/8992/189 4815/8988/189 +f 4748/8992/189 4749/8993/2218 4815/8988/189 +f 4749/8993/2218 4750/8994/2219 4815/8988/189 +f 4750/8994/2219 4744/8986/189 4815/8988/189 +f 4792/8995/187 4791/8996/187 4816/8997/187 +f 4791/8996/187 4798/8998/2220 4816/8997/187 +f 4798/8998/2220 4797/8999/2221 4816/8997/187 +f 4797/8999/2221 4796/9000/187 4816/8997/187 +f 4796/9000/187 4795/9001/187 4816/8997/187 +f 4795/9001/187 4794/9002/187 4816/8997/187 +f 4794/9002/187 4793/9003/187 4816/8997/187 +f 4793/9003/187 4792/8995/187 4816/8997/187 +s 1 +f 4817/9004/2325 4818/9005/2326 4819/9006/604 +f 4818/9005/2326 4820/9007/2327 4819/9006/604 +f 4820/9007/2327 4821/9008/2328 4819/9006/604 +f 4821/9008/2328 4822/9009/2329 4819/9006/604 +f 4822/9009/2329 4823/9010/2330 4819/9006/604 +f 4823/9010/2330 4824/9011/2330 4819/9006/604 +f 4824/9011/2330 4825/9012/2331 4819/9006/604 +f 4825/9012/2331 4826/9013/2332 4819/9006/604 +f 4826/9013/2332 4827/9014/2325 4819/9006/604 +f 4827/9014/2325 4817/9004/2325 4819/9006/604 +s 4 +f 4817/9015/2290 4764/9016/2290 4763/9017/2291 4818/9018/2291 +f 4818/9018/2291 4763/9017/2291 4767/9019/399 4820/9020/399 +f 4820/9021/399 4767/8916/399 4769/8920/400 4821/9022/400 +f 4821/9023/400 4769/9024/400 4771/9025/2292 4822/9026/2292 +f 4822/9026/2292 4771/9025/2292 4773/9027/2333 4823/9028/2333 +f 4827/9029/2294 4807/9030/2294 4764/9016/2290 4817/9015/2290 +f 4826/9031/404 4809/9032/404 4807/9033/2294 4827/9034/2294 +f 4825/9035/405 4811/8980/405 4809/8976/404 4826/9036/404 +f 4824/9037/2295 4813/9038/2295 4811/9039/405 4825/9040/405 +f 4823/9041/2333 4773/9042/2333 4813/9038/2295 4824/9037/2295 +s 2 +f 4726/8857/2185 4725/8856/2184 4755/9043/2233 4753/9044/2234 +f 4725/8856/2184 4779/8932/2203 4801/9045/2235 4755/9043/2233 +f 4779/8932/2203 4797/8962/2215 4802/9046/2236 4801/9045/2235 +s 8 +f 4797/8999/2221 4798/8998/2220 4799/9047/2237 4802/9048/2237 +s 2 +f 4798/8963/2216 4780/8933/2204 4800/9049/2238 4799/9050/2239 +f 4780/8933/2204 4727/8858/2187 4756/9051/2240 4800/9049/2238 +f 4727/8858/2187 4728/8859/2189 4754/9052/2241 4756/9051/2240 +f 4728/8859/2189 4750/8897/2201 4751/9053/2242 4754/9052/2241 +s 8 +f 4750/8994/2219 4749/8993/2218 4752/9054/2243 4751/9055/2243 +s 2 +f 4749/8896/2200 4726/8857/2185 4753/9044/2234 4752/9056/2244 +s 1 +f 4828/9057/252 4829/9058/252 4830/9059/252 4831/9060/252 +f 4832/9061/253 4833/9062/253 4834/9063/253 4835/9064/253 +s 2 +f 4833/9062/254 4836/9065/2184 4837/9066/2185 4834/9063/2186 +f 4838/9067/2187 4828/9057/258 4831/9060/2188 4839/9068/2189 +s 4 +f 4840/9069/260 4830/9070/261 4841/9071/262 4842/9072/2190 +f 4843/9073/264 4840/9069/260 4842/9072/2190 4844/9074/2191 +f 4832/9075/266 4835/9076/267 4845/9077/268 4846/9078/571 +f 4829/9079/270 4847/9080/270 4841/9071/262 4830/9070/261 +f 4843/9073/264 4844/9074/2191 4845/9077/268 4835/9076/267 +s 1 +f 4845/9081/271 4848/9082/271 4849/9083/271 4846/9084/271 +s 2 +f 4844/9085/272 4850/9086/273 4848/9087/274 4845/9088/275 +s 1 +f 4842/9089/278 4851/9090/423 4850/9086/423 4844/9085/278 +s 2 +f 4842/9089/279 4841/9091/280 4852/9092/281 4851/9090/2316 +s 1 +f 4841/9093/283 4847/9094/283 4853/9095/283 4852/9096/283 +s 2 +f 4830/9059/2334 4854/9097/2334 4855/9098/2194 4831/9060/2188 +s 4 +f 4840/9069/260 4856/9099/2195 4854/9100/2196 4830/9070/261 +f 4843/9073/264 4857/9101/2197 4856/9099/2195 4840/9069/260 +f 4835/9076/267 4858/9102/290 4857/9101/2197 4843/9073/264 +s 2 +f 4834/9063/2186 4859/9103/292 4858/9104/2335 4835/9064/2335 +f 4837/9066/2185 4860/9105/2249 4859/9103/292 4834/9063/2186 +f 4831/9060/2188 4855/9098/2194 4861/9106/2201 4839/9068/2189 +s 1 +f 4862/9107/974 4863/9108/974 4864/9109/974 4865/9110/974 +f 4865/9110/974 4864/9109/974 4866/9111/974 4867/9112/974 +f 4868/9113/302 4869/9114/303 4849/9083/271 4848/9082/271 +s 2 +f 4870/9115/304 4868/9116/305 4848/9087/274 4850/9086/273 +s 1 +f 4871/9117/307 4870/9115/307 4850/9086/423 4851/9090/423 +s 2 +f 4872/9118/308 4871/9117/309 4851/9090/2316 4852/9092/281 +s 1 +f 4873/9119/310 4872/9120/311 4852/9096/283 4853/9095/283 +f 4874/9121/312 4875/9122/313 4876/9123/314 4877/9124/2336 +s 2 +f 4878/9125/316 4874/9126/317 4877/9127/318 4879/9128/2337 +s 1 +f 4880/9129/320 4878/9125/320 4879/9128/321 4881/9130/321 +s 2 +f 4882/9131/322 4880/9129/323 4881/9130/324 4883/9132/325 +s 1 +f 4884/9133/327 4882/9134/327 4883/9135/328 4885/9136/329 +f 4868/9113/302 4877/9124/2336 4876/9123/314 4869/9114/303 +s 2 +f 4870/9115/304 4879/9128/2337 4877/9127/318 4868/9116/305 +s 1 +f 4871/9117/307 4881/9130/321 4879/9128/321 4870/9115/307 +s 2 +f 4872/9118/308 4883/9132/325 4881/9130/324 4871/9117/309 +s 1 +f 4873/9119/310 4885/9136/329 4883/9135/328 4872/9120/311 +f 4828/9057/252 4886/9137/252 4887/9138/252 4829/9058/252 +f 4832/9061/253 4888/9139/253 4889/9140/253 4833/9062/253 +s 2 +f 4833/9062/254 4889/9140/2202 4890/9141/2203 4836/9065/2184 +f 4838/9067/2187 4891/9142/2204 4886/9137/2205 4828/9057/258 +s 4 +f 4892/9143/332 4893/9144/2206 4894/9145/334 4887/9146/335 +f 4895/9147/336 4896/9148/2207 4893/9144/2206 4892/9143/332 +f 4832/9075/266 4846/9078/571 4897/9149/338 4888/9150/339 +f 4829/9079/270 4887/9146/335 4894/9145/334 4847/9080/270 +f 4895/9147/336 4888/9150/339 4897/9149/338 4896/9148/2207 +s 2 +f 4897/9151/340 4846/9084/340 4849/9083/340 4898/9152/340 +s 1 +f 4896/9153/341 4897/9154/342 4898/9155/343 4899/9156/344 +s 2 +f 4893/9157/345 4896/9153/345 4899/9156/346 4900/9158/346 +s 1 +f 4893/9157/347 4900/9158/2338 4901/9159/349 4894/9160/350 +s 2 +f 4894/9161/351 4901/9162/351 4853/9095/351 4847/9094/351 +f 4887/9138/2299 4886/9137/2205 4902/9163/354 4903/9164/2299 +s 4 +f 4892/9143/332 4887/9146/335 4903/9165/2211 4904/9166/2212 +f 4895/9147/336 4892/9143/332 4904/9166/2212 4905/9167/357 +f 4888/9150/339 4895/9147/336 4905/9167/357 4906/9168/2339 +s 2 +f 4889/9140/2202 4888/9139/2287 4906/9169/2287 4907/9170/361 +f 4890/9141/2203 4889/9140/2202 4907/9170/361 4908/9171/2215 +f 4886/9137/2205 4891/9142/2204 4909/9172/2340 4902/9163/354 +s 1 +f 4910/9173/974 4911/9174/974 4912/9175/974 4913/9176/974 +f 4911/9174/974 4867/9112/974 4866/9111/974 4912/9175/974 +s 2 +f 4914/9177/368 4898/9152/340 4849/9083/340 4869/9114/369 +s 1 +f 4915/9178/370 4899/9156/344 4898/9155/343 4914/9179/371 +s 2 +f 4916/9180/372 4900/9158/346 4899/9156/346 4915/9178/372 +s 1 +f 4917/9181/373 4901/9159/349 4900/9158/2338 4916/9180/374 +s 2 +f 4873/9119/375 4853/9095/351 4901/9162/351 4917/9182/376 +f 4918/9183/377 4919/9184/378 4876/9123/379 4875/9122/380 +s 1 +f 4920/9185/381 4921/9186/382 4919/9187/383 4918/9188/381 +s 2 +f 4922/9189/385 4923/9190/386 4921/9186/386 4920/9185/385 +s 1 +f 4924/9191/387 4925/9192/388 4923/9190/579 4922/9189/387 +s 2 +f 4884/9133/394 4885/9136/392 4925/9193/393 4924/9194/394 +f 4914/9177/368 4869/9114/369 4876/9123/379 4919/9184/378 +s 1 +f 4915/9178/370 4914/9179/371 4919/9187/383 4921/9186/382 +s 2 +f 4916/9180/372 4915/9178/372 4921/9186/386 4923/9190/386 +s 1 +f 4917/9181/373 4916/9180/374 4923/9190/579 4925/9192/388 +s 2 +f 4873/9119/375 4917/9182/376 4925/9193/393 4885/9136/392 +s 8 +f 4855/9195/189 4854/9196/189 4926/9197/189 +f 4854/9196/189 4856/9198/189 4926/9197/189 +f 4856/9198/189 4857/9199/189 4926/9197/189 +f 4857/9199/189 4858/9200/189 4926/9197/189 +f 4858/9200/189 4859/9201/189 4926/9197/189 +f 4859/9201/189 4860/9202/2218 4926/9197/189 +f 4860/9202/2218 4861/9203/2219 4926/9197/189 +f 4861/9203/2219 4855/9195/189 4926/9197/189 +f 4903/9204/187 4902/9205/187 4927/9206/187 +f 4902/9205/187 4909/9207/2220 4927/9206/187 +f 4909/9207/2220 4908/9208/2221 4927/9206/187 +f 4908/9208/2221 4907/9209/187 4927/9206/187 +f 4907/9209/187 4906/9210/187 4927/9206/187 +f 4906/9210/187 4905/9211/187 4927/9206/187 +f 4905/9211/187 4904/9212/187 4927/9206/187 +f 4904/9212/187 4903/9204/187 4927/9206/187 +s 1 +f 4928/9213/396 4929/9214/396 4930/9215/396 +f 4929/9214/396 4931/9216/396 4930/9215/396 +f 4931/9216/396 4932/9217/396 4930/9215/396 +f 4932/9217/396 4933/9218/396 4930/9215/396 +f 4933/9218/396 4934/9219/396 4930/9215/396 +f 4934/9219/396 4935/9220/396 4930/9215/396 +f 4935/9220/396 4936/9221/396 4930/9215/396 +f 4936/9221/396 4937/9222/396 4930/9215/396 +f 4937/9222/396 4938/9223/396 4930/9215/396 +f 4938/9223/396 4928/9213/396 4930/9215/396 +s 4 +f 4928/9224/2222 4875/9225/2222 4874/9226/2223 4929/9227/2223 +f 4929/9227/2223 4874/9226/2223 4878/9228/2224 4931/9229/2224 +f 4931/9230/2224 4878/9125/2224 4880/9129/2225 4932/9231/2225 +f 4932/9232/2225 4880/9233/2225 4882/9234/2341 4933/9235/2226 +f 4933/9235/2226 4882/9234/2341 4884/9236/2342 4934/9237/2227 +f 4938/9238/2253 4918/9239/2228 4875/9225/2222 4928/9224/2222 +f 4937/9240/2229 4920/9241/2229 4918/9242/2228 4938/9243/2253 +f 4936/9244/2230 4922/9189/2230 4920/9185/2229 4937/9245/2229 +f 4935/9246/2232 4924/9247/2232 4922/9248/2230 4936/9249/2230 +f 4934/9250/2227 4884/9251/2342 4924/9247/2232 4935/9246/2232 +s 2 +f 4837/9066/2185 4836/9065/2184 4866/9252/2233 4864/9253/2234 +f 4836/9065/2184 4890/9141/2203 4912/9254/2235 4866/9252/2233 +f 4890/9141/2203 4908/9171/2215 4913/9255/2236 4912/9254/2235 +s 8 +f 4908/9208/2221 4909/9207/2220 4910/9256/2237 4913/9257/2237 +s 2 +f 4909/9172/2340 4891/9142/2204 4911/9258/2238 4910/9259/2239 +f 4891/9142/2204 4838/9067/2187 4867/9260/2240 4911/9258/2238 +f 4838/9067/2187 4839/9068/2189 4865/9261/2241 4867/9260/2240 +f 4839/9068/2189 4861/9106/2201 4862/9262/2242 4865/9261/2241 +s 8 +f 4861/9203/2219 4860/9202/2218 4863/9263/2243 4862/9264/2243 +s 2 +f 4860/9105/2249 4837/9066/2185 4864/9253/2234 4863/9265/2244 +s 1 +f 4939/9266/751 4940/9267/301 4941/9268/301 4942/9269/751 +f 4943/9270/750 4939/9266/751 4942/9269/751 4944/9271/750 +f 4945/9272/748 4943/9270/750 4944/9271/750 4946/9273/748 +f 4947/9274/1466 4945/9275/748 4946/9276/748 4948/9277/1466 +f 4949/9278/584 4947/9274/1466 4948/9277/1466 4950/9279/2254 +f 4951/9280/2255 4952/9281/2118 4949/9278/584 4950/9279/2254 +f 4953/9282/2305 4954/9283/485 4952/9281/2118 4951/9280/2255 +f 4955/9284/1526 4956/9285/2115 4954/9286/485 4953/9287/2305 +f 4957/9288/396 4958/9289/396 4959/9290/396 4960/9291/396 +f 4961/9292/604 4962/9293/604 4963/9294/2116 4964/9295/2117 +f 4965/9296/751 4966/9297/301 4940/9267/301 4939/9266/751 +f 4967/9298/750 4965/9296/751 4939/9266/751 4943/9270/750 +f 4968/9299/748 4967/9298/750 4943/9270/750 4945/9272/748 +f 4969/9300/1466 4968/9301/748 4945/9275/748 4947/9274/1466 +f 4970/9302/584 4969/9300/1466 4947/9274/1466 4949/9278/584 +f 4952/9281/2118 4971/9303/2118 4970/9302/584 4949/9278/584 +f 4954/9283/485 4972/9304/485 4971/9303/2118 4952/9281/2118 +f 4956/9285/2115 4973/9305/2119 4972/9306/485 4954/9286/485 +f 4963/9294/2116 4974/9307/2120 4973/9305/2119 4956/9285/2115 +f 4962/9293/604 4975/9308/604 4974/9307/2120 4963/9294/2116 +s 2 +f 4956/9309/187 4955/9310/187 4976/9311/187 +f 4964/9312/189 4963/9313/189 4977/9314/189 4978/9315/189 +s 4 +f 4956/9316/428 4976/9317/428 4977/9318/428 4963/9319/428 +s 2 +f 4979/9320/187 4960/9321/187 4959/9322/187 4976/9311/187 +f 4958/9323/189 4957/9324/189 4978/9315/189 4977/9314/189 +s 4 +f 4976/9317/428 4959/9325/428 4958/9326/428 4977/9318/428 +f 4979/9327/2121 4980/9328/2122 4981/9329/2123 4960/9330/2124 +f 4980/9328/2122 4979/9327/2121 4982/9331/2125 +s 1 +f 4983/9332/733 4984/9333/733 4941/9268/301 4940/9267/301 +f 4985/9334/735 4986/9335/735 4984/9333/733 4983/9332/733 +f 4987/9336/736 4988/9337/736 4986/9335/735 4985/9334/735 +f 4989/9338/737 4990/9339/737 4988/9340/736 4987/9341/736 +f 4991/9342/187 4992/9343/2126 4990/9339/737 4989/9338/737 +f 4993/9344/2127 4992/9343/2126 4991/9342/187 4994/9345/738 +f 4995/9346/2128 4993/9344/2127 4994/9345/738 4996/9347/471 +f 4997/9348/1607 4995/9346/2128 4996/9347/471 4998/9349/2129 +f 4999/9350/396 5000/9351/396 5001/9352/396 5002/9353/396 +f 4961/9292/604 5003/9354/2343 5004/9355/2131 4962/9293/604 +f 5005/9356/733 4983/9332/733 4940/9267/301 4966/9297/301 +f 5006/9357/735 4985/9334/735 4983/9332/733 5005/9356/733 +f 5007/9358/736 4987/9336/736 4985/9334/735 5006/9357/735 +f 5008/9359/737 4989/9338/737 4987/9341/736 5007/9360/736 +f 5009/9361/187 4991/9342/187 4989/9338/737 5008/9359/737 +f 4994/9345/738 4991/9342/187 5009/9361/187 5010/9362/738 +f 4996/9347/471 4994/9345/738 5010/9362/738 5011/9363/471 +f 4998/9349/2129 4996/9347/471 5011/9363/471 5012/9364/2132 +f 5004/9355/2131 4998/9365/2129 5012/9366/2132 5013/9367/2133 +f 4962/9293/604 5004/9355/2131 5013/9367/2133 4975/9308/604 +s 2 +f 4998/9368/189 5014/9369/189 4997/9370/189 +f 5003/9371/936 5015/9372/936 5016/9373/936 5004/9374/187 +s 4 +f 4998/9375/428 5004/9376/428 5016/9377/428 5014/9378/428 +s 2 +f 5017/9379/189 5014/9369/189 5001/9380/189 5000/9381/189 +f 5002/9382/936 5016/9373/936 5015/9372/936 4999/9383/187 +s 4 +f 5014/9378/428 5016/9377/428 5002/9384/428 5001/9385/428 +f 5017/9386/2134 5000/9387/2307 5018/9388/2136 5019/9389/2137 +f 5019/9389/2137 5020/9390/2138 5017/9386/2134 +f 5021/9391/428 5022/9392/430 5023/9393/430 +f 5015/9394/2139 5024/9395/2308 5025/9396/2141 4999/9397/2309 +f 5026/9398/2144 5000/9387/2307 4999/9397/2309 5027/9399/2143 +f 5003/9400/2145 4961/9401/2311 5024/9395/2308 5015/9394/2139 +f 5028/9402/428 5026/9398/2144 5027/9399/2143 5029/9403/429 +f 5030/9404/428 5028/9402/428 5029/9403/429 5022/9392/430 +f 4978/9405/2139 4957/9406/2147 5025/9396/2141 5024/9395/2308 +f 5025/9396/2141 4957/9406/2147 5027/9399/2143 +f 5027/9399/2143 5031/9407/2148 5032/9408/429 5029/9403/429 +f 5029/9403/429 5032/9408/429 5033/9409/429 5022/9392/430 +f 4964/9410/2149 4978/9405/2139 5024/9395/2308 4961/9401/2311 +f 5021/9391/428 5034/9411/428 5022/9392/430 +f 5022/9392/430 5035/9412/429 5023/9393/430 +f 5022/9392/430 5033/9409/429 5035/9412/429 +f 5034/9411/428 5036/9413/428 5022/9392/430 +f 5036/9413/428 5030/9404/428 5022/9392/430 +s 8 +f 4941/9268/2150 5021/9414/2258 5023/9415/2344 4942/9269/2153 +f 4942/9416/2153 5023/9417/2344 5035/9418/2154 4944/9419/2261 +f 4944/9419/2261 5035/9418/2154 5033/9420/2345 4946/9421/2157 +f 4946/9421/2157 5033/9420/2345 5032/9422/2158 4948/9423/2159 +f 4948/9423/2159 5032/9422/2158 5031/9424/2160 4950/9425/2161 +f 4950/9426/2161 5031/9427/2160 4981/9428/2162 4951/9429/2346 +f 4951/9429/2346 4981/9428/2162 4980/9430/2347 4953/9431/2348 +f 4953/9431/2348 4980/9430/2347 4982/9432/2166 4955/9433/2349 +f 4984/9333/2266 5034/9434/2267 5021/9414/2258 4941/9268/2150 +f 4986/9435/2268 5036/9436/2171 5034/9437/2267 4984/9438/2266 +f 4988/9439/2172 5030/9440/2173 5036/9441/2171 4986/9442/2268 +f 4990/9443/2174 5028/9444/2175 5030/9440/2173 4988/9439/2172 +f 4992/9445/2176 5026/9446/2177 5028/9444/2175 4990/9443/2174 +f 4993/9447/2269 5018/9448/2270 5026/9449/2177 4992/9450/2176 +f 4995/9451/2271 5019/9452/2272 5018/9448/2270 4993/9447/2269 +f 4997/9453/2182 5020/9454/2350 5019/9452/2272 4995/9451/2271 +s 2 +f 4982/9455/187 4979/9320/187 4976/9311/187 +f 4955/9310/187 4982/9455/187 4976/9311/187 +f 5014/9369/189 5020/9456/189 4997/9370/189 +f 5014/9369/189 5017/9379/189 5020/9456/189 +f 4966/9457/455 4965/9458/455 5037/9459/455 +f 4965/9458/455 4967/9460/455 5037/9459/455 +f 4967/9460/455 4968/9461/455 5037/9459/455 +f 4968/9461/455 4969/9462/455 5037/9459/455 +f 4969/9462/455 4970/9463/455 5037/9459/455 +f 4970/9463/455 4971/9464/455 5037/9459/455 +f 4971/9464/455 4972/9465/455 5037/9459/455 +f 4972/9465/455 4973/9466/455 5037/9459/455 +f 4973/9466/455 4974/9467/455 5037/9459/455 +f 4974/9467/455 4975/9468/455 5037/9459/455 +f 4975/9468/455 5013/9469/455 5037/9459/455 +f 5013/9469/455 5012/9470/455 5037/9459/455 +f 5012/9470/455 5011/9471/455 5037/9459/455 +f 5011/9471/455 5010/9472/455 5037/9459/455 +f 5010/9472/455 5009/9473/455 5037/9459/455 +f 5009/9473/455 5008/9474/455 5037/9459/455 +f 5008/9474/455 5007/9475/455 5037/9459/455 +f 5007/9475/455 5006/9476/455 5037/9459/455 +f 5006/9476/455 5005/9477/455 5037/9459/455 +f 5005/9477/455 4966/9457/455 5037/9459/455 +s 1 +f 5038/9478/252 5039/9479/252 5040/9480/252 5041/9481/252 +f 5042/9482/253 5043/9483/253 5044/9484/253 5045/9485/253 +s 2 +f 5043/9483/254 5046/9486/2184 5047/9487/2185 5044/9484/2351 +f 5048/9488/2187 5038/9478/258 5041/9481/2188 5049/9489/2352 +s 4 +f 5050/9490/2353 5040/9491/2354 5051/9492/2355 5052/9493/2356 +f 5053/9494/2357 5050/9490/2353 5052/9493/2356 5054/9495/2358 +f 5042/9496/571 5045/9497/267 5055/9498/2359 5056/9499/2278 +f 5039/9500/269 5057/9501/2279 5051/9492/2355 5040/9491/2354 +f 5053/9494/2357 5054/9495/2358 5055/9498/2359 5045/9497/267 +s 1 +f 5055/9502/271 5058/9503/271 5059/9504/271 5056/9505/271 +s 2 +f 5054/9506/272 5060/9507/273 5058/9508/274 5055/9509/275 +s 1 +f 5052/9510/278 5061/9511/423 5060/9507/423 5054/9506/278 +s 2 +f 5052/9510/279 5051/9512/280 5062/9513/281 5061/9511/282 +s 1 +f 5051/9514/283 5057/9515/283 5063/9516/283 5062/9517/283 +s 2 +f 5040/9480/424 5064/9518/424 5065/9519/285 5041/9481/2188 +s 4 +f 5050/9490/2353 5066/9520/2360 5064/9521/2361 5040/9491/2354 +f 5053/9494/2357 5067/9522/2362 5066/9520/2360 5050/9490/2353 +f 5045/9497/267 5068/9523/2281 5067/9522/2362 5053/9494/2357 +s 2 +f 5044/9484/2351 5069/9524/2363 5068/9525/602 5045/9485/602 +f 5047/9487/2185 5070/9526/2200 5069/9524/2363 5044/9484/2351 +f 5041/9481/2188 5065/9519/285 5071/9527/2201 5049/9489/2352 +s 1 +f 5072/9528/974 5073/9529/974 5074/9530/974 5075/9531/974 +f 5075/9531/974 5074/9530/974 5076/9532/974 5077/9533/974 +f 5078/9534/302 5079/9535/303 5059/9504/271 5058/9503/271 +s 2 +f 5080/9536/304 5078/9537/305 5058/9508/274 5060/9507/273 +s 1 +f 5081/9538/307 5080/9536/307 5060/9507/423 5061/9511/423 +s 2 +f 5082/9539/308 5081/9538/309 5061/9511/282 5062/9513/281 +s 1 +f 5083/9540/310 5082/9541/311 5062/9517/283 5063/9516/283 +f 5084/9542/312 5085/9543/313 5086/9544/314 5087/9545/315 +s 2 +f 5088/9546/316 5084/9547/317 5087/9548/318 5089/9549/319 +s 1 +f 5090/9550/320 5088/9546/320 5089/9549/321 5091/9551/321 +s 2 +f 5092/9552/322 5090/9550/323 5091/9551/324 5093/9553/325 +s 1 +f 5094/9554/326 5092/9555/327 5093/9556/328 5095/9557/329 +f 5078/9534/302 5087/9545/315 5086/9544/314 5079/9535/303 +s 2 +f 5080/9536/304 5089/9549/319 5087/9548/318 5078/9537/305 +s 1 +f 5081/9538/307 5091/9551/321 5089/9549/321 5080/9536/307 +s 2 +f 5082/9539/308 5093/9553/325 5091/9551/324 5081/9538/309 +s 1 +f 5083/9540/310 5095/9557/329 5093/9556/328 5082/9541/311 +f 5038/9478/252 5096/9558/252 5097/9559/252 5039/9479/252 +f 5042/9482/253 5098/9560/253 5099/9561/253 5043/9483/253 +s 2 +f 5043/9483/254 5099/9561/2364 5100/9562/2203 5046/9486/2184 +f 5048/9488/2187 5101/9563/2204 5096/9558/2205 5038/9478/258 +s 4 +f 5102/9564/2365 5103/9565/2366 5104/9566/2367 5097/9567/2368 +f 5105/9568/2369 5106/9569/2370 5103/9565/2366 5102/9564/2365 +f 5042/9496/571 5056/9499/2278 5107/9570/2371 5098/9571/339 +f 5039/9500/269 5097/9567/2368 5104/9566/2367 5057/9501/2279 +f 5105/9568/2369 5098/9571/339 5107/9570/2371 5106/9569/2370 +s 2 +f 5107/9572/340 5056/9505/340 5059/9504/340 5108/9573/340 +s 1 +f 5106/9574/341 5107/9575/342 5108/9576/343 5109/9577/344 +s 2 +f 5103/9578/345 5106/9574/345 5109/9577/346 5110/9579/346 +s 1 +f 5103/9578/347 5110/9579/2338 5111/9580/349 5104/9581/350 +s 2 +f 5104/9582/351 5111/9583/351 5063/9516/351 5057/9515/351 +f 5097/9559/352 5096/9558/2205 5112/9584/354 5113/9585/352 +s 4 +f 5102/9564/2365 5097/9567/2368 5113/9586/2372 5114/9587/2373 +f 5105/9568/2369 5102/9564/2365 5114/9587/2373 5115/9588/2374 +f 5098/9571/339 5105/9568/2369 5115/9588/2374 5116/9589/2286 +s 2 +f 5099/9561/2364 5098/9560/2375 5116/9590/2375 5117/9591/2376 +f 5100/9562/2203 5099/9561/2364 5117/9591/2376 5118/9592/2215 +f 5096/9558/2205 5101/9563/2204 5119/9593/2340 5112/9584/354 +s 1 +f 5120/9594/974 5121/9595/974 5122/9596/974 5123/9597/974 +f 5121/9595/974 5077/9533/974 5076/9532/974 5122/9596/974 +s 2 +f 5124/9598/368 5108/9573/340 5059/9504/340 5079/9535/369 +s 1 +f 5125/9599/370 5109/9577/344 5108/9576/343 5124/9600/371 +s 2 +f 5126/9601/2288 5110/9579/346 5109/9577/346 5125/9599/2288 +s 1 +f 5127/9602/373 5111/9580/349 5110/9579/2338 5126/9601/374 +s 2 +f 5083/9540/375 5063/9516/351 5111/9583/351 5127/9603/376 +f 5128/9604/377 5129/9605/378 5086/9544/379 5085/9543/380 +s 1 +f 5130/9606/381 5131/9607/382 5129/9608/383 5128/9609/384 +s 2 +f 5132/9610/385 5133/9611/386 5131/9607/386 5130/9606/385 +s 1 +f 5134/9612/387 5135/9613/388 5133/9611/579 5132/9610/390 +s 2 +f 5094/9554/391 5095/9557/392 5135/9614/393 5134/9615/394 +f 5124/9598/368 5079/9535/369 5086/9544/379 5129/9605/378 +s 1 +f 5125/9599/370 5124/9600/371 5129/9608/383 5131/9607/382 +s 2 +f 5126/9601/2288 5125/9599/2288 5131/9607/386 5133/9611/386 +s 1 +f 5127/9602/373 5126/9601/374 5133/9611/579 5135/9613/388 +s 2 +f 5083/9540/375 5127/9603/376 5135/9614/393 5095/9557/392 +s 8 +f 5065/9616/189 5064/9617/189 5136/9618/189 +f 5064/9617/189 5066/9619/189 5136/9618/189 +f 5066/9619/189 5067/9620/189 5136/9618/189 +f 5067/9620/189 5068/9621/189 5136/9618/189 +f 5068/9621/189 5069/9622/189 5136/9618/189 +f 5069/9622/189 5070/9623/2218 5136/9618/189 +f 5070/9623/2218 5071/9624/2219 5136/9618/189 +f 5071/9624/2219 5065/9616/189 5136/9618/189 +f 5113/9625/187 5112/9626/187 5137/9627/187 +f 5112/9626/187 5119/9628/2220 5137/9627/187 +f 5119/9628/2220 5118/9629/2221 5137/9627/187 +f 5118/9629/2221 5117/9630/187 5137/9627/187 +f 5117/9630/187 5116/9631/187 5137/9627/187 +f 5116/9631/187 5115/9632/187 5137/9627/187 +f 5115/9632/187 5114/9633/187 5137/9627/187 +f 5114/9633/187 5113/9625/187 5137/9627/187 +s 1 +f 5138/9634/396 5139/9635/396 5140/9636/396 +f 5139/9635/396 5141/9637/396 5140/9636/396 +f 5141/9637/396 5142/9638/396 5140/9636/396 +f 5142/9638/396 5143/9639/396 5140/9636/396 +f 5143/9639/396 5144/9640/396 5140/9636/396 +f 5144/9640/396 5145/9641/396 5140/9636/396 +f 5145/9641/396 5146/9642/396 5140/9636/396 +f 5146/9642/396 5147/9643/396 5140/9636/396 +f 5147/9643/396 5148/9644/396 5140/9636/396 +f 5148/9644/396 5138/9634/396 5140/9636/396 +s 4 +f 5138/9645/2290 5085/9646/2290 5084/9647/2291 5139/9648/398 +f 5139/9648/398 5084/9647/2291 5088/9649/399 5141/9650/399 +f 5141/9651/399 5088/9546/399 5090/9550/400 5142/9652/400 +f 5142/9653/400 5090/9654/400 5092/9655/401 5143/9656/2292 +f 5143/9656/2292 5092/9655/401 5094/9657/2293 5144/9658/2293 +f 5148/9659/2294 5128/9660/2294 5085/9646/2290 5138/9645/2290 +f 5147/9661/404 5130/9662/404 5128/9663/2294 5148/9664/2294 +f 5146/9665/405 5132/9610/405 5130/9606/404 5147/9666/404 +f 5145/9667/2295 5134/9668/2295 5132/9669/405 5146/9670/405 +f 5144/9671/2293 5094/9672/2293 5134/9668/2295 5145/9667/2295 +s 2 +f 5047/9487/2185 5046/9486/2184 5076/9673/2233 5074/9674/2377 +f 5046/9486/2184 5100/9562/2203 5122/9675/2235 5076/9673/2233 +f 5100/9562/2203 5118/9592/2215 5123/9676/2236 5122/9675/2235 +s 8 +f 5118/9629/2221 5119/9628/2220 5120/9677/2237 5123/9678/2237 +s 2 +f 5119/9593/2340 5101/9563/2204 5121/9679/2238 5120/9680/2378 +f 5101/9563/2204 5048/9488/2187 5077/9681/2240 5121/9679/2238 +f 5048/9488/2187 5049/9489/2352 5075/9682/2241 5077/9681/2240 +f 5049/9489/2352 5071/9527/2201 5072/9683/2242 5075/9682/2241 +s 8 +f 5071/9624/2219 5070/9623/2218 5073/9684/2243 5072/9685/2243 +s 2 +f 5070/9526/2200 5047/9487/2185 5074/9674/2377 5073/9686/2379 +s 1 +f 5149/9687/252 5150/9688/252 5151/9689/252 5152/9690/252 +f 5153/9691/253 5154/9692/253 5155/9693/253 5156/9694/253 +s 2 +f 5154/9692/254 5157/9695/2184 5158/9696/2185 5155/9693/2186 +f 5159/9697/2187 5149/9687/258 5152/9690/2188 5160/9698/2189 +s 4 +f 5161/9699/260 5151/9700/2275 5162/9701/262 5163/9702/2276 +f 5164/9703/264 5161/9699/260 5163/9702/2276 5165/9704/2277 +f 5153/9705/266 5156/9706/267 5166/9707/268 5167/9708/2296 +f 5150/9709/269 5168/9710/2297 5162/9701/262 5151/9700/2275 +f 5164/9703/264 5165/9704/2277 5166/9707/268 5156/9706/267 +s 1 +f 5166/9711/271 5169/9712/271 5170/9713/271 5167/9714/271 +s 2 +f 5165/9715/272 5171/9716/273 5169/9717/274 5166/9718/275 +s 1 +f 5163/9719/278 5172/9720/423 5171/9716/423 5165/9715/278 +s 2 +f 5163/9719/279 5162/9721/280 5173/9722/281 5172/9720/282 +s 1 +f 5162/9723/283 5168/9724/283 5174/9725/283 5173/9726/283 +s 2 +f 5151/9689/2193 5175/9727/2193 5176/9728/285 5152/9690/2188 +s 4 +f 5161/9699/260 5177/9729/2195 5175/9730/2280 5151/9700/2275 +f 5164/9703/264 5178/9731/289 5177/9729/2195 5161/9699/260 +f 5156/9706/267 5179/9732/2281 5178/9731/289 5164/9703/264 +s 2 +f 5155/9693/2186 5180/9733/292 5179/9734/2198 5156/9694/2198 +f 5158/9696/2185 5181/9735/2200 5180/9733/292 5155/9693/2186 +f 5152/9690/2188 5176/9728/285 5182/9736/2201 5160/9698/2189 +s 1 +f 5183/9737/974 5184/9738/974 5185/9739/974 5186/9740/974 +f 5186/9740/974 5185/9739/974 5187/9741/974 5188/9742/974 +f 5189/9743/302 5190/9744/303 5170/9713/271 5169/9712/271 +s 2 +f 5191/9745/304 5189/9746/305 5169/9717/274 5171/9716/273 +s 1 +f 5192/9747/307 5191/9745/307 5171/9716/423 5172/9720/423 +s 2 +f 5193/9748/308 5192/9747/309 5172/9720/282 5173/9722/281 +s 1 +f 5194/9749/310 5193/9750/311 5173/9726/283 5174/9725/283 +f 5195/9751/312 5196/9752/313 5197/9753/314 5198/9754/315 +s 2 +f 5199/9755/316 5195/9756/317 5198/9757/318 5200/9758/319 +s 1 +f 5201/9759/320 5199/9755/320 5200/9758/321 5202/9760/321 +s 2 +f 5203/9761/322 5201/9759/323 5202/9760/324 5204/9762/325 +s 1 +f 5205/9763/326 5203/9764/327 5204/9765/328 5206/9766/329 +f 5189/9743/302 5198/9754/315 5197/9753/314 5190/9744/303 +s 2 +f 5191/9745/304 5200/9758/319 5198/9757/318 5189/9746/305 +s 1 +f 5192/9747/307 5202/9760/321 5200/9758/321 5191/9745/307 +s 2 +f 5193/9748/308 5204/9762/325 5202/9760/324 5192/9747/309 +s 1 +f 5194/9749/310 5206/9766/329 5204/9765/328 5193/9750/311 +f 5149/9687/252 5207/9767/252 5208/9768/252 5150/9688/252 +f 5153/9691/253 5209/9769/253 5210/9770/253 5154/9692/253 +s 2 +f 5154/9692/254 5210/9770/2202 5211/9771/2203 5157/9695/2184 +f 5159/9697/2187 5212/9772/2204 5207/9767/2205 5149/9687/258 +s 4 +f 5213/9773/332 5214/9774/2283 5215/9775/334 5208/9776/2298 +f 5216/9777/336 5217/9778/2284 5214/9774/2283 5213/9773/332 +f 5153/9705/266 5167/9708/2296 5218/9779/338 5209/9780/339 +f 5150/9709/269 5208/9776/2298 5215/9775/334 5168/9710/2297 +f 5216/9777/336 5209/9780/339 5218/9779/338 5217/9778/2284 +s 2 +f 5218/9781/340 5167/9714/340 5170/9713/340 5219/9782/340 +s 1 +f 5217/9783/341 5218/9784/342 5219/9785/343 5220/9786/344 +s 2 +f 5214/9787/345 5217/9783/345 5220/9786/346 5221/9788/346 +s 1 +f 5214/9787/347 5221/9788/348 5222/9789/349 5215/9790/350 +s 2 +f 5215/9791/351 5222/9792/351 5174/9725/351 5168/9724/351 +f 5208/9768/2299 5207/9767/2205 5223/9793/354 5224/9794/2299 +s 4 +f 5213/9773/332 5208/9776/2298 5224/9795/2285 5225/9796/2212 +f 5216/9777/336 5213/9773/332 5225/9796/2212 5226/9797/357 +f 5209/9780/339 5216/9777/336 5226/9797/357 5227/9798/2286 +s 2 +f 5210/9770/2202 5209/9769/2287 5227/9799/2287 5228/9800/361 +f 5211/9771/2203 5210/9770/2202 5228/9800/361 5229/9801/2215 +f 5207/9767/2205 5212/9772/2204 5230/9802/2216 5223/9793/354 +s 1 +f 5231/9803/974 5232/9804/974 5233/9805/974 5234/9806/974 +f 5232/9804/974 5188/9742/974 5187/9741/974 5233/9805/974 +s 2 +f 5235/9807/368 5219/9782/340 5170/9713/340 5190/9744/369 +s 1 +f 5236/9808/370 5220/9786/344 5219/9785/343 5235/9809/371 +s 2 +f 5237/9810/372 5221/9788/346 5220/9786/346 5236/9808/372 +s 1 +f 5238/9811/373 5222/9789/349 5221/9788/348 5237/9810/374 +s 2 +f 5194/9749/375 5174/9725/351 5222/9792/351 5238/9812/376 +f 5239/9813/377 5240/9814/378 5197/9753/379 5196/9752/380 +s 1 +f 5241/9815/381 5242/9816/382 5240/9817/383 5239/9818/384 +s 2 +f 5243/9819/385 5244/9820/386 5242/9816/386 5241/9815/385 +s 1 +f 5245/9821/387 5246/9822/388 5244/9820/579 5243/9819/390 +s 2 +f 5205/9763/391 5206/9766/392 5246/9823/393 5245/9824/394 +f 5235/9807/368 5190/9744/369 5197/9753/379 5240/9814/378 +s 1 +f 5236/9808/370 5235/9809/371 5240/9817/383 5242/9816/382 +s 2 +f 5237/9810/372 5236/9808/372 5242/9816/386 5244/9820/386 +s 1 +f 5238/9811/373 5237/9810/374 5244/9820/579 5246/9822/388 +s 2 +f 5194/9749/375 5238/9812/376 5246/9823/393 5206/9766/392 +s 8 +f 5176/9825/189 5175/9826/189 5247/9827/189 +f 5175/9826/189 5177/9828/189 5247/9827/189 +f 5177/9828/189 5178/9829/189 5247/9827/189 +f 5178/9829/189 5179/9830/189 5247/9827/189 +f 5179/9830/189 5180/9831/189 5247/9827/189 +f 5180/9831/189 5181/9832/2218 5247/9827/189 +f 5181/9832/2218 5182/9833/2219 5247/9827/189 +f 5182/9833/2219 5176/9825/189 5247/9827/189 +f 5224/9834/187 5223/9835/187 5248/9836/187 +f 5223/9835/187 5230/9837/2220 5248/9836/187 +f 5230/9837/2220 5229/9838/2221 5248/9836/187 +f 5229/9838/2221 5228/9839/187 5248/9836/187 +f 5228/9839/187 5227/9840/187 5248/9836/187 +f 5227/9840/187 5226/9841/187 5248/9836/187 +f 5226/9841/187 5225/9842/187 5248/9836/187 +f 5225/9842/187 5224/9834/187 5248/9836/187 +s 1 +f 5249/9843/396 5250/9844/396 5251/9845/396 +f 5250/9844/396 5252/9846/396 5251/9845/396 +f 5252/9846/396 5253/9847/396 5251/9845/396 +f 5253/9847/396 5254/9848/396 5251/9845/396 +f 5254/9848/396 5255/9849/396 5251/9845/396 +f 5255/9849/396 5256/9850/396 5251/9845/396 +f 5256/9850/396 5257/9851/396 5251/9845/396 +f 5257/9851/396 5258/9852/396 5251/9845/396 +f 5258/9852/396 5259/9853/396 5251/9845/396 +f 5259/9853/396 5249/9843/396 5251/9845/396 +s 4 +f 5249/9854/2290 5196/9855/2290 5195/9856/2291 5250/9857/2291 +f 5250/9857/2291 5195/9856/2291 5199/9858/399 5252/9859/399 +f 5252/9860/399 5199/9755/399 5201/9759/400 5253/9861/400 +f 5253/9862/400 5201/9863/400 5203/9864/2292 5254/9865/2292 +f 5254/9865/2292 5203/9864/2292 5205/9866/2293 5255/9867/2293 +f 5259/9868/2294 5239/9869/2294 5196/9855/2290 5249/9854/2290 +f 5258/9870/404 5241/9871/404 5239/9872/2294 5259/9873/2294 +f 5257/9874/405 5243/9819/405 5241/9815/404 5258/9875/404 +f 5256/9876/2295 5245/9877/2295 5243/9878/405 5257/9879/405 +f 5255/9880/2293 5205/9881/2293 5245/9877/2295 5256/9876/2295 +s 2 +f 5158/9696/2185 5157/9695/2184 5187/9882/2233 5185/9883/2301 +f 5157/9695/2184 5211/9771/2203 5233/9884/2302 5187/9882/2233 +f 5211/9771/2203 5229/9801/2215 5234/9885/2236 5233/9884/2302 +s 8 +f 5229/9838/2221 5230/9837/2220 5231/9886/2237 5234/9887/2237 +s 2 +f 5230/9802/2216 5212/9772/2204 5232/9888/2238 5231/9889/2239 +f 5212/9772/2204 5159/9697/2187 5188/9890/2303 5232/9888/2238 +f 5159/9697/2187 5160/9698/2189 5186/9891/2304 5188/9890/2303 +f 5160/9698/2189 5182/9736/2201 5183/9892/2242 5186/9891/2304 +s 8 +f 5182/9833/2219 5181/9832/2218 5184/9893/2243 5183/9894/2243 +s 2 +f 5181/9735/2200 5158/9696/2185 5185/9883/2301 5184/9895/2244 +s 1 +f 5260/9896/1468 5261/9897/604 5262/9898/604 5263/9899/1468 +f 5264/9900/740 5260/9896/1468 5263/9899/1468 5265/9901/740 +f 5266/9902/471 5264/9900/740 5265/9901/740 5267/9903/471 +f 5268/9904/738 5266/9905/471 5267/9906/471 5269/9907/2380 +f 5270/9908/187 5268/9904/738 5269/9907/2380 5271/9909/2381 +f 5272/9910/2382 5273/9911/737 5270/9908/187 5271/9909/2381 +f 5274/9912/2383 5275/9913/736 5273/9911/737 5272/9910/2382 +f 5276/9914/1557 5277/9915/2384 5275/9913/736 5274/9912/2383 +f 5278/9916/974 5279/9917/974 5280/9918/974 5281/9919/974 +f 5282/9920/974 5283/9921/974 5284/9922/2385 5285/9923/2386 +f 5286/9924/1468 5287/9925/604 5261/9897/604 5260/9896/1468 +f 5288/9926/740 5286/9924/1468 5260/9896/1468 5264/9900/740 +f 5289/9927/471 5288/9926/740 5264/9900/740 5266/9902/471 +f 5290/9928/738 5289/9929/471 5266/9905/471 5268/9904/738 +f 5291/9930/187 5290/9928/738 5268/9904/738 5270/9908/187 +f 5273/9911/737 5292/9931/737 5291/9930/187 5270/9908/187 +f 5275/9913/736 5293/9932/736 5292/9931/737 5273/9911/737 +f 5277/9915/2384 5294/9933/2387 5293/9932/736 5275/9913/736 +f 5284/9922/2385 5295/9934/2388 5294/9935/2387 5277/9936/2384 +f 5283/9921/974 5296/9937/974 5295/9934/2388 5284/9922/2385 +s 2 +f 5277/9938/189 5276/9939/190 5297/9940/190 +f 5285/9941/188 5284/9942/188 5298/9943/188 5299/9944/188 +s 4 +f 5277/9945/428 5297/9946/428 5298/9947/428 5284/9948/428 +s 2 +f 5300/9949/189 5281/9950/189 5280/9951/189 5297/9940/190 +f 5279/9952/187 5278/9953/187 5299/9944/188 5298/9943/188 +s 4 +f 5297/9946/428 5280/9954/428 5279/9955/428 5298/9947/428 +f 5300/9956/2389 5301/9957/2390 5302/9958/2391 5281/9959/2392 +f 5301/9957/2390 5300/9956/2389 5303/9960/2393 +s 1 +f 5304/9961/743 5305/9962/743 5262/9898/604 5261/9897/604 +f 5306/9963/745 5307/9964/744 5305/9962/743 5304/9961/743 +f 5308/9965/485 5309/9966/474 5307/9964/744 5306/9963/745 +f 5310/9967/2118 5311/9968/746 5309/9969/474 5308/9970/485 +f 5312/9971/190 5313/9972/2394 5311/9968/746 5310/9967/2118 +f 5314/9973/2395 5313/9972/2394 5312/9971/190 5315/9974/1466 +f 5316/9975/2396 5314/9973/2395 5315/9974/1466 5317/9976/748 +f 5318/9977/1638 5316/9978/2396 5317/9979/748 5319/9980/2397 +f 5320/9981/974 5321/9982/974 5322/9983/974 5323/9984/974 +f 5282/9920/974 5324/9985/2398 5325/9986/2399 5283/9921/974 +f 5326/9987/743 5304/9961/743 5261/9897/604 5287/9925/604 +f 5327/9988/745 5306/9963/745 5304/9961/743 5326/9987/743 +f 5328/9989/485 5308/9965/485 5306/9963/745 5327/9988/745 +f 5329/9990/2118 5310/9967/2118 5308/9970/485 5328/9991/485 +f 5330/9992/189 5312/9971/190 5310/9967/2118 5329/9990/2118 +f 5315/9974/1466 5312/9971/190 5330/9992/189 5331/9993/1466 +f 5317/9976/748 5315/9974/1466 5331/9993/1466 5332/9994/748 +f 5319/9980/2397 5317/9979/748 5332/9995/748 5333/9996/2400 +f 5325/9986/2399 5319/9980/2397 5333/9996/2400 5334/9997/2401 +f 5283/9921/974 5325/9986/2399 5334/9997/2401 5296/9937/974 +s 2 +f 5319/9998/187 5335/9999/187 5318/10000/187 +f 5324/10001/189 5336/10002/189 5337/10003/189 5325/10004/189 +s 4 +f 5319/10005/428 5325/10006/428 5337/10007/428 5335/10008/428 +s 2 +f 5338/10009/187 5335/9999/187 5322/10010/187 5321/10011/187 +f 5323/10012/189 5337/10003/189 5336/10002/189 5320/10013/189 +s 4 +f 5335/10008/428 5337/10007/428 5323/10014/428 5322/10015/428 +f 5338/10016/2402 5321/10017/2403 5339/10018/2404 5340/10019/2405 +f 5340/10019/2405 5341/10020/2406 5338/10016/2402 +f 5342/10021/428 5343/10022/430 5344/10023/430 +f 5336/10024/2407 5345/10025/2408 5346/10026/2409 5320/10027/2410 +f 5321/10017/2403 5320/10027/2410 5347/10028/2411 5348/10029/2412 +f 5324/10030/2413 5282/10031/2414 5345/10025/2408 5336/10024/2407 +f 5349/10032/428 5348/10029/2412 5347/10028/2411 5350/10033/429 +f 5351/10034/428 5349/10032/428 5350/10033/429 5343/10022/430 +f 5299/10035/2407 5278/10036/2415 5346/10026/2409 5345/10025/2408 +f 5346/10026/2409 5278/10036/2415 5347/10028/2411 +f 5347/10028/2411 5352/10037/2416 5353/10038/429 5350/10033/429 +f 5350/10033/429 5353/10038/429 5354/10039/429 5343/10022/430 +f 5285/10040/2417 5299/10035/2407 5345/10025/2408 5282/10031/2414 +f 5342/10021/428 5355/10041/428 5343/10022/430 +f 5343/10022/430 5356/10042/429 5344/10023/430 +f 5343/10022/430 5354/10039/429 5356/10042/429 +f 5355/10041/428 5357/10043/428 5343/10022/430 +f 5357/10043/428 5351/10034/428 5343/10022/430 +s 8 +f 5262/9898/2418 5342/10044/2419 5344/10045/2420 5263/9899/2421 +f 5263/10046/2421 5344/10047/2420 5356/10048/2422 5265/10049/2423 +f 5265/10049/2423 5356/10048/2422 5354/10050/2424 5267/10051/2425 +f 5267/10051/2425 5354/10050/2424 5353/10052/2426 5269/10053/2427 +f 5269/10053/2427 5353/10052/2426 5352/10054/2428 5271/10055/2429 +f 5271/10056/2429 5352/10057/2428 5302/10058/2430 5272/10059/2431 +f 5272/10059/2431 5302/10058/2430 5301/10060/2432 5274/10061/2433 +f 5274/10061/2433 5301/10060/2432 5303/10062/2434 5276/10063/2435 +f 5305/9962/2436 5355/10064/2437 5342/10044/2419 5262/9898/2418 +f 5307/10065/2438 5357/10066/2439 5355/10067/2437 5305/10068/2436 +f 5309/10069/2440 5351/10070/2441 5357/10071/2439 5307/10072/2438 +f 5311/10073/2442 5349/10074/2443 5351/10070/2441 5309/10069/2440 +f 5313/10075/2444 5348/10076/2445 5349/10074/2443 5311/10073/2442 +f 5314/10077/2446 5339/10078/2447 5348/10079/2445 5313/10080/2444 +f 5316/10081/2448 5340/10082/2449 5339/10078/2447 5314/10077/2446 +f 5318/10083/2450 5341/10084/2451 5340/10082/2449 5316/10081/2448 +s 2 +f 5303/10085/190 5300/9949/189 5297/9940/190 +f 5276/9939/190 5303/10085/190 5297/9940/190 +f 5335/9999/187 5341/10086/187 5318/10000/187 +f 5335/9999/187 5338/10009/187 5341/10086/187 +f 5287/10087/455 5286/10088/455 5358/10089/753 +f 5286/10088/455 5288/10090/455 5358/10089/753 +f 5288/10090/455 5289/10091/753 5358/10089/753 +f 5289/10091/753 5290/10092/753 5358/10089/753 +f 5290/10092/753 5291/10093/753 5358/10089/753 +f 5291/10093/753 5292/10094/752 5358/10089/753 +f 5292/10094/752 5293/10095/752 5358/10089/753 +f 5293/10095/752 5294/10096/455 5358/10089/753 +f 5294/10096/455 5295/10097/455 5358/10089/753 +f 5295/10097/455 5296/10098/455 5358/10089/753 +f 5296/10098/455 5334/10099/455 5358/10089/753 +f 5334/10099/455 5333/10100/455 5358/10089/753 +f 5333/10100/455 5332/10101/455 5358/10089/753 +f 5332/10101/455 5331/10102/455 5358/10089/753 +f 5331/10102/455 5330/10103/455 5358/10089/753 +f 5330/10103/455 5329/10104/754 5358/10089/753 +f 5329/10104/754 5328/10105/455 5358/10089/753 +f 5328/10105/455 5327/10106/455 5358/10089/753 +f 5327/10106/455 5326/10107/455 5358/10089/753 +f 5326/10107/455 5287/10087/455 5358/10089/753 +s 1 +f 5359/10108/795 5360/10109/795 5361/10110/795 5362/10111/795 +f 5363/10112/796 5364/10113/796 5365/10114/796 5366/10115/796 +s 2 +f 5364/10113/797 5367/10116/2452 5368/10117/2453 5365/10114/2454 +f 5369/10118/2455 5359/10108/801 5362/10111/2456 5370/10119/2457 +s 4 +f 5371/10120/803 5361/10121/804 5372/10122/805 5373/10123/2458 +f 5374/10124/807 5371/10120/803 5373/10123/2458 5375/10125/2459 +f 5363/10126/812 5366/10127/2460 5376/10128/811 5377/10129/812 +f 5360/10130/814 5378/10131/814 5372/10122/805 5361/10121/804 +f 5374/10124/807 5375/10125/2459 5376/10128/811 5366/10127/2460 +s 1 +f 5376/10132/815 5379/10133/815 5380/10134/815 5377/10135/815 +s 2 +f 5375/10136/816 5381/10137/817 5379/10138/818 5376/10139/819 +s 1 +f 5373/10140/820 5382/10141/821 5381/10137/821 5375/10136/820 +s 2 +f 5373/10140/822 5372/10142/823 5383/10143/824 5382/10141/825 +s 1 +f 5372/10144/826 5378/10145/826 5384/10146/826 5383/10147/826 +s 2 +f 5361/10110/827 5385/10148/827 5386/10149/828 5362/10111/2456 +s 4 +f 5371/10120/803 5387/10150/1242 5385/10151/831 5361/10121/804 +f 5374/10124/807 5388/10152/2461 5387/10150/1242 5371/10120/803 +f 5366/10127/2460 5389/10153/2462 5388/10152/2461 5374/10124/807 +s 2 +f 5365/10114/2454 5390/10154/835 5389/10155/1243 5366/10115/1243 +f 5368/10117/2453 5391/10156/2463 5390/10154/835 5365/10114/2454 +f 5362/10111/2456 5386/10149/828 5392/10157/2464 5370/10119/2457 +s 1 +f 5393/10158/396 5394/10159/396 5395/10160/396 5396/10161/396 +f 5396/10161/396 5395/10160/396 5397/10162/396 5398/10163/396 +f 5399/10164/844 5400/10165/845 5380/10134/815 5379/10133/815 +s 2 +f 5401/10166/846 5399/10167/847 5379/10138/818 5381/10137/817 +s 1 +f 5402/10168/1131 5401/10166/1131 5381/10137/821 5382/10141/821 +s 2 +f 5403/10169/849 5402/10168/850 5382/10141/825 5383/10143/824 +s 1 +f 5404/10170/851 5403/10171/852 5383/10147/826 5384/10146/826 +f 5405/10172/853 5406/10173/854 5407/10174/855 5408/10175/856 +s 2 +f 5409/10176/857 5405/10177/858 5408/10178/859 5410/10179/860 +s 1 +f 5411/10180/861 5409/10176/861 5410/10179/862 5412/10181/862 +s 2 +f 5413/10182/863 5411/10180/864 5412/10181/2465 5414/10183/866 +s 1 +f 5415/10184/867 5413/10185/868 5414/10186/869 5416/10187/870 +f 5399/10164/844 5408/10175/856 5407/10174/855 5400/10165/845 +s 2 +f 5401/10166/846 5410/10179/860 5408/10178/859 5399/10167/847 +s 1 +f 5402/10168/1131 5412/10181/862 5410/10179/862 5401/10166/1131 +s 2 +f 5403/10169/849 5414/10183/866 5412/10181/2465 5402/10168/850 +s 1 +f 5404/10170/851 5416/10187/870 5414/10186/869 5403/10171/852 +f 5359/10108/795 5417/10188/795 5418/10189/795 5360/10109/795 +f 5363/10112/796 5419/10190/796 5420/10191/796 5364/10113/796 +s 2 +f 5364/10113/797 5420/10191/2466 5421/10192/2467 5367/10116/2452 +f 5369/10118/2455 5422/10193/2468 5417/10188/2469 5359/10108/801 +s 4 +f 5423/10194/873 5424/10195/2470 5425/10196/875 5418/10197/2471 +f 5426/10198/877 5427/10199/2472 5424/10195/2470 5423/10194/873 +f 5363/10126/812 5377/10129/812 5428/10200/879 5419/10201/2473 +f 5360/10130/814 5418/10197/2471 5425/10196/875 5378/10131/814 +f 5426/10198/877 5419/10201/2473 5428/10200/879 5427/10199/2472 +s 2 +f 5428/10202/881 5377/10135/881 5380/10134/881 5429/10203/881 +s 1 +f 5427/10204/882 5428/10205/883 5429/10206/884 5430/10207/885 +s 2 +f 5424/10208/886 5427/10204/886 5430/10207/887 5431/10209/887 +s 1 +f 5424/10208/888 5431/10209/889 5432/10210/890 5425/10211/891 +s 2 +f 5425/10212/892 5432/10213/892 5384/10146/892 5378/10145/892 +f 5418/10189/893 5417/10188/2469 5433/10214/2474 5434/10215/893 +s 4 +f 5423/10194/873 5418/10197/2471 5434/10216/2475 5435/10217/1247 +f 5426/10198/877 5423/10194/873 5435/10217/1247 5436/10218/2476 +f 5419/10201/2473 5426/10198/877 5436/10218/2476 5437/10219/2477 +s 2 +f 5420/10191/2466 5419/10190/901 5437/10220/901 5438/10221/902 +f 5421/10192/2467 5420/10191/2466 5438/10221/902 5439/10222/2478 +f 5417/10188/2469 5422/10193/2468 5440/10223/2479 5433/10214/2474 +s 1 +f 5441/10224/396 5442/10225/396 5443/10226/396 5444/10227/396 +f 5442/10225/396 5398/10163/396 5397/10162/396 5443/10226/396 +s 2 +f 5445/10228/909 5429/10203/881 5380/10134/881 5400/10165/910 +s 1 +f 5446/10229/911 5430/10207/885 5429/10206/884 5445/10230/2480 +s 2 +f 5447/10231/913 5431/10209/887 5430/10207/887 5446/10229/913 +s 1 +f 5448/10232/914 5432/10210/890 5431/10209/889 5447/10231/2481 +s 2 +f 5404/10170/916 5384/10146/892 5432/10213/892 5448/10233/917 +f 5449/10234/918 5450/10235/919 5407/10174/920 5406/10173/921 +s 1 +f 5451/10236/922 5452/10237/923 5450/10238/924 5449/10239/925 +s 2 +f 5453/10240/926 5454/10241/927 5452/10237/927 5451/10236/926 +s 1 +f 5455/10242/928 5456/10243/929 5454/10241/2482 5453/10240/931 +s 2 +f 5415/10184/932 5416/10187/933 5456/10244/934 5455/10245/935 +f 5445/10228/909 5400/10165/910 5407/10174/920 5450/10235/919 +s 1 +f 5446/10229/911 5445/10230/2480 5450/10238/924 5452/10237/923 +s 2 +f 5447/10231/913 5446/10229/913 5452/10237/927 5454/10241/927 +s 1 +f 5448/10232/914 5447/10231/2481 5454/10241/2482 5456/10243/929 +s 2 +f 5404/10170/916 5448/10233/917 5456/10244/934 5416/10187/933 +s 8 +f 5386/10246/187 5385/10247/187 5457/10248/187 +f 5385/10247/187 5387/10249/187 5457/10248/187 +f 5387/10249/187 5388/10250/187 5457/10248/187 +f 5388/10250/187 5389/10251/187 5457/10248/187 +f 5389/10251/187 5390/10252/187 5457/10248/187 +f 5390/10252/187 5391/10253/2483 5457/10248/187 +f 5391/10253/2483 5392/10254/2484 5457/10248/187 +f 5392/10254/2484 5386/10246/187 5457/10248/187 +f 5434/10255/189 5433/10256/189 5458/10257/189 +f 5433/10256/189 5440/10258/2485 5458/10257/189 +f 5440/10258/2485 5439/10259/2486 5458/10257/189 +f 5439/10259/2486 5438/10260/190 5458/10257/189 +f 5438/10260/190 5437/10261/189 5458/10257/189 +f 5437/10261/189 5436/10262/189 5458/10257/189 +f 5436/10262/189 5435/10263/189 5458/10257/189 +f 5435/10263/189 5434/10255/189 5458/10257/189 +s 1 +f 5459/10264/937 5460/10265/937 5461/10266/974 +f 5460/10265/937 5462/10267/938 5461/10266/974 +f 5462/10267/938 5463/10268/939 5461/10266/974 +f 5463/10268/939 5464/10269/940 5461/10266/974 +f 5464/10269/940 5465/10270/941 5461/10266/974 +f 5465/10270/941 5466/10271/941 5461/10266/974 +f 5466/10271/941 5467/10272/942 5461/10266/974 +f 5467/10272/942 5468/10273/943 5461/10266/974 +f 5468/10273/943 5469/10274/944 5461/10266/974 +f 5469/10274/944 5459/10264/937 5461/10266/974 +s 4 +f 5459/10275/2487 5406/10276/2487 5405/10277/2488 5460/10278/2488 +f 5460/10278/2488 5405/10277/2488 5409/10279/2489 5462/10280/2489 +f 5462/10281/2489 5409/10176/2489 5411/10180/2490 5463/10282/2490 +f 5463/10283/2490 5411/10284/2490 5413/10285/2491 5464/10286/2491 +f 5464/10287/2491 5413/10185/2491 5415/10184/950 5465/10288/950 +f 5469/10289/2492 5449/10290/2492 5406/10276/2487 5459/10275/2487 +f 5468/10291/2493 5451/10292/2493 5449/10293/2492 5469/10294/2492 +f 5467/10295/2494 5453/10240/2494 5451/10236/2493 5468/10296/2493 +f 5466/10297/2495 5455/10298/954 5453/10299/2494 5467/10300/2494 +f 5465/10301/950 5415/10302/950 5455/10298/954 5466/10297/2495 +s 2 +f 5368/10117/2453 5367/10116/2452 5397/10303/2496 5395/10304/2497 +f 5367/10116/2452 5421/10192/2467 5443/10305/2498 5397/10303/2496 +f 5421/10192/2467 5439/10222/2478 5444/10306/2499 5443/10305/2498 +s 8 +f 5439/10259/2486 5440/10258/2485 5441/10307/2500 5444/10308/2500 +s 2 +f 5440/10223/2479 5422/10193/2468 5442/10309/2501 5441/10310/2502 +f 5422/10193/2468 5369/10118/2455 5398/10311/2503 5442/10309/2501 +f 5369/10118/2455 5370/10119/2457 5396/10312/2504 5398/10311/2503 +f 5370/10119/2457 5392/10157/2464 5393/10313/2505 5396/10312/2504 +s 8 +f 5392/10254/2484 5391/10253/2483 5394/10314/2506 5393/10315/2506 +s 2 +f 5391/10156/2463 5368/10117/2453 5395/10304/2497 5394/10316/2507 +s 1 +f 5470/10317/795 5471/10318/795 5472/10319/795 5473/10320/795 +f 5474/10321/796 5475/10322/796 5476/10323/796 5477/10324/796 +s 2 +f 5475/10322/797 5478/10325/2452 5479/10326/2453 5476/10323/2454 +f 5480/10327/2455 5470/10317/801 5473/10320/2456 5481/10328/2508 +s 4 +f 5482/10329/803 5472/10330/2509 5483/10331/2510 5484/10332/2458 +f 5485/10333/807 5482/10329/803 5484/10332/2458 5486/10334/2459 +f 5474/10335/2511 5477/10336/2460 5487/10337/811 5488/10338/2511 +f 5471/10339/2512 5489/10340/2513 5483/10331/2510 5472/10330/2509 +f 5485/10333/807 5486/10334/2459 5487/10337/811 5477/10336/2460 +s 1 +f 5487/10341/815 5490/10342/815 5491/10343/815 5488/10344/815 +s 2 +f 5486/10345/816 5492/10346/817 5490/10347/818 5487/10348/819 +s 1 +f 5484/10349/820 5493/10350/821 5492/10346/821 5486/10345/820 +s 2 +f 5484/10349/822 5483/10351/823 5494/10352/824 5493/10350/825 +s 1 +f 5483/10353/826 5489/10354/826 5495/10355/826 5494/10356/826 +s 2 +f 5472/10319/827 5496/10357/827 5497/10358/828 5473/10320/2456 +s 4 +f 5482/10329/803 5498/10359/1242 5496/10360/831 5472/10330/2509 +f 5485/10333/807 5499/10361/2461 5498/10359/1242 5482/10329/803 +f 5477/10336/2460 5500/10362/2462 5499/10361/2461 5485/10333/807 +s 2 +f 5476/10323/2454 5501/10363/2514 5500/10364/836 5477/10324/836 +f 5479/10326/2453 5502/10365/2463 5501/10363/2514 5476/10323/2454 +f 5473/10320/2456 5497/10358/828 5503/10366/2464 5481/10328/2508 +s 1 +f 5504/10367/396 5505/10368/396 5506/10369/396 5507/10370/396 +f 5507/10370/396 5506/10369/396 5508/10371/396 5509/10372/396 +f 5510/10373/844 5511/10374/845 5491/10343/815 5490/10342/815 +s 2 +f 5512/10375/846 5510/10376/847 5490/10347/818 5492/10346/817 +s 1 +f 5513/10377/1131 5512/10375/1131 5492/10346/821 5493/10350/821 +s 2 +f 5514/10378/849 5513/10377/850 5493/10350/825 5494/10352/824 +s 1 +f 5515/10379/851 5514/10380/852 5494/10356/826 5495/10355/826 +f 5516/10381/853 5517/10382/854 5518/10383/855 5519/10384/856 +s 2 +f 5520/10385/857 5516/10386/858 5519/10387/859 5521/10388/860 +s 1 +f 5522/10389/861 5520/10385/861 5521/10388/862 5523/10390/862 +s 2 +f 5524/10391/863 5522/10389/864 5523/10390/865 5525/10392/866 +s 1 +f 5526/10393/867 5524/10394/868 5525/10395/869 5527/10396/870 +f 5510/10373/844 5519/10384/856 5518/10383/855 5511/10374/845 +s 2 +f 5512/10375/846 5521/10388/860 5519/10387/859 5510/10376/847 +s 1 +f 5513/10377/1131 5523/10390/862 5521/10388/862 5512/10375/1131 +s 2 +f 5514/10378/849 5525/10392/866 5523/10390/865 5513/10377/850 +s 1 +f 5515/10379/851 5527/10396/870 5525/10395/869 5514/10380/852 +f 5470/10317/795 5528/10397/795 5529/10398/795 5471/10318/795 +f 5474/10321/796 5530/10399/796 5531/10400/796 5475/10322/796 +s 2 +f 5475/10322/797 5531/10400/2466 5532/10401/2467 5478/10325/2452 +f 5480/10327/2455 5533/10402/2468 5528/10397/2469 5470/10317/801 +s 4 +f 5534/10403/873 5535/10404/2470 5536/10405/2515 5529/10406/2471 +f 5537/10407/877 5538/10408/2472 5535/10404/2470 5534/10403/873 +f 5474/10335/2511 5488/10338/2511 5539/10409/879 5530/10410/2473 +f 5471/10339/2512 5529/10406/2471 5536/10405/2515 5489/10340/2513 +f 5537/10407/877 5530/10410/2473 5539/10409/879 5538/10408/2472 +s 2 +f 5539/10411/881 5488/10344/881 5491/10343/881 5540/10412/881 +s 1 +f 5538/10413/882 5539/10414/883 5540/10415/884 5541/10416/885 +s 2 +f 5535/10417/886 5538/10413/886 5541/10416/887 5542/10418/887 +s 1 +f 5535/10417/888 5542/10418/889 5543/10419/890 5536/10420/891 +s 2 +f 5536/10421/892 5543/10422/892 5495/10355/892 5489/10354/892 +f 5529/10398/893 5528/10397/2469 5544/10423/895 5545/10424/893 +s 4 +f 5534/10403/873 5529/10406/2471 5545/10425/896 5546/10426/1247 +f 5537/10407/877 5534/10403/873 5546/10426/1247 5547/10427/2476 +f 5530/10410/2473 5537/10407/877 5547/10427/2476 5548/10428/2477 +s 2 +f 5531/10400/2466 5530/10399/901 5548/10429/901 5549/10430/2516 +f 5532/10401/2467 5531/10400/2466 5549/10430/2516 5550/10431/2478 +f 5528/10397/2469 5533/10402/2468 5551/10432/2479 5544/10423/895 +s 1 +f 5552/10433/396 5553/10434/396 5554/10435/396 5555/10436/396 +f 5553/10434/396 5509/10372/396 5508/10371/396 5554/10435/396 +s 2 +f 5556/10437/909 5540/10412/881 5491/10343/881 5511/10374/910 +s 1 +f 5557/10438/911 5541/10416/885 5540/10415/884 5556/10439/912 +s 2 +f 5558/10440/913 5542/10418/887 5541/10416/887 5557/10438/913 +s 1 +f 5559/10441/914 5543/10419/890 5542/10418/889 5558/10440/915 +s 2 +f 5515/10379/916 5495/10355/892 5543/10422/892 5559/10442/917 +f 5560/10443/918 5561/10444/919 5518/10383/920 5517/10382/921 +s 1 +f 5562/10445/922 5563/10446/2517 5561/10447/924 5560/10448/925 +s 2 +f 5564/10449/926 5565/10450/927 5563/10446/927 5562/10445/926 +s 1 +f 5566/10451/928 5567/10452/929 5565/10450/2482 5564/10449/931 +s 2 +f 5526/10393/932 5527/10396/933 5567/10453/934 5566/10454/935 +f 5556/10437/909 5511/10374/910 5518/10383/920 5561/10444/919 +s 1 +f 5557/10438/911 5556/10439/912 5561/10447/924 5563/10446/2517 +s 2 +f 5558/10440/913 5557/10438/913 5563/10446/927 5565/10450/927 +s 1 +f 5559/10441/914 5558/10440/915 5565/10450/2482 5567/10452/929 +s 2 +f 5515/10379/916 5559/10442/917 5567/10453/934 5527/10396/933 +s 8 +f 5497/10455/187 5496/10456/187 5568/10457/187 +f 5496/10456/187 5498/10458/187 5568/10457/187 +f 5498/10458/187 5499/10459/187 5568/10457/187 +f 5499/10459/187 5500/10460/187 5568/10457/187 +f 5500/10460/187 5501/10461/187 5568/10457/187 +f 5501/10461/187 5502/10462/2483 5568/10457/187 +f 5502/10462/2483 5503/10463/2484 5568/10457/187 +f 5503/10463/2484 5497/10455/187 5568/10457/187 +f 5545/10464/189 5544/10465/189 5569/10466/189 +f 5544/10465/189 5551/10467/2485 5569/10466/189 +f 5551/10467/2485 5550/10468/2486 5569/10466/189 +f 5550/10468/2486 5549/10469/189 5569/10466/189 +f 5549/10469/189 5548/10470/189 5569/10466/189 +f 5548/10470/189 5547/10471/189 5569/10466/189 +f 5547/10471/189 5546/10472/189 5569/10466/189 +f 5546/10472/189 5545/10464/189 5569/10466/189 +s 1 +f 5570/10473/937 5571/10474/937 5572/10475/301 +f 5571/10474/937 5573/10476/938 5572/10475/301 +f 5573/10476/938 5574/10477/939 5572/10475/301 +f 5574/10477/939 5575/10478/940 5572/10475/301 +f 5575/10478/940 5576/10479/940 5572/10475/301 +f 5576/10479/940 5577/10480/941 5572/10475/301 +f 5577/10480/941 5578/10481/942 5572/10475/301 +f 5578/10481/942 5579/10482/943 5572/10475/301 +f 5579/10482/943 5580/10483/944 5572/10475/301 +f 5580/10483/944 5570/10473/937 5572/10475/301 +s 4 +f 5570/10484/2487 5517/10485/2487 5516/10486/946 5571/10487/2488 +f 5571/10487/2488 5516/10486/946 5520/10488/947 5573/10489/2518 +f 5573/10385/2518 5520/10385/947 5522/10389/2519 5574/10389/948 +f 5574/10490/948 5522/10491/2519 5524/10492/949 5575/10493/949 +f 5575/10494/949 5524/10394/949 5526/10393/950 5576/10495/950 +f 5580/10496/951 5560/10497/951 5517/10485/2487 5570/10484/2487 +f 5579/10498/2493 5562/10499/2493 5560/10500/951 5580/10501/951 +f 5578/10502/2520 5564/10449/2520 5562/10445/2493 5579/10503/2493 +f 5577/10504/954 5566/10505/954 5564/10506/2520 5578/10507/2520 +f 5576/10508/950 5526/10509/950 5566/10505/954 5577/10504/954 +s 2 +f 5479/10326/2453 5478/10325/2452 5508/10510/2496 5506/10511/2521 +f 5478/10325/2452 5532/10401/2467 5554/10512/2498 5508/10510/2496 +f 5532/10401/2467 5550/10431/2478 5555/10513/2499 5554/10512/2498 +s 8 +f 5550/10468/2486 5551/10467/2485 5552/10514/2500 5555/10515/2500 +s 2 +f 5551/10432/2479 5533/10402/2468 5553/10516/2501 5552/10517/2502 +f 5533/10402/2468 5480/10327/2455 5509/10518/2522 5553/10516/2501 +f 5480/10327/2455 5481/10328/2508 5507/10519/2523 5509/10518/2522 +f 5481/10328/2508 5503/10366/2464 5504/10520/2505 5507/10519/2523 +s 8 +f 5503/10463/2484 5502/10462/2483 5505/10521/2506 5504/10522/2506 +s 2 +f 5502/10365/2463 5479/10326/2453 5506/10511/2521 5505/10523/2524 +s 1 +f 5581/10524/1468 5582/10525/604 5583/10526/604 5584/10527/1468 +f 5585/10528/740 5581/10524/1468 5584/10527/1468 5586/10529/740 +f 5587/10530/471 5585/10528/740 5586/10529/740 5588/10531/471 +f 5589/10532/738 5587/10533/471 5588/10534/471 5590/10535/738 +f 5591/10536/187 5589/10532/738 5590/10535/738 5592/10537/2525 +f 5593/10538/2526 5594/10539/737 5591/10536/187 5592/10537/2525 +f 5595/10540/2383 5596/10541/736 5594/10539/737 5593/10538/2526 +f 5597/10542/1557 5598/10543/2384 5596/10541/736 5595/10540/2383 +f 5599/10544/974 5600/10545/974 5601/10546/974 5602/10547/974 +f 5603/10548/301 5604/10549/301 5605/10550/2385 5606/10551/2386 +f 5607/10552/1468 5608/10553/604 5582/10525/604 5581/10524/1468 +f 5609/10554/740 5607/10552/1468 5581/10524/1468 5585/10528/740 +f 5610/10555/471 5609/10554/740 5585/10528/740 5587/10530/471 +f 5611/10556/738 5610/10557/471 5587/10533/471 5589/10532/738 +f 5612/10558/187 5611/10556/738 5589/10532/738 5591/10536/187 +f 5594/10539/737 5613/10559/737 5612/10558/187 5591/10536/187 +f 5596/10541/736 5614/10560/736 5613/10559/737 5594/10539/737 +f 5598/10543/2384 5615/10561/2387 5614/10560/736 5596/10541/736 +f 5605/10550/2385 5616/10562/2388 5615/10563/2387 5598/10564/2384 +f 5604/10549/301 5617/10565/301 5616/10562/2388 5605/10550/2385 +s 2 +f 5598/10566/189 5597/10567/189 5618/10568/189 +f 5606/10569/187 5605/10570/187 5619/10571/187 5620/10572/187 +s 4 +f 5598/10573/428 5618/10574/428 5619/10575/428 5605/10576/428 +s 2 +f 5621/10577/189 5602/10578/189 5601/10579/189 5618/10568/189 +f 5600/10580/187 5599/10581/187 5620/10572/187 5619/10571/187 +s 4 +f 5618/10574/428 5601/10582/428 5600/10583/428 5619/10575/428 +f 5621/10584/2389 5622/10585/2390 5623/10586/2391 5602/10587/2392 +f 5622/10585/2390 5621/10584/2389 5624/10588/2393 +s 1 +f 5625/10589/1464 5626/10590/743 5583/10526/604 5582/10525/604 +f 5627/10591/745 5628/10592/744 5626/10590/743 5625/10589/1464 +f 5629/10593/474 5630/10594/474 5628/10592/744 5627/10591/745 +f 5631/10595/746 5632/10596/746 5630/10597/474 5629/10598/474 +f 5633/10599/190 5634/10600/2527 5632/10596/746 5631/10595/746 +f 5635/10601/2395 5634/10600/2527 5633/10599/190 5636/10602/1466 +f 5637/10603/2528 5635/10601/2395 5636/10602/1466 5638/10604/748 +f 5639/10605/1638 5637/10603/2528 5638/10604/748 5640/10606/2397 +f 5641/10607/974 5642/10608/974 5643/10609/974 5644/10610/974 +f 5603/10548/301 5645/10611/2398 5646/10612/2399 5604/10549/301 +f 5647/10613/743 5625/10589/1464 5582/10525/604 5608/10553/604 +f 5648/10614/745 5627/10591/745 5625/10589/1464 5647/10613/743 +f 5649/10615/485 5629/10593/474 5627/10591/745 5648/10614/745 +f 5650/10616/2118 5631/10595/746 5629/10598/474 5649/10617/485 +f 5651/10618/189 5633/10599/190 5631/10595/746 5650/10616/2118 +f 5636/10602/1466 5633/10599/190 5651/10618/189 5652/10619/1466 +f 5638/10604/748 5636/10602/1466 5652/10619/1466 5653/10620/748 +f 5640/10606/2397 5638/10604/748 5653/10620/748 5654/10621/2400 +f 5646/10612/2399 5640/10622/2397 5654/10623/2400 5655/10624/2401 +f 5604/10549/301 5646/10612/2399 5655/10624/2401 5617/10565/301 +s 2 +f 5640/10625/187 5656/10626/188 5639/10627/187 +f 5645/10628/395 5657/10629/395 5658/10630/190 5646/10631/189 +s 4 +f 5640/10632/428 5646/10633/428 5658/10634/428 5656/10635/428 +s 2 +f 5659/10636/188 5656/10626/188 5643/10637/188 5642/10638/188 +f 5644/10639/190 5658/10630/190 5657/10629/395 5641/10640/190 +s 4 +f 5656/10635/428 5658/10634/428 5644/10641/428 5643/10642/428 +f 5659/10643/2402 5642/10644/2403 5660/10645/2404 5661/10646/2405 +f 5661/10646/2405 5662/10647/2406 5659/10643/2402 +f 5663/10648/428 5664/10649/428 5665/10650/428 +f 5657/10651/2407 5666/10652/2529 5667/10653/2409 5641/10654/2410 +f 5642/10644/2403 5641/10654/2410 5668/10655/2411 5669/10656/2412 +f 5645/10657/2413 5603/10658/2414 5666/10652/2529 5657/10651/2407 +f 5670/10659/428 5669/10656/2412 5668/10655/2411 5671/10660/428 +f 5672/10661/428 5670/10659/428 5671/10660/428 5664/10649/428 +f 5620/10662/2407 5599/10663/2415 5667/10653/2409 5666/10652/2529 +f 5667/10653/2409 5599/10663/2415 5668/10655/2411 +f 5668/10655/2411 5673/10664/2416 5674/10665/428 5671/10660/428 +f 5671/10660/428 5674/10665/428 5675/10666/428 5664/10649/428 +f 5606/10667/2417 5620/10662/2407 5666/10652/2529 5603/10658/2414 +f 5663/10648/428 5676/10668/428 5664/10649/428 +f 5664/10649/428 5677/10669/428 5665/10650/428 +f 5664/10649/428 5675/10666/428 5677/10669/428 +f 5676/10668/428 5678/10670/428 5664/10649/428 +f 5678/10670/428 5672/10661/428 5664/10649/428 +s 8 +f 5583/10526/2418 5663/10671/2419 5665/10672/2530 5584/10527/2531 +f 5584/10673/2531 5665/10674/2530 5677/10675/2422 5586/10676/2423 +f 5586/10676/2423 5677/10675/2422 5675/10677/2532 5588/10678/2425 +f 5588/10678/2425 5675/10677/2532 5674/10679/2426 5590/10680/2427 +f 5590/10680/2427 5674/10679/2426 5673/10681/2428 5592/10682/2429 +f 5592/10683/2429 5673/10684/2428 5623/10685/2430 5593/10686/2431 +f 5593/10686/2431 5623/10685/2430 5622/10687/2432 5595/10688/2433 +f 5595/10688/2433 5622/10687/2432 5624/10689/2434 5597/10690/2435 +f 5626/10590/2436 5676/10691/2437 5663/10671/2419 5583/10526/2418 +f 5628/10692/2438 5678/10693/2439 5676/10694/2437 5626/10695/2436 +f 5630/10696/2440 5672/10697/2441 5678/10698/2439 5628/10699/2438 +f 5632/10700/2442 5670/10701/2443 5672/10697/2441 5630/10696/2440 +f 5634/10702/2444 5669/10703/2445 5670/10701/2443 5632/10700/2442 +f 5635/10704/2446 5660/10705/2447 5669/10706/2445 5634/10707/2444 +f 5637/10708/2448 5661/10709/2449 5660/10705/2447 5635/10704/2446 +f 5639/10710/2450 5662/10711/2451 5661/10709/2449 5637/10708/2448 +s 2 +f 5624/10712/189 5621/10577/189 5618/10568/189 +f 5597/10567/189 5624/10712/189 5618/10568/189 +f 5656/10626/188 5662/10713/187 5639/10627/187 +f 5656/10626/188 5659/10636/188 5662/10713/187 +f 5608/10714/455 5607/10715/455 5679/10716/455 +f 5607/10715/455 5609/10717/455 5679/10716/455 +f 5609/10717/455 5610/10718/455 5679/10716/455 +f 5610/10718/455 5611/10719/455 5679/10716/455 +f 5611/10719/455 5612/10720/455 5679/10716/455 +f 5612/10720/455 5613/10721/455 5679/10716/455 +f 5613/10721/455 5614/10722/455 5679/10716/455 +f 5614/10722/455 5615/10723/455 5679/10716/455 +f 5615/10723/455 5616/10724/455 5679/10716/455 +f 5616/10724/455 5617/10725/455 5679/10716/455 +f 5617/10725/455 5655/10726/455 5679/10716/455 +f 5655/10726/455 5654/10727/455 5679/10716/455 +f 5654/10727/455 5653/10728/455 5679/10716/455 +f 5653/10728/455 5652/10729/455 5679/10716/455 +f 5652/10729/455 5651/10730/455 5679/10716/455 +f 5651/10730/455 5650/10731/455 5679/10716/455 +f 5650/10731/455 5649/10732/455 5679/10716/455 +f 5649/10732/455 5648/10733/455 5679/10716/455 +f 5648/10733/455 5647/10734/455 5679/10716/455 +f 5647/10734/455 5608/10714/455 5679/10716/455 +s 1 +f 5680/10735/795 5681/10736/795 5682/10737/795 5683/10738/795 +f 5684/10739/796 5685/10740/796 5686/10741/796 5687/10742/796 +s 2 +f 5685/10740/797 5688/10743/2452 5689/10744/2453 5686/10741/2454 +f 5690/10745/2455 5680/10735/801 5683/10738/2533 5691/10746/2508 +s 4 +f 5692/10747/803 5682/10748/2509 5693/10749/2510 5694/10750/2458 +f 5695/10751/807 5692/10747/803 5694/10750/2458 5696/10752/808 +f 5684/10753/2511 5687/10754/2460 5697/10755/811 5698/10756/2511 +f 5681/10757/2513 5699/10758/2513 5693/10749/2510 5682/10748/2509 +f 5695/10751/807 5696/10752/808 5697/10755/811 5687/10754/2460 +s 1 +f 5697/10759/815 5700/10760/815 5701/10761/815 5698/10762/815 +s 2 +f 5696/10763/816 5702/10764/817 5700/10765/818 5697/10766/819 +s 1 +f 5694/10767/2534 5703/10768/821 5702/10764/821 5696/10763/2534 +s 2 +f 5694/10767/822 5693/10769/823 5704/10770/824 5703/10768/825 +s 1 +f 5693/10771/826 5699/10772/826 5705/10773/826 5704/10774/826 +s 2 +f 5682/10737/827 5706/10775/827 5707/10776/2535 5683/10738/2533 +s 4 +f 5692/10747/803 5708/10777/1242 5706/10778/2536 5682/10748/2509 +f 5695/10751/807 5709/10779/2461 5708/10777/1242 5692/10747/803 +f 5687/10754/2460 5710/10780/2462 5709/10779/2461 5695/10751/807 +s 2 +f 5686/10741/2454 5711/10781/2514 5710/10782/836 5687/10742/836 +f 5689/10744/2453 5712/10783/2537 5711/10781/2514 5686/10741/2454 +f 5683/10738/2533 5707/10776/2535 5713/10784/2464 5691/10746/2508 +s 1 +f 5714/10785/396 5715/10786/396 5716/10787/396 5717/10788/396 +f 5717/10788/396 5716/10787/396 5718/10789/396 5719/10790/396 +f 5720/10791/844 5721/10792/845 5701/10761/815 5700/10760/815 +s 2 +f 5722/10793/846 5720/10794/847 5700/10765/818 5702/10764/817 +s 1 +f 5723/10795/1131 5722/10793/1131 5702/10764/821 5703/10768/821 +s 2 +f 5724/10796/849 5723/10795/2538 5703/10768/825 5704/10770/824 +s 1 +f 5725/10797/851 5724/10798/852 5704/10774/826 5705/10773/826 +f 5726/10799/853 5727/10800/854 5728/10801/855 5729/10802/2539 +s 2 +f 5730/10803/857 5726/10804/858 5729/10805/859 5731/10806/860 +s 1 +f 5732/10807/861 5730/10803/861 5731/10806/862 5733/10808/862 +s 2 +f 5734/10809/863 5732/10807/864 5733/10808/2465 5735/10810/866 +s 1 +f 5736/10811/868 5734/10812/868 5735/10813/869 5737/10814/870 +f 5720/10791/844 5729/10802/2539 5728/10801/855 5721/10792/845 +s 2 +f 5722/10793/846 5731/10806/860 5729/10805/859 5720/10794/847 +s 1 +f 5723/10795/1131 5733/10808/862 5731/10806/862 5722/10793/1131 +s 2 +f 5724/10796/849 5735/10810/866 5733/10808/2465 5723/10795/2538 +s 1 +f 5725/10797/851 5737/10814/870 5735/10813/869 5724/10798/852 +f 5680/10735/795 5738/10815/795 5739/10816/795 5681/10736/795 +f 5684/10739/796 5740/10817/796 5741/10818/796 5685/10740/796 +s 2 +f 5685/10740/797 5741/10818/2466 5742/10819/2467 5688/10743/2452 +f 5690/10745/2455 5743/10820/2468 5738/10815/2469 5680/10735/801 +s 4 +f 5744/10821/873 5745/10822/2470 5746/10823/2515 5739/10824/2471 +f 5747/10825/877 5748/10826/878 5745/10822/2470 5744/10821/873 +f 5684/10753/2511 5698/10756/2511 5749/10827/879 5740/10828/2473 +f 5681/10757/2513 5739/10824/2471 5746/10823/2515 5699/10758/2513 +f 5747/10825/877 5740/10828/2473 5749/10827/879 5748/10826/878 +s 2 +f 5749/10829/881 5698/10762/881 5701/10761/881 5750/10830/881 +s 1 +f 5748/10831/882 5749/10832/883 5750/10833/884 5751/10834/885 +s 2 +f 5745/10835/886 5748/10831/886 5751/10834/887 5752/10836/887 +s 1 +f 5745/10835/888 5752/10836/889 5753/10837/890 5746/10838/891 +s 2 +f 5746/10839/892 5753/10840/892 5705/10773/892 5699/10772/892 +f 5739/10816/893 5738/10815/2469 5754/10841/2474 5755/10842/893 +s 4 +f 5744/10821/873 5739/10824/2471 5755/10843/896 5756/10844/1247 +f 5747/10825/877 5744/10821/873 5756/10844/1247 5757/10845/2476 +f 5740/10828/2473 5747/10825/877 5757/10845/2476 5758/10846/2477 +s 2 +f 5741/10818/2466 5740/10817/901 5758/10847/901 5759/10848/2516 +f 5742/10819/2467 5741/10818/2466 5759/10848/2516 5760/10849/2478 +f 5738/10815/2469 5743/10820/2468 5761/10850/2479 5754/10841/2474 +s 1 +f 5762/10851/396 5763/10852/396 5764/10853/396 5765/10854/396 +f 5763/10852/396 5719/10790/396 5718/10789/396 5764/10853/396 +s 2 +f 5766/10855/909 5750/10830/881 5701/10761/881 5721/10792/910 +s 1 +f 5767/10856/911 5751/10834/885 5750/10833/884 5766/10857/912 +s 2 +f 5768/10858/913 5752/10836/887 5751/10834/887 5767/10856/913 +s 1 +f 5769/10859/914 5753/10837/890 5752/10836/889 5768/10858/915 +s 2 +f 5725/10797/916 5705/10773/892 5753/10840/892 5769/10860/917 +f 5770/10861/918 5771/10862/919 5728/10801/920 5727/10800/921 +s 1 +f 5772/10863/922 5773/10864/2517 5771/10865/924 5770/10866/922 +s 2 +f 5774/10867/926 5775/10868/927 5773/10864/927 5772/10863/926 +s 1 +f 5776/10869/928 5777/10870/929 5775/10868/930 5774/10867/928 +s 2 +f 5736/10811/935 5737/10814/933 5777/10871/934 5776/10872/935 +f 5766/10855/909 5721/10792/910 5728/10801/920 5771/10862/919 +s 1 +f 5767/10856/911 5766/10857/912 5771/10865/924 5773/10864/2517 +s 2 +f 5768/10858/913 5767/10856/913 5773/10864/927 5775/10868/927 +s 1 +f 5769/10859/914 5768/10858/915 5775/10868/930 5777/10870/929 +s 2 +f 5725/10797/916 5769/10860/917 5777/10871/934 5737/10814/933 +s 8 +f 5707/10873/187 5706/10874/187 5778/10875/187 +f 5706/10874/187 5708/10876/187 5778/10875/187 +f 5708/10876/187 5709/10877/187 5778/10875/187 +f 5709/10877/187 5710/10878/187 5778/10875/187 +f 5710/10878/187 5711/10879/187 5778/10875/187 +f 5711/10879/187 5712/10880/2483 5778/10875/187 +f 5712/10880/2483 5713/10881/2484 5778/10875/187 +f 5713/10881/2484 5707/10873/187 5778/10875/187 +f 5755/10882/189 5754/10883/189 5779/10884/189 +f 5754/10883/189 5761/10885/2485 5779/10884/189 +f 5761/10885/2485 5760/10886/2486 5779/10884/189 +f 5760/10886/2486 5759/10887/189 5779/10884/189 +f 5759/10887/189 5758/10888/189 5779/10884/189 +f 5758/10888/189 5757/10889/189 5779/10884/189 +f 5757/10889/189 5756/10890/189 5779/10884/189 +f 5756/10890/189 5755/10882/189 5779/10884/189 +s 1 +f 5780/10891/944 5781/10892/937 5782/10893/300 +f 5781/10892/937 5783/10894/938 5782/10893/300 +f 5783/10894/938 5784/10895/939 5782/10893/300 +f 5784/10895/939 5785/10896/940 5782/10893/300 +f 5785/10896/940 5786/10897/941 5782/10893/300 +f 5786/10897/941 5787/10898/941 5782/10893/300 +f 5787/10898/941 5788/10899/942 5782/10893/300 +f 5788/10899/942 5789/10900/943 5782/10893/300 +f 5789/10900/943 5790/10901/944 5782/10893/300 +f 5790/10901/944 5780/10891/944 5782/10893/300 +s 4 +f 5780/10902/2487 5727/10903/2487 5726/10904/946 5781/10905/2488 +f 5781/10905/2488 5726/10904/946 5730/10906/2489 5783/10907/2489 +f 5783/10908/2489 5730/10803/2489 5732/10807/2490 5784/10909/2519 +f 5784/10910/2519 5732/10911/2490 5734/10912/949 5785/10913/949 +f 5785/10913/949 5734/10912/949 5736/10914/1135 5786/10915/1135 +f 5790/10916/951 5770/10917/951 5727/10903/2487 5780/10902/2487 +f 5789/10918/2493 5772/10919/2493 5770/10920/951 5790/10921/951 +f 5788/10922/2520 5774/10867/2520 5772/10863/2493 5789/10923/2493 +f 5787/10924/954 5776/10925/954 5774/10926/2520 5788/10927/2520 +f 5786/10928/1135 5736/10929/1135 5776/10925/954 5787/10924/954 +s 2 +f 5689/10744/2453 5688/10743/2452 5718/10930/2496 5716/10931/2540 +f 5688/10743/2452 5742/10819/2467 5764/10932/2498 5718/10930/2496 +f 5742/10819/2467 5760/10849/2478 5765/10933/2499 5764/10932/2498 +s 8 +f 5760/10886/2486 5761/10885/2485 5762/10934/2500 5765/10935/2500 +s 2 +f 5761/10850/2479 5743/10820/2468 5763/10936/2501 5762/10937/2502 +f 5743/10820/2468 5690/10745/2455 5719/10938/2522 5763/10936/2501 +f 5690/10745/2455 5691/10746/2508 5717/10939/2523 5719/10938/2522 +f 5691/10746/2508 5713/10784/2464 5714/10940/2505 5717/10939/2523 +s 8 +f 5713/10881/2484 5712/10880/2483 5715/10941/2506 5714/10942/2506 +s 2 +f 5712/10783/2537 5689/10744/2453 5716/10931/2540 5715/10943/2507 +s 1 +f 5791/10944/795 5792/10945/795 5793/10946/795 5794/10947/795 +f 5795/10948/796 5796/10949/796 5797/10950/796 5798/10951/796 +s 2 +f 5796/10949/797 5799/10952/2452 5800/10953/2453 5797/10950/2454 +f 5801/10954/2455 5791/10944/801 5794/10947/2456 5802/10955/2508 +s 4 +f 5803/10956/803 5793/10957/2509 5804/10958/2510 5805/10959/2458 +f 5806/10960/807 5803/10956/803 5805/10959/2458 5807/10961/808 +f 5795/10962/2511 5798/10963/2460 5808/10964/811 5809/10965/2511 +f 5792/10966/2512 5810/10967/2513 5804/10958/2510 5793/10957/2509 +f 5806/10960/807 5807/10961/808 5808/10964/811 5798/10963/2460 +s 1 +f 5808/10968/815 5811/10969/815 5812/10970/815 5809/10971/815 +s 2 +f 5807/10972/816 5813/10973/817 5811/10974/818 5808/10975/819 +s 1 +f 5805/10976/820 5814/10977/821 5813/10973/821 5807/10972/820 +s 2 +f 5805/10976/822 5804/10978/823 5815/10979/824 5814/10977/2541 +s 1 +f 5804/10980/826 5810/10981/826 5816/10982/826 5815/10983/826 +s 2 +f 5793/10946/827 5817/10984/827 5818/10985/2535 5794/10947/2456 +s 4 +f 5803/10956/803 5819/10986/1242 5817/10987/831 5793/10957/2509 +f 5806/10960/807 5820/10988/2461 5819/10986/1242 5803/10956/803 +f 5798/10963/2460 5821/10989/2462 5820/10988/2461 5806/10960/807 +s 2 +f 5797/10950/2454 5822/10990/2514 5821/10991/836 5798/10951/836 +f 5800/10953/2453 5823/10992/2463 5822/10990/2514 5797/10950/2454 +f 5794/10947/2456 5818/10985/2535 5824/10993/2464 5802/10955/2508 +s 1 +f 5825/10994/396 5826/10995/396 5827/10996/396 5828/10997/396 +f 5828/10997/396 5827/10996/396 5829/10998/396 5830/10999/396 +f 5831/11000/844 5832/11001/845 5812/10970/815 5811/10969/815 +s 2 +f 5833/11002/846 5831/11003/847 5811/10974/818 5813/10973/817 +s 1 +f 5834/11004/1131 5833/11002/1131 5813/10973/821 5814/10977/821 +s 2 +f 5835/11005/849 5834/11004/850 5814/10977/2541 5815/10979/824 +s 1 +f 5836/11006/851 5835/11007/852 5815/10983/826 5816/10982/826 +f 5837/11008/853 5838/11009/854 5839/11010/855 5840/11011/856 +s 2 +f 5841/11012/857 5837/11013/858 5840/11014/859 5842/11015/860 +s 1 +f 5843/11016/861 5841/11012/861 5842/11015/862 5844/11017/862 +s 2 +f 5845/11018/863 5843/11016/864 5844/11017/865 5846/11019/866 +s 1 +f 5847/11020/868 5845/11021/868 5846/11022/869 5848/11023/870 +f 5831/11000/844 5840/11011/856 5839/11010/855 5832/11001/845 +s 2 +f 5833/11002/846 5842/11015/860 5840/11014/859 5831/11003/847 +s 1 +f 5834/11004/1131 5844/11017/862 5842/11015/862 5833/11002/1131 +s 2 +f 5835/11005/849 5846/11019/866 5844/11017/865 5834/11004/850 +s 1 +f 5836/11006/851 5848/11023/870 5846/11022/869 5835/11007/852 +f 5791/10944/795 5849/11024/795 5850/11025/795 5792/10945/795 +f 5795/10948/796 5851/11026/796 5852/11027/796 5796/10949/796 +s 2 +f 5796/10949/797 5852/11027/2466 5853/11028/2467 5799/10952/2452 +f 5801/10954/2455 5854/11029/2468 5849/11024/2469 5791/10944/801 +s 4 +f 5855/11030/873 5856/11031/2470 5857/11032/2515 5850/11033/2471 +f 5858/11034/877 5859/11035/878 5856/11031/2470 5855/11030/873 +f 5795/10962/2511 5809/10965/2511 5860/11036/879 5851/11037/2473 +f 5792/10966/2512 5850/11033/2471 5857/11032/2515 5810/10967/2513 +f 5858/11034/877 5851/11037/2473 5860/11036/879 5859/11035/878 +s 2 +f 5860/11038/881 5809/10971/881 5812/10970/881 5861/11039/881 +s 1 +f 5859/11040/882 5860/11041/883 5861/11042/884 5862/11043/885 +s 2 +f 5856/11044/886 5859/11040/886 5862/11043/887 5863/11045/887 +s 1 +f 5856/11044/888 5863/11045/2542 5864/11046/890 5857/11047/891 +s 2 +f 5857/11048/892 5864/11049/892 5816/10982/892 5810/10981/892 +f 5850/11025/893 5849/11024/2469 5865/11050/2474 5866/11051/893 +s 4 +f 5855/11030/873 5850/11033/2471 5866/11052/896 5867/11053/1247 +f 5858/11034/877 5855/11030/873 5867/11053/1247 5868/11054/2476 +f 5851/11037/2473 5858/11034/877 5868/11054/2476 5869/11055/2477 +s 2 +f 5852/11027/2466 5851/11026/901 5869/11056/901 5870/11057/2516 +f 5853/11028/2467 5852/11027/2466 5870/11057/2516 5871/11058/2478 +f 5849/11024/2469 5854/11029/2468 5872/11059/2479 5865/11050/2474 +s 1 +f 5873/11060/396 5874/11061/396 5875/11062/396 5876/11063/396 +f 5874/11061/396 5830/10999/396 5829/10998/396 5875/11062/396 +s 2 +f 5877/11064/909 5861/11039/881 5812/10970/881 5832/11001/910 +s 1 +f 5878/11065/911 5862/11043/885 5861/11042/884 5877/11066/912 +s 2 +f 5879/11067/913 5863/11045/887 5862/11043/887 5878/11065/913 +s 1 +f 5880/11068/914 5864/11046/890 5863/11045/2542 5879/11067/915 +s 2 +f 5836/11006/916 5816/10982/892 5864/11049/892 5880/11069/917 +f 5881/11070/918 5882/11071/2543 5839/11010/920 5838/11009/921 +s 1 +f 5883/11072/922 5884/11073/2517 5882/11074/924 5881/11075/925 +s 2 +f 5885/11076/926 5886/11077/927 5884/11073/927 5883/11072/926 +s 1 +f 5887/11078/928 5888/11079/929 5886/11077/2482 5885/11076/931 +s 2 +f 5847/11020/935 5848/11023/933 5888/11080/934 5887/11081/935 +f 5877/11064/909 5832/11001/910 5839/11010/920 5882/11071/2543 +s 1 +f 5878/11065/911 5877/11066/912 5882/11074/924 5884/11073/2517 +s 2 +f 5879/11067/913 5878/11065/913 5884/11073/927 5886/11077/927 +s 1 +f 5880/11068/914 5879/11067/915 5886/11077/2482 5888/11079/929 +s 2 +f 5836/11006/916 5880/11069/917 5888/11080/934 5848/11023/933 +s 8 +f 5818/11082/187 5817/11083/187 5889/11084/187 +f 5817/11083/187 5819/11085/187 5889/11084/187 +f 5819/11085/187 5820/11086/187 5889/11084/187 +f 5820/11086/187 5821/11087/187 5889/11084/187 +f 5821/11087/187 5822/11088/187 5889/11084/187 +f 5822/11088/187 5823/11089/2483 5889/11084/187 +f 5823/11089/2483 5824/11090/2484 5889/11084/187 +f 5824/11090/2484 5818/11082/187 5889/11084/187 +f 5866/11091/189 5865/11092/189 5890/11093/189 +f 5865/11092/189 5872/11094/2485 5890/11093/189 +f 5872/11094/2485 5871/11095/2486 5890/11093/189 +f 5871/11095/2486 5870/11096/189 5890/11093/189 +f 5870/11096/189 5869/11097/189 5890/11093/189 +f 5869/11097/189 5868/11098/189 5890/11093/189 +f 5868/11098/189 5867/11099/189 5890/11093/189 +f 5867/11099/189 5866/11091/189 5890/11093/189 +s 1 +f 5891/11100/944 5892/11101/937 5893/11102/300 +f 5892/11101/937 5894/11103/938 5893/11102/300 +f 5894/11103/938 5895/11104/939 5893/11102/300 +f 5895/11104/939 5896/11105/940 5893/11102/300 +f 5896/11105/940 5897/11106/941 5893/11102/300 +f 5897/11106/941 5898/11107/941 5893/11102/300 +f 5898/11107/941 5899/11108/942 5893/11102/300 +f 5899/11108/942 5900/11109/943 5893/11102/300 +f 5900/11109/943 5901/11110/944 5893/11102/300 +f 5901/11110/944 5891/11100/944 5893/11102/300 +s 4 +f 5891/11111/2487 5838/11112/2487 5837/11113/946 5892/11114/2488 +f 5892/11114/2488 5837/11113/946 5841/11115/2489 5894/11116/2489 +f 5894/11117/2489 5841/11012/2489 5843/11016/2490 5895/11016/2490 +f 5895/11118/2490 5843/11119/2490 5845/11120/949 5896/11121/949 +f 5896/11121/949 5845/11120/949 5847/11122/950 5897/11123/950 +f 5901/11124/951 5881/11125/2492 5838/11112/2487 5891/11111/2487 +f 5900/11126/2493 5883/11127/2493 5881/11128/2492 5901/11129/951 +f 5899/11130/2520 5885/11076/2544 5883/11072/2493 5900/11131/2493 +f 5898/11132/954 5887/11133/954 5885/11134/2544 5899/11135/2520 +f 5897/11136/950 5847/11137/950 5887/11133/954 5898/11132/954 +s 2 +f 5800/10953/2453 5799/10952/2452 5829/11138/2496 5827/11139/2540 +f 5799/10952/2452 5853/11028/2467 5875/11140/2498 5829/11138/2496 +f 5853/11028/2467 5871/11058/2478 5876/11141/2499 5875/11140/2498 +s 8 +f 5871/11095/2486 5872/11094/2485 5873/11142/2500 5876/11143/2500 +s 2 +f 5872/11059/2479 5854/11029/2468 5874/11144/2501 5873/11145/2502 +f 5854/11029/2468 5801/10954/2455 5830/11146/2522 5874/11144/2501 +f 5801/10954/2455 5802/10955/2508 5828/11147/2523 5830/11146/2522 +f 5802/10955/2508 5824/10993/2464 5825/11148/2505 5828/11147/2523 +s 8 +f 5824/11090/2484 5823/11089/2483 5826/11149/2506 5825/11150/2506 +s 2 +f 5823/10992/2463 5800/10953/2453 5827/11139/2540 5826/11151/2507 +s 1 +f 5902/11152/1468 5903/11153/604 5904/11154/604 5905/11155/1468 +f 5906/11156/740 5902/11152/1468 5905/11155/1468 5907/11157/740 +f 5908/11158/471 5906/11156/740 5907/11157/740 5909/11159/471 +f 5910/11160/738 5908/11161/471 5909/11162/471 5911/11163/738 +f 5912/11164/187 5910/11160/738 5911/11163/738 5913/11165/2525 +f 5914/11166/2526 5915/11167/737 5912/11164/187 5913/11165/2525 +f 5916/11168/2383 5917/11169/736 5915/11167/737 5914/11166/2526 +f 5918/11170/1557 5919/11171/2384 5917/11172/736 5916/11173/2383 +f 5920/11174/300 5921/11175/300 5922/11176/300 5923/11177/974 +f 5924/11178/974 5925/11179/974 5926/11180/2385 5927/11181/2386 +f 5928/11182/1468 5929/11183/604 5903/11153/604 5902/11152/1468 +f 5930/11184/740 5928/11182/1468 5902/11152/1468 5906/11156/740 +f 5931/11185/471 5930/11184/740 5906/11156/740 5908/11158/471 +f 5932/11186/738 5931/11187/471 5908/11161/471 5910/11160/738 +f 5933/11188/187 5932/11186/738 5910/11160/738 5912/11164/187 +f 5915/11167/737 5934/11189/737 5933/11188/187 5912/11164/187 +f 5917/11169/736 5935/11190/736 5934/11189/737 5915/11167/737 +f 5919/11171/2384 5936/11191/2387 5935/11192/736 5917/11172/736 +f 5926/11180/2385 5937/11193/2388 5936/11191/2387 5919/11171/2384 +f 5925/11179/974 5938/11194/974 5937/11193/2388 5926/11180/2385 +s 2 +f 5919/11195/189 5918/11196/189 5939/11197/189 +f 5927/11198/187 5926/11199/187 5940/11200/187 5941/11201/187 +s 4 +f 5919/11202/428 5939/11203/428 5940/11204/428 5926/11205/428 +s 2 +f 5942/11206/189 5923/11207/189 5922/11208/189 5939/11197/189 +f 5921/11209/187 5920/11210/187 5941/11201/187 5940/11200/187 +s 4 +f 5939/11203/428 5922/11211/428 5921/11212/428 5940/11204/428 +f 5942/11213/2389 5943/11214/2390 5944/11215/2391 5923/11216/2545 +f 5943/11214/2390 5942/11213/2389 5945/11217/2393 +s 1 +f 5946/11218/743 5947/11219/1464 5904/11154/604 5903/11153/604 +f 5948/11220/745 5949/11221/744 5947/11219/1464 5946/11218/743 +f 5950/11222/474 5951/11223/485 5949/11221/744 5948/11220/745 +f 5952/11224/2118 5953/11225/2118 5951/11226/485 5950/11227/474 +f 5954/11228/189 5955/11229/2394 5953/11225/2118 5952/11224/2118 +f 5956/11230/2546 5955/11229/2394 5954/11228/189 5957/11231/1466 +f 5958/11232/2528 5956/11230/2546 5957/11231/1466 5959/11233/748 +f 5960/11234/1638 5958/11235/2528 5959/11236/748 5961/11237/2397 +f 5962/11238/974 5963/11239/974 5964/11240/974 5965/11241/974 +f 5924/11178/974 5966/11242/2398 5967/11243/2399 5925/11179/974 +f 5968/11244/743 5946/11218/743 5903/11153/604 5929/11183/604 +f 5969/11245/745 5948/11220/745 5946/11218/743 5968/11244/743 +f 5970/11246/485 5950/11222/474 5948/11220/745 5969/11245/745 +f 5971/11247/2118 5952/11224/2118 5950/11227/474 5970/11248/485 +f 5972/11249/189 5954/11228/189 5952/11224/2118 5971/11247/2118 +f 5957/11231/1466 5954/11228/189 5972/11249/189 5973/11250/1466 +f 5959/11233/748 5957/11231/1466 5973/11250/1466 5974/11251/748 +f 5961/11237/2397 5959/11236/748 5974/11252/748 5975/11253/2400 +f 5967/11243/2399 5961/11237/2397 5975/11253/2400 5976/11254/2401 +f 5925/11179/974 5967/11243/2399 5976/11254/2401 5938/11194/974 +s 2 +f 5961/11255/187 5977/11256/187 5960/11257/187 +f 5966/11258/189 5978/11259/395 5979/11260/189 5967/11261/189 +s 4 +f 5961/11262/428 5967/11263/428 5979/11264/428 5977/11265/428 +s 2 +f 5980/11266/187 5977/11256/187 5964/11267/187 5963/11268/187 +f 5965/11269/395 5979/11260/189 5978/11259/395 5962/11270/395 +s 4 +f 5977/11265/428 5979/11264/428 5965/11271/428 5964/11272/428 +f 5980/11273/2402 5963/11274/2403 5981/11275/2404 5982/11276/2405 +f 5982/11276/2405 5983/11277/2406 5980/11273/2402 +f 5984/11278/428 5985/11279/428 5986/11280/428 +f 5978/11281/2407 5987/11282/2408 5988/11283/2409 5962/11284/2410 +f 5963/11274/2403 5962/11284/2410 5989/11285/2411 5990/11286/2412 +f 5966/11287/2413 5924/11288/2547 5987/11282/2408 5978/11281/2407 +f 5991/11289/428 5990/11286/2412 5989/11285/2411 5992/11290/428 +f 5993/11291/428 5991/11289/428 5992/11290/428 5985/11279/428 +f 5941/11292/2407 5920/11293/2548 5988/11283/2409 5987/11282/2408 +f 5988/11283/2409 5920/11293/2548 5989/11285/2411 +f 5989/11285/2411 5994/11294/2416 5995/11295/428 5992/11290/428 +f 5992/11290/428 5995/11295/428 5996/11296/428 5985/11279/428 +f 5927/11297/2417 5941/11292/2407 5987/11282/2408 5924/11288/2547 +f 5984/11278/428 5997/11298/428 5985/11279/428 +f 5985/11279/428 5998/11299/428 5986/11280/428 +f 5985/11279/428 5996/11296/428 5998/11299/428 +f 5997/11298/428 5999/11300/428 5985/11279/428 +f 5999/11300/428 5993/11291/428 5985/11279/428 +s 8 +f 5904/11154/2549 5984/11301/2419 5986/11302/2550 5905/11155/2551 +f 5905/11303/2551 5986/11304/2550 5998/11305/2552 5907/11306/2553 +f 5907/11306/2553 5998/11305/2552 5996/11307/2532 5909/11308/2425 +f 5909/11308/2425 5996/11307/2532 5995/11309/2426 5911/11310/2427 +f 5911/11310/2427 5995/11309/2426 5994/11311/2428 5913/11312/2429 +f 5913/11313/2429 5994/11314/2428 5944/11315/2430 5914/11316/2431 +f 5914/11316/2431 5944/11315/2430 5943/11317/2432 5916/11318/2433 +f 5916/11318/2433 5943/11317/2432 5945/11319/2554 5918/11320/2435 +f 5947/11219/2555 5997/11321/2556 5984/11301/2419 5904/11154/2549 +f 5949/11322/2557 5999/11323/2558 5997/11324/2556 5947/11325/2555 +f 5951/11326/2440 5993/11327/2441 5999/11328/2558 5949/11329/2557 +f 5953/11330/2442 5991/11331/2443 5993/11327/2441 5951/11326/2440 +f 5955/11332/2444 5990/11333/2445 5991/11331/2443 5953/11330/2442 +f 5956/11334/2446 5981/11335/2447 5990/11336/2445 5955/11337/2444 +f 5958/11338/2559 5982/11339/2449 5981/11335/2447 5956/11334/2446 +f 5960/11340/2560 5983/11341/2561 5982/11339/2449 5958/11338/2559 +s 2 +f 5945/11342/189 5942/11206/189 5939/11197/189 +f 5918/11196/189 5945/11342/189 5939/11197/189 +f 5977/11256/187 5983/11343/187 5960/11257/187 +f 5977/11256/187 5980/11266/187 5983/11343/187 +f 5929/11344/754 5928/11345/754 6000/11346/752 +f 5928/11345/754 5930/11347/754 6000/11346/752 +f 5930/11347/754 5931/11348/754 6000/11346/752 +f 5931/11348/754 5932/11349/455 6000/11346/752 +f 5932/11349/455 5933/11350/754 6000/11346/752 +f 5933/11350/754 5934/11351/754 6000/11346/752 +f 5934/11351/754 5935/11352/455 6000/11346/752 +f 5935/11352/455 5936/11353/455 6000/11346/752 +f 5936/11353/455 5937/11354/455 6000/11346/752 +f 5937/11354/455 5938/11355/752 6000/11346/752 +f 5938/11355/752 5976/11356/752 6000/11346/752 +f 5976/11356/752 5975/11357/752 6000/11346/752 +f 5975/11357/752 5974/11358/753 6000/11346/752 +f 5974/11358/753 5973/11359/753 6000/11346/752 +f 5973/11359/753 5972/11360/752 6000/11346/752 +f 5972/11360/752 5971/11361/752 6000/11346/752 +f 5971/11361/752 5970/11362/752 6000/11346/752 +f 5970/11362/752 5969/11363/753 6000/11346/752 +f 5969/11363/753 5968/11364/753 6000/11346/752 +f 5968/11364/753 5929/11344/754 6000/11346/752 +s 1 +f 6001/11365/795 6002/11366/795 6003/11367/795 6004/11368/795 +f 6005/11369/796 6006/11370/796 6007/11371/796 6008/11372/796 +s 2 +f 6006/11370/797 6009/11373/2452 6010/11374/2453 6007/11371/2454 +f 6011/11375/2455 6001/11365/801 6004/11368/2456 6012/11376/2508 +s 4 +f 6013/11377/803 6003/11378/2509 6014/11379/2510 6015/11380/806 +f 6016/11381/807 6013/11377/803 6015/11380/806 6017/11382/808 +f 6005/11383/2511 6008/11384/2460 6018/11385/2562 6019/11386/2511 +f 6002/11387/2513 6020/11388/2513 6014/11379/2510 6003/11378/2509 +f 6016/11381/807 6017/11382/808 6018/11385/2562 6008/11384/2460 +s 1 +f 6018/11389/815 6021/11390/815 6022/11391/815 6019/11392/815 +s 2 +f 6017/11393/816 6023/11394/817 6021/11395/818 6018/11396/819 +s 1 +f 6015/11397/820 6024/11398/821 6023/11394/821 6017/11393/820 +s 2 +f 6015/11397/822 6014/11399/823 6025/11400/824 6024/11398/2541 +s 1 +f 6014/11401/826 6020/11402/826 6026/11403/826 6025/11404/826 +s 2 +f 6003/11367/827 6027/11405/827 6028/11406/2563 6004/11368/2456 +s 4 +f 6013/11377/803 6029/11407/1242 6027/11408/2564 6003/11378/2509 +f 6016/11381/807 6030/11409/2461 6029/11407/1242 6013/11377/803 +f 6008/11384/2460 6031/11410/2565 6030/11409/2461 6016/11381/807 +s 2 +f 6007/11371/2454 6032/11411/2514 6031/11412/836 6008/11372/836 +f 6010/11374/2453 6033/11413/2463 6032/11411/2514 6007/11371/2454 +f 6004/11368/2456 6028/11406/2563 6034/11414/2464 6012/11376/2508 +s 1 +f 6035/11415/396 6036/11416/396 6037/11417/396 6038/11418/396 +f 6038/11418/396 6037/11417/396 6039/11419/396 6040/11420/396 +f 6041/11421/844 6042/11422/845 6022/11391/815 6021/11390/815 +s 2 +f 6043/11423/846 6041/11424/847 6021/11395/818 6023/11394/817 +s 1 +f 6044/11425/848 6043/11423/848 6023/11394/821 6024/11398/821 +s 2 +f 6045/11426/849 6044/11425/850 6024/11398/2541 6025/11400/824 +s 1 +f 6046/11427/851 6045/11428/852 6025/11404/826 6026/11403/826 +f 6047/11429/853 6048/11430/854 6049/11431/855 6050/11432/856 +s 2 +f 6051/11433/857 6047/11434/858 6050/11435/859 6052/11436/2566 +s 1 +f 6053/11437/861 6051/11433/861 6052/11436/862 6054/11438/862 +s 2 +f 6055/11439/863 6053/11437/864 6054/11438/865 6056/11440/866 +s 1 +f 6057/11441/867 6055/11442/868 6056/11443/869 6058/11444/870 +f 6041/11421/844 6050/11432/856 6049/11431/855 6042/11422/845 +s 2 +f 6043/11423/846 6052/11436/2566 6050/11435/859 6041/11424/847 +s 1 +f 6044/11425/848 6054/11438/862 6052/11436/862 6043/11423/848 +s 2 +f 6045/11426/849 6056/11440/866 6054/11438/865 6044/11425/850 +s 1 +f 6046/11427/851 6058/11444/870 6056/11443/869 6045/11428/852 +f 6001/11365/795 6059/11445/795 6060/11446/795 6002/11366/795 +f 6005/11369/796 6061/11447/796 6062/11448/796 6006/11370/796 +s 2 +f 6006/11370/797 6062/11448/2466 6063/11449/2467 6009/11373/2452 +f 6011/11375/2455 6064/11450/2468 6059/11445/2567 6001/11365/801 +s 4 +f 6065/11451/873 6066/11452/874 6067/11453/2515 6060/11454/2471 +f 6068/11455/877 6069/11456/878 6066/11452/874 6065/11451/873 +f 6005/11383/2511 6019/11386/2511 6070/11457/2568 6061/11458/2473 +f 6002/11387/2513 6060/11454/2471 6067/11453/2515 6020/11388/2513 +f 6068/11455/877 6061/11458/2473 6070/11457/2568 6069/11456/878 +s 2 +f 6070/11459/881 6019/11392/881 6022/11391/881 6071/11460/881 +s 1 +f 6069/11461/882 6070/11462/883 6071/11463/884 6072/11464/885 +s 2 +f 6066/11465/2569 6069/11461/2569 6072/11464/887 6073/11466/887 +s 1 +f 6066/11465/888 6073/11466/889 6074/11467/2570 6067/11468/891 +s 2 +f 6067/11469/892 6074/11470/892 6026/11403/892 6020/11402/892 +f 6060/11446/893 6059/11445/2567 6075/11471/2474 6076/11472/893 +s 4 +f 6065/11451/873 6060/11454/2471 6076/11473/2571 6077/11474/1247 +f 6068/11455/877 6065/11451/873 6077/11474/1247 6078/11475/2572 +f 6061/11458/2473 6068/11455/877 6078/11475/2572 6079/11476/2573 +s 2 +f 6062/11448/2466 6061/11447/901 6079/11477/901 6080/11478/2516 +f 6063/11449/2467 6062/11448/2466 6080/11478/2516 6081/11479/2478 +f 6059/11445/2567 6064/11450/2468 6082/11480/2479 6075/11471/2474 +s 1 +f 6083/11481/396 6084/11482/396 6085/11483/396 6086/11484/396 +f 6084/11482/396 6040/11420/396 6039/11419/396 6085/11483/396 +s 2 +f 6087/11485/909 6071/11460/881 6022/11391/881 6042/11422/910 +s 1 +f 6088/11486/911 6072/11464/885 6071/11463/884 6087/11487/2480 +s 2 +f 6089/11488/1126 6073/11466/887 6072/11464/887 6088/11486/1126 +s 1 +f 6090/11489/914 6074/11467/2570 6073/11466/889 6089/11488/915 +s 2 +f 6046/11427/916 6026/11403/892 6074/11470/892 6090/11490/917 +f 6091/11491/918 6092/11492/919 6049/11431/920 6048/11430/921 +s 1 +f 6093/11493/922 6094/11494/923 6092/11495/924 6091/11496/925 +s 2 +f 6095/11497/926 6096/11498/927 6094/11494/927 6093/11493/926 +s 1 +f 6097/11499/928 6098/11500/929 6096/11498/930 6095/11497/931 +s 2 +f 6057/11441/935 6058/11444/933 6098/11501/934 6097/11502/935 +f 6087/11485/909 6042/11422/910 6049/11431/920 6092/11492/919 +s 1 +f 6088/11486/911 6087/11487/2480 6092/11495/924 6094/11494/923 +s 2 +f 6089/11488/1126 6088/11486/1126 6094/11494/927 6096/11498/927 +s 1 +f 6090/11489/914 6089/11488/915 6096/11498/930 6098/11500/929 +s 2 +f 6046/11427/916 6090/11490/917 6098/11501/934 6058/11444/933 +s 8 +f 6028/11503/187 6027/11504/187 6099/11505/187 +f 6027/11504/187 6029/11506/187 6099/11505/187 +f 6029/11506/187 6030/11507/187 6099/11505/187 +f 6030/11507/187 6031/11508/187 6099/11505/187 +f 6031/11508/187 6032/11509/187 6099/11505/187 +f 6032/11509/187 6033/11510/2483 6099/11505/187 +f 6033/11510/2483 6034/11511/2484 6099/11505/187 +f 6034/11511/2484 6028/11503/187 6099/11505/187 +f 6076/11512/189 6075/11513/189 6100/11514/189 +f 6075/11513/189 6082/11515/2485 6100/11514/189 +f 6082/11515/2485 6081/11516/2486 6100/11514/189 +f 6081/11516/2486 6080/11517/189 6100/11514/189 +f 6080/11517/189 6079/11518/189 6100/11514/189 +f 6079/11518/189 6078/11519/189 6100/11514/189 +f 6078/11519/189 6077/11520/189 6100/11514/189 +f 6077/11520/189 6076/11512/189 6100/11514/189 +s 1 +f 6101/11521/974 6102/11522/974 6103/11523/974 +f 6102/11522/974 6104/11524/974 6103/11523/974 +f 6104/11524/974 6105/11525/974 6103/11523/974 +f 6105/11525/974 6106/11526/974 6103/11523/974 +f 6106/11526/974 6107/11527/974 6103/11523/974 +f 6107/11527/974 6108/11528/974 6103/11523/974 +f 6108/11528/974 6109/11529/974 6103/11523/974 +f 6109/11529/974 6110/11530/974 6103/11523/974 +f 6110/11530/974 6111/11531/974 6103/11523/974 +f 6111/11531/974 6101/11521/974 6103/11523/974 +s 4 +f 6101/11532/1249 6048/11533/1249 6047/11534/1250 6102/11535/946 +f 6102/11535/946 6047/11534/1250 6051/11536/947 6104/11537/947 +f 6104/11538/947 6051/11433/947 6053/11437/948 6105/11539/948 +f 6105/11540/948 6053/11541/948 6055/11542/1253 6106/11543/1253 +f 6106/11544/1253 6055/11442/1253 6057/11441/1254 6107/11545/1254 +f 6111/11546/1255 6091/11547/951 6048/11533/1249 6101/11532/1249 +f 6110/11548/952 6093/11549/952 6091/11550/951 6111/11551/1255 +f 6109/11552/953 6095/11497/953 6093/11493/952 6110/11553/952 +f 6108/11554/1257 6097/11555/1257 6095/11556/953 6109/11557/953 +f 6107/11558/1254 6057/11559/1254 6097/11555/1257 6108/11554/1257 +s 2 +f 6010/11374/2453 6009/11373/2452 6039/11560/2496 6037/11561/2497 +f 6009/11373/2452 6063/11449/2467 6085/11562/2574 6039/11560/2496 +f 6063/11449/2467 6081/11479/2478 6086/11563/2499 6085/11562/2574 +s 8 +f 6081/11516/2486 6082/11515/2485 6083/11564/2500 6086/11565/2500 +s 2 +f 6082/11480/2479 6064/11450/2468 6084/11566/2501 6083/11567/2502 +f 6064/11450/2468 6011/11375/2455 6040/11568/2503 6084/11566/2501 +f 6011/11375/2455 6012/11376/2508 6038/11569/2504 6040/11568/2503 +f 6012/11376/2508 6034/11414/2464 6035/11570/2505 6038/11569/2504 +s 8 +f 6034/11511/2484 6033/11510/2483 6036/11571/2506 6035/11572/2506 +s 2 +f 6033/11413/2463 6010/11374/2453 6037/11561/2497 6036/11573/2507 +s 1 +f 6112/11574/795 6113/11575/795 6114/11576/795 6115/11577/795 +f 6116/11578/796 6117/11579/796 6118/11580/796 6119/11581/796 +s 2 +f 6117/11579/797 6120/11582/2452 6121/11583/2453 6118/11580/2454 +f 6122/11584/2455 6112/11574/801 6115/11577/2456 6123/11585/2508 +s 4 +f 6124/11586/803 6114/11587/2509 6125/11588/2510 6126/11589/806 +f 6127/11590/807 6124/11586/803 6126/11589/806 6128/11591/808 +f 6116/11592/2511 6119/11593/2460 6129/11594/2562 6130/11595/2511 +f 6113/11596/2512 6131/11597/2513 6125/11588/2510 6114/11587/2509 +f 6127/11590/807 6128/11591/808 6129/11594/2562 6119/11593/2460 +s 1 +f 6129/11598/815 6132/11599/815 6133/11600/815 6130/11601/815 +s 2 +f 6128/11602/816 6134/11603/817 6132/11604/818 6129/11605/819 +s 1 +f 6126/11606/820 6135/11607/821 6134/11603/821 6128/11602/820 +s 2 +f 6126/11606/822 6125/11608/823 6136/11609/2575 6135/11607/825 +s 1 +f 6125/11610/826 6131/11611/826 6137/11612/826 6136/11613/826 +s 2 +f 6114/11576/827 6138/11614/827 6139/11615/2535 6115/11577/2456 +s 4 +f 6124/11586/803 6140/11616/1242 6138/11617/2564 6114/11587/2509 +f 6127/11590/807 6141/11618/2461 6140/11616/1242 6124/11586/803 +f 6119/11593/2460 6142/11619/2565 6141/11618/2461 6127/11590/807 +s 2 +f 6118/11580/2454 6143/11620/2514 6142/11621/836 6119/11581/836 +f 6121/11583/2453 6144/11622/2463 6143/11620/2514 6118/11580/2454 +f 6115/11577/2456 6139/11615/2535 6145/11623/2464 6123/11585/2508 +s 1 +f 6146/11624/396 6147/11625/396 6148/11626/396 6149/11627/396 +f 6149/11627/396 6148/11626/396 6150/11628/396 6151/11629/396 +f 6152/11630/844 6153/11631/845 6133/11600/815 6132/11599/815 +s 2 +f 6154/11632/846 6152/11633/847 6132/11604/818 6134/11603/817 +s 1 +f 6155/11634/848 6154/11632/848 6134/11603/821 6135/11607/821 +s 2 +f 6156/11635/849 6155/11634/850 6135/11607/825 6136/11609/2575 +s 1 +f 6157/11636/851 6156/11637/852 6136/11613/826 6137/11612/826 +f 6158/11638/853 6159/11639/854 6160/11640/855 6161/11641/856 +s 2 +f 6162/11642/857 6158/11643/858 6161/11644/859 6163/11645/2576 +s 1 +f 6164/11646/861 6162/11642/861 6163/11645/862 6165/11647/862 +s 2 +f 6166/11648/863 6164/11646/864 6165/11647/865 6167/11649/866 +s 1 +f 6168/11650/868 6166/11651/868 6167/11652/869 6169/11653/870 +f 6152/11630/844 6161/11641/856 6160/11640/855 6153/11631/845 +s 2 +f 6154/11632/846 6163/11645/2576 6161/11644/859 6152/11633/847 +s 1 +f 6155/11634/848 6165/11647/862 6163/11645/862 6154/11632/848 +s 2 +f 6156/11635/849 6167/11649/866 6165/11647/865 6155/11634/850 +s 1 +f 6157/11636/851 6169/11653/870 6167/11652/869 6156/11637/852 +f 6112/11574/795 6170/11654/795 6171/11655/795 6113/11575/795 +f 6116/11578/796 6172/11656/796 6173/11657/796 6117/11579/796 +s 2 +f 6117/11579/797 6173/11657/2466 6174/11658/2467 6120/11582/2452 +f 6122/11584/2455 6175/11659/2468 6170/11654/2567 6112/11574/801 +s 4 +f 6176/11660/873 6177/11661/874 6178/11662/2515 6171/11663/2471 +f 6179/11664/877 6180/11665/878 6177/11661/874 6176/11660/873 +f 6116/11592/2511 6130/11595/2511 6181/11666/2568 6172/11667/2473 +f 6113/11596/2512 6171/11663/2471 6178/11662/2515 6131/11597/2513 +f 6179/11664/877 6172/11667/2473 6181/11666/2568 6180/11665/878 +s 2 +f 6181/11668/881 6130/11601/881 6133/11600/881 6182/11669/881 +s 1 +f 6180/11670/882 6181/11671/883 6182/11672/884 6183/11673/885 +s 2 +f 6177/11674/886 6180/11670/886 6183/11673/887 6184/11675/887 +s 1 +f 6177/11674/888 6184/11675/2542 6185/11676/890 6178/11677/891 +s 2 +f 6178/11678/892 6185/11679/892 6137/11612/892 6131/11611/892 +f 6171/11655/893 6170/11654/2567 6186/11680/2474 6187/11681/893 +s 4 +f 6176/11660/873 6171/11663/2471 6187/11682/2577 6188/11683/1247 +f 6179/11664/877 6176/11660/873 6188/11683/1247 6189/11684/2476 +f 6172/11667/2473 6179/11664/877 6189/11684/2476 6190/11685/2573 +s 2 +f 6173/11657/2466 6172/11656/901 6190/11686/901 6191/11687/2516 +f 6174/11658/2467 6173/11657/2466 6191/11687/2516 6192/11688/2478 +f 6170/11654/2567 6175/11659/2468 6193/11689/2479 6186/11680/2474 +s 1 +f 6194/11690/396 6195/11691/396 6196/11692/396 6197/11693/396 +f 6195/11691/396 6151/11629/396 6150/11628/396 6196/11692/396 +s 2 +f 6198/11694/909 6182/11669/881 6133/11600/881 6153/11631/910 +s 1 +f 6199/11695/911 6183/11673/885 6182/11672/884 6198/11696/912 +s 2 +f 6200/11697/913 6184/11675/887 6183/11673/887 6199/11695/913 +s 1 +f 6201/11698/914 6185/11676/890 6184/11675/2542 6200/11697/915 +s 2 +f 6157/11636/916 6137/11612/892 6185/11679/892 6201/11699/917 +f 6202/11700/918 6203/11701/919 6160/11640/920 6159/11639/921 +s 1 +f 6204/11702/922 6205/11703/2517 6203/11704/924 6202/11705/925 +s 2 +f 6206/11706/926 6207/11707/927 6205/11703/927 6204/11702/926 +s 1 +f 6208/11708/928 6209/11709/929 6207/11707/930 6206/11706/931 +s 2 +f 6168/11650/935 6169/11653/933 6209/11710/934 6208/11711/935 +f 6198/11694/909 6153/11631/910 6160/11640/920 6203/11701/919 +s 1 +f 6199/11695/911 6198/11696/912 6203/11704/924 6205/11703/2517 +s 2 +f 6200/11697/913 6199/11695/913 6205/11703/927 6207/11707/927 +s 1 +f 6201/11698/914 6200/11697/915 6207/11707/930 6209/11709/929 +s 2 +f 6157/11636/916 6201/11699/917 6209/11710/934 6169/11653/933 +s 8 +f 6139/11712/187 6138/11713/187 6210/11714/187 +f 6138/11713/187 6140/11715/187 6210/11714/187 +f 6140/11715/187 6141/11716/187 6210/11714/187 +f 6141/11716/187 6142/11717/187 6210/11714/187 +f 6142/11717/187 6143/11718/187 6210/11714/187 +f 6143/11718/187 6144/11719/2483 6210/11714/187 +f 6144/11719/2483 6145/11720/2484 6210/11714/187 +f 6145/11720/2484 6139/11712/187 6210/11714/187 +f 6187/11721/189 6186/11722/189 6211/11723/189 +f 6186/11722/189 6193/11724/2485 6211/11723/189 +f 6193/11724/2485 6192/11725/2486 6211/11723/189 +f 6192/11725/2486 6191/11726/189 6211/11723/189 +f 6191/11726/189 6190/11727/189 6211/11723/189 +f 6190/11727/189 6189/11728/189 6211/11723/189 +f 6189/11728/189 6188/11729/189 6211/11723/189 +f 6188/11729/189 6187/11721/189 6211/11723/189 +s 1 +f 6212/11730/974 6213/11731/974 6214/11732/974 +f 6213/11731/974 6215/11733/974 6214/11732/974 +f 6215/11733/974 6216/11734/974 6214/11732/974 +f 6216/11734/974 6217/11735/974 6214/11732/974 +f 6217/11735/974 6218/11736/974 6214/11732/974 +f 6218/11736/974 6219/11737/974 6214/11732/974 +f 6219/11737/974 6220/11738/974 6214/11732/974 +f 6220/11738/974 6221/11739/974 6214/11732/974 +f 6221/11739/974 6222/11740/974 6214/11732/974 +f 6222/11740/974 6212/11730/974 6214/11732/974 +s 4 +f 6212/11741/1249 6159/11742/1249 6158/11743/1250 6213/11744/946 +f 6213/11744/946 6158/11743/1250 6162/11745/947 6215/11746/947 +f 6215/11747/947 6162/11642/947 6164/11646/948 6216/11748/948 +f 6216/11749/948 6164/11750/948 6166/11751/1253 6217/11752/1253 +f 6217/11753/1253 6166/11651/1253 6168/11650/1254 6218/11754/1254 +f 6222/11755/1255 6202/11756/951 6159/11742/1249 6212/11741/1249 +f 6221/11757/952 6204/11758/952 6202/11759/951 6222/11760/1255 +f 6220/11761/953 6206/11706/953 6204/11702/952 6221/11762/952 +f 6219/11763/1257 6208/11764/1257 6206/11765/953 6220/11766/953 +f 6218/11767/1254 6168/11768/1254 6208/11764/1257 6219/11763/1257 +s 2 +f 6121/11583/2453 6120/11582/2452 6150/11769/2496 6148/11770/2497 +f 6120/11582/2452 6174/11658/2467 6196/11771/2574 6150/11769/2496 +f 6174/11658/2467 6192/11688/2478 6197/11772/2499 6196/11771/2574 +s 8 +f 6192/11725/2486 6193/11724/2485 6194/11773/2500 6197/11774/2500 +s 2 +f 6193/11689/2479 6175/11659/2468 6195/11775/2501 6194/11776/2502 +f 6175/11659/2468 6122/11584/2455 6151/11777/2503 6195/11775/2501 +f 6122/11584/2455 6123/11585/2508 6149/11778/2504 6151/11777/2503 +f 6123/11585/2508 6145/11623/2464 6146/11779/2505 6149/11778/2504 +s 8 +f 6145/11720/2484 6144/11719/2483 6147/11780/2506 6146/11781/2506 +s 2 +f 6144/11622/2463 6121/11583/2453 6148/11770/2497 6147/11782/2507 +s 1 +f 6223/11783/1468 6224/11784/396 6225/11785/396 6226/11786/1468 +f 6227/11787/740 6223/11783/1468 6226/11786/1468 6228/11788/740 +f 6229/11789/471 6227/11790/740 6228/11791/740 6230/11792/471 +f 6231/11793/738 6229/11789/471 6230/11792/471 6232/11794/738 +f 6233/11795/187 6231/11793/738 6232/11794/738 6234/11796/2525 +f 6235/11797/2526 6236/11798/737 6233/11795/187 6234/11796/2525 +f 6237/11799/2383 6238/11800/736 6236/11798/737 6235/11797/2526 +f 6239/11801/1557 6240/11802/2384 6238/11803/736 6237/11804/2383 +f 6241/11805/974 6242/11806/974 6243/11807/974 6244/11808/974 +f 6245/11809/974 6246/11810/974 6247/11811/2385 6248/11812/2386 +f 6249/11813/1468 6250/11814/396 6224/11784/396 6223/11783/1468 +f 6251/11815/740 6249/11813/1468 6223/11783/1468 6227/11787/740 +f 6252/11816/471 6251/11817/740 6227/11790/740 6229/11789/471 +f 6253/11818/738 6252/11816/471 6229/11789/471 6231/11793/738 +f 6254/11819/187 6253/11818/738 6231/11793/738 6233/11795/187 +f 6236/11798/737 6255/11820/737 6254/11819/187 6233/11795/187 +f 6238/11800/736 6256/11821/736 6255/11820/737 6236/11798/737 +f 6240/11802/2384 6257/11822/2387 6256/11823/736 6238/11803/736 +f 6247/11811/2385 6258/11824/2388 6257/11822/2387 6240/11802/2384 +f 6246/11810/974 6259/11825/974 6258/11824/2388 6247/11811/2385 +s 2 +f 6240/11826/189 6239/11827/189 6260/11828/189 +f 6248/11829/187 6247/11830/187 6261/11831/187 6262/11832/187 +s 4 +f 6240/11833/428 6260/11834/428 6261/11835/428 6247/11836/428 +s 2 +f 6263/11837/189 6244/11838/189 6243/11839/189 6260/11828/189 +f 6242/11840/187 6241/11841/187 6262/11832/187 6261/11831/187 +s 4 +f 6260/11834/428 6243/11842/428 6242/11843/428 6261/11835/428 +f 6263/11844/2389 6264/11845/2390 6265/11846/2391 6244/11847/2545 +f 6264/11845/2390 6263/11844/2389 6266/11848/2393 +s 1 +f 6267/11849/743 6268/11850/743 6225/11785/396 6224/11784/396 +f 6269/11851/745 6270/11852/745 6268/11850/743 6267/11849/743 +f 6271/11853/485 6272/11854/485 6270/11852/745 6269/11851/745 +f 6273/11855/2118 6274/11856/2118 6272/11857/485 6271/11858/485 +f 6275/11859/189 6276/11860/2394 6274/11856/2118 6273/11855/2118 +f 6277/11861/2546 6276/11860/2394 6275/11859/189 6278/11862/1466 +f 6279/11863/2528 6277/11861/2546 6278/11862/1466 6280/11864/748 +f 6281/11865/1638 6279/11866/2528 6280/11867/748 6282/11868/2397 +f 6283/11869/974 6284/11870/974 6285/11871/974 6286/11872/974 +f 6245/11809/974 6287/11873/2398 6288/11874/2399 6246/11810/974 +f 6289/11875/743 6267/11849/743 6224/11784/396 6250/11814/396 +f 6290/11876/745 6269/11851/745 6267/11849/743 6289/11875/743 +f 6291/11877/485 6271/11853/485 6269/11851/745 6290/11876/745 +f 6292/11878/2118 6273/11855/2118 6271/11858/485 6291/11879/485 +f 6293/11880/189 6275/11859/189 6273/11855/2118 6292/11878/2118 +f 6278/11862/1466 6275/11859/189 6293/11880/189 6294/11881/1466 +f 6280/11864/748 6278/11862/1466 6294/11881/1466 6295/11882/748 +f 6282/11868/2397 6280/11867/748 6295/11883/748 6296/11884/2400 +f 6288/11874/2399 6282/11868/2397 6296/11884/2400 6297/11885/2401 +f 6246/11810/974 6288/11874/2399 6297/11885/2401 6259/11825/974 +s 2 +f 6282/11886/187 6298/11887/187 6281/11888/187 +f 6287/11889/189 6299/11890/189 6300/11891/189 6288/11892/189 +s 4 +f 6282/11893/428 6288/11894/428 6300/11895/428 6298/11896/428 +s 2 +f 6301/11897/187 6298/11887/187 6285/11898/187 6284/11899/187 +f 6286/11900/189 6300/11891/189 6299/11890/189 6283/11901/189 +s 4 +f 6298/11896/428 6300/11895/428 6286/11902/428 6285/11903/428 +f 6301/11904/2402 6284/11905/2403 6302/11906/2404 6303/11907/2405 +f 6303/11907/2405 6304/11908/2406 6301/11904/2402 +f 6305/11909/428 6306/11910/429 6307/11911/428 +f 6299/11912/2578 6308/11913/2529 6309/11914/2409 6283/11915/2410 +f 6284/11905/2403 6283/11915/2410 6310/11916/2411 6311/11917/2412 +f 6287/11918/2413 6245/11919/2547 6308/11913/2529 6299/11912/2578 +f 6312/11920/430 6311/11917/2412 6310/11916/2411 6313/11921/429 +f 6314/11922/430 6312/11920/430 6313/11921/429 6306/11910/429 +f 6262/11923/2578 6241/11924/2548 6309/11914/2409 6308/11913/2529 +f 6309/11914/2409 6241/11924/2548 6310/11916/2411 +f 6310/11916/2411 6315/11925/2416 6316/11926/428 6313/11921/429 +f 6313/11921/429 6316/11926/428 6317/11927/428 6306/11910/429 +f 6248/11928/2417 6262/11923/2578 6308/11913/2529 6245/11919/2547 +f 6305/11909/428 6318/11929/429 6306/11910/429 +f 6306/11910/429 6319/11930/428 6307/11911/428 +f 6306/11910/429 6317/11927/428 6319/11930/428 +f 6318/11929/429 6320/11931/430 6306/11910/429 +f 6320/11931/430 6314/11922/430 6306/11910/429 +s 8 +f 6225/11785/2579 6305/11932/2580 6307/11933/2530 6226/11786/2531 +f 6226/11934/2531 6307/11935/2530 6319/11936/2552 6228/11937/2553 +f 6228/11937/2553 6319/11936/2552 6317/11938/2581 6230/11939/2425 +f 6230/11939/2425 6317/11938/2581 6316/11940/2426 6232/11941/2427 +f 6232/11941/2427 6316/11940/2426 6315/11942/2428 6234/11943/2429 +f 6234/11944/2429 6315/11945/2428 6265/11946/2430 6235/11947/2431 +f 6235/11947/2431 6265/11946/2430 6264/11948/2582 6237/11949/2433 +f 6237/11949/2433 6264/11948/2582 6266/11950/2583 6239/11951/2584 +f 6268/11850/2436 6318/11952/2437 6305/11932/2580 6225/11785/2579 +f 6270/11953/2557 6320/11954/2585 6318/11955/2437 6268/11956/2436 +f 6272/11957/2440 6314/11958/2441 6320/11959/2585 6270/11960/2557 +f 6274/11961/2442 6312/11962/2443 6314/11958/2441 6272/11957/2440 +f 6276/11963/2444 6311/11964/2445 6312/11962/2443 6274/11961/2442 +f 6277/11965/2586 6302/11966/2587 6311/11967/2445 6276/11968/2444 +f 6279/11969/2448 6303/11970/2449 6302/11966/2587 6277/11965/2586 +f 6281/11971/2588 6304/11972/2451 6303/11970/2449 6279/11969/2448 +s 2 +f 6266/11973/189 6263/11837/189 6260/11828/189 +f 6239/11827/189 6266/11973/189 6260/11828/189 +f 6298/11887/187 6304/11974/187 6281/11888/187 +f 6298/11887/187 6301/11897/187 6304/11974/187 +f 6250/11975/455 6249/11976/455 6321/11977/754 +f 6249/11976/455 6251/11978/455 6321/11977/754 +f 6251/11978/455 6252/11979/455 6321/11977/754 +f 6252/11979/455 6253/11980/455 6321/11977/754 +f 6253/11980/455 6254/11981/455 6321/11977/754 +f 6254/11981/455 6255/11982/455 6321/11977/754 +f 6255/11982/455 6256/11983/455 6321/11977/754 +f 6256/11983/455 6257/11984/455 6321/11977/754 +f 6257/11984/455 6258/11985/455 6321/11977/754 +f 6258/11985/455 6259/11986/455 6321/11977/754 +f 6259/11986/455 6297/11987/455 6321/11977/754 +f 6297/11987/455 6296/11988/455 6321/11977/754 +f 6296/11988/455 6295/11989/455 6321/11977/754 +f 6295/11989/455 6294/11990/455 6321/11977/754 +f 6294/11990/455 6293/11991/455 6321/11977/754 +f 6293/11991/455 6292/11992/754 6321/11977/754 +f 6292/11992/754 6291/11993/455 6321/11977/754 +f 6291/11993/455 6290/11994/455 6321/11977/754 +f 6290/11994/455 6289/11995/455 6321/11977/754 +f 6289/11995/455 6250/11975/455 6321/11977/754 +s 1 +f 6322/11996/795 6323/11997/795 6324/11998/795 6325/11999/795 +f 6326/12000/796 6327/12001/796 6328/12002/796 6329/12003/796 +s 2 +f 6327/12001/797 6330/12004/2452 6331/12005/2453 6328/12002/2589 +f 6332/12006/2455 6322/11996/801 6325/11999/2456 6333/12007/2457 +s 4 +f 6334/12008/803 6324/12009/804 6335/12010/805 6336/12011/2458 +f 6337/12012/807 6334/12008/803 6336/12011/2458 6338/12013/2459 +f 6326/12014/809 6329/12015/810 6339/12016/811 6340/12017/809 +f 6323/12018/813 6341/12019/813 6335/12010/805 6324/12009/804 +f 6337/12012/807 6338/12013/2459 6339/12016/811 6329/12015/810 +s 1 +f 6339/12020/815 6342/12021/815 6343/12022/815 6340/12023/815 +s 2 +f 6338/12024/816 6344/12025/817 6342/12026/818 6339/12027/819 +s 1 +f 6336/12028/2534 6345/12029/821 6344/12025/821 6338/12024/2534 +s 2 +f 6336/12028/822 6335/12030/823 6346/12031/824 6345/12029/825 +s 1 +f 6335/12032/826 6341/12033/826 6347/12034/826 6346/12035/826 +s 2 +f 6324/11998/827 6348/12036/827 6349/12037/2535 6325/11999/2456 +s 4 +f 6334/12008/803 6350/12038/2590 6348/12039/2591 6324/12009/804 +f 6337/12012/807 6351/12040/832 6350/12038/2590 6334/12008/803 +f 6329/12015/810 6352/12041/833 6351/12040/832 6337/12012/807 +s 2 +f 6328/12002/2589 6353/12042/835 6352/12043/1243 6329/12003/1243 +f 6331/12005/2453 6354/12044/2537 6353/12042/835 6328/12002/2589 +f 6325/11999/2456 6349/12037/2535 6355/12045/2464 6333/12007/2457 +s 1 +f 6356/12046/396 6357/12047/396 6358/12048/396 6359/12049/396 +f 6359/12049/396 6358/12048/396 6360/12050/396 6361/12051/396 +f 6362/12052/844 6363/12053/845 6343/12022/815 6342/12021/815 +s 2 +f 6364/12054/846 6362/12055/847 6342/12026/818 6344/12025/817 +s 1 +f 6365/12056/1131 6364/12054/1131 6344/12025/821 6345/12029/821 +s 2 +f 6366/12057/849 6365/12056/850 6345/12029/825 6346/12031/824 +s 1 +f 6367/12058/851 6366/12059/852 6346/12035/826 6347/12034/826 +f 6368/12060/853 6369/12061/854 6370/12062/855 6371/12063/856 +s 2 +f 6372/12064/857 6368/12065/858 6371/12066/859 6373/12067/860 +s 1 +f 6374/12068/861 6372/12064/861 6373/12067/862 6375/12069/862 +s 2 +f 6376/12070/863 6374/12068/864 6375/12069/865 6377/12071/866 +s 1 +f 6378/12072/867 6376/12073/868 6377/12074/869 6379/12075/870 +f 6362/12052/844 6371/12063/856 6370/12062/855 6363/12053/845 +s 2 +f 6364/12054/846 6373/12067/860 6371/12066/859 6362/12055/847 +s 1 +f 6365/12056/1131 6375/12069/862 6373/12067/862 6364/12054/1131 +s 2 +f 6366/12057/849 6377/12071/866 6375/12069/865 6365/12056/850 +s 1 +f 6367/12058/851 6379/12075/870 6377/12074/869 6366/12059/852 +f 6322/11996/795 6380/12076/795 6381/12077/795 6323/11997/795 +f 6326/12000/796 6382/12078/796 6383/12079/796 6327/12001/796 +s 2 +f 6327/12001/797 6383/12079/2592 6384/12080/2467 6330/12004/2452 +f 6332/12006/2455 6385/12081/2468 6380/12076/2469 6322/11996/801 +s 4 +f 6386/12082/873 6387/12083/2470 6388/12084/875 6381/12085/876 +f 6389/12086/2593 6390/12087/2472 6387/12083/2470 6386/12082/873 +f 6326/12014/809 6340/12017/809 6391/12088/879 6382/12089/880 +f 6323/12018/813 6381/12085/876 6388/12084/875 6341/12019/813 +f 6389/12086/2593 6382/12089/880 6391/12088/879 6390/12087/2472 +s 2 +f 6391/12090/881 6340/12023/881 6343/12022/881 6392/12091/881 +s 1 +f 6390/12092/882 6391/12093/883 6392/12094/884 6393/12095/885 +s 2 +f 6387/12096/886 6390/12092/886 6393/12095/887 6394/12097/887 +s 1 +f 6387/12096/888 6394/12097/889 6395/12098/890 6388/12099/891 +s 2 +f 6388/12100/892 6395/12101/892 6347/12034/892 6341/12033/892 +f 6381/12077/1246 6380/12076/2469 6396/12102/895 6397/12103/1246 +s 4 +f 6386/12082/873 6381/12085/876 6397/12104/2594 6398/12105/2595 +f 6389/12086/2593 6386/12082/873 6398/12105/2595 6399/12106/2596 +f 6382/12089/880 6389/12086/2593 6399/12106/2596 6400/12107/2597 +s 2 +f 6383/12079/2592 6382/12078/1264 6400/12108/1264 6401/12109/902 +f 6384/12080/2467 6383/12079/2592 6401/12109/902 6402/12110/2478 +f 6380/12076/2469 6385/12081/2468 6403/12111/2598 6396/12102/895 +s 1 +f 6404/12112/396 6405/12113/396 6406/12114/396 6407/12115/396 +f 6405/12113/396 6361/12051/396 6360/12050/396 6406/12114/396 +s 2 +f 6408/12116/909 6392/12091/881 6343/12022/881 6363/12053/910 +s 1 +f 6409/12117/911 6393/12095/885 6392/12094/884 6408/12118/912 +s 2 +f 6410/12119/1126 6394/12097/887 6393/12095/887 6409/12117/1126 +s 1 +f 6411/12120/914 6395/12098/890 6394/12097/889 6410/12119/915 +s 2 +f 6367/12058/916 6347/12034/892 6395/12101/892 6411/12121/917 +f 6412/12122/918 6413/12123/919 6370/12062/920 6369/12061/921 +s 1 +f 6414/12124/922 6415/12125/2517 6413/12126/924 6412/12127/925 +s 2 +f 6416/12128/926 6417/12129/927 6415/12125/927 6414/12124/926 +s 1 +f 6418/12130/928 6419/12131/929 6417/12129/930 6416/12128/931 +s 2 +f 6378/12072/932 6379/12075/933 6419/12132/934 6418/12133/935 +f 6408/12116/909 6363/12053/910 6370/12062/920 6413/12123/919 +s 1 +f 6409/12117/911 6408/12118/912 6413/12126/924 6415/12125/2517 +s 2 +f 6410/12119/1126 6409/12117/1126 6415/12125/927 6417/12129/927 +s 1 +f 6411/12120/914 6410/12119/915 6417/12129/930 6419/12131/929 +s 2 +f 6367/12058/916 6411/12121/917 6419/12132/934 6379/12075/933 +s 8 +f 6349/12134/187 6348/12135/187 6420/12136/187 +f 6348/12135/187 6350/12137/187 6420/12136/187 +f 6350/12137/187 6351/12138/187 6420/12136/187 +f 6351/12138/187 6352/12139/187 6420/12136/187 +f 6352/12139/187 6353/12140/187 6420/12136/187 +f 6353/12140/187 6354/12141/2483 6420/12136/187 +f 6354/12141/2483 6355/12142/2484 6420/12136/187 +f 6355/12142/2484 6349/12134/187 6420/12136/187 +f 6397/12143/189 6396/12144/189 6421/12145/189 +f 6396/12144/189 6403/12146/2485 6421/12145/189 +f 6403/12146/2485 6402/12147/2486 6421/12145/189 +f 6402/12147/2486 6401/12148/189 6421/12145/189 +f 6401/12148/189 6400/12149/189 6421/12145/189 +f 6400/12149/189 6399/12150/189 6421/12145/189 +f 6399/12150/189 6398/12151/189 6421/12145/189 +f 6398/12151/189 6397/12143/189 6421/12145/189 +s 1 +f 6422/12152/974 6423/12153/974 6424/12154/974 +f 6423/12153/974 6425/12155/974 6424/12154/974 +f 6425/12155/974 6426/12156/974 6424/12154/974 +f 6426/12156/974 6427/12157/974 6424/12154/974 +f 6427/12157/974 6428/12158/974 6424/12154/974 +f 6428/12158/974 6429/12159/974 6424/12154/974 +f 6429/12159/974 6430/12160/974 6424/12154/974 +f 6430/12160/974 6431/12161/974 6424/12154/974 +f 6431/12161/974 6432/12162/974 6424/12154/974 +f 6432/12162/974 6422/12152/974 6424/12154/974 +s 4 +f 6422/12163/2599 6369/12164/2599 6368/12165/2600 6423/12166/2600 +f 6423/12166/2600 6368/12165/2600 6372/12167/2601 6425/12168/2601 +f 6425/12169/2601 6372/12064/2601 6374/12068/2602 6426/12170/2602 +f 6426/12171/2602 6374/12172/2602 6376/12173/2603 6427/12174/2603 +f 6427/12174/2603 6376/12173/2603 6378/12175/2604 6428/12176/2604 +f 6432/12177/2605 6412/12178/2605 6369/12164/2599 6422/12163/2599 +f 6431/12179/2606 6414/12180/2606 6412/12181/2605 6432/12182/2605 +f 6430/12183/2607 6416/12128/2607 6414/12124/2606 6431/12184/2606 +f 6429/12185/2608 6418/12186/2608 6416/12187/2607 6430/12188/2607 +f 6428/12189/2604 6378/12190/2604 6418/12186/2608 6429/12185/2608 +s 2 +f 6331/12005/2453 6330/12004/2452 6360/12191/2496 6358/12192/2609 +f 6330/12004/2452 6384/12080/2467 6406/12193/2574 6360/12191/2496 +f 6384/12080/2467 6402/12110/2478 6407/12194/2499 6406/12193/2574 +s 8 +f 6402/12147/2486 6403/12146/2485 6404/12195/2500 6407/12196/2500 +s 2 +f 6403/12111/2598 6385/12081/2468 6405/12197/2501 6404/12198/2502 +f 6385/12081/2468 6332/12006/2455 6361/12199/2503 6405/12197/2501 +f 6332/12006/2455 6333/12007/2457 6359/12200/2504 6361/12199/2503 +f 6333/12007/2457 6355/12045/2464 6356/12201/2505 6359/12200/2504 +s 8 +f 6355/12142/2484 6354/12141/2483 6357/12202/2506 6356/12203/2506 +s 2 +f 6354/12044/2537 6331/12005/2453 6358/12192/2609 6357/12204/2524 +s 1 +f 6433/12205/795 6434/12206/795 6435/12207/795 6436/12208/795 +f 6437/12209/796 6438/12210/796 6439/12211/796 6440/12212/796 +s 2 +f 6438/12210/797 6441/12213/2452 6442/12214/2453 6439/12211/2589 +f 6443/12215/2455 6433/12205/801 6436/12208/2456 6444/12216/2457 +s 4 +f 6445/12217/803 6435/12218/804 6446/12219/805 6447/12220/2458 +f 6448/12221/807 6445/12217/803 6447/12220/2458 6449/12222/2459 +f 6437/12223/812 6440/12224/810 6450/12225/811 6451/12226/812 +f 6434/12227/814 6452/12228/814 6446/12219/805 6435/12218/804 +f 6448/12221/807 6449/12222/2459 6450/12225/811 6440/12224/810 +s 1 +f 6450/12229/815 6453/12230/815 6454/12231/815 6451/12232/815 +s 2 +f 6449/12233/816 6455/12234/817 6453/12235/818 6450/12236/819 +s 1 +f 6447/12237/2534 6456/12238/821 6455/12234/821 6449/12233/2534 +s 2 +f 6447/12237/822 6446/12239/823 6457/12240/824 6456/12238/825 +s 1 +f 6446/12241/826 6452/12242/826 6458/12243/826 6457/12244/826 +s 2 +f 6435/12207/827 6459/12245/827 6460/12246/2535 6436/12208/2456 +s 4 +f 6445/12217/803 6461/12247/2590 6459/12248/2591 6435/12218/804 +f 6448/12221/807 6462/12249/832 6461/12247/2590 6445/12217/803 +f 6440/12224/810 6463/12250/833 6462/12249/832 6448/12221/807 +s 2 +f 6439/12211/2589 6464/12251/835 6463/12252/1243 6440/12212/1243 +f 6442/12214/2453 6465/12253/2537 6464/12251/835 6439/12211/2589 +f 6436/12208/2456 6460/12246/2535 6466/12254/2464 6444/12216/2457 +s 1 +f 6467/12255/396 6468/12256/396 6469/12257/396 6470/12258/396 +f 6470/12258/396 6469/12257/396 6471/12259/396 6472/12260/396 +f 6473/12261/844 6474/12262/845 6454/12231/815 6453/12230/815 +s 2 +f 6475/12263/846 6473/12264/2610 6453/12235/818 6455/12234/817 +s 1 +f 6476/12265/1131 6475/12263/1131 6455/12234/821 6456/12238/821 +s 2 +f 6477/12266/849 6476/12265/850 6456/12238/825 6457/12240/824 +s 1 +f 6478/12267/851 6477/12268/852 6457/12244/826 6458/12243/826 +f 6479/12269/853 6480/12270/854 6481/12271/855 6482/12272/856 +s 2 +f 6483/12273/857 6479/12274/858 6482/12275/859 6484/12276/860 +s 1 +f 6485/12277/861 6483/12273/861 6484/12276/862 6486/12278/862 +s 2 +f 6487/12279/863 6485/12277/864 6486/12278/865 6488/12280/2611 +s 1 +f 6489/12281/867 6487/12282/868 6488/12283/869 6490/12284/870 +f 6473/12261/844 6482/12272/856 6481/12271/855 6474/12262/845 +s 2 +f 6475/12263/846 6484/12276/860 6482/12275/859 6473/12264/2610 +s 1 +f 6476/12265/1131 6486/12278/862 6484/12276/862 6475/12263/1131 +s 2 +f 6477/12266/849 6488/12280/2611 6486/12278/865 6476/12265/850 +s 1 +f 6478/12267/851 6490/12284/870 6488/12283/869 6477/12268/852 +f 6433/12205/795 6491/12285/795 6492/12286/795 6434/12206/795 +f 6437/12209/796 6493/12287/796 6494/12288/796 6438/12210/796 +s 2 +f 6438/12210/797 6494/12288/2592 6495/12289/2467 6441/12213/2452 +f 6443/12215/2455 6496/12290/2468 6491/12285/2469 6433/12205/801 +s 4 +f 6497/12291/873 6498/12292/2470 6499/12293/875 6492/12294/876 +f 6500/12295/877 6501/12296/2472 6498/12292/2470 6497/12291/873 +f 6437/12223/812 6451/12226/812 6502/12297/879 6493/12298/880 +f 6434/12227/814 6492/12294/876 6499/12293/875 6452/12228/814 +f 6500/12295/877 6493/12298/880 6502/12297/879 6501/12296/2472 +s 2 +f 6502/12299/881 6451/12232/881 6454/12231/881 6503/12300/881 +s 1 +f 6501/12301/882 6502/12302/883 6503/12303/884 6504/12304/885 +s 2 +f 6498/12305/2569 6501/12301/2569 6504/12304/887 6505/12306/887 +s 1 +f 6498/12305/888 6505/12306/889 6506/12307/890 6499/12308/891 +s 2 +f 6499/12309/892 6506/12310/892 6458/12243/892 6452/12242/892 +f 6492/12286/1246 6491/12285/2469 6507/12311/895 6508/12312/1246 +s 4 +f 6497/12291/873 6492/12294/876 6508/12313/2594 6509/12314/2595 +f 6500/12295/877 6497/12291/873 6509/12314/2595 6510/12315/2596 +f 6493/12298/880 6500/12295/877 6510/12315/2596 6511/12316/2597 +s 2 +f 6494/12288/2592 6493/12287/1264 6511/12317/1264 6512/12318/902 +f 6495/12289/2467 6494/12288/2592 6512/12318/902 6513/12319/2478 +f 6491/12285/2469 6496/12290/2468 6514/12320/2598 6507/12311/895 +s 1 +f 6515/12321/396 6516/12322/396 6517/12323/396 6518/12324/396 +f 6516/12322/396 6472/12260/396 6471/12259/396 6517/12323/396 +s 2 +f 6519/12325/909 6503/12300/881 6454/12231/881 6474/12262/910 +s 1 +f 6520/12326/911 6504/12304/885 6503/12303/884 6519/12327/912 +s 2 +f 6521/12328/913 6505/12306/887 6504/12304/887 6520/12326/913 +s 1 +f 6522/12329/914 6506/12307/890 6505/12306/889 6521/12328/915 +s 2 +f 6478/12267/916 6458/12243/892 6506/12310/892 6522/12330/917 +f 6523/12331/918 6524/12332/919 6481/12271/920 6480/12270/921 +s 1 +f 6525/12333/922 6526/12334/923 6524/12335/924 6523/12336/925 +s 2 +f 6527/12337/926 6528/12338/927 6526/12334/927 6525/12333/926 +s 1 +f 6529/12339/928 6530/12340/929 6528/12338/930 6527/12337/931 +s 2 +f 6489/12281/932 6490/12284/933 6530/12341/934 6529/12342/935 +f 6519/12325/909 6474/12262/910 6481/12271/920 6524/12332/919 +s 1 +f 6520/12326/911 6519/12327/912 6524/12335/924 6526/12334/923 +s 2 +f 6521/12328/913 6520/12326/913 6526/12334/927 6528/12338/927 +s 1 +f 6522/12329/914 6521/12328/915 6528/12338/930 6530/12340/929 +s 2 +f 6478/12267/916 6522/12330/917 6530/12341/934 6490/12284/933 +s 8 +f 6460/12343/187 6459/12344/187 6531/12345/187 +f 6459/12344/187 6461/12346/187 6531/12345/187 +f 6461/12346/187 6462/12347/187 6531/12345/187 +f 6462/12347/187 6463/12348/187 6531/12345/187 +f 6463/12348/187 6464/12349/187 6531/12345/187 +f 6464/12349/187 6465/12350/2483 6531/12345/187 +f 6465/12350/2483 6466/12351/2484 6531/12345/187 +f 6466/12351/2484 6460/12343/187 6531/12345/187 +f 6508/12352/189 6507/12353/189 6532/12354/189 +f 6507/12353/189 6514/12355/2485 6532/12354/189 +f 6514/12355/2485 6513/12356/2486 6532/12354/189 +f 6513/12356/2486 6512/12357/189 6532/12354/189 +f 6512/12357/189 6511/12358/189 6532/12354/189 +f 6511/12358/189 6510/12359/189 6532/12354/189 +f 6510/12359/189 6509/12360/189 6532/12354/189 +f 6509/12360/189 6508/12352/189 6532/12354/189 +s 1 +f 6533/12361/974 6534/12362/974 6535/12363/974 +f 6534/12362/974 6536/12364/974 6535/12363/974 +f 6536/12364/974 6537/12365/974 6535/12363/974 +f 6537/12365/974 6538/12366/974 6535/12363/974 +f 6538/12366/974 6539/12367/974 6535/12363/974 +f 6539/12367/974 6540/12368/974 6535/12363/974 +f 6540/12368/974 6541/12369/974 6535/12363/974 +f 6541/12369/974 6542/12370/974 6535/12363/974 +f 6542/12370/974 6543/12371/974 6535/12363/974 +f 6543/12371/974 6533/12361/974 6535/12363/974 +s 4 +f 6533/12372/2599 6480/12373/2599 6479/12374/2600 6534/12375/2612 +f 6534/12375/2612 6479/12374/2600 6483/12376/2601 6536/12377/2601 +f 6536/12378/2601 6483/12273/2601 6485/12277/2602 6537/12379/2602 +f 6537/12380/2602 6485/12381/2602 6487/12382/2613 6538/12383/2603 +f 6538/12383/2603 6487/12382/2613 6489/12384/2604 6539/12385/2604 +f 6543/12386/2614 6523/12387/2614 6480/12373/2599 6533/12372/2599 +f 6542/12388/2606 6525/12389/2606 6523/12390/2614 6543/12391/2614 +f 6541/12392/2607 6527/12337/2607 6525/12333/2606 6542/12393/2606 +f 6540/12394/2615 6529/12395/2615 6527/12396/2607 6541/12397/2607 +f 6539/12398/2604 6489/12399/2604 6529/12395/2615 6540/12394/2615 +s 2 +f 6442/12214/2453 6441/12213/2452 6471/12400/2496 6469/12401/2609 +f 6441/12213/2452 6495/12289/2467 6517/12402/2574 6471/12400/2496 +f 6495/12289/2467 6513/12319/2478 6518/12403/2499 6517/12402/2574 +s 8 +f 6513/12356/2486 6514/12355/2485 6515/12404/2500 6518/12405/2500 +s 2 +f 6514/12320/2598 6496/12290/2468 6516/12406/2501 6515/12407/2502 +f 6496/12290/2468 6443/12215/2455 6472/12408/2503 6516/12406/2501 +f 6443/12215/2455 6444/12216/2457 6470/12409/2504 6472/12408/2503 +f 6444/12216/2457 6466/12254/2464 6467/12410/2505 6470/12409/2504 +s 8 +f 6466/12351/2484 6465/12350/2483 6468/12411/2506 6467/12412/2506 +s 2 +f 6465/12253/2537 6442/12214/2453 6469/12401/2609 6468/12413/2524 +f 2496/12414/2616 2546/12415/2617 2545/12416/2618 2493/12417/2619 +s 8 +f 2493/4360/2620 2545/12418/2620 2547/12419/2620 2494/4361/2621 +s 2 +f 6544/12420/1026 2549/12421/1026 2548/12422/2622 6545/12423/2623 +f 2537/12424/2624 2550/12425/2625 2546/12415/2617 2496/12414/2616 +f 2714/12426/2626 2755/12427/2627 2754/12428/2628 2715/12429/2629 +s 8 +f 2494/4361/2621 2547/12419/2620 2755/12430/2621 2714/4768/2621 +s 2 +f 6546/12431/2630 2756/12432/2631 2549/12421/1026 6544/12420/1026 +f 2715/12429/2629 2754/12428/2628 2757/12433/2632 2749/12434/2633 +s 8 +f 2526/4431/2634 2542/4449/2635 2541/4448/2636 2523/4428/2637 +f 2523/4428/2637 2541/4448/2636 2550/4462/2637 2548/4460/2637 +f 2739/4827/2638 2752/4842/2639 2750/4840/2640 2740/4828/2641 +f 2756/4850/2642 2757/4851/2642 2752/4842/2639 2739/4827/2638 +s 2 +f 2537/4444/2624 6545/12435/2623 2548/12436/2622 2550/12437/2625 +f 6546/12438/2630 2749/4839/2633 2757/12439/2632 2756/12440/2631 +s 1 +f 2495/4362/428 6544/12441/428 6545/12435/428 +f 2495/4362/428 6545/12435/428 2537/4444/428 +f 2749/4839/428 6546/12438/428 2495/4362/428 +f 6546/12438/428 6544/12441/428 2495/4362/428 +s 16 +f 6547/12442/455 6548/12443/455 6549/12444/455 6550/12445/455 +s 8 +f 6551/12446/455 6552/12447/455 6553/12448/455 6554/12449/455 +s 16 +f 2404/12450/455 2403/12451/455 6547/12442/455 6550/12445/455 +f 2403/12451/455 2638/12452/752 6555/12453/455 6547/12442/455 +f 2638/12452/752 2639/12454/752 6556/12455/752 6555/12453/455 +f 2639/12454/752 2642/12456/455 6557/12457/753 6556/12455/752 +f 2642/12456/455 2641/12458/455 6558/12459/752 6557/12457/753 +f 2641/12458/455 2700/12460/455 6559/12461/752 6558/12459/752 +f 2700/12460/455 2646/12462/455 6560/12463/455 6559/12461/752 +f 2646/12462/455 2645/12464/754 6561/12465/455 6560/12463/455 +f 2645/12464/754 2649/12466/752 6561/12465/455 +f 2649/12466/752 2652/12467/753 6562/12468/753 6561/12465/455 +f 2652/12467/753 2654/12469/753 6562/12468/753 +f 2654/12469/753 2655/12470/752 6562/12468/753 +f 2655/12470/752 2656/12471/752 6562/12468/753 +f 2656/12471/752 2658/12472/752 6562/12468/753 +f 2658/12472/752 2660/12473/753 6562/12468/753 +f 2660/12473/753 2662/12474/753 6562/12468/753 +f 2662/12474/753 2664/12475/752 6562/12468/753 +f 2664/12475/752 2666/12476/752 6562/12468/753 +f 2666/12476/752 2668/12477/753 6562/12468/753 +f 2668/12477/753 2670/12478/753 6562/12468/753 +f 2670/12478/753 2672/12479/753 6562/12468/753 +f 2672/12479/753 2674/12480/754 6562/12468/753 +f 2674/12480/754 2676/12481/754 6562/12468/753 +f 2676/12481/754 2678/12482/754 6562/12468/753 +f 2678/12482/754 2680/12483/754 6562/12468/753 +f 2680/12483/754 2682/12484/455 6563/12485/754 6562/12468/753 +f 2682/12484/455 2684/12486/455 6563/12485/754 +f 2684/12486/455 2686/12487/752 6564/12488/753 6563/12485/754 +f 2686/12487/752 2455/12489/752 6565/12490/753 6564/12488/753 +f 2455/12489/752 2453/12491/455 6566/12492/455 6565/12490/753 +f 2453/12491/455 2451/12493/754 6567/12494/754 6566/12492/455 +f 2451/12493/754 2449/12495/754 6567/12494/754 +f 2449/12495/754 2447/12496/754 6567/12494/754 +f 2447/12496/754 2445/12497/455 6568/12498/754 +f 2445/12497/455 2443/12499/455 6568/12498/754 +f 2443/12499/455 2441/12500/455 6568/12498/754 +f 2441/12500/455 2439/12501/455 6568/12498/754 +f 2439/12501/455 2437/12502/455 6568/12498/754 +f 2437/12502/455 2435/12503/455 6568/12498/754 +f 2435/12503/455 2433/12504/455 6568/12498/754 +f 2433/12504/455 2431/12505/455 6568/12498/754 +f 2431/12505/455 2429/12506/455 6568/12498/754 +f 2429/12506/455 2427/12507/455 6568/12498/754 +f 2427/12507/455 2425/12508/455 6568/12498/754 +f 2425/12508/455 2424/12509/455 6568/12498/754 +f 2424/12509/455 2423/12510/455 6568/12498/754 +f 2423/12510/455 2421/12511/455 6568/12498/754 +f 2421/12511/455 2418/12512/455 6568/12498/754 +f 2418/12512/455 2417/12513/455 6569/12514/455 6568/12498/754 +f 2417/12513/455 2413/12515/754 6569/12514/455 +f 2413/12515/754 2416/12516/754 6570/12517/754 6569/12514/455 +f 2416/12516/754 2475/12518/455 6571/12519/455 6570/12517/754 +f 2475/12518/455 2409/12520/455 6572/12521/455 6571/12519/455 +f 2409/12520/455 2412/12522/455 6573/12523/455 6572/12521/455 +f 2412/12522/455 2407/12524/455 6549/12444/455 6573/12523/455 +f 2407/12524/455 2404/12450/455 6550/12445/455 6549/12444/455 +s 8 +f 3090/12525/455 3089/12526/455 6554/12449/455 6553/12448/455 +f 3089/12526/455 3133/12527/455 6574/12528/455 6554/12449/455 +f 3133/12527/455 3131/12529/754 6575/12530/754 6574/12528/455 +f 3131/12529/754 3129/12531/455 6576/12532/754 6575/12530/754 +f 3129/12531/455 3127/12533/753 6576/12532/754 +f 3127/12533/753 3125/12534/753 6577/12535/752 6576/12532/754 +f 3125/12534/753 3123/12536/752 6577/12535/752 +f 3123/12536/752 3121/12537/752 6577/12535/752 +f 3121/12537/752 3119/12538/752 6577/12535/752 +f 3119/12538/752 3117/12539/753 6577/12535/752 +f 3117/12539/753 3115/12540/753 6577/12535/752 +f 3115/12540/753 3113/12541/752 6577/12535/752 +f 3113/12541/752 3111/12542/752 6577/12535/752 +f 3111/12542/752 3109/12543/455 6577/12535/752 +f 3109/12543/455 3107/12544/455 6577/12535/752 +f 3107/12544/455 3105/12545/455 6577/12535/752 +f 3105/12545/455 3103/12546/455 6577/12535/752 +f 3103/12546/455 3100/12547/455 6577/12535/752 +f 3100/12547/455 3099/12548/455 6577/12535/752 +f 3099/12548/455 3095/12549/455 6578/12550/455 6577/12535/752 +f 3095/12549/455 3098/12551/455 6579/12552/455 6578/12550/455 +f 3098/12551/455 3198/12553/754 6580/12554/754 6579/12552/455 +f 3198/12553/754 3200/12555/754 6581/12556/753 6580/12554/754 +f 3200/12555/754 3203/12557/455 6581/12556/753 +f 3203/12557/455 3205/12558/455 6581/12556/753 +f 3205/12558/455 3207/12559/455 6581/12556/753 +f 3207/12559/455 3209/12560/455 6581/12556/753 +f 3209/12560/455 3211/12561/455 6581/12556/753 +f 3211/12561/455 3213/12562/455 6581/12556/753 +f 3213/12562/455 3215/12563/753 6581/12556/753 +f 3215/12563/753 3217/12564/753 6581/12556/753 +f 3217/12564/753 3219/12565/752 6581/12556/753 +f 3219/12565/752 3221/12566/753 6581/12556/753 +f 3221/12566/753 3223/12567/753 6581/12556/753 +f 3223/12567/753 3225/12568/752 6581/12556/753 +f 3225/12568/752 3227/12569/752 6581/12556/753 +f 3227/12569/752 3229/12570/455 6582/12571/455 6581/12556/753 +f 3229/12570/455 3231/12572/455 6582/12571/455 +f 3231/12572/455 3233/12573/455 6583/12574/455 6582/12571/455 +f 3233/12573/455 3235/12575/754 6584/12576/754 6583/12574/455 +f 3235/12575/754 3194/12577/754 6585/12578/754 6584/12576/754 +f 3194/12577/754 3197/12579/455 6586/12580/455 6585/12578/754 +f 3197/12579/455 3093/12581/455 6552/12447/455 6586/12580/455 +f 3093/12581/455 3090/12525/455 6553/12448/455 6552/12447/455 +f 6575/12530/754 6587/12582/455 6588/12583/455 6574/12528/455 +f 6575/12530/754 6578/12550/455 6579/12552/455 6587/12582/455 +f 6574/12528/455 6588/12583/455 6551/12446/455 6554/12449/455 +f 6583/12574/455 6584/12576/754 6588/12583/455 6587/12582/455 +f 6584/12576/754 6585/12578/754 6551/12446/455 6588/12583/455 +f 6551/12446/455 6585/12578/754 6586/12580/455 6552/12447/455 +f 6580/12554/754 6583/12574/455 6587/12582/455 6579/12552/455 +f 6575/12530/754 6576/12532/754 6577/12535/752 6578/12550/455 +f 6581/12556/753 6582/12571/455 6583/12574/455 6580/12554/754 +s 16 +f 6567/12494/754 6568/12498/754 6569/12514/455 6570/12517/754 +f 6560/12463/455 6561/12465/455 6562/12468/753 6563/12485/754 +f 6560/12463/455 6589/12584/752 6590/12585/752 6559/12461/752 +f 6560/12463/455 6564/12488/753 6565/12490/753 6589/12584/752 +f 6559/12461/752 6590/12585/752 6591/12586/752 6558/12459/752 +f 6558/12459/752 6591/12586/752 6592/12587/753 6557/12457/753 +f 6556/12455/752 6557/12457/753 6592/12587/753 6548/12443/455 +f 6570/12517/754 6571/12519/455 6590/12585/752 6589/12584/752 +f 6571/12519/455 6572/12521/455 6591/12586/752 6590/12585/752 +f 6572/12521/455 6573/12523/455 6592/12587/753 6591/12586/752 +f 6592/12587/753 6573/12523/455 6549/12444/455 6548/12443/455 +f 6547/12442/455 6555/12453/455 6556/12455/752 6548/12443/455 +f 6565/12490/753 6566/12492/455 6570/12517/754 6589/12584/752 +f 6566/12492/455 6567/12494/754 6570/12517/754 +f 6560/12463/455 6563/12485/754 6564/12488/753 +s 8 +f 3728/12588/428 3727/12589/428 6593/12590/428 +f 3727/12589/428 3730/12591/428 6593/12590/428 +f 3730/12591/428 3731/12592/428 6593/12590/428 +f 3731/12592/428 3733/12593/428 6593/12590/428 +f 3733/12593/428 3736/12594/428 6593/12590/428 +f 3736/12594/428 3738/12595/428 6593/12590/428 +f 3738/12595/428 3739/12596/428 6593/12590/428 +f 3739/12596/428 3728/12588/428 6593/12590/428 +f 3942/12597/428 3941/12598/428 6594/12599/428 +f 3941/12598/428 3944/12600/428 6594/12599/428 +f 3944/12600/428 3945/12601/428 6594/12599/428 +f 3945/12601/428 3947/12602/428 6594/12599/428 +f 3947/12602/428 3950/12603/428 6594/12599/428 +f 3950/12603/428 3952/12604/428 6594/12599/428 +f 3952/12604/428 3953/12605/428 6594/12599/428 +f 3953/12605/428 3942/12597/428 6594/12599/428 +s 4 +f 5348/10029/2412 5339/10018/2404 5321/10017/2403 +f 5320/10027/2410 5346/10026/2409 5347/10028/2411 +f 5278/10036/2415 5281/9959/2392 5352/10037/2416 5347/10028/2411 +f 5281/9959/2392 5302/9958/2391 5352/10037/2416 +f 5669/10656/2412 5660/10645/2404 5642/10644/2403 +f 5641/10654/2410 5667/10653/2409 5668/10655/2411 +f 5599/10663/2415 5602/10587/2392 5673/10664/2416 5668/10655/2411 +f 5602/10587/2392 5623/10586/2391 5673/10664/2416 +f 4064/7510/2144 4055/7499/2136 4037/7498/2135 +f 4036/7508/2142 4062/7507/2141 4063/7509/2143 +f 3994/7517/2147 3997/7440/2124 4068/7518/2148 4063/7509/2143 +f 3997/7440/2124 4018/7439/2123 4068/7518/2148 +f 4385/8138/2144 4376/8127/2136 4358/8126/2135 +f 4318/8069/2256 4339/8068/2123 4389/8146/2148 +f 4357/8136/2142 4383/8135/2141 4384/8137/2143 +f 4318/8069/2256 4389/8146/2148 4384/8137/2143 4315/8145/2257 +f 4999/9397/2309 5025/9396/2141 5027/9399/2143 +f 4957/9406/2147 4960/9330/2124 5031/9407/2148 5027/9399/2143 +f 5026/9398/2144 5018/9388/2136 5000/9387/2307 +f 4960/9330/2124 4981/9329/2123 5031/9407/2148 +f 4678/8767/2309 4704/8766/2141 4706/8769/2310 +f 4636/8776/2147 4639/8699/2124 4710/8777/2148 4706/8769/2310 +f 4705/8768/2144 4697/8758/2136 4679/8757/2307 +f 4639/8699/2124 4660/8698/2123 4710/8777/2148 +f 5990/11286/2412 5981/11275/2404 5963/11274/2403 +f 5923/11216/2545 5944/11215/2391 5994/11294/2416 +f 5962/11284/2410 5988/11283/2409 5989/11285/2411 +f 5923/11216/2545 5994/11294/2416 5989/11285/2411 5920/11293/2548 +f 6311/11917/2412 6302/11906/2404 6284/11905/2403 +f 6244/11847/2545 6265/11846/2391 6315/11925/2416 +f 6283/11915/2410 6309/11914/2409 6310/11916/2411 +f 6244/11847/2545 6315/11925/2416 6310/11916/2411 6241/11924/2548 +s 16 +f 2447/12496/754 6568/12498/754 6567/12494/754 +s 4 +f 474/851/455 513/854/455 511/852/455 +f 564/910/455 567/915/455 565/911/455 +f 566/912/455 565/911/455 513/854/455 +f 509/847/455 478/849/455 556/914/455 +s 1 +f 558/926/430 557/12606/429 578/927/430 +f 581/930/428 559/12607/428 558/926/430 +f 586/935/429 624/12608/428 583/932/428 +f 599/948/429 621/12609/429 586/935/429 +s 4 +f 904/1556/455 909/1562/455 868/1557/455 +f 951/1608/455 567/915/455 564/910/455 +f 909/1562/455 951/1608/455 953/1610/455 +f 946/1612/455 872/1555/455 903/1552/455 +s 1 +f 949/1618/428 962/1623/428 959/1619/428 +f 961/1622/428 992/12610/428 962/1623/428 +f 964/1626/428 981/12611/428 965/1627/428 +f 976/1638/428 870/12612/428 964/1626/428 +s 4 +f 1248/2156/455 1251/2160/455 1249/2157/455 +f 1250/2158/455 1249/2157/455 1222/2126/455 +s 2 +f 1265/2174/456 1287/12613/428 1262/2171/428 +f 1274/2183/456 1284/12614/456 1265/2174/456 +s 4 +f 1526/2653/455 1251/2160/455 1248/2156/455 +f 1507/2630/455 1526/2653/455 1528/2655/455 +s 2 +f 1535/2663/430 1546/12615/428 1536/2664/428 +f 1543/2671/430 1480/12616/456 1535/2663/430 +s 4 +f 1796/3230/455 1835/3233/455 1833/3231/455 +f 1886/3289/455 1889/3294/455 1887/3290/455 +f 1888/3291/455 1887/3290/455 1835/3233/455 +f 1831/3226/455 1800/3228/455 1878/3293/455 +s 1 +f 1880/3305/428 1879/12617/428 1900/3306/428 +f 1903/3309/428 1881/12618/428 1880/3305/428 +f 1908/3314/456 1946/12619/428 1905/3311/428 +f 1921/3327/456 1943/12620/456 1908/3314/456 +s 4 +f 2226/3935/455 2231/3941/455 2190/3936/455 +f 2273/3987/455 1889/3294/455 1886/3289/455 +f 2231/3941/455 2273/3987/455 2275/3989/455 +f 2268/3991/455 2194/3934/455 2225/3931/455 +s 1 +f 2271/3997/429 2284/4002/428 2281/3998/429 +f 2283/4001/428 2314/12621/428 2284/4002/428 +f 2286/4005/430 2303/12622/428 2287/4006/428 +f 2298/4017/430 2192/12623/456 2286/4005/430 +s 2 +f 2539/4446/1547 2542/4449/2643 2526/4431/1548 +s 8 +f 2527/4450/429 2532/4550/430 2543/4451/430 +s 1 +f 2414/4506/430 2420/12624/456 2419/4507/428 +f 2618/4632/456 2569/4627/428 2571/4635/430 +s 2 +f 2525/4430/1549 2740/4828/2644 2750/4840/1629 +s 8 +f 2543/4451/430 2748/4927/428 2741/4844/428 +s 1 +f 2651/4890/428 2650/12625/428 2648/4888/430 +f 2775/5002/430 2774/4995/429 2814/4999/430 +# 5430 polygons - 1750 triangles + diff --git a/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg new file mode 100644 index 0000000..cbd05be Binary files /dev/null and b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/King_George_V_bump.jpg differ diff --git a/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/README.txt b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/README.txt new file mode 100644 index 0000000..ce2ac33 --- /dev/null +++ b/Projekte/battleship/converter/src/main/resources/Models/KingGeorgeV/README.txt @@ -0,0 +1,3 @@ +based on: +https://free3d.com/3d-model/wwii-ship-uk-king-george-v-class-battleship-v1--185381.html +License: Free Personal Use Only \ No newline at end of file diff --git a/Projekte/battleship/model/build.gradle b/Projekte/battleship/model/build.gradle new file mode 100644 index 0000000..4848667 --- /dev/null +++ b/Projekte/battleship/model/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'buildlogic.java-library-conventions' +} + +description = 'Battleship common model' + +dependencies { + api project(":common") + api libs.jme3.networking + implementation libs.gson + testImplementation libs.mockito.core +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/BattleshipConfig.java b/Projekte/battleship/model/src/main/java/pp/battleship/BattleshipConfig.java new file mode 100644 index 0000000..f6b4cf2 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/BattleshipConfig.java @@ -0,0 +1,103 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship; + +import pp.util.config.Config; + +import java.util.Map; +import java.util.TreeMap; + +import static java.lang.Math.max; + +/** + * Provides access to the configuration settings for the Battleship game. + *

+ * This class allows for loading configuration settings from a properties file, + * including the server port, map dimensions, and the number of ships of various lengths. + *

+ *

+ * Note: Attributes of this class are not marked as {@code final} to allow + * for proper initialization when reading from a properties file. + *

+ */ +public class BattleshipConfig extends Config { + + /** + * The default port number for the Battleship server. + */ + @Property("port") + private int port = 1234; + + /** + * The width of the game map in terms of grid units. + */ + @Property("map.width") + private int mapWidth = 10; + + /** + * The height of the game map in terms of grid units. + */ + @Property("map.height") + private int mapHeight = 10; + + /** + * An array representing the number of ships available for each length. + * The index corresponds to the ship length minus one, and the value at each index + * is the number of ships of that length. + */ + @Property("ship.nums") + private int[] shipNums = {4, 3, 2, 1}; + + /** + * Creates an instance of {@code BattleshipConfig} with default settings. + */ + public BattleshipConfig() { + // Default constructor + } + + /** + * Returns the port number configured for the Battleship server. + * + * @return the port number + */ + public int getPort() { + return port; + } + + /** + * Returns the width of the game map. The width is guaranteed to be at least 2 units. + * + * @return the width of the game map + */ + public int getMapWidth() { + return max(mapWidth, 2); + } + + /** + * Returns the height of the game map. The height is guaranteed to be at least 2 units. + * + * @return the height of the game map + */ + public int getMapHeight() { + return max(mapHeight, 2); + } + + /** + * Returns a map representing the number of ships for each length. + * The keys are ship lengths, and the values are the corresponding number of ships. + * + * @return a map of ship lengths to the number of ships + */ + public Map getShipNums() { + final TreeMap ships = new TreeMap<>(); + for (int i = 0; i < shipNums.length; i++) + if (shipNums[i] > 0) + ships.put(i + 1, shipNums[i]); + return ships; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/Resources.java b/Projekte/battleship/model/src/main/java/pp/battleship/Resources.java new file mode 100644 index 0000000..f2903c8 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/Resources.java @@ -0,0 +1,40 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship; + +import java.util.ResourceBundle; + +/** + * Provides access to the resource bundle of the game. + * + * @see #BUNDLE + */ +public class Resources { + /** + * The resource bundle for the Battleship game. + */ + public static final ResourceBundle BUNDLE = ResourceBundle.getBundle("battleship"); //NON-NLS + + /** + * Gets a string for the given key from the resource bundle in {@linkplain #BUNDLE}. + * + * @param key the key for the desired string + * @return the string for the given key + * @throws NullPointerException if {@code key} is {@code null} + * @throws java.util.MissingResourceException if no object for the given key can be found + * @throws ClassCastException if the object found for the given key is not a string + */ + public static String lookup(String key) { + return BUNDLE.getString(key); + } + + /** + * Private constructor to prevent instantiation. + */ + private Resources() { /* do not instantiate */ } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java new file mode 100644 index 0000000..fa8d731 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleState.java @@ -0,0 +1,102 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.model.IntPoint; +import pp.battleship.model.ShipMap; +import pp.battleship.notification.Sound; + +import java.lang.System.Logger.Level; + +/** + * Represents the state of the client where players take turns to attack each other's ships. + */ +class BattleState extends ClientState { + private boolean myTurn; + + /** + * Constructs a new instance of {@link BattleState}. + * + * @param logic the game logic + * @param myTurn true if it is my turn + */ + public BattleState(ClientGameLogic logic, boolean myTurn) { + super(logic); + this.myTurn = myTurn; + } + + @Override + public boolean showBattle() { + return true; + } + + @Override + public void clickOpponentMap(IntPoint pos) { + if (!myTurn) + logic.setInfoText("wait.its.not.your.turn"); + else if (logic.getOpponentMap().isValid(pos)) + logic.send(new ShootMessage(pos)); + } + + /** + * Reports the effect of a shot based on the server message. + * + * @param msg the message containing the effect of the shot + */ + @Override + public void receivedEffect(EffectMessage msg) { + ClientGameLogic.LOGGER.log(Level.INFO, "report effect: {0}", msg); //NON-NLS + playSound(msg); + myTurn = msg.isMyTurn(); + logic.setInfoText(msg.getInfoTextKey()); + affectedMap(msg).add(msg.getShot()); + if (destroyedOpponentShip(msg)) + logic.getOpponentMap().add(msg.getDestroyedShip()); + if (msg.isGameOver()) { + msg.getRemainingOpponentShips().forEach(logic.getOwnMap()::add); + logic.setState(new GameOverState(logic)); + } + } + + /** + * Determines which map (own or opponent's) should be affected by the shot based on the message. + * + * @param msg the effect message received from the server + * @return the map (either the opponent's or player's own map) that is affected by the shot + */ + private ShipMap affectedMap(EffectMessage msg) { + return msg.isOwnShot() ? logic.getOpponentMap() : logic.getOwnMap(); + } + + /** + * Checks if the opponent's ship was destroyed by the player's shot. + * + * @param msg the effect message received from the server + * @return true if the shot destroyed an opponent's ship, false otherwise + */ + private boolean destroyedOpponentShip(EffectMessage msg) { + return msg.getDestroyedShip() != null && msg.isOwnShot(); + } + + /** + * Plays a sound based on the outcome of the shot. Different sounds are played for a miss, hit, + * or destruction of a ship. + * + * @param msg the effect message containing the result of the shot + */ + private void playSound(EffectMessage msg) { + if (!msg.getShot().isHit()) + logic.playSound(Sound.SPLASH); + else if (msg.getDestroyedShip() == null) + logic.playSound(Sound.EXPLOSION); + else + logic.playSound(Sound.DESTROYED_SHIP); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleshipClient.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleshipClient.java new file mode 100644 index 0000000..16bee44 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/BattleshipClient.java @@ -0,0 +1,38 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.game.singlemode.BattleshipClientConfig; + +/** + * Interface representing a Battleship client. + * Provides methods to access game logic, configuration, and to enqueue tasks. + */ +public interface BattleshipClient { + + /** + * Returns the game logic associated with this client. + * + * @return the ClientGameLogic instance + */ + ClientGameLogic getGameLogic(); + + /** + * Returns the configuration associated with this client. + * + * @return the BattleshipConfig instance + */ + BattleshipClientConfig getConfig(); + + /** + * Enqueues a task to be executed by the client. + * + * @param runnable the task to be executed + */ + void enqueue(Runnable runnable); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientGameLogic.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientGameLogic.java new file mode 100644 index 0000000..3170e8b --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientGameLogic.java @@ -0,0 +1,355 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.ServerInterpreter; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.IntPoint; +import pp.battleship.model.ShipMap; +import pp.battleship.model.dto.ShipMapDTO; +import pp.battleship.notification.ClientStateEvent; +import pp.battleship.notification.GameEvent; +import pp.battleship.notification.GameEventBroker; +import pp.battleship.notification.GameEventListener; +import pp.battleship.notification.InfoTextEvent; +import pp.battleship.notification.Sound; +import pp.battleship.notification.SoundEvent; + +import java.io.File; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.ArrayList; +import java.util.List; + +import static java.lang.Math.max; + +/** + * Controls the client-side game logic for Battleship. + * Manages the player's ship placement, interactions with the map, and response to server messages. + */ +public class ClientGameLogic implements ServerInterpreter, GameEventBroker { + static final Logger LOGGER = System.getLogger(ClientGameLogic.class.getName()); + private final ClientSender clientSender; + private final List listeners = new ArrayList<>(); + private GameDetails details; + private ShipMap ownMap; + private ShipMap harbor; + private ShipMap opponentMap; + private ClientState state = new InitialState(this); + + /** + * Constructs a ClientGameLogic with the specified sender object. + * + * @param clientSender the object used to send messages to the server + */ + public ClientGameLogic(ClientSender clientSender) { + this.clientSender = clientSender; + } + + /** + * Returns the current state of the game logic. + */ + ClientState getState() { + return state; + } + + /** + * Sets the current state of the game logic. + * + * @param newState the new state to be set + */ + void setState(ClientState newState) { + LOGGER.log(Level.DEBUG, "state transition {0} --> {1}", state.getName(), newState.getName()); //NON-NLS + state = newState; + notifyListeners(new ClientStateEvent()); + state.entry(); + } + + /** + * Returns the game details. + * + * @return the game details + */ + GameDetails getDetails() { + return details; + } + + /** + * Returns the player's own map. + * + * @return the player's own map + */ + public ShipMap getOwnMap() { + return ownMap; + } + + /** + * Returns the opponent's map. + * + * @return the opponent's map + */ + public ShipMap getOpponentMap() { + return opponentMap; + } + + /** + * Returns the harbor map. + * + * @return the harbor map + */ + public ShipMap getHarbor() { + return harbor; + } + + /** + * Checks if the editor should be shown. + * + * @return true if the editor should be shown, false otherwise + */ + public boolean showEditor() { + return state.showEditor(); + } + + /** + * Checks if the battle state should be shown. + * + * @return true if the battle state should be shown, false otherwise + */ + public boolean showBattle() { + return state.showBattle(); + } + + /** + * Sets the game details provided by the server. + * + * @param details the game details including map size and ships + */ + @Override + public void received(GameDetails details) { + state.receivedGameDetails(details); + } + + /** + * Moves the preview ship to the specified position. + * + * @param pos the new position for the preview ship + */ + public void movePreview(IntPoint pos) { + state.movePreview(pos); + } + + /** + * Handles a click on the player's own map. + * + * @param pos the position where the click occurred + */ + public void clickOwnMap(IntPoint pos) { + state.clickOwnMap(pos); + } + + /** + * Handles a click on the harbor map. + * + * @param pos the position where the click occurred + */ + public void clickHarbor(IntPoint pos) { + state.clickHarbor(pos); + } + + /** + * Handles a click on the opponent's map. + * + * @param pos the position where the click occurred + */ + public void clickOpponentMap(IntPoint pos) { + state.clickOpponentMap(pos); + } + + /** + * Rotates the preview ship. + */ + public void rotateShip() { + state.rotateShip(); + } + + /** + * Marks the player's map as finished. + */ + public void mapFinished() { + state.mapFinished(); + } + + /** + * Checks if the player's map is complete (i.e., all ships are placed). + * + * @return true if all ships are placed, false otherwise + */ + public boolean isMapComplete() { + return state.isMapComplete(); + } + + /** + * Checks if there is currently a preview ship. + * + * @return true if there is currently a preview ship, false otherwise + */ + public boolean movingShip() { + return state.movingShip(); + } + + /** + * Starts the battle based on the server message. + * + * @param msg the message indicating whose turn it is to shoot + */ + @Override + public void received(StartBattleMessage msg) { + state.receivedStartBattle(msg); + } + + /** + * Reports the effect of a shot based on the server message. + * + * @param msg the message containing the effect of the shot + */ + @Override + public void received(EffectMessage msg) { + state.receivedEffect(msg); + } + + /** + * Initializes the player's own map, opponent's map, and harbor based on the game details. + * + * @param details the game details including map size and ships + */ + void initializeMaps(GameDetails details) { + this.details = details; + final int numShips = details.getShipNums().values().stream().mapToInt(Integer::intValue).sum(); + final int maxLength = details.getShipNums().keySet().stream().mapToInt(Integer::intValue).max().orElse(2); + ownMap = new ShipMap(details.getWidth(), details.getHeight(), this); + opponentMap = new ShipMap(details.getWidth(), details.getHeight(), this); + harbor = new ShipMap(max(maxLength, 2), max(numShips, details.getHeight()), this); + } + + /** + * Sets the informational text to be displayed to the player. + * + * @param key the key for the info text + */ + void setInfoText(String key) { + notifyListeners(new InfoTextEvent(key)); + } + + /** + * Emits an event to play the specified sound. + * + * @param sound the sound to be played. + */ + public void playSound(Sound sound) { + notifyListeners(new SoundEvent(sound)); + } + + /** + * Loads a map from the specified file. + * + * @param file the file to load the map from + * @throws IOException if an I/O error occurs + */ + public void loadMap(File file) throws IOException { + state.loadMap(file); + } + + /** + * Checks if the player's own map may be loaded from a file. + * + * @return true if the own map may be loaded from file, false otherwise + */ + public boolean mayLoadMap() { + return state.mayLoadMap(); + } + + /** + * Checks if the player's own map may be saved to a file. + * + * @return true if the own map may be saved to file, false otherwise + */ + public boolean maySaveMap() { + return state.maySaveMap(); + } + + /** + * Saves the player's own map to the specified file. + * + * @param file the file to save the map to + * @throws IOException if the map cannot be saved in the current state + */ + public void saveMap(File file) throws IOException { + if (ownMap != null && maySaveMap()) + new ShipMapDTO(ownMap).saveTo(file); + else + throw new IOException("You are not allowed to save the map in this state of the game"); + } + + /** + * Sends a message to the server. + * + * @param msg the message to be sent + */ + void send(ClientMessage msg) { + if (clientSender == null) + LOGGER.log(Level.ERROR, "trying to send {0} with sender==null", msg); //NON-NLS + else + clientSender.send(msg); + } + + /** + * Adds a listener to receive game events. + * + * @param listener the listener to add + */ + public synchronized void addListener(GameEventListener listener) { + listeners.add(listener); + } + + /** + * Removes a listener from receiving game events. + * + * @param listener the listener to remove + */ + public synchronized void removeListener(GameEventListener listener) { + listeners.remove(listener); + } + + /** + * Notifies all listeners of a game event. + * + * @param event the game event to notify listeners of + */ + @Override + public void notifyListeners(GameEvent event) { + final List copy; + synchronized (this) { + copy = new ArrayList<>(listeners); + } + for (GameEventListener listener : copy) + event.notifyListener(listener); + } + + /** + * Called once per frame by the update loop. + * + * @param delta time in seconds since the last update call + */ + public void update(float delta) { + state.update(delta); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientSender.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientSender.java new file mode 100644 index 0000000..a066bfd --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientSender.java @@ -0,0 +1,22 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.client.ClientMessage; + +/** + * Interface for sending messages to the server. + */ +public interface ClientSender { + /** + * Send the specified message to the server. + * + * @param message the message + */ + void send(ClientMessage message); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientState.java new file mode 100644 index 0000000..f6b73fc --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ClientState.java @@ -0,0 +1,202 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.IntPoint; + +import java.io.File; +import java.io.IOException; +import java.lang.System.Logger.Level; + +/** + * Defines the behavior and state transitions for the client-side game logic. + * Different states of the game logic implement this interface to handle various game events and actions. + */ +abstract class ClientState { + /** + * The game logic object. + */ + final ClientGameLogic logic; + + /** + * Constructs a client state of the specified game logic. + * + * @param logic the game logic + */ + ClientState(ClientGameLogic logic) { + this.logic = logic; + } + + /** + * Method to be overridden by subclasses for post-transition initialization. + * By default, it does nothing, but it can be overridden in derived states. + */ + void entry() { + // Default implementation does nothing + } + + /** + * Returns the name of the current state. + * + * @return the name of the current state + */ + String getName() { + return getClass().getSimpleName(); + } + + /** + * Checks if the editor should be shown. + * + * @return true if the editor should be shown, false otherwise + */ + boolean showEditor() { + return false; + } + + /** + * Checks if the battle state should be shown. + * + * @return true if the battle state should be shown, false otherwise + */ + boolean showBattle() { + return false; + } + + /** + * Checks if the player's map is complete (i.e., all ships are placed). + * + * @return true if all ships are placed, false otherwise + */ + boolean isMapComplete() { + return false; + } + + /** + * Checks if there is currently a preview ship. + * + * @return true if there is currently a preview ship, false otherwise + */ + boolean movingShip() { + return false; + } + + /** + * Handles a click on the player's own map. + * + * @param pos the position where the click occurred + */ + void clickOwnMap(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "clickOwnMap has no effect in {0}", getName()); //NON-NLS + } + + /** + * Handles a click on the harbor map. + * + * @param pos the position where the click occurred + */ + void clickHarbor(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "clickHarbor has no effect in {0}", getName()); //NON-NLS + } + + /** + * Handles a click on the opponent's map. + * + * @param pos the position where the click occurred + */ + void clickOpponentMap(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "clickOpponentMap has no effect in {0}", getName()); //NON-NLS + } + + /** + * Moves the preview ship to the specified position. + * + * @param pos the new position for the preview ship + */ + void movePreview(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "movePreview has no effect in {0}", getName()); //NON-NLS + } + + /** + * Rotates the preview ship. + */ + void rotateShip() { + ClientGameLogic.LOGGER.log(Level.DEBUG, "rotateShip has no effect in {0}", getName()); //NON-NLS + } + + /** + * The user has marked the map as finished. + */ + void mapFinished() { + ClientGameLogic.LOGGER.log(Level.ERROR, "mapFinished not allowed in {0}", getName()); //NON-NLS + } + + /** + * Sets the game details provided by the server. + * + * @param details the game details including map size and ships + */ + void receivedGameDetails(GameDetails details) { + ClientGameLogic.LOGGER.log(Level.ERROR, "receivedGameDetails not allowed in {0}", getName()); //NON-NLS + } + + /** + * Starts the battle based on the server message. + * + * @param msg the message indicating whose turn it is to shoot + */ + void receivedStartBattle(StartBattleMessage msg) { + ClientGameLogic.LOGGER.log(Level.ERROR, "receivedStartBattle not allowed in {0}", getName()); //NON-NLS + } + + /** + * Reports the effect of a shot based on the server message. + * + * @param msg the message containing the effect of the shot + */ + void receivedEffect(EffectMessage msg) { + ClientGameLogic.LOGGER.log(Level.ERROR, "receivedEffect not allowed in {0}", getName()); //NON-NLS + } + + /** + * Loads a map from the specified file. + * + * @param file the file to load the map from + * @throws IOException if the map cannot be loaded in the current state + */ + void loadMap(File file) throws IOException { + throw new IOException("You are not allowed to load a map in this state of the game"); + } + + /** + * Checks if the own map may be loaded from file. + * + * @return true if the own map may be loaded from file, false otherwise + */ + boolean mayLoadMap() { + return false; + } + + /** + * Checks if the own map may be saved to file. + * + * @return true if the own map may be saved to file, false otherwise + */ + boolean maySaveMap() { + return true; + } + + /** + * Called once per frame by the update loop if this state is active. + * + * @param delta time in seconds since the last update call + */ + void update(float delta) { /* do nothing by default */ } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/EditorState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/EditorState.java new file mode 100644 index 0000000..3e5b837 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/EditorState.java @@ -0,0 +1,267 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.client.MapMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.IntPoint; +import pp.battleship.model.ShipMap; +import pp.battleship.model.dto.ShipMapDTO; + +import java.io.File; +import java.io.IOException; +import java.lang.System.Logger.Level; + +import static pp.battleship.Resources.lookup; +import static pp.battleship.model.Battleship.Status.INVALID_PREVIEW; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Battleship.Status.VALID_PREVIEW; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Represents the state of the client setting up the ship map. + */ +class EditorState extends ClientState { + private Battleship preview; + private Battleship selectedInHarbor; + + /** + * Constructs a new EditorState with the specified ClientGameLogic. + * + * @param logic the ClientGameLogic associated with this state + */ + public EditorState(ClientGameLogic logic) { + super(logic); + } + + /** + * Returns true to indicate that the editor should be shown. + * + * @return true if the editor should be shown + */ + @Override + public boolean showEditor() { + return true; + } + + /** + * Moves the preview ship to the specified position. + * + * @param pos the new position for the preview ship + */ + @Override + public void movePreview(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "move preview to {0}", pos); //NON-NLS + if (preview == null || !ownMap().isValid(pos)) return; + preview.moveTo(pos); + setPreviewStatus(preview); + ownMap().remove(preview); + ownMap().add(preview); + } + + /** + * Handles a click on the player's own map. + * + * @param pos the position where the click occurred + */ + @Override + public void clickOwnMap(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "click at {0} in own map", pos); //NON-NLS + if (!ownMap().isValid(pos)) return; + if (preview == null) + modifyShip(pos); + else + placeShip(pos); + } + + /** + * Modifies a ship on the map at the specified position. + * + * @param cursor the position of the ship to modify + */ + private void modifyShip(IntPoint cursor) { + preview = ownMap().findShipAt(cursor); + if (preview == null) + return; + preview.moveTo(cursor); + setPreviewStatus(preview); + ownMap().remove(preview); + ownMap().add(preview); + selectedInHarbor = new Battleship(preview.getLength(), 0, freeY(), RIGHT); + selectedInHarbor.setStatus(VALID_PREVIEW); + harbor().add(selectedInHarbor); + } + + /** + * Places the preview ship at the specified position. + * + * @param cursor the position to place the ship + */ + private void placeShip(IntPoint cursor) { + ownMap().remove(preview); + preview.moveTo(cursor); + if (ownMap().isValid(preview)) { + preview.setStatus(NORMAL); + ownMap().add(preview); + harbor().remove(selectedInHarbor); + preview = null; + selectedInHarbor = null; + } + else { + preview.setStatus(INVALID_PREVIEW); + ownMap().add(preview); + } + } + + /** + * Handles a click on the harbor map. + * + * @param pos the position where the click occurred + */ + @Override + public void clickHarbor(IntPoint pos) { + ClientGameLogic.LOGGER.log(Level.DEBUG, "click at {0} in harbor", pos); //NON-NLS + if (!harbor().isValid(pos)) return; + final Battleship shipAtCursor = harbor().findShipAt(pos); + if (preview != null) { + ownMap().remove(preview); + selectedInHarbor.setStatus(NORMAL); + harbor().remove(selectedInHarbor); + harbor().add(selectedInHarbor); + preview = null; + selectedInHarbor = null; + } + else if (shipAtCursor != null) { + selectedInHarbor = shipAtCursor; + selectedInHarbor.setStatus(VALID_PREVIEW); + harbor().remove(selectedInHarbor); + harbor().add(selectedInHarbor); + preview = new Battleship(selectedInHarbor.getLength(), 0, 0, RIGHT); + setPreviewStatus(preview); + ownMap().add(preview); + } + } + + /** + * Rotates the preview ship. + */ + @Override + public void rotateShip() { + ClientGameLogic.LOGGER.log(Level.DEBUG, "pushed rotate"); //NON-NLS + if (preview == null) return; + preview.rotated(); + ownMap().remove(preview); + ownMap().add(preview); + } + + /** + * Finds a free position in the harbor to place a ship. + * + * @return the y coordinate of a free position in the harbor + */ + private int freeY() { + for (int i = 0; i < harbor().getHeight(); i++) + if (harbor().findShipAt(0, i) == null) + return i; + throw new RuntimeException("Cannot find a free slot in harbor"); + } + + /** + * Updates the status of the specified ship based on its validity. + */ + private void setPreviewStatus(Battleship ship) { + ship.setStatus(ownMap().isValid(ship) ? VALID_PREVIEW : INVALID_PREVIEW); + } + + /** + * The user has marked the map as finished. + */ + @Override + public void mapFinished() { + if (!harbor().getItems().isEmpty()) return; + logic.send(new MapMessage(ownMap().getRemainingShips())); + logic.setInfoText("wait.for.opponent"); + logic.setState(new WaitState(logic)); + } + + /** + * Checks if the player's map is complete (i.e., all ships are placed). + * + * @return true if all ships are placed, false otherwise + */ + @Override + public boolean isMapComplete() { + return harbor().getItems().isEmpty(); + } + + /** + * Checks if there is currently a preview ship. + * + * @return true if there is currently a preview ship, false otherwise + */ + @Override + public boolean movingShip() { + return preview != null; + } + + /** + * Returns the player's own map. + * + * @return the player's own map + */ + private ShipMap ownMap() { + return logic.getOwnMap(); + } + + /** + * Returns the harbor map. + * + * @return the harbor map + */ + private ShipMap harbor() { + return logic.getHarbor(); + } + + /** + * Loads a map from the specified file. + * + * @param file the file to load the map from + * @throws IOException if the map cannot be loaded + */ + @Override + public void loadMap(File file) throws IOException { + final ShipMapDTO dto = ShipMapDTO.loadFrom(file); + if (!dto.fits(logic.getDetails())) + throw new IOException(lookup("map.doesnt.fit")); + ownMap().clear(); + dto.getShips().forEach(ownMap()::add); + harbor().clear(); + preview = null; + selectedInHarbor = null; + } + + /** + * Checks if the player's own map may be loaded from a file. + * + * @return true if the own map may be loaded from file, false otherwise + */ + @Override + public boolean mayLoadMap() { + return true; + } + + /** + * Checks if the player's own map may be saved to a file. + * + * @return true if the own map may be saved to file, false otherwise + */ + @Override + public boolean maySaveMap() { + return harbor().getItems().isEmpty(); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/GameOverState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/GameOverState.java new file mode 100644 index 0000000..40d2ede --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/GameOverState.java @@ -0,0 +1,32 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +/** + * Represents the state of the client when the game is over. + */ +class GameOverState extends ClientState { + /** + * Constructs a new instance of GameOverState. + * + * @param logic the client game logic + */ + GameOverState(ClientGameLogic logic) { + super(logic); + } + + /** + * Returns true to indicate that the battle state should be shown. + * + * @return true if the battle state should be shown + */ + @Override + public boolean showBattle() { + return true; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/InitialState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/InitialState.java new file mode 100644 index 0000000..4acc927 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/InitialState.java @@ -0,0 +1,65 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.server.GameDetails; +import pp.battleship.model.Battleship; +import pp.battleship.model.Rotation; + +import java.util.Map.Entry; + +/** + * Represents the state of the client waiting for the + * {@linkplain pp.battleship.message.server.GameDetails} + * from the server. + */ +class InitialState extends ClientState { + /** + * Creates a new initial state. + * + * @param logic the game logic + */ + public InitialState(ClientGameLogic logic) { + super(logic); + } + + /** + * Sets the game details provided by the server. + * + * @param details the game details including map size and ships + */ + @Override + public void receivedGameDetails(GameDetails details) { + logic.initializeMaps(details); + fillHarbor(details); + logic.setInfoText(details.getInfoTextKey()); + logic.setState(new EditorState(logic)); + } + + /** + * Fills the harbor with ships as specified by the game details. + * + * @param details the game details including map size and ships + */ + private void fillHarbor(GameDetails details) { + int y = 0; + for (Entry entry : details.getShipNums().entrySet()) { + final int len = entry.getKey(); + final int num = entry.getValue(); + for (int i = 0; i < num; i++) { + final Battleship ship = new Battleship(len, 0, y++, Rotation.RIGHT); + logic.getHarbor().add(ship); + } + } + } + + @Override + public boolean maySaveMap() { + return false; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ServerConnection.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ServerConnection.java new file mode 100644 index 0000000..9387252 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/ServerConnection.java @@ -0,0 +1,32 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +/** + * Interface representing a connection to the server. + * Extends ClientSender to allow sending messages to the server. + */ +public interface ServerConnection extends ClientSender { + + /** + * Checks if the client is currently connected to the server. + * + * @return true if connected, false otherwise. + */ + boolean isConnected(); + + /** + * Establishes a connection to the server. + */ + void connect(); + + /** + * Disconnects from the server. + */ + void disconnect(); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/client/WaitState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/WaitState.java new file mode 100644 index 0000000..90cb817 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/client/WaitState.java @@ -0,0 +1,41 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import pp.battleship.message.server.StartBattleMessage; + +import java.lang.System.Logger.Level; + +class WaitState extends ClientState { + + /** + * Creates a new instance of {@link WaitState}. + * + * @param logic the game logic + */ + public WaitState(ClientGameLogic logic) { + super(logic); + } + + @Override + public boolean showEditor() { + return true; + } + + /** + * Starts the battle based on the server message. + * + * @param msg the message indicating whose turn it is to shoot + */ + @Override + public void receivedStartBattle(StartBattleMessage msg) { + ClientGameLogic.LOGGER.log(Level.INFO, "start battle, {0} turn", msg.isMyTurn() ? "my" : "other's"); //NON-NLS + logic.setInfoText(msg.getInfoTextKey()); + logic.setState(new BattleState(logic, msg.isMyTurn())); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/Player.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/Player.java new file mode 100644 index 0000000..71aeea5 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/Player.java @@ -0,0 +1,54 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import pp.battleship.BattleshipConfig; +import pp.battleship.model.ShipMap; + +/** + * Class representing a player + */ +public class Player { + private final ShipMap map; + private final String name; + private final int id; + + /** + * Creates new Player + * + * @param id the id of the connection to the client represented by this player + * @param name the human-readable name of this player + * @param config model holding the player + */ + Player(int id, String name, BattleshipConfig config) { + this.id = id; + this.name = name; + map = new ShipMap(config.getMapWidth(), config.getMapHeight(), null); + } + + /** + * Returns the id of the connection to the client represented by this player. + * + * @return the id + */ + public int getId() { + return id; + } + + @Override + public String toString() { + return String.format("Player(%s,%s)", name, id); //NON-NLS + } + + /** + * @return map containing own ships and shots + */ + public ShipMap getMap() { + return map; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java new file mode 100644 index 0000000..a5987fa --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerGameLogic.java @@ -0,0 +1,220 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.ClientInterpreter; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.ServerMessage; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.IntPoint; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Controls the server-side game logic for Battleship. + * Manages game states, player interactions, and message handling. + */ +public class ServerGameLogic implements ClientInterpreter { + private static final Logger LOGGER = System.getLogger(ServerGameLogic.class.getName()); + + private final BattleshipConfig config; + private final List players = new ArrayList<>(2); + private final Set readyPlayers = new HashSet<>(); + private final ServerSender serverSender; + private Player activePlayer; + private ServerState state = ServerState.WAIT; + + /** + * Constructs a ServerGameLogic with the specified sender and configuration. + * + * @param serverSender the sender used to send messages to clients + * @param config the game configuration + */ + public ServerGameLogic(ServerSender serverSender, BattleshipConfig config) { + this.serverSender = serverSender; + this.config = config; + } + + /** + * Returns the state of the game. + */ + ServerState getState() { + return state; + } + + /** + * Sets the new state of the game and logs the state transition. + * + * @param newState the new state to set + */ + void setState(ServerState newState) { + LOGGER.log(Level.DEBUG, "state transition {0} --> {1}", state, newState); //NON-NLS + state = newState; + } + + /** + * Returns the opponent of the specified player. + * + * @param p the player + * @return the opponent of the player + */ + Player getOpponent(Player p) { + if (players.size() != 2) + throw new RuntimeException("trying to find opponent without having 2 players"); + final int index = players.indexOf(p); + if (index < 0) + throw new RuntimeException("Nonexistent player " + p); + return players.get(1 - index); + } + + /** + * Returns the player representing the client with the specified connection ID. + * + * @param id the ID of the client + * @return the player associated with the client ID, or null if not found + */ + public Player getPlayerById(int id) { + for (Player player : players) + if (player.getId() == id) + return player; + LOGGER.log(Level.ERROR, "no player found with connection {0}", id); //NON-NLS + return null; + } + + /** + * Sends a message to the specified player. + * + * @param player the player to send the message to + * @param msg the message to send + */ + void send(Player player, ServerMessage msg) { + LOGGER.log(Level.INFO, "sending to {0}: {1}", player, msg); //NON-NLS + serverSender.send(player.getId(), msg); + } + + /** + * Adds a new player to the game if there are less than two players. + * Transitions the state to SET_UP if two players are present. + * + * @param id the connection ID of the new player + * @return the player added to the game, or null if the game is not in the right state + */ + public Player addPlayer(int id) { + if (state != ServerState.WAIT) { + LOGGER.log(Level.ERROR, "addPlayer not allowed in {0}", state); //NON-NLS + return null; + } + final int n = players.size() + 1; + final Player player = new Player(id, "player " + n, config); //NON-NLS + LOGGER.log(Level.INFO, "adding {0}", player); //NON-NLS + players.add(player); + if (players.size() == 2) { + activePlayer = players.get(0); + for (Player p : players) + send(p, new GameDetails(config)); + setState(ServerState.SET_UP); + } + return player; + } + + /** + * Handles the reception of a MapMessage. + * + * @param msg the received MapMessage + * @param from the ID of the sender client + */ + @Override + public void received(MapMessage msg, int from) { + if (state != ServerState.SET_UP) + LOGGER.log(Level.ERROR, "playerReady not allowed in {0}", state); //NON-NLS + else + playerReady(getPlayerById(from), msg.getShips()); + } + + /** + * Handles the reception of a ShootMessage. + * + * @param msg the received ShootMessage + * @param from the ID of the sender client + */ + @Override + public void received(ShootMessage msg, int from) { + if (state != ServerState.BATTLE) + LOGGER.log(Level.ERROR, "shoot not allowed in {0}", state); //NON-NLS + else + shoot(getPlayerById(from), msg.getPosition()); + } + + /** + * Marks the player as ready and sets their ships. + * Transitions the state to PLAY if both players are ready. + * + * @param player the player who is ready + * @param ships the list of ships placed by the player + */ + void playerReady(Player player, List ships) { + if (!readyPlayers.add(player)) { + LOGGER.log(Level.ERROR, "{0} was already ready", player); //NON-NLS + return; + } + ships.forEach(player.getMap()::add); + if (readyPlayers.size() == 2) { + for (Player p : players) + send(p, new StartBattleMessage(p == activePlayer)); + setState(ServerState.BATTLE); + } + } + + /** + * Handles the shooting action by the player. + * + * @param p the player who shot + * @param pos the position of the shot + */ + void shoot(Player p, IntPoint pos) { + if (p != activePlayer) return; + final Player otherPlayer = getOpponent(activePlayer); + final Battleship selectedShip = otherPlayer.getMap().findShipAt(pos); + if (selectedShip == null) { + // shot missed + send(activePlayer, EffectMessage.miss(true, pos)); + send(otherPlayer, EffectMessage.miss(false, pos)); + activePlayer = otherPlayer; + } + else { + // shot hit a ship + selectedShip.hit(pos); + if (otherPlayer.getMap().getRemainingShips().isEmpty()) { + // game is over + send(activePlayer, EffectMessage.won(pos, selectedShip)); + send(otherPlayer, EffectMessage.lost(pos, selectedShip, activePlayer.getMap().getRemainingShips())); + setState(ServerState.GAME_OVER); + } + else if (selectedShip.isDestroyed()) { + // ship has been destroyed, but game is not yet over + send(activePlayer, EffectMessage.shipDestroyed(true, pos, selectedShip)); + send(otherPlayer, EffectMessage.shipDestroyed(false, pos, selectedShip)); + } + else { + // ship has been hit, but it hasn't been destroyed + send(activePlayer, EffectMessage.hit(true, pos)); + send(otherPlayer, EffectMessage.hit(false, pos)); + } + } + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerSender.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerSender.java new file mode 100644 index 0000000..426c31f --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerSender.java @@ -0,0 +1,23 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import pp.battleship.message.server.ServerMessage; + +/** + * Interface for sending messages to a client. + */ +public interface ServerSender { + /** + * Send the specified message to the client. + * + * @param id the id of the client that shall receive the message + * @param message the message + */ + void send(int id, ServerMessage message); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java new file mode 100644 index 0000000..507aa7a --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/server/ServerState.java @@ -0,0 +1,33 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +/** + * Represents the different states of the Battleship server during the game lifecycle. + */ +enum ServerState { + /** + * The server is waiting for clients to connect. + */ + WAIT, + + /** + * The server is waiting for clients to set up their maps. + */ + SET_UP, + + /** + * The battle of the game where players take turns to attack each other's ships. + */ + BATTLE, + + /** + * The game has ended because all the ships of one player have been destroyed. + */ + GAME_OVER +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/BattleshipClientConfig.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/BattleshipClientConfig.java new file mode 100644 index 0000000..7acdf3f --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/BattleshipClientConfig.java @@ -0,0 +1,114 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.singlemode; + +import pp.battleship.BattleshipConfig; +import pp.battleship.model.IntPoint; + +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Class providing access to the Battleship client configuration. + * Extends {@link BattleshipConfig} to include additional properties specific to the client. + * This class manages configuration settings related to the RobotClient's behavior + * and the game maps used in single mode. + *

+ * Note: Attributes of this class should not be marked as {@code final} + * to ensure proper functionality when reading from a properties file. + *

+ */ +public class BattleshipClientConfig extends BattleshipConfig { + + /** + * Array representing the predefined shooting locations for the RobotClient. + * The array stores coordinates in pairs, where even indices represent x-coordinates + * and odd indices represent y-coordinates. + */ + @Property("robot.targets") + private int[] robotTargets = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + + /** + * The delay (in milliseconds) between shots fired by the RobotClient. + */ + @Property("robot.delay") + private int delay = 750; + + /** + * Path to the file representing the opponent's map. + */ + @Property("map.opponent") + private String opponentMap; + + /** + * Path to the file representing the player's own map. + */ + @Property("map.own") + private String ownMap; + + /** + * Creates a default {@code BattleshipClientConfig} with predefined values. + */ + public BattleshipClientConfig() { + // Default constructor + } + + /** + * Returns an iterator of {@link IntPoint} objects representing the predefined + * shooting locations for the RobotClient. + * + * @return an iterator of {@code IntPoint} representing the shooting locations. + */ + public Iterator getRobotTargets() { + List targets = new ArrayList<>(); + for (int i = 0; i < robotTargets.length; i += 2) { + int x = robotTargets[i]; + int y = robotTargets[i + 1]; + targets.add(new IntPoint(x, y)); + } + return targets.iterator(); + } + + /** + * Returns the delay (in milliseconds) between shots by the RobotClient. + * + * @return the delay in milliseconds. + */ + public int getDelay() { + return delay; + } + + /** + * Returns the file representing the opponent's map. + * + * @return the opponent's map file, or {@code null} if not set. + */ + public File getOpponentMap() { + return opponentMap == null ? null : new File(opponentMap); + } + + /** + * Returns the file representing the player's own map. + * + * @return the player's own map file, or {@code null} if not set. + */ + public File getOwnMap() { + return ownMap == null ? null : new File(ownMap); + } + + /** + * Determines if the game is in single mode based on the presence of an opponent map. + * + * @return {@code true} if the opponent map is set, indicating single mode; {@code false} otherwise. + */ + public boolean isSingleMode() { + return opponentMap != null; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java new file mode 100644 index 0000000..f6e89be --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/Copycat.java @@ -0,0 +1,75 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.singlemode; + +import pp.battleship.message.client.ClientInterpreter; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.model.Battleship; + +/** + * The {@code Copycat} class is a utility that creates a copy of a {@link ClientMessage}. + * It implements the {@link ClientInterpreter} interface to interpret and process + * different types of messages. + */ +class Copycat implements ClientInterpreter { + private ClientMessage copiedMessage; + + /** + * Creates a copy of the provided {@link ClientMessage}. + * + * @param msg the message to be copied + * @return a copy of the provided message + */ + static ClientMessage copy(ClientMessage msg) { + final Copycat copycat = new Copycat(); + msg.accept(copycat, 0); + return copycat.copiedMessage; + } + + /** + * Private constructor to prevent direct instantiation of {@code Copycat}. + */ + private Copycat() { /* do nothing */ } + + /** + * Handles the reception of a {@link ShootMessage}. + * Since a {@code ShootMessage} does not need to be copied, it is directly assigned. + * + * @param msg the received {@code ShootMessage} + * @param from the identifier of the sender + */ + @Override + public void received(ShootMessage msg, int from) { + // copying is not necessary + copiedMessage = msg; + } + + /** + * Handles the reception of a {@link MapMessage}. + * Creates a deep copy of the {@code MapMessage} by copying each {@link Battleship} in the message. + * + * @param msg the received {@code MapMessage} + * @param from the identifier of the sender + */ + @Override + public void received(MapMessage msg, int from) { + copiedMessage = new MapMessage(msg.getShips().stream().map(Copycat::copy).toList()); + } + + /** + * Creates a copy of the provided {@link Battleship}. + * + * @param ship the battleship to be copied + * @return a copy of the provided battleship + */ + private static Battleship copy(Battleship ship) { + return new Battleship(ship.getLength(), ship.getX(), ship.getY(), ship.getRot()); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/InterpreterProxy.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/InterpreterProxy.java new file mode 100644 index 0000000..5165138 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/InterpreterProxy.java @@ -0,0 +1,93 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.singlemode; + +import pp.battleship.game.client.BattleshipClient; +import pp.battleship.game.client.ClientGameLogic; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.ServerInterpreter; +import pp.battleship.message.server.ServerMessage; +import pp.battleship.message.server.StartBattleMessage; + +import java.io.IOException; + +/** + * A proxy class that interprets messages from the server and forwards them to the BattleshipClient. + * Implements the ServerInterpreter interface to handle specific server messages. + */ +class InterpreterProxy implements ServerInterpreter { + private final BattleshipClient playerClient; + + /** + * Constructs an InterpreterProxy with the specified BattleshipClient. + * + * @param playerClient the client to which the server messages are forwarded + */ + InterpreterProxy(BattleshipClient playerClient) { + this.playerClient = playerClient; + } + + /** + * Handles the received GameDetails message by accepting it with the client's game logic. + * If the client's own map option is set, it also loads the map. + * + * @param msg the GameDetails message received from the server + */ + @Override + public void received(GameDetails msg) { + msg.accept(playerClient.getGameLogic()); + if (playerClient.getConfig().getOwnMap() != null) + playerClient.enqueue(this::loadMap); + } + + /** + * Loads the map specified in the client's options and notifies the game logic that the map is finished. + * + * @throws RuntimeException if the map fails to load. + */ + private void loadMap() { + final ClientGameLogic clientGameLogic = playerClient.getGameLogic(); + try { + clientGameLogic.loadMap(playerClient.getConfig().getOwnMap()); + } + catch (IOException e) { + throw new RuntimeException("Failed to load PlayerClient map", e); + } + clientGameLogic.mapFinished(); + } + + /** + * Forwards the received StartBattleMessage to the client's game logic. + * + * @param msg the StartBattleMessage received from the server + */ + @Override + public void received(StartBattleMessage msg) { + forward(msg); + } + + /** + * Forwards the received EffectMessage to the client's game logic. + * + * @param msg the EffectMessage received from the server + */ + @Override + public void received(EffectMessage msg) { + forward(msg); + } + + /** + * Forwards the specified ServerMessage to the client's game logic by enqueuing the message acceptance. + * + * @param msg the ServerMessage to forward + */ + private void forward(ServerMessage msg) { + playerClient.enqueue(() -> msg.accept(playerClient.getGameLogic())); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java new file mode 100644 index 0000000..d7831a7 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/RobotClient.java @@ -0,0 +1,127 @@ +package pp.battleship.game.singlemode; + +import pp.battleship.game.client.BattleshipClient; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.ServerInterpreter; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.IntPoint; +import pp.battleship.model.dto.ShipMapDTO; +import pp.util.RandomPositionIterator; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.Timer; +import java.util.TimerTask; + +import static pp.battleship.Resources.lookup; + +/** + * RobotClient simulates a client in the Battleship game. + * It handles its own shooting targets and acts as a sender of client messages. + * The RobotClient can shoot at predefined targets or generate random targets if predefined ones are exhausted. + */ +class RobotClient implements ServerInterpreter { + private static final Logger LOGGER = System.getLogger(RobotClient.class.getName()); + private final BattleshipClient app; + private final ServerConnectionMockup connection; + private final BattleshipClientConfig config; + private final ShipMapDTO dto; + private final Iterator targetIterator; + private final Iterator randomPositionIterator; + private final Set shotTargets = new HashSet<>(); + private final Timer timer = new Timer(true); + + /** + * Constructs a RobotClient instance with the given connection and configuration. + * Initializes the shooting targets from the configuration. + * + * @param app The BattleshipApp instance, used to enqueue actions on the main thread + * @param connection The ServerConnectionMockup instance + * @param config The BattleshipClientConfig instance + * @param dto The ShipMap dto specified at app start + */ + RobotClient(BattleshipClient app, ServerConnectionMockup connection, BattleshipClientConfig config, ShipMapDTO dto) { + this.app = app; + this.connection = connection; + this.config = config; + this.dto = dto; + this.targetIterator = config.getRobotTargets(); + this.randomPositionIterator = new RandomPositionIterator<>(IntPoint::new, config.getMapWidth(), config.getMapHeight()); + } + + /** + * Schedules the RobotClient to take a shot after the specified delay. + */ + private void shoot() { + timer.schedule(new TimerTask() { + @Override + public void run() { + app.enqueue(RobotClient.this::robotShot); + } + }, config.getDelay()); + } + + /** + * Makes the RobotClient take a shot by sending a ShootMessage with the target position. + */ + private void robotShot() { + connection.sendRobotMessage(new ShootMessage(getShotPosition())); + } + + /** + * Determines the next shot position. If predefined targets are available, uses the next target. + * Otherwise, generates a random target that has not been shot at before. + * + * @return the next shot position as IntPosition + */ + private IntPoint getShotPosition() { + while (true) { + final IntPoint target = targetIterator.hasNext() ? targetIterator.next() : randomPositionIterator.next(); + if (shotTargets.add(target)) return target; + } + } + + /** + * Receives GameDetails, creates and sends the ShipMap to the mock server. + * + * @param details The game details + */ + @Override + public void received(GameDetails details) { + if (!dto.fits(details)) + throw new RuntimeException(lookup("map.doesnt.fit")); + app.enqueue(() -> connection.sendRobotMessage(new MapMessage(dto.getShips()))); + } + + /** + * Receives the StartBattleMessage and updates the turn status. + * If it is RobotClient's turn to shoot, schedules a shot using shoot(); + * + * @param msg The start battle message + */ + @Override + public void received(StartBattleMessage msg) { + LOGGER.log(Level.INFO, "Received StartBattleMessage: {0}", msg); //NON-NLS + if (msg.isMyTurn()) + shoot(); + } + + /** + * Receives an effect message, logs it, and updates the turn status. + * If it is RobotClient's turn to shoot, schedules a shot using shoot(); + * + * @param msg The effect message + */ + @Override + public void received(EffectMessage msg) { + LOGGER.log(Level.INFO, "Received EffectMessage: {0}", msg); //NON-NLS + if (msg.isMyTurn()) + shoot(); + } +} \ No newline at end of file diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/ServerConnectionMockup.java b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/ServerConnectionMockup.java new file mode 100644 index 0000000..de63a61 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/game/singlemode/ServerConnectionMockup.java @@ -0,0 +1,145 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.singlemode; + +import pp.battleship.game.client.BattleshipClient; +import pp.battleship.game.client.ServerConnection; +import pp.battleship.game.server.ServerGameLogic; +import pp.battleship.game.server.ServerSender; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.server.ServerInterpreter; +import pp.battleship.message.server.ServerMessage; +import pp.battleship.model.dto.ShipMapDTO; + +import java.io.IOException; + +import static pp.battleship.game.singlemode.Copycat.copy; + +/** + * A mock implementation of the ServerConnection interface for single mode. + * Simulates a server connection without actual network communication. + * Handles a mock player named RobotClient and schedules its shots when due. + */ +public class ServerConnectionMockup implements ServerConnection, ServerSender { + /** + * The id of the player client. + */ + private static final int PLAYER_CLIENT = 1; + /** + * The id of the robot client. + */ + private static final int ROBOT_CLIENT = 2; + + private final BattleshipClient playerClient; + private final RobotClient robotClient; + private final InterpreterProxy playerProxy; + private final ServerGameLogic serverGameLogic; + + /** + * Constructs a ServerConnectionMockup instance for the given Battleship application. + * Creates a RobotClient instance and an instance of ServerGameLogic. + * + * @param playerClient The Battleship client instance, e.g., a BattleshipApp instance. + */ + public ServerConnectionMockup(BattleshipClient playerClient) { + this.playerClient = playerClient; + robotClient = new RobotClient(playerClient, this, playerClient.getConfig(), getShipMapDTO()); + serverGameLogic = new ServerGameLogic(this, playerClient.getConfig()); + playerProxy = new InterpreterProxy(playerClient); + } + + /** + * Always returns true as this is a mock connection. + * + * @return true, indicating the mock connection is always considered connected. + */ + @Override + public boolean isConnected() { + return true; + } + + /** + * Simulates connecting to a server by adding the PlayerClient and the RobotClient to the serverGameLogic. + * Loads the map of the PlayerClient and triggers sending it to the serverGameLogic. + */ + @Override + public void connect() { + serverGameLogic.addPlayer(PLAYER_CLIENT); + serverGameLogic.addPlayer(ROBOT_CLIENT); + } + + /** + * Does nothing upon shutdown of the app. + */ + @Override + public void disconnect() { + //do nothing + } + + /** + * Forwards the specified message received from the player client to the server logic. + * + * @param message The message from the player client to be processed. + */ + @Override + public void send(ClientMessage message) { // from PlayerClient, as this is the PlayerClients 'serverConnection' + copy(message).accept(serverGameLogic, PLAYER_CLIENT); + } + + /** + * Forwards the specified message received from the robot client to the server logic. + * + * @param message The message from the robot client to be processed. + */ + void sendRobotMessage(ClientMessage message) { + message.accept(serverGameLogic, ROBOT_CLIENT); + } + + /** + * Forwards the specified message received from the server logic either to the player client or to the + * robot client, depending on the specified id. + * + * @param id The recipient id + * @param message The server message to be processed + * @see #PLAYER_CLIENT + * @see #ROBOT_CLIENT + */ + @Override + public void send(int id, ServerMessage message) { + message.accept(getInterpreter(id)); + } + + /** + * Retrieves the ServerInterpreter of the client with the specified id. + * + * @param clientId the id of the client whose ServerInterpreter shall be retrieved. + * @return the ServerInterpreter of the client + * @throws java.lang.IllegalArgumentException if there is no client with the specified id. + */ + private ServerInterpreter getInterpreter(int clientId) { + return switch (clientId) { + case PLAYER_CLIENT -> playerProxy; + case ROBOT_CLIENT -> robotClient; + default -> throw new IllegalArgumentException("Unexpected value: " + clientId); + }; + } + + /** + * Loads the ShipMapDTO from the opponent map file. + * + * @return the loaded ShipMapDTO. + */ + private ShipMapDTO getShipMapDTO() { + try { + return ShipMapDTO.loadFrom(playerClient.getConfig().getOpponentMap()); + } + catch (IOException e) { + throw new RuntimeException("Failed to load RobotClient map", e); + } + } +} \ No newline at end of file diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java new file mode 100644 index 0000000..6a50c1d --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientInterpreter.java @@ -0,0 +1,29 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.client; + +/** + * Visitor interface for processing all client messages. + */ +public interface ClientInterpreter { + /** + * Processes a received ShootMessage. + * + * @param msg the ShootMessage to be processed + * @param from the connection ID from which the message was received + */ + void received(ShootMessage msg, int from); + + /** + * Processes a received MapMessage. + * + * @param msg the MapMessage to be processed + * @param from the connection ID from which the message was received + */ + void received(MapMessage msg, int from); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientMessage.java new file mode 100644 index 0000000..71c0f3e --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ClientMessage.java @@ -0,0 +1,32 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.client; + +import com.jme3.network.AbstractMessage; + +/** + * An abstract base class for client messages used in network transfer. + * It extends the AbstractMessage class provided by the jme3-network library. + */ +public abstract class ClientMessage extends AbstractMessage { + + /** + * Constructs a new ClientMessage instance. + */ + protected ClientMessage() { + super(true); + } + + /** + * Accepts a visitor for processing this message. + * + * @param interpreter the visitor to be used for processing + * @param from the connection ID of the sender + */ + public abstract void accept(ClientInterpreter interpreter, int from); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/MapMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/MapMessage.java new file mode 100644 index 0000000..1e60ecf --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/MapMessage.java @@ -0,0 +1,66 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.client; + +import com.jme3.network.serializing.Serializable; +import pp.battleship.model.Battleship; + +import java.util.ArrayList; +import java.util.List; + +/** + * A message sent by the client containing the positions of the ships on the player's map. + */ +@Serializable +public class MapMessage extends ClientMessage { + private List ships; + + /** + * Default constructor for serialization purposes. + */ + private MapMessage() { /* empty */ } + + /** + * Constructs a MapMessage with the specified list of ships. + * + * @param ships the list of ships placed on the player's map + */ + public MapMessage(List ships) { + this.ships = new ArrayList<>(ships); + } + + /** + * Returns the list of ships on the player's map. + * + * @return the list of ships + */ + public List getShips() { + return ships; + } + + /** + * Returns a string representation of the MapMessage. + * + * @return a string representation of the MapMessage + */ + @Override + public String toString() { + return "MapMessage{ships=" + ships + '}'; //NON-NLS + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + * @param from the connection ID from which the message was received + */ + @Override + public void accept(ClientInterpreter interpreter, int from) { + interpreter.received(this, from); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ShootMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ShootMessage.java new file mode 100644 index 0000000..6aa73f7 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/client/ShootMessage.java @@ -0,0 +1,63 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.client; + +import com.jme3.network.serializing.Serializable; +import pp.battleship.model.IntPoint; + +/** + * A message sent by the client to indicate a shooting action in the game. + */ +@Serializable +public class ShootMessage extends ClientMessage { + private IntPoint position; + + /** + * Default constructor for serialization purposes. + */ + private ShootMessage() { /* empty */ } + + /** + * Constructs a ShootMessage with the specified position. + * + * @param position the position where the shot is fired + */ + public ShootMessage(IntPoint position) { + this.position = position; + } + + /** + * Returns the position of the shot. + * + * @return the position of the shot + */ + public IntPoint getPosition() { + return position; + } + + /** + * Returns a string representation of the ShootMessage. + * + * @return a string representation of the ShootMessage + */ + @Override + public String toString() { + return "ShootMessage{position=" + position + '}'; //NON-NLS + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + * @param from the connection ID from which the message was received + */ + @Override + public void accept(ClientInterpreter interpreter, int from) { + interpreter.received(this, from); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/server/EffectMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/EffectMessage.java new file mode 100644 index 0000000..98c7476 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/EffectMessage.java @@ -0,0 +1,211 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.server; + +import com.jme3.network.serializing.Serializable; +import pp.battleship.model.Battleship; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Shot; + +import java.util.Collections; +import java.util.List; + +import static pp.util.Util.copy; + +/** + * A message sent by the server to inform clients about the effects of a shot in the Battleship game. + */ +@Serializable +public class EffectMessage extends ServerMessage { + private boolean ownShot; + private Shot shot; + private Battleship destroyedShip; + private List remainingOpponentShips; + + /** + * Creates an EffectMessage indicating a hit. + * + * @param ownShot true if the shot was fired by the player, false if by the opponent + * @param pos the position of the shot + * @return an EffectMessage indicating a hit + */ + public static EffectMessage hit(boolean ownShot, IntPoint pos) { + return new EffectMessage(ownShot, new Shot(pos, true), null, null); + } + + /** + * Creates an EffectMessage indicating a miss. + * + * @param ownShot true if the shot was fired by the player, false if by the opponent + * @param pos the position of the shot + * @return an EffectMessage indicating a miss + */ + public static EffectMessage miss(boolean ownShot, IntPoint pos) { + return new EffectMessage(ownShot, new Shot(pos, false), null, null); + } + + /** + * Creates an EffectMessage indicating a ship was destroyed. + * + * @param ownShot true if the shot was fired by the player, false if by the opponent + * @param pos the position of the shot + * @param destroyedShip the ship that was destroyed + * @return an EffectMessage indicating a ship was destroyed + */ + public static EffectMessage shipDestroyed(boolean ownShot, IntPoint pos, Battleship destroyedShip) { + return new EffectMessage(ownShot, new Shot(pos, true), destroyedShip, null); + } + + /** + * Creates an EffectMessage indicating the player has won the game. + * + * @param pos the position of the shot + * @param destroyedShip the ship that was destroyed + * @return an EffectMessage indicating the player has won + */ + public static EffectMessage won(IntPoint pos, Battleship destroyedShip) { + return new EffectMessage(true, new Shot(pos, true), destroyedShip, Collections.emptyList()); + } + + /** + * Creates an EffectMessage indicating the player has lost the game. + * + * @param pos the position of the shot + * @param destroyedShip the ship that was destroyed + * @param remainingOpponentShips the list of opponent's remaining ships + * @return an EffectMessage indicating the player has lost + */ + public static EffectMessage lost(IntPoint pos, Battleship destroyedShip, List remainingOpponentShips) { + return new EffectMessage(false, new Shot(pos, true), destroyedShip, remainingOpponentShips); + } + + /** + * Default constructor for serialization purposes. + */ + private EffectMessage() { /* empty */ } + + /** + * Constructs an EffectMessage with the specified parameters. + * + * @param ownShot true if the shot was fired by the player, false if by the opponent + * @param shot the shot fired + * @param destroyedShip the ship that was destroyed by the shot, null if no ship was destroyed + * @param remainingOpponentShips the list of opponent's remaining ships after the shot + */ + private EffectMessage(boolean ownShot, Shot shot, Battleship destroyedShip, List remainingOpponentShips) { + this.ownShot = ownShot; + this.shot = shot; + this.destroyedShip = destroyedShip; + this.remainingOpponentShips = copy(remainingOpponentShips); + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + */ + @Override + public void accept(ServerInterpreter interpreter) { + interpreter.received(this); + } + + /** + * Checks if the shot was fired by the player. + * + * @return true if the shot was fired by the player, false otherwise + */ + public boolean isOwnShot() { + return ownShot; + } + + /** + * Returns the shot fired. + * + * @return the shot fired + */ + public Shot getShot() { + return shot; + } + + /** + * Returns the ship that was destroyed by the shot. + * + * @return the destroyed ship, null if no ship was destroyed + */ + public Battleship getDestroyedShip() { + return destroyedShip; + } + + /** + * Returns the list of opponent's remaining ships after the shot. + * + * @return the list of opponent's remaining ships, null if the game is not yet over + */ + public List getRemainingOpponentShips() { + return remainingOpponentShips; + } + + /** + * Checks if the game is over. + * + * @return true if the game is over, false otherwise + */ + public boolean isGameOver() { + return remainingOpponentShips != null; + } + + /** + * Checks if the game is won by the player. + * + * @return true if the game is won by the player, false otherwise + */ + public boolean isGameWon() { + return isGameOver() && isOwnShot(); + } + + /** + * Checks if the game is lost by the player. + * + * @return true if the game is lost by the player, false otherwise + */ + public boolean isGameLost() { + return isGameOver() && !isOwnShot(); + } + + /** + * Checks if it's currently the player's turn. + * + * @return true if it's the player's turn, false otherwise + */ + public boolean isMyTurn() { + return isOwnShot() == shot.isHit(); + } + + /** + * Returns a string representation of the EffectMessage. + * + * @return a string representation of the EffectMessage + */ + @Override + public String toString() { + return "EffectMessage{ownShot=" + ownShot + ", shot=" + shot + ", destroyedShip=" + destroyedShip + //NON-NLS + ", remainingOpponentShips=" + remainingOpponentShips + '}'; //NON-NLS + } + + /** + * Returns the key for the informational text associated with this message. + * + * @return the key for the informational text + */ + @Override + public String getInfoTextKey() { + if (isGameOver()) + return isGameWon() ? "you.won.the.game" : "you.lost.the.game"; + return isMyTurn() ? "its.your.turn" : "wait.for.opponent"; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/server/GameDetails.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/GameDetails.java new file mode 100644 index 0000000..f5c5a2c --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/GameDetails.java @@ -0,0 +1,97 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.server; + +import com.jme3.network.serializing.Serializable; +import pp.battleship.BattleshipConfig; + +import java.util.Map; + +/** + * A message sent by the server to provide details about the game configuration. + */ +@Serializable +public class GameDetails extends ServerMessage { + private Map shipNums; + private int width; + private int height; + + /** + * Default constructor for serialization purposes. + */ + private GameDetails() { /* empty */ } + + /** + * Constructs a GameDetails message with the specified BattleshipConfig. + * + * @param config the BattleshipConfig containing game configuration details + */ + public GameDetails(BattleshipConfig config) { + this.shipNums = config.getShipNums(); + this.width = config.getMapWidth(); + this.height = config.getMapHeight(); + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + */ + @Override + public void accept(ServerInterpreter interpreter) { + interpreter.received(this); + } + + /** + * Returns a map where the keys represent ship lengths + * and the values represent the number of ships of that length. + * + * @return a map of ship lengths to the number of ships + */ + public Map getShipNums() { + return shipNums; + } + + /** + * Returns the width of the game map. + * + * @return the width of the game map + */ + public int getWidth() { + return width; + } + + /** + * Returns the height of the game map. + * + * @return the height of the game map + */ + public int getHeight() { + return height; + } + + /** + * Returns a string representation of the GameDetails message. + * + * @return a string representation of the GameDetails message + */ + @Override + public String toString() { + return "GameDetails{" + "ships=" + getShipNums() + ", width=" + width + ", height=" + height + '}'; //NON-NLS + } + + /** + * Returns the key for the informational text associated with this message. + * + * @return the key for the informational text + */ + @Override + public String getInfoTextKey() { + return "place.ships.in.your.map"; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerInterpreter.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerInterpreter.java new file mode 100644 index 0000000..aa51226 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerInterpreter.java @@ -0,0 +1,36 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.server; + +/** + * An interface for processing server messages. + * Implementations of this interface can be used to handle different types of server messages. + */ +public interface ServerInterpreter { + + /** + * Handles a GameDetails message received from the server. + * + * @param msg the GameDetails message received + */ + void received(GameDetails msg); + + /** + * Handles a StartBattleMessage received from the server. + * + * @param msg the StartBattleMessage received + */ + void received(StartBattleMessage msg); + + /** + * Handles an EffectMessage received from the server. + * + * @param msg the EffectMessage received + */ + void received(EffectMessage msg); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerMessage.java new file mode 100644 index 0000000..c9653ad --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/ServerMessage.java @@ -0,0 +1,39 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.server; + +import com.jme3.network.AbstractMessage; + +/** + * An abstract base class for server messages used in network transfer. + * It extends the AbstractMessage class provided by the jme3-network library. + */ +public abstract class ServerMessage extends AbstractMessage { + + /** + * Constructs a new ServerMessage instance. + */ + protected ServerMessage() { + super(true); + } + + /** + * Accepts a visitor for processing this message. + * + * @param interpreter the visitor to be used for processing + */ + public abstract void accept(ServerInterpreter interpreter); + + /** + * Gets the bundle key of the informational text to be shown at the client. + * This key is used to retrieve the appropriate localized text for display. + * + * @return the bundle key of the informational text + */ + public abstract String getInfoTextKey(); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/message/server/StartBattleMessage.java b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/StartBattleMessage.java new file mode 100644 index 0000000..5a0ca69 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/message/server/StartBattleMessage.java @@ -0,0 +1,71 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.message.server; + +import com.jme3.network.serializing.Serializable; + +/** + * A message sent by the server to inform clients about the start of the battle. + */ +@Serializable +public class StartBattleMessage extends ServerMessage { + private boolean myTurn; + + /** + * Default constructor for serialization purposes. + */ + private StartBattleMessage() { /* empty */ } + + /** + * Constructs a StartBattleMessage with the specified turn indicator. + * + * @param myTurn true if it's the client's turn to shoot, false otherwise + */ + public StartBattleMessage(boolean myTurn) { + this.myTurn = myTurn; + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + */ + @Override + public void accept(ServerInterpreter interpreter) { + interpreter.received(this); + } + + /** + * Checks if it's the client's turn to shoot. + * + * @return true if it's the client's turn, false otherwise + */ + public boolean isMyTurn() { + return myTurn; + } + + /** + * Returns a string representation of the StartBattleMessage. + * + * @return a string representation of the StartBattleMessage + */ + @Override + public String toString() { + return "StartBattleMessage{myTurn=" + myTurn + '}'; //NON-NLS + } + + /** + * Returns the key for the informational text associated with this message. + * + * @return the key for the informational text + */ + @Override + public String getInfoTextKey() { + return isMyTurn() ? "its.your.turn" : "wait.for.opponent"; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Battleship.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Battleship.java new file mode 100644 index 0000000..7b9e583 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Battleship.java @@ -0,0 +1,324 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import com.jme3.network.serializing.Serializable; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import static java.lang.Math.max; +import static java.lang.Math.min; + +/** + * Represents a battleship in the game. A battleship is characterized by its length, position, + * rotation, and status. It can be moved, rotated, and hit during the game. This class also + * provides methods to check for collisions with other ships and to determine whether the + * battleship has been destroyed. + */ +@Serializable +public class Battleship implements Item { + /** + * Enumeration representing the different statuses a battleship can have during the game. + */ + public enum Status { + /** + * The ship is in its normal state, not being previewed for placement. + */ + NORMAL, + + /** + * The ship is being previewed in a valid position for placement. + */ + VALID_PREVIEW, + + /** + * The ship is being previewed in an invalid position for placement. + */ + INVALID_PREVIEW + } + + private final int length; // The length of the battleship + private int x; // The x-coordinate of the battleship's position + private int y; // The y-coordinate of the battleship's position + private Rotation rot; // The rotation of the battleship + private Status status; // The current status of the battleship + private final Set damaged = new HashSet<>(); // The set of positions that have been hit on this ship + + /** + * Default constructor for serialization. Initializes a battleship with length 0, + * at position (0, 0), with a default rotation of RIGHT. + */ + private Battleship() { + this(0, 0, 0, Rotation.RIGHT); + } + + /** + * Constructs a new Battleship with the specified length, position, and rotation. + * + * @param length the length of the battleship + * @param x the x-coordinate of the battleship's initial position + * @param y the y-coordinate of the battleship's initial position + * @param rot the rotation of the battleship + */ + public Battleship(int length, int x, int y, Rotation rot) { + this.x = x; + this.y = y; + this.rot = rot; + this.length = length; + this.status = Status.NORMAL; + } + + /** + * Returns the current x-coordinate of the battleship's position. + * + * @return the x-coordinate of the battleship + */ + public int getX() { + return x; + } + + /** + * Returns the current y-coordinate of the battleship's position. + * + * @return the y-coordinate of the battleship + */ + public int getY() { + return y; + } + + /** + * Moves the battleship to the specified coordinates. + * + * @param x the new x-coordinate of the battleship's position + * @param y the new y-coordinate of the battleship's position + */ + public void moveTo(int x, int y) { + this.x = x; + this.y = y; + } + + /** + * Moves the battleship to the specified position. + * + * @param pos the new position of the battleship + */ + public void moveTo(IntPosition pos) { + moveTo(pos.getX(), pos.getY()); + } + + /** + * Returns the current status of the battleship. + * + * @return the status of the battleship + */ + public Status getStatus() { + return status; + } + + /** + * Sets the status of the battleship. + * + * @param status the new status to be set for the battleship + */ + public void setStatus(Status status) { + this.status = status; + } + + /** + * Returns the length of the battleship. + * + * @return the length of the battleship + */ + public int getLength() { + return length; + } + + /** + * Returns the minimum x-coordinate that the battleship occupies based on its current position and rotation. + * + * @return the minimum x-coordinate of the battleship + */ + public int getMinX() { + return x + min(0, (length - 1) * rot.dx()); + } + + /** + * Returns the maximum x-coordinate that the battleship occupies based on its current position and rotation. + * + * @return the maximum x-coordinate of the battleship + */ + public int getMaxX() { + return x + max(0, (length - 1) * rot.dx()); + } + + /** + * Returns the minimum y-coordinate that the battleship occupies based on its current position and rotation. + * + * @return the minimum y-coordinate of the battleship + */ + public int getMinY() { + return y + min(0, (length - 1) * rot.dy()); + } + + /** + * Returns the maximum y-coordinate that the battleship occupies based on its current position and rotation. + * + * @return the maximum y-coordinate of the battleship + */ + public int getMaxY() { + return y + max(0, (length - 1) * rot.dy()); + } + + /** + * Returns the current rotation of the battleship. + * + * @return the rotation of the battleship + */ + public Rotation getRot() { + return rot; + } + + /** + * Sets the rotation of the battleship. + * + * @param rot the new rotation to be set for the battleship + */ + public void setRotation(Rotation rot) { + this.rot = rot; + } + + /** + * Rotates the battleship by 90 degrees clockwise. + */ + public void rotated() { + setRotation(rot.rotate()); + } + + /** + * Attempts to hit the battleship at the specified position. + * If the position is part of the battleship, the hit is recorded. + * + * @param x the x-coordinate of the position to hit + * @param y the y-coordinate of the position to hit + * @return true if the position is part of the battleship, false otherwise + * @see #contains(int, int) + */ + public boolean hit(int x, int y) { + if (!contains(x, y)) + return false; + damaged.add(new IntPoint(x, y)); + return true; + } + + /** + * Attempts to hit the battleship at the specified position. + * If the position is part of the battleship, the hit is recorded. + * This is a convenience method for {@linkplain #hit(int, int)}. + * + * @param position the position to hit + * @return true if the position is part of the battleship, false otherwise + */ + public boolean hit(IntPosition position) { + return hit(position.getX(), position.getY()); + } + + /** + * Returns the positions of this battleship that have been hit. + * + * @return a set of positions that have been hit + * @see #hit(int, int) + */ + public Set getDamaged() { + return Collections.unmodifiableSet(damaged); + } + + /** + * Checks whether the specified position is covered by the battleship. This method does + * not record a hit, only checks coverage. + * This is a convenience method for {@linkplain #contains(int, int)}. + * + * @param pos the position to check + * @return true if the position is covered by the battleship, false otherwise + */ + public boolean contains(IntPosition pos) { + return contains(pos.getX(), pos.getY()); + } + + /** + * Checks whether the specified position is covered by the battleship. This method does + * not record a hit, only checks coverage. + * + * @param x the x-coordinate of the position to check + * @param y the y-coordinate of the position to check + * @return true if the position is covered by the battleship, false otherwise + */ + public boolean contains(int x, int y) { + return getMinX() <= x && x <= getMaxX() && + getMinY() <= y && y <= getMaxY(); + } + + /** + * Determines if the battleship has been completely destroyed. A battleship is considered + * destroyed if all of its positions have been hit. + * + * @return true if the battleship is destroyed, false otherwise + * @see #hit(int, int) + */ + public boolean isDestroyed() { + return damaged.size() == length; + } + + /** + * Checks whether this battleship collides with another battleship. Two battleships collide + * if any of their occupied positions overlap. + * + * @param other the other battleship to check collision with + * @return true if the battleships collide, false otherwise + */ + public boolean collidesWith(Battleship other) { + return other.getMaxX() >= getMinX() && getMaxX() >= other.getMinX() && + other.getMaxY() >= getMinY() && getMaxY() >= other.getMinY(); + } + + /** + * Returns a string representation of the battleship, including its length, position, + * and rotation. + * + * @return a string representation of the battleship + */ + @Override + public String toString() { + return "Ship{length=" + length + ", x=" + x + ", y=" + y + ", rot=" + rot + '}'; //NON-NLS + } + + /** + * Accepts a visitor that returns a value of type {@code T}. This method is part of the + * Visitor design pattern. + * + * @param visitor the visitor to accept + * @param the type of the value returned by the visitor + * @return the value returned by the visitor + */ + @Override + public T accept(Visitor visitor) { + return visitor.visit(this); + } + + /** + * Accepts a visitor that does not return a value. This method is part of the + * Visitor design pattern. + * + * @param visitor the visitor to accept + */ + @Override + public void accept(VoidVisitor visitor) { + visitor.visit(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPoint.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPoint.java new file mode 100644 index 0000000..a7b148f --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPoint.java @@ -0,0 +1,94 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import com.jme3.network.serializing.Serializable; + +import java.util.Objects; + +/** + * Represents a point in the two-dimensional plane with integer coordinates. + */ +@Serializable +public final class IntPoint implements IntPosition { + private int x; + private int y; + + /** + * Default constructor for serialization purposes. + */ + private IntPoint() { /* do nothing */ } + + /** + * Constructs a new IntPoint with the specified coordinates. + * + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + */ + public IntPoint(int x, int y) { + this.x = x; + this.y = y; + } + + /** + * Gets the x-coordinate of the point. + * + * @return the x-coordinate + */ + @Override + public int getX() { + return x; + } + + /** + * Gets the y-coordinate of the point. + * + * @return the y-coordinate + */ + @Override + public int getY() { + return y; + } + + /** + * Indicates whether some other object is "equal to" this one. + * + * @param obj the reference object with which to compare + * @return true if this object is the same as the obj argument; false otherwise + */ + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || obj.getClass() != this.getClass()) return false; + var that = (IntPoint) obj; + return this.x == that.x && + this.y == that.y; + } + + /** + * Returns a hash code value for the IntPoint. + * + * @return a hash code value for this object + */ + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + /** + * Returns a string representation of the IntPoint. + * + * @return a string representation of the object + */ + @Override + public String toString() { + return "IntPoint[" + //NON-NLS + "x=" + x + ", " + //NON-NLS + "y=" + y + ']'; //NON-NLS + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPosition.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPosition.java new file mode 100644 index 0000000..59771b7 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/IntPosition.java @@ -0,0 +1,28 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +/** + * Interface representing a position with X and Y coordinates. + */ +public interface IntPosition { + + /** + * Returns the X coordinate of this position. + * + * @return the X coordinate. + */ + int getX(); + + /** + * Returns the Y coordinate of this position. + * + * @return the Y coordinate. + */ + int getY(); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Item.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Item.java new file mode 100644 index 0000000..a2ef869 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Item.java @@ -0,0 +1,31 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +/** + * An interface representing any item on a ship map. + * It extends the IntPosition interface to provide position information. + */ +public interface Item { + + /** + * Accepts a visitor to perform operations on the item. + * + * @param visitor the visitor performing operations on the item + * @param the type of result returned by the visitor + * @return the result of the visitor's operation on the item + */ + T accept(Visitor visitor); + + /** + * Accepts a visitor to perform operations on the item without returning a result. + * + * @param visitor the visitor performing operations on the item + */ + void accept(VoidVisitor visitor); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Rotation.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Rotation.java new file mode 100644 index 0000000..3107de7 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Rotation.java @@ -0,0 +1,67 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import java.io.Serializable; + +/** + * Represents the rotation of a ship and provides functionality related to rotation. + */ +public enum Rotation implements Serializable { + /** + * Represents the ship facing upwards. + */ + UP, + /** + * Represents the ship facing rightwards. + */ + RIGHT, + /** + * Represents the ship facing downwards. + */ + DOWN, + /** + * Represents the ship facing leftwards. + */ + LEFT; + + /** + * Gets the change in x-coordinate corresponding to this rotation. + * + * @return the change in x-coordinate + */ + public int dx() { + return switch (this) { + case UP, DOWN -> 0; + case RIGHT -> 1; + case LEFT -> -1; + }; + } + + /** + * Gets the change in y-coordinate corresponding to this rotation. + * + * @return the change in y-coordinate + */ + public int dy() { + return switch (this) { + case UP -> 1; + case LEFT, RIGHT -> 0; + case DOWN -> -1; + }; + } + + /** + * Rotates the orientation clockwise and returns the next rotation. + * + * @return the next rotation after rotating clockwise + */ + public Rotation rotate() { + return values()[(ordinal() + 1) % values().length]; + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java new file mode 100644 index 0000000..bb73d6b --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/ShipMap.java @@ -0,0 +1,251 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import pp.battleship.notification.GameEvent; +import pp.battleship.notification.GameEventBroker; +import pp.battleship.notification.ItemAddedEvent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Stream; + +/** + * Represents a rectangular map that holds ships and registers shots fired. + * It also supports event notification for game state changes such as item addition or removal. + * Valid positions on this map have x-coordinates in the range of 0 to width-1 and y-coordinates + * in the range of 0 to height-1. + * + * @see #getWidth() + * @see #getHeight() + */ +public class ShipMap { + /** + * A list of items (ships, shots, etc.) placed on the map. + */ + private final List items = new ArrayList<>(); + + /** + * The broker responsible for notifying registered listeners of events + * (such as when an item is added or removed from the map). + * Can be null, in which case no notifications will be sent. + */ + private final GameEventBroker eventBroker; + + private final int width; + private final int height; + + /** + * Constructs an empty map with the given dimensions. The specified event broker + * will handle the notification of changes in the map state, such as adding or removing items. + * Passing null as the event broker is allowed, but in that case, no notifications will occur. + * + * @param width the number of columns (width) of the map + * @param height the number of rows (height) of the map + * @param eventBroker the event broker used for notifying listeners, or null if event distribution is not needed + */ + public ShipMap(int width, int height, GameEventBroker eventBroker) { + if (width < 1 || height < 1) + throw new IllegalArgumentException("Invalid map size"); + this.width = width; + this.height = height; + this.eventBroker = eventBroker; + } + + /** + * Adds an item (e.g., a ship or a shot) to the map and triggers the appropriate event. + * + * @param item the item to be added to the map + */ + private void addItem(Item item) { + items.add(item); + notifyListeners(new ItemAddedEvent(item, this)); + } + + /** + * Adds a battleship to the map and triggers an item addition event. + * + * @param ship the battleship to be added to the map + */ + public void add(Battleship ship) { + addItem(ship); + } + + /** + * Registers a shot on the map, updates the state of the affected ship (if any), + * and triggers an item addition event. + * + * @param shot the shot to be registered on the map + */ + public void add(Shot shot) { + final Battleship ship = findShipAt(shot); + if (ship != null) + ship.hit(shot); + addItem(shot); + } + + /** + * Removes an item from the map and triggers an item removal event. + * + * @param item the item to be removed from the map + */ + public void remove(Item item) { + items.remove(item); + notifyListeners(new ItemAddedEvent(item, this)); + } + + /** + * Removes all items from the map and triggers corresponding removal events for each. + */ + public void clear() { + new ArrayList<>(items).forEach(this::remove); + } + + /** + * Returns a stream of items of a specified type (class). + * + * @param clazz the class type to filter items by + * @param the type of items to return + * @return a stream of items matching the specified class type + */ + private Stream getItems(Class clazz) { + return items.stream().filter(clazz::isInstance).map(clazz::cast); + } + + /** + * Returns a stream of all battleships currently on the map. + * + * @return a stream of battleships + */ + public Stream getShips() { + return getItems(Battleship.class); + } + + /** + * Returns a list of all remaining battleships that have not been destroyed. + * + * @return a list of remaining battleships + */ + public List getRemainingShips() { + return getShips().filter(s -> !s.isDestroyed()).toList(); + } + + /** + * Returns a stream of all shots fired on the map. + * + * @return a stream of shots + */ + public Stream getShots() { + return getItems(Shot.class); + } + + /** + * Returns an unmodifiable list of all items currently on the map. + * + * @return an unmodifiable list of all items + */ + public List getItems() { + return Collections.unmodifiableList(items); + } + + /** + * Returns the width (number of columns) of the map. + * + * @return the width of the map + */ + public int getWidth() { + return width; + } + + /** + * Returns the height (number of rows) of the map. + * + * @return the height of the map + */ + public int getHeight() { + return height; + } + + /** + * Checks if the given ship is in a valid position (within the map bounds and non-colliding with other ships). + * + * @param ship the battleship to validate + * @return true if the ship's position is valid, false otherwise + */ + public boolean isValid(Battleship ship) { + return isValid(ship.getMinX(), ship.getMinY()) && + isValid(ship.getMaxX(), ship.getMaxY()) && + getShips().filter(s -> s != ship).noneMatch(ship::collidesWith); + } + + /** + * Finds a battleship at the specified coordinates. + * + * @param x the x-coordinate of the position + * @param y the y-coordinate of the position + * @return the ship at the specified coordinates, or null if none is found + */ + public Battleship findShipAt(int x, int y) { + return getShips().filter(ship -> ship.contains(x, y)) + .findAny() + .orElse(null); + } + + /** + * Finds a battleship at the specified position. This is a convenience method. + * + * @param position the position within the map + * @return the ship at the specified position, or null if none is found + */ + public Battleship findShipAt(IntPosition position) { + return findShipAt(position.getX(), position.getY()); + } + + /** + * Validates whether the specified position is within the map boundaries. + * + * @param pos the position to validate + * @return true if the position is within the map, false otherwise + */ + public boolean isValid(IntPosition pos) { + return isValid(pos.getX(), pos.getY()); + } + + /** + * Checks if the specified coordinates are within the map boundaries. + * + * @param x the x-coordinate to validate + * @param y the y-coordinate to validate + * @return true if the coordinates are valid, false otherwise + */ + public boolean isValid(int x, int y) { + return x >= 0 && x < width && + y >= 0 && y < height; + } + + /** + * Returns a string representation of the ship map. + * + * @return a string representation of the ship map + */ + @Override + public String toString() { + return "ShipMap{" + items + '}'; //NON-NLS + } + + /** + * Notifies all registered listeners about a game event if the event broker is available. + * + * @param event the event to be distributed to listeners + */ + private void notifyListeners(GameEvent event) { + if (eventBroker != null) + eventBroker.notifyListeners(event); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Shot.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Shot.java new file mode 100644 index 0000000..c999fee --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Shot.java @@ -0,0 +1,140 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import com.jme3.network.serializing.Serializable; + +import java.util.Objects; + +/** + * Represents a shot in the Battleship game. + * A shot is defined by its coordinates and whether it was a hit or miss. + */ +@Serializable +public final class Shot implements Item, IntPosition { + private int x; + private int y; + private boolean hit; + + // Private no-arg constructor for serialization purposes + private Shot() {} + + /** + * Creates a new shot. + * + * @param x the x-coordinate of the shot + * @param y the y-coordinate of the shot + * @param hit indicates whether the shot was a hit + */ + public Shot(int x, int y, boolean hit) { + this.x = x; + this.y = y; + this.hit = hit; + } + + /** + * Creates a new shot. + * + * @param pos the position of the shot + * @param hit indicates whether the shot was a hit + */ + public Shot(IntPosition pos, boolean hit) { + this(pos.getX(), pos.getY(), hit); + } + + /** + * Gets the x-coordinate of the shot. + * + * @return the x-coordinate of the shot + */ + @Override + public int getX() { + return x; + } + + /** + * Gets the y-coordinate of the shot. + * + * @return the y-coordinate of the shot + */ + @Override + public int getY() { + return y; + } + + /** + * Checks if the shot was a hit. + * + * @return true if the shot was a hit, false otherwise + */ + public boolean isHit() { + return hit; + } + + /** + * Checks if this shot is equal to another object. + * Two shots are considered equal if they have the same coordinates and hit status. + * + * @param obj the object to compare with + * @return true if the objects are equal, false otherwise + */ + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || obj.getClass() != this.getClass()) return false; + var that = (Shot) obj; + return this.x == that.x && + this.y == that.y && + this.hit == that.hit; + } + + /** + * Computes the hash code of this shot. + * + * @return the hash code of this shot + */ + @Override + public int hashCode() { + return Objects.hash(x, y, hit); + } + + /** + * Returns a string representation of the shot. + * + * @return a string representation of the shot + */ + @Override + public String toString() { + return "Shot[" + //NON-NLS + "x=" + x + ", " + //NON-NLS + "y=" + y + ", " + //NON-NLS + "hit=" + hit + ']'; //NON-NLS + } + + /** + * Accepts a visitor with a return value. + * + * @param visitor the visitor to accept + * @param the type of the return value + * @return the result of the visitor's visit method + */ + @Override + public T accept(Visitor visitor) { + return visitor.visit(this); + } + + /** + * Accepts a visitor without a return value. + * + * @param visitor the visitor to accept + */ + @Override + public void accept(VoidVisitor visitor) { + visitor.visit(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java new file mode 100644 index 0000000..f490451 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/Visitor.java @@ -0,0 +1,31 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +/** + * An interface for implementing the Visitor pattern for different types of elements in the Battleship model. + * + * @param the type of result returned by the visit methods + */ +public interface Visitor { + /** + * Visits a Shot element. + * + * @param shot the Shot element to visit + * @return the result of visiting the Shot element + */ + T visit(Shot shot); + + /** + * Visits a Battleship element. + * + * @param ship the Battleship element to visit + * @return the result of visiting the Battleship element + */ + T visit(Battleship ship); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java new file mode 100644 index 0000000..871c063 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/VoidVisitor.java @@ -0,0 +1,28 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +/** + * An interface for implementing the Visitor pattern for different types of elements in the Battleship model + * without returning any result. + */ +public interface VoidVisitor { + /** + * Visits a Shot element. + * + * @param shot the Shot element to visit + */ + void visit(Shot shot); + + /** + * Visits a Battleship element. + * + * @param ship the Battleship element to visit + */ + void visit(Battleship ship); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/BattleshipDTO.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/BattleshipDTO.java new file mode 100644 index 0000000..66f45bf --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/BattleshipDTO.java @@ -0,0 +1,51 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model.dto; + +import pp.battleship.model.Battleship; +import pp.battleship.model.Rotation; + +/** + * A class representing data transfer objects of battleships for JSON serialization and deserialization. + */ +class BattleshipDTO { + private final int length; // The length of the battleship + private final int x; // The x-coordinate of the battleship's position + private final int y; // The y-coordinate of the battleship's position + private final Rotation rot; // The rotation of the battleship + + /** + * Constructs a BattleshipDTO object from a Battleship object. + * + * @param ship the Battleship object to be converted + */ + BattleshipDTO(Battleship ship) { + length = ship.getLength(); + x = ship.getX(); + y = ship.getY(); + rot = ship.getRot(); + } + + /** + * Gets the length of the battleship. + * + * @return the length + */ + public int getLength() { + return length; + } + + /** + * Converts this BattleshipDTO object to a Battleship object. + * + * @return the Battleship object + */ + Battleship toBattleship() { + return new Battleship(length, x, y, rot); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/ShipMapDTO.java b/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/ShipMapDTO.java new file mode 100644 index 0000000..9d53146 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/model/dto/ShipMapDTO.java @@ -0,0 +1,117 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model.dto; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; +import pp.battleship.message.server.GameDetails; +import pp.battleship.model.Battleship; +import pp.battleship.model.ShipMap; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.List; + +/** + * A class representing data transfer objects of ship maps for JSON serialization and deserialization. + */ +public class ShipMapDTO { + // Logger instance for logging messages + static final Logger LOGGER = System.getLogger(ShipMapDTO.class.getName()); + + // Width of the ship map + private int width; + + // Height of the ship map + private int height; + + // List of ships in the map + private List ships; + + /** + * Constructs a ShipMapDTO object from a ShipMap object. + * + * @param map the ShipMap object to be converted + */ + public ShipMapDTO(ShipMap map) { + this.width = map.getWidth(); + this.height = map.getHeight(); + this.ships = map.getShips().map(BattleshipDTO::new).toList(); + } + + /** + * Checks if the current ship map fits the game details provided. + * + * @param details the game details to be matched against + * @return true if the ship map fits the game details, false otherwise + */ + public boolean fits(GameDetails details) { + if (width != details.getWidth() || height != details.getHeight()) + return false; + int numShips = details.getShipNums().values().stream().mapToInt(Integer::intValue).sum(); + if (numShips != ships.size()) + return false; + for (var e : details.getShipNums().entrySet()) { + final int shipLength = e.getKey(); + final int requiredNum = e.getValue(); + final int actualNum = (int) ships.stream() + .filter(s -> s.getLength() == shipLength) + .count(); + if (requiredNum != actualNum) + return false; + } + return true; + } + + /** + * Returns the ships stored in this DTO. + * + * @return the ships stored in this DTO + */ + public List getShips() { + return ships.stream().map(BattleshipDTO::toBattleship).toList(); + } + + /** + * Saves the current ShipMapDTO to a file in JSON format. + * + * @param file the file to which the ShipMapDTO will be saved + * @throws IOException if an I/O error occurs + */ + public void saveTo(File file) throws IOException { + try (FileWriter writer = new FileWriter(file)) { + final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + final String json = gson.toJson(this); + LOGGER.log(Level.DEBUG, "JSON of map: {0}", json); //NON-NLS + writer.write(json); + LOGGER.log(Level.INFO, "JSON written to {0}", file.getAbsolutePath()); //NON-NLS + } + } + + /** + * Loads a ShipMapDTO from a file containing JSON data. + * + * @param file the file from which the ShipMapDTO will be loaded + * @return the loaded ShipMapDTO object + * @throws IOException if an I/O error occurs or if the JSON is invalid + */ + public static ShipMapDTO loadFrom(File file) throws IOException { + try (FileReader reader = new FileReader(file)) { + final Gson gson = new Gson(); + return gson.fromJson(reader, ShipMapDTO.class); + } + catch (JsonParseException e) { + throw new IOException(e.getLocalizedMessage()); + } + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/ClientStateEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ClientStateEvent.java new file mode 100644 index 0000000..dbb0fcd --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ClientStateEvent.java @@ -0,0 +1,23 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Event when an item is added to a map. + */ +public record ClientStateEvent() implements GameEvent { + /** + * Notifies the game event listener of this event. + * + * @param listener the game event listener + */ + @Override + public void notifyListener(GameEventListener listener) { + listener.receivedEvent(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEvent.java new file mode 100644 index 0000000..649e9c2 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEvent.java @@ -0,0 +1,20 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * An interface used for all game events. + */ +public interface GameEvent { + /** + * Notifies the game event listener of the event. + * + * @param listener the game event listener to be notified + */ + void notifyListener(GameEventListener listener); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventBroker.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventBroker.java new file mode 100644 index 0000000..818a16b --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventBroker.java @@ -0,0 +1,20 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Defines a broker for distributing game events to registered listeners. + */ +public interface GameEventBroker { + /** + * Notifies all registered listeners about the specified game event. + * + * @param event the game event to be broadcast to listeners + */ + void notifyListeners(GameEvent event); +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventListener.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventListener.java new file mode 100644 index 0000000..4b96679 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/GameEventListener.java @@ -0,0 +1,48 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Listener interface for all events implemented by subclasses of {@linkplain pp.battleship.notification.GameEvent}. + */ +public interface GameEventListener { + /** + * Indicates that an item has been destroyed + * + * @param event the received event + */ + default void receivedEvent(ItemRemovedEvent event) { /* do nothing */ } + + /** + * Indicates that an item has been added to a map. + * + * @param event the received event + */ + default void receivedEvent(ItemAddedEvent event) { /* do nothing */ } + + /** + * Indicates that an info text shall be shown. + * + * @param event the received event + */ + default void receivedEvent(InfoTextEvent event) { /* do nothing */ } + + /** + * Indicates that a sound shall be played. + * + * @param event the received event + */ + default void receivedEvent(SoundEvent event) { /* do nothing */ } + + /** + * Indicates that the client's state has changed. + * + * @param event the received event + */ + default void receivedEvent(ClientStateEvent event) { /* do nothing */ } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/InfoTextEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/InfoTextEvent.java new file mode 100644 index 0000000..28ffe9e --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/InfoTextEvent.java @@ -0,0 +1,25 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Event when an item is added to a map. + * + * @param key the bundle key for the message + */ +public record InfoTextEvent(String key) implements GameEvent { + /** + * Notifies the game event listener of this event. + * + * @param listener the game event listener + */ + @Override + public void notifyListener(GameEventListener listener) { + listener.receivedEvent(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemAddedEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemAddedEvent.java new file mode 100644 index 0000000..57e3d4c --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemAddedEvent.java @@ -0,0 +1,29 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +import pp.battleship.model.Item; +import pp.battleship.model.ShipMap; + +/** + * Event when an item is added to a map. + * + * @param item the added item + * @param map the map that got the additional item + */ +public record ItemAddedEvent(Item item, ShipMap map) implements GameEvent { + /** + * Notifies the game event listener of this event. + * + * @param listener the game event listener + */ + @Override + public void notifyListener(GameEventListener listener) { + listener.receivedEvent(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemRemovedEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemRemovedEvent.java new file mode 100644 index 0000000..e42c7ba --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/ItemRemovedEvent.java @@ -0,0 +1,28 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +import pp.battleship.model.Item; +import pp.battleship.model.ShipMap; + +/** + * Event when an item gets removed. + * + * @param item the destroyed item + */ +public record ItemRemovedEvent(Item item, ShipMap map) implements GameEvent { + /** + * Notifies the game event listener of this event. + * + * @param listener the game event listener + */ + @Override + public void notifyListener(GameEventListener listener) { + listener.receivedEvent(this); + } +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java new file mode 100644 index 0000000..d82ab69 --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/Sound.java @@ -0,0 +1,26 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Enumeration representing different types of sounds used in the game. + */ +public enum Sound { + /** + * Sound of an explosion. + */ + EXPLOSION, + /** + * Sound of a splash. + */ + SPLASH, + /** + * Sound of a ship being destroyed. + */ + DESTROYED_SHIP +} diff --git a/Projekte/battleship/model/src/main/java/pp/battleship/notification/SoundEvent.java b/Projekte/battleship/model/src/main/java/pp/battleship/notification/SoundEvent.java new file mode 100644 index 0000000..c4d5fbd --- /dev/null +++ b/Projekte/battleship/model/src/main/java/pp/battleship/notification/SoundEvent.java @@ -0,0 +1,26 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.notification; + +/** + * Event when an item is added to a map. + * + * @param sound the sound to be played + */ +public record SoundEvent(Sound sound) implements GameEvent { + + /** + * Notifies the game event listener of this event. + * + * @param listener the game event listener + */ + @Override + public void notifyListener(GameEventListener listener) { + listener.receivedEvent(this); + } +} diff --git a/Projekte/battleship/model/src/main/resources/battleship.properties b/Projekte/battleship/model/src/main/resources/battleship.properties new file mode 100644 index 0000000..47f1f6c --- /dev/null +++ b/Projekte/battleship/model/src/main/resources/battleship.properties @@ -0,0 +1,39 @@ +######################################## +## Programming project code +## UniBw M, 2022, 2023, 2024 +## www.unibw.de/inf2 +## (c) Mark Minas (mark.minas@unibw.de) +######################################## +# +battleship.name=Battleship +button.ready=Ready +button.rotate=Rotate +server.connection.failed=Failed to establish a server connection. +its.your.turn=It's your turn! Click on the opponent's field to shoot... +lost.connection.to.server=Lost connection to server. The game terminated. +place.ships.in.your.map=Place ships in your map. +wait.for.an.opponent=Wait for an opponent! +wait.for.opponent=Wait for your opponent! +confirm.leaving=Would you really like to leave the game? +you.lost.the.game=You lost the game! +you.won.the.game=You won the game! +button.yes=Yes +button.no=No +button.ok=Ok +button.connect=Connect +button.cancel=Cancel +server.dialog=Server +host.name=Host +port.number=Port +wait.its.not.your.turn=Wait, it's not your turn!! +menu.quit=Quit game +menu.return-to-game=Return to game +menu.sound-enabled=Sound switched on +menu.map.load=Load map from file... +menu.map.save=Save map in file... +label.file=File: +label.connecting=Connecting... +dialog.error=Error +dialog.question=Question +port.must.be.integer=Port must be an integer number +map.doesnt.fit=The map doesn't fit to this game diff --git a/Projekte/battleship/model/src/main/resources/battleship_de.properties b/Projekte/battleship/model/src/main/resources/battleship_de.properties new file mode 100644 index 0000000..4039420 --- /dev/null +++ b/Projekte/battleship/model/src/main/resources/battleship_de.properties @@ -0,0 +1,39 @@ +######################################## +## Programming project code +## UniBw M, 2022, 2023, 2024 +## www.unibw.de/inf2 +## (c) Mark Minas (mark.minas@unibw.de) +######################################## +# +battleship.name=Schiffe versenken +button.ready=Bereit +button.rotate=Rotiere +server.connection.failed=Verbindung zum Server fehlgeschlagen. +its.your.turn=Du bist dran! Klicke in der gegnerischen Karte... +lost.connection.to.server=Verbindung zum Server abgebrochen. Das Spiel ist damit beendet. +place.ships.in.your.map=Positioniere die Schiffe in Deiner Karte +wait.for.an.opponent=Warte auf einen Gegner! +wait.for.opponent=Warte auf Deinen Gegner! +confirm.leaving=Willst Du wirklich das Spiel verlassen? +you.lost.the.game=Leider verloren! +you.won.the.game=Du hast gewonnen! +button.yes=Ja +button.no=Nein +button.ok=Ok +button.connect=Verbinde +button.cancel=Abbruch +server.dialog=Server +host.name=Host +port.number=Port +wait.its.not.your.turn=Warte, Du bist nicht dran!! +menu.quit=Spiel beenden +menu.return-to-game=Zurück zum Spiel +menu.sound-enabled=Sound eingeschaltet +menu.map.load=Karte von Datei laden... +menu.map.save=Karte in Datei speichern... +label.file=Datei: +label.connecting=Verbindung wird aufgebaut... +dialog.error=Fehler +dialog.question=Frage +port.must.be.integer=Der Port muss eine ganze Zahl sein +map.doesnt.fit=Diese Karte passt nicht zu diesem Spiel diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/client/EditorTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/client/EditorTest.java new file mode 100644 index 0000000..4efb084 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/client/EditorTest.java @@ -0,0 +1,157 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.client; + +import org.junit.Before; +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.game.client.ClientGameLogic; +import pp.battleship.message.server.GameDetails; +import pp.battleship.model.Battleship; +import pp.battleship.model.Battleship.Status; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Rotation; + +import java.util.Properties; + +import static java.util.Collections.emptyList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class EditorTest { + private static final BattleshipConfig CONFIG = new BattleshipConfig(); + + static { + final Properties props = new Properties(); + props.setProperty("map.width", "10"); + props.setProperty("map.height", "10"); + props.setProperty("harbor.width", "6"); + props.setProperty("harbor.height", "10"); + props.setProperty("ship.nums", "1,1"); + CONFIG.readFrom(props); + } + + private ClientGameLogic logic; + + private static IntPoint p(int x, int y) { + return new IntPoint(x, y); + } + + @Before + public void setUp() { + logic = new ClientGameLogic(null); + logic.received(new GameDetails(CONFIG)); + } + + @Test + public void testInit() { + assertEquals(emptyList(), logic.getOwnMap().getItems()); + assertEquals(2, logic.getHarbor().getItems().size()); + + final Battleship ship1 = (Battleship) logic.getHarbor().getItems().get(0); + checkShip(ship1, 1, 0, 0, Rotation.RIGHT, Status.NORMAL); + + final Battleship ship2 = (Battleship) logic.getHarbor().getItems().get(1); + checkShip(ship2, 2, 0, 1, Rotation.RIGHT, Status.NORMAL); + } + + private void checkShip(Battleship ship, int length, int x, int y, Rotation rot, Status status) { + assertEquals(length, ship.getLength()); + assertEquals(x, ship.getX()); + assertEquals(y, ship.getY()); + assertEquals(rot, ship.getRot()); + assertEquals(status, ship.getStatus()); + } + + @Test + public void testRun1() { + logic.clickHarbor(p(0, 0)); + logic.clickOwnMap(p(0, 0)); // place ship 1 at (0,0) + + assertEquals(1, logic.getOwnMap().getShips().count()); + assertEquals(1, logic.getHarbor().getShips().count()); + checkShip((Battleship) logic.getHarbor().getItems().get(0), + 2, 0, 1, Rotation.RIGHT, Status.NORMAL); + checkShip((Battleship) logic.getOwnMap().getItems().get(0), + 1, 0, 0, Rotation.RIGHT, Status.NORMAL); + assertEquals(logic.getOwnMap().findShipAt(0, 0), logic.getOwnMap().getShips().findFirst().get()); + assertNull(logic.getOwnMap().findShipAt(1, 0)); + assertNull(logic.getOwnMap().findShipAt(0, 1)); + + logic.clickOwnMap(p(0, 0)); // select ship1 + logic.clickHarbor(p(0, 0)); // return it to harbor + + assertEquals(0, logic.getOwnMap().getShips().count()); + assertEquals(2, logic.getHarbor().getShips().count()); + + logic.clickHarbor(p(0, 0)); // select ship 1 in harbor + logic.clickOwnMap(p(0, 0)); // place it at (0,0) + + checkShip((Battleship) logic.getHarbor().getItems().get(0), + 2, 0, 1, Rotation.RIGHT, Status.NORMAL); + checkShip((Battleship) logic.getOwnMap().getItems().get(0), + 1, 0, 0, Rotation.RIGHT, Status.NORMAL); + + logic.clickHarbor(p(0, 1)); // select ship 2 in harbor + logic.clickOwnMap(p(0, 0)); // try to place it at (0,0); this is too close to ship 1 + + assertEquals(2, logic.getOwnMap().getShips().count()); + assertEquals(1, logic.getHarbor().getShips().count()); + checkShip((Battleship) logic.getHarbor().getItems().get(0), + 2, 0, 1, Rotation.RIGHT, Status.VALID_PREVIEW); + checkShip((Battleship) logic.getOwnMap().getItems().get(0), + 1, 0, 0, Rotation.RIGHT, Status.NORMAL); + checkShip((Battleship) logic.getOwnMap().getItems().get(1), + 2, 0, 0, Rotation.RIGHT, Status.INVALID_PREVIEW); + + logic.rotateShip(); // rotate selected ship 2 + logic.clickOwnMap(p(5, 5)); // place it at (5,5) + + assertEquals(2, logic.getOwnMap().getShips().count()); + assertEquals(0, logic.getHarbor().getShips().count()); + checkShip((Battleship) logic.getOwnMap().getItems().get(0), + 1, 0, 0, Rotation.RIGHT, Status.NORMAL); + checkShip((Battleship) logic.getOwnMap().getItems().get(1), + 2, 5, 5, Rotation.DOWN, Status.NORMAL); + + assertEquals(logic.getOwnMap().getShips().toList().get(1), logic.getOwnMap().findShipAt(5, 5)); + assertEquals(logic.getOwnMap().getShips().toList().get(1), logic.getOwnMap().findShipAt(5, 4)); + assertTrue(logic.isMapComplete()); + } + + @Test + public void testRun2() { + logic.clickHarbor(p(0, 0)); + logic.clickOwnMap(p(9, 9)); // place ship 1 at (9,9) + + assertEquals(1, logic.getOwnMap().getShips().count()); + assertEquals(1, logic.getHarbor().getShips().count()); + checkShip((Battleship) logic.getHarbor().getItems().get(0), + 2, 0, 1, Rotation.RIGHT, Status.NORMAL); + checkShip((Battleship) logic.getOwnMap().getItems().get(0), + 1, 9, 9, Rotation.RIGHT, Status.NORMAL); + + assertEquals(logic.getOwnMap().findShipAt(9, 9), logic.getOwnMap().getShips().findFirst().get()); + assertNull(logic.getOwnMap().findShipAt(10, 9)); + assertNull(logic.getOwnMap().findShipAt(9, 10)); + + assertFalse(logic.isMapComplete()); + + logic.clickHarbor(p(0, 1)); // select ship 2 in harbor of player 2 + logic.clickOwnMap(p(0, 0)); // place it at (0,0) + + assertEquals(2, logic.getOwnMap().getShips().count()); + assertEquals(0, logic.getHarbor().getShips().count()); + assertEquals(logic.getOwnMap().getShips().toList().get(0), logic.getOwnMap().findShipAt(9, 9)); + assertEquals(logic.getOwnMap().getShips().toList().get(1), logic.getOwnMap().findShipAt(0, 0)); + assertEquals(logic.getOwnMap().getShips().toList().get(1), logic.getOwnMap().findShipAt(1, 0)); + assertTrue(logic.isMapComplete()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/AbstractClientGameTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/AbstractClientGameTest.java new file mode 100644 index 0000000..b2f7e73 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/AbstractClientGameTest.java @@ -0,0 +1,63 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Before; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.Battleship.Status; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Rotation; +import pp.battleship.notification.GameEventListener; +import pp.battleship.notification.InfoTextEvent; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.Logger; + +import static org.junit.Assert.assertEquals; + +public abstract class AbstractClientGameTest { + final Deque infoTexts = new ArrayDeque<>(); + final Deque messages = new ArrayDeque<>(); + final ClientGameLogic clientLogic = new ClientGameLogic(messages::offer); + + static { + // Configure logging + final Logger rootLogger = LogManager.getLogManager().getLogger(""); + rootLogger.setLevel(Level.WARNING); + for (Handler h : rootLogger.getHandlers()) { + h.setLevel(Level.WARNING); + } + } + + @Before + public void setup() { + clientLogic.addListener(new GameEventListener() { + @Override + public void receivedEvent(InfoTextEvent event) { + infoTexts.offer(event.key()); + } + }); + } + + static IntPoint p(int x, int y) { + return new IntPoint(x, y); + } + + void checkShip(Battleship ship, int length, int x, int y, Rotation rot, Status status) { + assertEquals(length, ship.getLength()); + assertEquals(x, ship.getX()); + assertEquals(y, ship.getY()); + assertEquals(rot, ship.getRot()); + assertEquals(status, ship.getStatus()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player1Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player1Test.java new file mode 100644 index 0000000..3cc236b --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player1Test.java @@ -0,0 +1,243 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Battleship.Status.VALID_PREVIEW; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the client game logic of Player 1 in a small game, called "Game 1". + * The test cases for Player 2 are contained in {@linkplain ClientGame1Player2Test} + * and the test cases for the server in {@linkplain pp.battleship.game.server.ServerGame1Test}. + * + * @see ClientGame1Player2Test + * @see pp.battleship.game.server.ServerGame1Test + */ +public class ClientGame1Player1Test extends AbstractClientGameTest { + @Test + public void testClient() { + BattleshipConfig config; + Properties props; + List ships; + MapMessage mapMsg; + ShootMessage shootMsg; + + config = new BattleshipConfig(); + props = new Properties(); + props.setProperty("map.width", "6"); + props.setProperty("map.height", "6"); + props.setProperty("harbor.width", "6"); + props.setProperty("harbor.height", "6"); + props.setProperty("ship.nums", "1,1"); + config.readFrom(props); + clientLogic.received(new GameDetails(config)); + assertEquals("place.ships.in.your.map", infoTexts.poll()); + clientLogic.clickHarbor(p(0, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(0, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(5, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 1, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.mapFinished(); + mapMsg = (MapMessage) messages.poll(); + assertEquals(2, mapMsg.getShips().size()); + checkShip(mapMsg.getShips().get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(1), 1, 5, 1, RIGHT, NORMAL); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(new StartBattleMessage(true)); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(3, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(3, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(2, 2))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(1, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(1, 3), shootMsg.getPosition()); + clientLogic.clickOpponentMap(p(1, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(1, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(1, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(2, 1))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(3, 1), new Battleship(2, 2, 1, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(5, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 3), shootMsg.getPosition()); + clientLogic.clickOpponentMap(p(2, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(2, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(3, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(1, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(1, 4), shootMsg.getPosition()); + clientLogic.clickOpponentMap(p(1, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(1, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(1, 4))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(true, p(1, 4))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(1, 5)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(1, 5), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(1, 5), new Battleship(2, 1, 5, DOWN))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 1, 5, DOWN, NORMAL); + clientLogic.clickOpponentMap(p(2, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 2), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(2, 2))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.lost(p(5, 1), new Battleship(1, 5, 1, RIGHT), List.of(new Battleship(1, 1, 2, RIGHT)))); + assertEquals("you.lost.the.game", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 1, 5, DOWN, NORMAL); + checkShip(ships.get(1), 1, 1, 2, RIGHT, NORMAL); + + assertEquals(0, infoTexts.size()); + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player2Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player2Test.java new file mode 100644 index 0000000..90d6ec5 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame1Player2Test.java @@ -0,0 +1,389 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Battleship.Status.VALID_PREVIEW; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the client game logic of Player 2 in a small game, called "Game 1". + * The test cases for Player 1 are contained in {@linkplain ClientGame1Player1Test} + * and the test cases for the server in {@linkplain pp.battleship.game.server.ServerGame1Test}. + * + * @see ClientGame1Player1Test + * @see pp.battleship.game.server.ServerGame1Test + */ +public class ClientGame1Player2Test extends AbstractClientGameTest { + @Test + public void testClient() { + BattleshipConfig config; + Properties props; + List ships; + MapMessage mapMsg; + ShootMessage shootMsg; + + config = new BattleshipConfig(); + props = new Properties(); + props.setProperty("map.width", "6"); + props.setProperty("map.height", "6"); + props.setProperty("harbor.width", "6"); + props.setProperty("harbor.height", "6"); + props.setProperty("ship.nums", "1,1"); + config.readFrom(props); + clientLogic.received(new GameDetails(config)); + assertEquals("place.ships.in.your.map", infoTexts.poll()); + clientLogic.clickHarbor(p(1, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(5, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.clickOwnMap(p(2, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 5, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 2, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.clickHarbor(p(1, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 5, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 5, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 5, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + clientLogic.clickOwnMap(p(5, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 5, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(1, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 0)); + clientLogic.movePreview(p(5, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.rotateShip(); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(1, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 1, 5, DOWN, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(1, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 1, 2, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 1, 5, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.mapFinished(); + mapMsg = (MapMessage) messages.poll(); + assertEquals(2, mapMsg.getShips().size()); + checkShip(mapMsg.getShips().get(0), 1, 1, 2, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(1), 2, 1, 5, DOWN, NORMAL); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(new StartBattleMessage(false)); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(3, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 2), shootMsg.getPosition()); + clientLogic.clickOpponentMap(p(2, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 2), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(2, 2))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(1, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 1)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 1), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(2, 1))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(3, 1)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 1), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(3, 1), new Battleship(2, 2, 1, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(5, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(5, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(2, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(3, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(3, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(1, 4))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(1, 4))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(1, 5), new Battleship(2, 1, 5, DOWN))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(2, 2))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 1)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 1), shootMsg.getPosition()); + clientLogic.clickOpponentMap(p(5, 1)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 1), shootMsg.getPosition()); + clientLogic.received(EffectMessage.won(p(5, 1), new Battleship(1, 5, 1, RIGHT))); + assertEquals("you.won.the.game", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 2, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 5, 1, RIGHT, NORMAL); + + assertEquals(0, infoTexts.size()); + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player1Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player1Test.java new file mode 100644 index 0000000..0667766 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player1Test.java @@ -0,0 +1,1271 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static pp.battleship.model.Battleship.Status.INVALID_PREVIEW; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Battleship.Status.VALID_PREVIEW; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the client game logic of Player 1 in a larger game, called "Game 2". + * The test cases for Player 2 are contained in {@linkplain ClientGame2Player2Test} + * and the test cases for the server in {@linkplain pp.battleship.game.server.ServerGame2Test}. + * + * @see ClientGame2Player2Test + * @see pp.battleship.game.server.ServerGame2Test + */ +public class ClientGame2Player1Test extends AbstractClientGameTest { + @Test + public void testClient() { + BattleshipConfig config; + Properties props; + List ships; + MapMessage mapMsg; + ShootMessage shootMsg; + + config = new BattleshipConfig(); + props = new Properties(); + props.setProperty("map.width", "10"); + props.setProperty("map.height", "10"); + props.setProperty("ship.nums", "4,3,2,1"); + config.readFrom(props); + clientLogic.received(new GameDetails(config)); + assertEquals("place.ships.in.your.map", infoTexts.poll()); + clientLogic.clickHarbor(p(1, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(6, 3)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.rotateShip(); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(1, 1)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 2)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 3)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + clientLogic.movePreview(p(0, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(0, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(6, 3)); + clientLogic.movePreview(p(5, 3)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.rotateShip(); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(1, 4)); + clientLogic.movePreview(p(1, 5)); + clientLogic.movePreview(p(0, 6)); + clientLogic.movePreview(p(0, 6)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + clientLogic.movePreview(p(0, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(0, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + clientLogic.clickHarbor(p(1, 7)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(1, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + clientLogic.movePreview(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 2)); + clientLogic.movePreview(p(7, 2)); + clientLogic.movePreview(p(7, 2)); + clientLogic.movePreview(p(7, 2)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(4, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(4, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(7, 9)); + clientLogic.movePreview(p(6, 9)); + clientLogic.movePreview(p(4, 9)); + clientLogic.movePreview(p(4, 9)); + clientLogic.movePreview(p(3, 9)); + clientLogic.movePreview(p(3, 9)); + clientLogic.movePreview(p(3, 9)); + clientLogic.movePreview(p(3, 9)); + clientLogic.movePreview(p(3, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + clientLogic.movePreview(p(2, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(6, 8)); + clientLogic.movePreview(p(6, 9)); + clientLogic.movePreview(p(6, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + clientLogic.movePreview(p(5, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(5, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 3)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(9, 9)); + clientLogic.movePreview(p(9, 9)); + clientLogic.movePreview(p(9, 9)); + clientLogic.movePreview(p(9, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + clientLogic.movePreview(p(8, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(8, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(8, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + clientLogic.movePreview(p(7, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(7, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(9, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 0, 0, RIGHT, INVALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(9, 7)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 9, 7, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(9, 7)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 9, 7, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.mapFinished(); + mapMsg = (MapMessage) messages.poll(); + assertEquals(10, mapMsg.getShips().size()); + checkShip(mapMsg.getShips().get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(mapMsg.getShips().get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(mapMsg.getShips().get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(5), 2, 5, 9, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(6), 1, 8, 9, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(9), 1, 9, 7, RIGHT, NORMAL); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(new StartBattleMessage(true)); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 5)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 5), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(5, 5))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(5, 5))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(5, 6))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(6, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(6, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(6, 6))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(5, 6))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(4, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(4, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(4, 6), new Battleship(2, 4, 6, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(4, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(4, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(4, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(5, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(6, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(6, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(6, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(3, 7))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(3, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(3, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(2, 8), new Battleship(4, 2, 8, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(0, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(0, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(0, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(5, 9))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(6, 9), new Battleship(2, 5, 9, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(7, 7))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(0, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(0, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(0, 6))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(2, 5))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(7, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(7, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(7, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(8, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(8, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(8, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(9, 8)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(9, 8), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(9, 8), new Battleship(3, 7, 8, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(2, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(2, 6))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 5)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 5), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(2, 5), new Battleship(2, 2, 6, DOWN))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + clientLogic.clickOpponentMap(p(3, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(3, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(8, 9), new Battleship(1, 8, 9, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(5, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(2, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 2), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(2, 2))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 1)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 1), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(2, 1), new Battleship(3, 2, 3, DOWN))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + clientLogic.clickOpponentMap(p(4, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(4, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(4, 4))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(5, 4), new Battleship(2, 4, 4, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(7, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(7, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(7, 4), new Battleship(1, 7, 4, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(9, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(9, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(9, 4))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(8, 4))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(7, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(7, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(7, 6), new Battleship(1, 7, 6, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 6, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(4, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(4, 2), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(4, 2), new Battleship(1, 4, 2, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(6, 2)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(6, 2), shootMsg.getPosition()); + clientLogic.received(EffectMessage.won(p(6, 2), new Battleship(1, 6, 2, RIGHT))); + assertEquals("you.won.the.game", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 7, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(4), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 6, 2, RIGHT, NORMAL); + + assertEquals(0, infoTexts.size()); + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player2Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player2Test.java new file mode 100644 index 0000000..6f42cc5 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGame2Player2Test.java @@ -0,0 +1,1638 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Battleship.Status.VALID_PREVIEW; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the client game logic of Player 2 in a larger game, called "Game 2". + * The test cases for Player 1 are contained in {@linkplain ClientGame2Player1Test} + * and the test cases for the server in {@linkplain pp.battleship.game.server.ServerGame2Test}. + * + * @see ClientGame2Player1Test + * @see pp.battleship.game.server.ServerGame2Test + */ +public class ClientGame2Player2Test extends AbstractClientGameTest { + @Test + public void testClient() { + BattleshipConfig config; + Properties props; + List ships; + MapMessage mapMsg; + ShootMessage shootMsg; + + config = new BattleshipConfig(); + props = new Properties(); + props.setProperty("map.width", "10"); + props.setProperty("map.height", "10"); + props.setProperty("ship.nums", "4,3,2,1"); + config.readFrom(props); + clientLogic.received(new GameDetails(config)); + assertEquals("place.ships.in.your.map", infoTexts.poll()); + clientLogic.clickHarbor(p(1, 9)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(9, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(6, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 0, 9, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(5, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(7, 7)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 0, 8, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(4, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 7)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(7, 7)); + clientLogic.movePreview(p(7, 7)); + clientLogic.movePreview(p(6, 7)); + clientLogic.movePreview(p(6, 7)); + clientLogic.movePreview(p(6, 7)); + clientLogic.movePreview(p(6, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(4, 7)); + clientLogic.movePreview(p(4, 7)); + clientLogic.movePreview(p(3, 8)); + clientLogic.movePreview(p(3, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 3, 0, 7, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(1, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 1)); + clientLogic.movePreview(p(4, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.movePreview(p(3, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.rotateShip(); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 4)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + clientLogic.movePreview(p(2, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(2), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 2, 6, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + clientLogic.clickOwnMap(p(4, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 4, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 3, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 5)); + clientLogic.movePreview(p(4, 5)); + clientLogic.movePreview(p(4, 5)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 3)); + clientLogic.movePreview(p(4, 3)); + clientLogic.movePreview(p(4, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(3, 1)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.rotateShip(); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 0)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 1)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(2, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 2)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(3, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + clientLogic.movePreview(p(2, 3)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + checkShip(ships.get(6), 3, 0, 6, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 3)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(5, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + clientLogic.movePreview(p(4, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 5, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(4, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, NORMAL); + clientLogic.clickHarbor(p(1, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(6, 4)); + clientLogic.movePreview(p(5, 4)); + clientLogic.movePreview(p(5, 4)); + clientLogic.movePreview(p(5, 4)); + clientLogic.movePreview(p(5, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(4, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(5, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 0, 4, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(4, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(6, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 3)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(4, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + checkShip(ships.get(3), 1, 0, 3, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(7, 6)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(7, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(8, 3)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(7, 3)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + clientLogic.movePreview(p(7, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(3, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(2), 1, 0, 2, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(7, 4)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 1)); + clientLogic.movePreview(p(9, 1)); + clientLogic.movePreview(p(9, 1)); + clientLogic.movePreview(p(8, 2)); + clientLogic.movePreview(p(8, 2)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(6, 1)); + clientLogic.movePreview(p(5, 1)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(5, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + clientLogic.movePreview(p(4, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(4, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, NORMAL); + clientLogic.clickHarbor(p(0, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 0)); + clientLogic.movePreview(p(9, 1)); + clientLogic.movePreview(p(8, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 1)); + clientLogic.movePreview(p(7, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + clientLogic.movePreview(p(6, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 6, 2, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 1, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(6, 2)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 4, 5, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(2), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(3), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(4), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.clickOwnMap(p(5, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(2), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(3), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(9), 4, 5, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(5, 8)); + clientLogic.movePreview(p(6, 8)); + clientLogic.movePreview(p(6, 7)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(7, 5)); + clientLogic.movePreview(p(7, 5)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(8, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 2)); + clientLogic.clickHarbor(p(2, 3)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(2), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(3), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(2), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(3), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 3, 1, 8, RIGHT, NORMAL); + checkShip(ships.get(1), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(2), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(3), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(4), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + clientLogic.clickOwnMap(p(2, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 3, 2, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(3, 8)); + clientLogic.movePreview(p(4, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(5, 7)); + clientLogic.movePreview(p(6, 6)); + clientLogic.movePreview(p(7, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.movePreview(p(9, 5)); + clientLogic.clickHarbor(p(0, 5)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 0, 1, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(8, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 4, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(1), 3, 0, 1, RIGHT, NORMAL); + clientLogic.clickHarbor(p(1, 0)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(1), 4, 0, 0, RIGHT, VALID_PREVIEW); + checkShip(ships.get(0), 3, 0, 1, RIGHT, NORMAL); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 1)); + clientLogic.movePreview(p(7, 2)); + clientLogic.movePreview(p(5, 3)); + clientLogic.movePreview(p(4, 4)); + clientLogic.movePreview(p(3, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(2, 5)); + clientLogic.movePreview(p(1, 6)); + clientLogic.movePreview(p(1, 6)); + clientLogic.movePreview(p(0, 6)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 7)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(0, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(1, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + clientLogic.movePreview(p(2, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, NORMAL); + checkShip(ships.get(1), 4, 0, 0, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(2, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(9, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, NORMAL); + clientLogic.clickHarbor(p(1, 1)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, VALID_PREVIEW); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 3, 0, 0, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.movePreview(p(9, 3)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(9, 4)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 5)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(9, 6)); + clientLogic.movePreview(p(8, 6)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 7)); + clientLogic.movePreview(p(8, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + clientLogic.movePreview(p(7, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 3, 7, 8, RIGHT, VALID_PREVIEW); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 3, 0, 1, RIGHT, VALID_PREVIEW); + clientLogic.clickOwnMap(p(7, 8)); + ships = clientLogic.getOwnMap().getRemainingShips(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(ships.get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(ships.get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(ships.get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(ships.get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(ships.get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(ships.get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(ships.get(8), 4, 2, 8, RIGHT, NORMAL); + checkShip(ships.get(9), 3, 7, 8, RIGHT, NORMAL); + ships = clientLogic.getHarbor().getRemainingShips(); + assertEquals(0, ships.size()); + clientLogic.mapFinished(); + mapMsg = (MapMessage) messages.poll(); + assertEquals(10, mapMsg.getShips().size()); + checkShip(mapMsg.getShips().get(0), 2, 2, 6, DOWN, NORMAL); + checkShip(mapMsg.getShips().get(1), 3, 2, 3, DOWN, NORMAL); + checkShip(mapMsg.getShips().get(2), 2, 4, 6, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(3), 2, 4, 4, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(4), 1, 7, 6, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(5), 1, 7, 4, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(6), 1, 4, 2, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(7), 1, 6, 2, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(8), 4, 2, 8, RIGHT, NORMAL); + checkShip(mapMsg.getShips().get(9), 3, 7, 8, RIGHT, NORMAL); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(new StartBattleMessage(false)); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.clickOpponentMap(p(4, 5)); + assertEquals("wait.its.not.your.turn", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(5, 5))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 5)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 5), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(5, 5))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(5, 6))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(6, 6))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 6)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 6), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(5, 6))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(4, 6), new Battleship(2, 4, 6, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(4, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(5, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(6, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(3, 7)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(3, 7), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(3, 7))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(3, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(2, 8), new Battleship(4, 2, 8, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.clickOpponentMap(p(7, 7)); + assertEquals("wait.its.not.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(7, 7)); + assertEquals("wait.its.not.your.turn", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(0, 8))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(5, 9)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 9), shootMsg.getPosition()); + clientLogic.received(EffectMessage.hit(true, p(5, 9))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(6, 9)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(6, 9), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(6, 9), new Battleship(2, 5, 9, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(1, ships.size()); + checkShip(ships.get(0), 2, 5, 9, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(7, 7)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(7, 7), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(7, 7))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(0, 6))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(2, 5)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(2, 5), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(2, 5))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(7, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(8, 8))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(9, 8), new Battleship(3, 7, 8, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(2, 6))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(2, 5), new Battleship(2, 2, 6, DOWN))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(3, 3))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(8, 9)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(8, 9), shootMsg.getPosition()); + clientLogic.received(EffectMessage.shipDestroyed(true, p(8, 9), new Battleship(1, 8, 9, RIGHT))); + assertEquals("its.your.turn", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(2, ships.size()); + checkShip(ships.get(0), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 8, 9, RIGHT, NORMAL); + clientLogic.clickOpponentMap(p(5, 3)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(5, 3), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(5, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(2, 3))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(2, 2))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(2, 1), new Battleship(3, 2, 3, DOWN))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.hit(false, p(4, 4))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(5, 4), new Battleship(2, 4, 4, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(7, 4), new Battleship(1, 7, 4, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.miss(false, p(9, 4))); + assertEquals("its.your.turn", infoTexts.poll()); + clientLogic.clickOpponentMap(p(8, 4)); + shootMsg = (ShootMessage) messages.poll(); + assertEquals(p(8, 4), shootMsg.getPosition()); + clientLogic.received(EffectMessage.miss(true, p(8, 4))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(7, 6), new Battleship(1, 7, 6, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.shipDestroyed(false, p(4, 2), new Battleship(1, 4, 2, RIGHT))); + assertEquals("wait.for.opponent", infoTexts.poll()); + clientLogic.received(EffectMessage.lost(p(6, 2), new Battleship(1, 6, 2, RIGHT), List.of(new Battleship(4, 0, 5, DOWN), new Battleship(3, 0, 9, DOWN), new Battleship(3, 0, 0, RIGHT), new Battleship(2, 4, 0, RIGHT), new Battleship(2, 2, 9, RIGHT), new Battleship(1, 7, 0, RIGHT), new Battleship(1, 9, 0, RIGHT), new Battleship(1, 9, 7, RIGHT)))); + assertEquals("you.lost.the.game", infoTexts.poll()); + ships = clientLogic.getOpponentMap().getShips().toList(); + assertEquals(10, ships.size()); + checkShip(ships.get(0), 2, 5, 9, RIGHT, NORMAL); + checkShip(ships.get(1), 1, 8, 9, RIGHT, NORMAL); + checkShip(ships.get(2), 4, 0, 5, DOWN, NORMAL); + checkShip(ships.get(3), 3, 0, 9, DOWN, NORMAL); + checkShip(ships.get(4), 3, 0, 0, RIGHT, NORMAL); + checkShip(ships.get(5), 2, 4, 0, RIGHT, NORMAL); + checkShip(ships.get(6), 2, 2, 9, RIGHT, NORMAL); + checkShip(ships.get(7), 1, 7, 0, RIGHT, NORMAL); + checkShip(ships.get(8), 1, 9, 0, RIGHT, NORMAL); + checkShip(ships.get(9), 1, 9, 7, RIGHT, NORMAL); + + assertEquals(0, infoTexts.size()); + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGameLogicTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGameLogicTest.java new file mode 100644 index 0000000..0806bed --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/client/ClientGameLogicTest.java @@ -0,0 +1,187 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.client; + +import org.junit.Before; +import org.junit.Test; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.IntPoint; + +import java.io.File; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class ClientGameLogicTest { + private ClientGameLogic logic; + private ClientSender clientSender; + private ClientState initialState; + private ClientState editorState; + private ClientState gameOverState; + + @Before + public void setUp() { + clientSender = mock(ClientSender.class); + initialState = mock(ClientState.class); + editorState = mock(ClientState.class); + gameOverState = mock(ClientState.class); + logic = new ClientGameLogic(clientSender); + logic.setState(initialState); + } + + @Test + public void testSetState() { + logic.setState(editorState); + assertEquals(editorState, logic.getState()); + } + + @Test + public void testShowEditor() { + when(initialState.showEditor()).thenReturn(true); + when(editorState.showEditor()).thenReturn(false); + assertTrue(logic.showEditor()); + logic.setState(editorState); + assertFalse(logic.showEditor()); + } + + @Test + public void testShowBattle() { + when(initialState.showBattle()).thenReturn(false); + when(gameOverState.showBattle()).thenReturn(true); + assertFalse(logic.showBattle()); + logic.setState(gameOverState); + assertTrue(logic.showBattle()); + } + + @Test + public void testReceivedGameDetails() { + final GameDetails details = mock(GameDetails.class); + logic.received(details); + verify(initialState).receivedGameDetails(details); + } + + @Test + public void testMovePreview() { + final IntPoint pos = new IntPoint(42, 42); + logic.movePreview(pos); + verify(initialState).movePreview(pos); + } + + @Test + public void testClickOwnMap() { + final IntPoint pos = new IntPoint(42, 42); + logic.clickOwnMap(pos); + verify(initialState).clickOwnMap(pos); + } + + @Test + public void testClickHarbor() { + final IntPoint pos = new IntPoint(42, 42); + logic.clickHarbor(pos); + verify(initialState).clickHarbor(pos); + } + + @Test + public void testClickOpponentMap() { + final IntPoint pos = new IntPoint(42, 42); + logic.clickOpponentMap(pos); + verify(initialState).clickOpponentMap(pos); + } + + @Test + public void testRotateShip() { + logic.rotateShip(); + verify(initialState).rotateShip(); + } + + @Test + public void testMapFinished() { + logic.mapFinished(); + verify(initialState).mapFinished(); + } + + @Test + public void testIsMapComplete() { + logic.setState(editorState); + when(editorState.isMapComplete()).thenReturn(true); + assertTrue(logic.isMapComplete()); + when(editorState.isMapComplete()).thenReturn(false); + assertFalse(logic.isMapComplete()); + } + + @Test + public void testMovingShip() { + logic.setState(editorState); + when(editorState.movingShip()).thenReturn(true); + assertTrue(logic.movingShip()); + when(editorState.movingShip()).thenReturn(false); + assertFalse(logic.movingShip()); + } + + @Test + public void testReceivedStartShooting() { + final StartBattleMessage msg = mock(StartBattleMessage.class); + logic.received(msg); + verify(initialState).receivedStartBattle(msg); + } + + @Test + public void testReceivedEffectMessage() { + final EffectMessage msg = mock(EffectMessage.class); + logic.received(msg); + verify(initialState).receivedEffect(msg); + } + + @Test + public void testLoadMap() throws IOException { + final File file = mock(File.class); + logic.loadMap(file); + verify(initialState).loadMap(file); + } + + @Test + public void testMayLoadMap() { + logic.setState(editorState); + when(editorState.mayLoadMap()).thenReturn(true); + assertTrue(logic.mayLoadMap()); + when(editorState.mayLoadMap()).thenReturn(false); + assertFalse(logic.mayLoadMap()); + } + + @Test + public void testMaySaveMap() { + logic.setState(editorState); + when(editorState.maySaveMap()).thenReturn(true); + assertTrue(logic.maySaveMap()); + when(editorState.maySaveMap()).thenReturn(false); + assertFalse(logic.maySaveMap()); + } + + @Test(expected = IOException.class) + public void testSaveMap() throws IOException { + final File file = mock(File.class); + logic.setState(editorState); + when(editorState.maySaveMap()).thenReturn(false); + logic.saveMap(file); + } + + @Test + public void testSend() { + final ClientMessage msg = mock(ClientMessage.class); + logic.send(msg); + verify(clientSender).send(msg); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/server/AbstractServerGameTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/AbstractServerGameTest.java new file mode 100644 index 0000000..a5fb4af --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/AbstractServerGameTest.java @@ -0,0 +1,55 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import pp.battleship.BattleshipConfig; +import pp.battleship.message.server.ServerMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.Battleship.Status; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Rotation; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.Logger; + +import static org.junit.Assert.assertEquals; + +public abstract class AbstractServerGameTest { + static final BattleshipConfig CONFIG = new BattleshipConfig(); + + static { + // Configure logging + final Logger rootLogger = LogManager.getLogManager().getLogger(""); + rootLogger.setLevel(Level.WARNING); + for (Handler h : rootLogger.getHandlers()) { + h.setLevel(Level.WARNING); + } + } + + record ServerMessageWrapper(int id, ServerMessage msg) {} + + final Deque messages = new ArrayDeque<>(); + final ServerSender serverSender = (id, msg) -> messages.offer(new ServerMessageWrapper(id, msg)); + final ServerGameLogic serverLogic = new ServerGameLogic(serverSender, CONFIG); + + static IntPoint p(int x, int y) { + return new IntPoint(x, y); + } + + void checkShip(Battleship ship, int length, int x, int y, Rotation rot, Status status) { + assertEquals(length, ship.getLength()); + assertEquals(x, ship.getX()); + assertEquals(y, ship.getY()); + assertEquals(rot, ship.getRot()); + assertEquals(status, ship.getStatus()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame1Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame1Test.java new file mode 100644 index 0000000..8125622 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame1Test.java @@ -0,0 +1,254 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import org.junit.Test; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.Shot; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the server game logic in a small game, called "Game 1", where Player 2 (with id 1) wins. + * The test cases for the players are contained in {@linkplain pp.battleship.game.client.ClientGame1Player1Test} + * and {@linkplain pp.battleship.game.client.ClientGame1Player2Test}. + * + * @see pp.battleship.game.client.ClientGame1Player1Test + * @see pp.battleship.game.client.ClientGame1Player2Test + */ +public class ServerGame1Test extends AbstractServerGameTest { + static { + final Properties props = new Properties(); + props.setProperty("map.width", "6"); + props.setProperty("map.height", "6"); + props.setProperty("ship.nums", "1,1"); + CONFIG.readFrom(props); + } + + @Test + public void testRun() { + EffectMessage effectMsg; + GameDetails details; + StartBattleMessage startShooting; + + serverLogic.addPlayer(0); // Player 1 + serverLogic.addPlayer(1); // Player 2 + assertEquals(0, messages.peek().id()); + details = (GameDetails) messages.poll().msg(); + assertEquals(6, details.getWidth()); + assertEquals(6, details.getHeight()); + assertEquals(2, details.getShipNums().size()); + assertEquals(Integer.valueOf(1), details.getShipNums().get(1)); + assertEquals(Integer.valueOf(1), details.getShipNums().get(2)); + assertEquals(1, messages.peek().id()); + details = (GameDetails) messages.poll().msg(); + assertEquals(6, details.getWidth()); + assertEquals(6, details.getHeight()); + assertEquals(2, details.getShipNums().size()); + assertEquals(Integer.valueOf(1), details.getShipNums().get(1)); + assertEquals(Integer.valueOf(1), details.getShipNums().get(2)); + serverLogic.received(new MapMessage(List.of(new Battleship(1, 1, 2, RIGHT), new Battleship(2, 1, 5, DOWN))), 1); + serverLogic.received(new MapMessage(List.of(new Battleship(2, 2, 1, RIGHT), new Battleship(1, 5, 1, RIGHT))), 0); + assertEquals(0, messages.peek().id()); + startShooting = (StartBattleMessage) messages.poll().msg(); + assertTrue(startShooting.isMyTurn()); + assertEquals(1, messages.peek().id()); + startShooting = (StartBattleMessage) messages.poll().msg(); + assertFalse(startShooting.isMyTurn()); + serverLogic.received(new ShootMessage(p(3, 3)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 2)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 2)), 1); + serverLogic.received(new ShootMessage(p(1, 3)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(1, 3)), 0); + serverLogic.received(new ShootMessage(p(2, 1)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 1, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 1, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(3, 1)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 2, 1, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 2, 1, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 3)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 3)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 3)), 0); + serverLogic.received(new ShootMessage(p(3, 3)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(1, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(1, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(1, 5)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 5, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 1, 5, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(1, 5, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 1, 5, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 2)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 1)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 5, 1, RIGHT, NORMAL); + assertEquals(0, effectMsg.getRemainingOpponentShips().size()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 5, 1, RIGHT, NORMAL); + assertEquals(1, effectMsg.getRemainingOpponentShips().size()); + checkShip(effectMsg.getRemainingOpponentShips().get(0), 1, 1, 2, RIGHT, NORMAL); + // Player 2 wins + + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame2Test.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame2Test.java new file mode 100644 index 0000000..c90ae8b --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGame2Test.java @@ -0,0 +1,574 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import org.junit.Test; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.Shot; + +import java.util.List; +import java.util.Properties; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static pp.battleship.model.Battleship.Status.NORMAL; +import static pp.battleship.model.Rotation.DOWN; +import static pp.battleship.model.Rotation.RIGHT; + +/** + * Integration test cases for the server game logic in a larger game, called "Game 2", where Player 1 (with id 0) wins. + * The test cases for the players are contained in {@linkplain pp.battleship.game.client.ClientGame2Player1Test} + * and {@linkplain pp.battleship.game.client.ClientGame2Player2Test}. + * + * @see pp.battleship.game.client.ClientGame2Player1Test + * @see pp.battleship.game.client.ClientGame2Player2Test + */ +public class ServerGame2Test extends AbstractServerGameTest { + static { + final Properties props = new Properties(); + props.setProperty("map.width", "10"); + props.setProperty("map.height", "10"); + props.setProperty("ship.nums", "4,3,2,1"); + CONFIG.readFrom(props); + } + + @Test + public void testRun() { + EffectMessage effectMsg; + GameDetails details; + StartBattleMessage startShooting; + + serverLogic.addPlayer(0); // Player 1 + serverLogic.addPlayer(1); // Player 2 + assertEquals(0, messages.peek().id()); + details = (GameDetails) messages.poll().msg(); + assertEquals(10, details.getWidth()); + assertEquals(10, details.getHeight()); + assertEquals(4, details.getShipNums().size()); + assertEquals(Integer.valueOf(4), details.getShipNums().get(1)); + assertEquals(Integer.valueOf(3), details.getShipNums().get(2)); + assertEquals(Integer.valueOf(2), details.getShipNums().get(3)); + assertEquals(Integer.valueOf(1), details.getShipNums().get(4)); + assertEquals(1, messages.peek().id()); + details = (GameDetails) messages.poll().msg(); + assertEquals(10, details.getWidth()); + assertEquals(10, details.getHeight()); + assertEquals(4, details.getShipNums().size()); + assertEquals(Integer.valueOf(4), details.getShipNums().get(1)); + assertEquals(Integer.valueOf(3), details.getShipNums().get(2)); + assertEquals(Integer.valueOf(2), details.getShipNums().get(3)); + assertEquals(Integer.valueOf(1), details.getShipNums().get(4)); + serverLogic.received(new MapMessage(List.of(new Battleship(3, 2, 3, DOWN), new Battleship(2, 2, 6, DOWN), new Battleship(2, 4, 6, RIGHT), new Battleship(2, 4, 4, RIGHT), new Battleship(1, 7, 6, RIGHT), new Battleship(1, 7, 4, RIGHT), new Battleship(1, 4, 2, RIGHT), new Battleship(1, 6, 2, RIGHT), new Battleship(4, 2, 8, RIGHT), new Battleship(3, 7, 8, RIGHT))), 1); + serverLogic.received(new MapMessage(List.of(new Battleship(4, 0, 5, DOWN), new Battleship(3, 0, 9, DOWN), new Battleship(3, 0, 0, RIGHT), new Battleship(2, 4, 0, RIGHT), new Battleship(2, 2, 9, RIGHT), new Battleship(2, 5, 9, RIGHT), new Battleship(1, 8, 9, RIGHT), new Battleship(1, 7, 0, RIGHT), new Battleship(1, 9, 0, RIGHT), new Battleship(1, 9, 7, RIGHT))), 0); + assertEquals(0, messages.peek().id()); + startShooting = (StartBattleMessage) messages.poll().msg(); + assertTrue(startShooting.isMyTurn()); + assertEquals(1, messages.peek().id()); + startShooting = (StartBattleMessage) messages.poll().msg(); + assertFalse(startShooting.isMyTurn()); + serverLogic.received(new ShootMessage(p(5, 5)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 5)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 6, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 6, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(6, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 6)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(4, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 6, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 4, 6, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 6, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 4, 6, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(4, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(6, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 8, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 8, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(3, 7)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 7, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 7, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(3, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 8, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 4, 2, 8, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 8, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 4, 2, 8, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(0, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(0, 8, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(0, 8, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 9)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 9, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 9, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(6, 9)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 9, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 5, 9, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 9, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 5, 9, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(7, 7)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 7, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 7, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(0, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(0, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(0, 6, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 5)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 5, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(7, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(8, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 8, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(9, 8)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(9, 8, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 3, 7, 8, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(9, 8, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 3, 7, 8, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 6, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 6, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 5)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 5, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 2, 6, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 5, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 2, 6, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(3, 3)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(3, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(8, 9)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 9, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 8, 9, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 9, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 8, 9, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 3)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 3, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 3)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 3, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 3, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 2)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 2, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(2, 1)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 3, 2, 3, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(2, 1, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 3, 2, 3, DOWN, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(4, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 4, true), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(5, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 4, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 4, 4, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(5, 4, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 2, 4, 4, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(7, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 4, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 7, 4, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 4, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 7, 4, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(9, 4)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(9, 4, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(9, 4, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(8, 4)), 1); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 4, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(8, 4, false), effectMsg.getShot()); + assertNull(effectMsg.getDestroyedShip()); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(7, 6)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 6, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 7, 6, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(7, 6, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 7, 6, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(4, 2)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 2, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 4, 2, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(4, 2, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 4, 2, RIGHT, NORMAL); + assertNull(effectMsg.getRemainingOpponentShips()); + serverLogic.received(new ShootMessage(p(6, 2)), 0); + assertEquals(0, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertTrue(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 2, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 6, 2, RIGHT, NORMAL); + assertEquals(0, effectMsg.getRemainingOpponentShips().size()); + assertEquals(1, messages.peek().id()); + effectMsg = (EffectMessage) messages.poll().msg(); + assertFalse(effectMsg.isOwnShot()); + assertEquals(new Shot(6, 2, true), effectMsg.getShot()); + checkShip(effectMsg.getDestroyedShip(), 1, 6, 2, RIGHT, NORMAL); + assertEquals(8, effectMsg.getRemainingOpponentShips().size()); + checkShip(effectMsg.getRemainingOpponentShips().get(0), 4, 0, 5, DOWN, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(1), 3, 0, 9, DOWN, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(2), 3, 0, 0, RIGHT, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(3), 2, 4, 0, RIGHT, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(4), 2, 2, 9, RIGHT, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(5), 1, 7, 0, RIGHT, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(6), 1, 9, 0, RIGHT, NORMAL); + checkShip(effectMsg.getRemainingOpponentShips().get(7), 1, 9, 7, RIGHT, NORMAL); + // Player 1 wins + + assertEquals(0, messages.size()); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGameLogicTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGameLogicTest.java new file mode 100644 index 0000000..a0a83f8 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/game/server/ServerGameLogicTest.java @@ -0,0 +1,122 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.game.server; + +import org.junit.Before; +import org.junit.Test; +import pp.battleship.BattleshipConfig; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Rotation; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class ServerGameLogicTest { + private ServerGameLogic serverGameLogic; + private ServerSender mockServerSender; + + @Before + public void setUp() { + mockServerSender = mock(ServerSender.class); + serverGameLogic = new ServerGameLogic(mockServerSender, new BattleshipConfig()); + } + + @Test + public void testAddPlayer() { + serverGameLogic.addPlayer(1); + serverGameLogic.addPlayer(2); + verify(mockServerSender, times(2)).send(anyInt(), any(GameDetails.class)); + assertEquals(ServerState.SET_UP, serverGameLogic.getState()); + } + + @Test + public void testGetPlayerById() { + final Player player1 = serverGameLogic.addPlayer(1); + final Player player2 = serverGameLogic.addPlayer(2); + assertEquals(player1, serverGameLogic.getPlayerById(1)); + assertEquals(player2, serverGameLogic.getPlayerById(2)); + } + + @Test + public void testReceivedMapMessage() { + serverGameLogic.addPlayer(1); + serverGameLogic.addPlayer(2); + List ships = List.of(new Battleship(3, 2, 2, Rotation.RIGHT)); + MapMessage mapMessage = new MapMessage(ships); + serverGameLogic.received(mapMessage, 1); + serverGameLogic.received(mapMessage, 2); + verify(mockServerSender, times(2)).send(anyInt(), any(StartBattleMessage.class)); + assertEquals(ServerState.BATTLE, serverGameLogic.getState()); + } + + @Test + public void testReceivedShootMessage() { + serverGameLogic.addPlayer(1); + serverGameLogic.addPlayer(2); + List ships = List.of(new Battleship(3, 2, 2, Rotation.RIGHT)); + MapMessage mapMessage = new MapMessage(ships); + serverGameLogic.received(mapMessage, 1); + serverGameLogic.received(mapMessage, 2); + + ShootMessage shootMessage = new ShootMessage(p(2, 2)); + serverGameLogic.received(shootMessage, 1); + verify(mockServerSender, times(2)).send(anyInt(), any(EffectMessage.class)); + } + + @Test + public void testPlayerReady() { + final Player player1 = serverGameLogic.addPlayer(1); + final Player player2 = serverGameLogic.addPlayer(2); + List ships = List.of(new Battleship(3, 2, 2, Rotation.RIGHT)); + serverGameLogic.playerReady(player1, ships); + serverGameLogic.playerReady(player2, ships); + verify(mockServerSender, times(2)).send(anyInt(), any(StartBattleMessage.class)); + assertEquals(ServerState.BATTLE, serverGameLogic.getState()); + } + + @Test + public void testShoot() { + final Player player1 = serverGameLogic.addPlayer(1); + final Player player2 = serverGameLogic.addPlayer(2); + List ships = List.of(new Battleship(3, 2, 2, Rotation.RIGHT)); + serverGameLogic.playerReady(player1, ships); + serverGameLogic.playerReady(player2, ships); + + serverGameLogic.shoot(player1, p(2, 2)); + verify(mockServerSender, times(2)).send(anyInt(), any(EffectMessage.class)); + } + + @Test + public void testSetState() { + serverGameLogic.setState(ServerState.BATTLE); + assertEquals(ServerState.BATTLE, serverGameLogic.getState()); + } + + @Test + public void testGetOpponent() { + final Player player1 = serverGameLogic.addPlayer(1); + final Player player2 = serverGameLogic.addPlayer(2); + assertEquals(player2, serverGameLogic.getOpponent(player1)); + } + + static IntPoint p(int x, int y) { + return new IntPoint(x, y); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/model/BattleshipTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/model/BattleshipTest.java new file mode 100644 index 0000000..3bdc9f6 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/model/BattleshipTest.java @@ -0,0 +1,145 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class BattleshipTest { + private Battleship ship; + + @Before + public void setUp() { + ship = new Battleship(3, 2, 2, Rotation.RIGHT); + } + + @Test + public void testDefaultConstructor() { + Battleship defaultShip = new Battleship(1, 0, 0, Rotation.RIGHT); + assertEquals(1, defaultShip.getLength()); + assertEquals(0, defaultShip.getX()); + assertEquals(0, defaultShip.getY()); + assertEquals(Rotation.RIGHT, defaultShip.getRot()); + assertEquals(Battleship.Status.NORMAL, defaultShip.getStatus()); + } + + @Test + public void testConstructorWithParameters() { + assertEquals(3, ship.getLength()); + assertEquals(2, ship.getX()); + assertEquals(2, ship.getY()); + assertEquals(Rotation.RIGHT, ship.getRot()); + assertEquals(Battleship.Status.NORMAL, ship.getStatus()); + } + + @Test + public void testSetPosition() { + ship.moveTo(4, 5); + assertEquals(4, ship.getX()); + assertEquals(5, ship.getY()); + } + + @Test + public void testSetPositionWithIntPosition() { + IntPoint pos = p(5, 6); + ship.moveTo(pos); + assertEquals(5, ship.getX()); + assertEquals(6, ship.getY()); + } + + @Test + public void testGetStatus() { + assertEquals(Battleship.Status.NORMAL, ship.getStatus()); + } + + @Test + public void testWithStatus() { + ship.setStatus(Battleship.Status.VALID_PREVIEW); + assertEquals(Battleship.Status.VALID_PREVIEW, ship.getStatus()); + } + + @Test + public void testGetLength() { + assertEquals(3, ship.getLength()); + } + + @Test + public void testGetMinX() { + assertEquals(2, ship.getMinX()); + } + + @Test + public void testGetMaxX() { + assertEquals(4, ship.getMaxX()); + } + + @Test + public void testGetMaxY() { + assertEquals(2, ship.getMaxY()); + } + + @Test + public void testGetMinY() { + assertEquals(2, ship.getMinY()); + } + + @Test + public void testGetRotation() { + assertEquals(Rotation.RIGHT, ship.getRot()); + } + + @Test + public void testSetRotation() { + ship.setRotation(Rotation.DOWN); + assertEquals(Rotation.DOWN, ship.getRot()); + } + + @Test + public void testRotated() { + ship.rotated(); + assertEquals(Rotation.DOWN, ship.getRot()); + } + + @Test + public void testHit() { + assertTrue(ship.hit(2, 2)); + assertTrue(ship.hit(2, 2)); + } + + @Test + public void testContains() { + IntPoint pos = p(3, 2); + assertTrue(ship.contains(pos)); + } + + @Test + public void testIsDestroyed() { + ship.hit(2, 2); + ship.hit(3, 2); + ship.hit(4, 2); + assertTrue(ship.isDestroyed()); + } + + @Test + public void testCollidesWith() { + Battleship otherShip = new Battleship(3, 3, 2, Rotation.RIGHT); + assertTrue(ship.collidesWith(otherShip)); + } + + @Test + public void testToString() { + assertEquals("Ship{length=3, x=2, y=2, rot=RIGHT}", ship.toString()); + } + + static IntPoint p(int x, int y) { + return new IntPoint(x, y); + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/model/RandomPositionIteratorTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/model/RandomPositionIteratorTest.java new file mode 100644 index 0000000..fd32803 --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/model/RandomPositionIteratorTest.java @@ -0,0 +1,37 @@ +package pp.battleship.model; + +import org.junit.Test; +import pp.util.RandomPositionIterator; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.Assert.fail; + +public class RandomPositionIteratorTest { + @Test + public void testEqualsOccurs() { + final var it = new RandomPositionIterator<>(IntPoint::new, 2, 2); + final Set positions = new HashSet<>(); + positions.add(new IntPoint(0, 0)); + positions.add(new IntPoint(1, 1)); + + int n = 0; + while (it.hasNext() && ++n <= 3) { + if (!positions.add(it.next())) + return; + } + fail("not found"); + } + + @Test + public void testNoEquals() { + final var it = new RandomPositionIterator<>(IntPoint::new, 2, 2); + final Set positions = new HashSet<>(); + + while (it.hasNext()) { + if (!positions.add(it.next())) + fail("not found"); + } + } +} diff --git a/Projekte/battleship/model/src/test/java/pp/battleship/model/ShipMapTest.java b/Projekte/battleship/model/src/test/java/pp/battleship/model/ShipMapTest.java new file mode 100644 index 0000000..fc3b6bc --- /dev/null +++ b/Projekte/battleship/model/src/test/java/pp/battleship/model/ShipMapTest.java @@ -0,0 +1,116 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.model; + +import org.junit.Before; +import org.junit.Test; +import pp.battleship.notification.GameEventBroker; +import pp.battleship.notification.ItemAddedEvent; +import pp.battleship.notification.ItemRemovedEvent; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static pp.battleship.model.BattleshipTest.p; + +public class ShipMapTest { + private ShipMap map; + private GameEventBroker mockBroker; + private Battleship battleship; + + @Before + public void setUp() { + mockBroker = mock(GameEventBroker.class); + map = new ShipMap(10, 10, mockBroker); + battleship = new Battleship(3, 2, 2, Rotation.RIGHT); + } + + @Test + public void testConstructorWithValidSize() { + assertEquals(10, map.getWidth()); + assertEquals(10, map.getHeight()); + } + + @Test(expected = IllegalArgumentException.class) + public void testConstructorWithInvalidSize() { + new ShipMap(0, 10, null); + } + + @Test + public void testAddItem() { + map.add(battleship); + List items = map.getItems(); + assertTrue(items.contains(battleship)); + verify(mockBroker).notifyListeners(any(ItemAddedEvent.class)); + } + + @Test + public void testRemoveItem() { + map.add(battleship); + map.remove(battleship); + final List items = map.getItems(); + assertFalse(items.contains(battleship)); + verify(mockBroker).notifyListeners(any(ItemAddedEvent.class)); + verify(mockBroker).notifyListeners(any(ItemRemovedEvent.class)); + } + + @Test + public void testClear() { + map.add(battleship); + map.clear(); + final List items = map.getItems(); + assertTrue(items.isEmpty()); + verify(mockBroker).notifyListeners(any(ItemAddedEvent.class)); + verify(mockBroker).notifyListeners(any(ItemRemovedEvent.class)); + } + + @Test + public void testGetRemainingShips() { + map.add(battleship); + final List remainingShips = map.getRemainingShips(); + assertTrue(remainingShips.contains(battleship)); + } + + @Test + public void testGetShots() { + final Shot shot = new Shot(1, 1, false); + map.add(shot); + final List shots = map.getShots().toList(); + assertTrue(shots.contains(shot)); + } + + @Test + public void testGetItems() { + map.add(battleship); + final List items = map.getItems(); + assertTrue(items.contains(battleship)); + } + + @Test + public void testFindShipAt() { + map.add(battleship); + Battleship foundShip = map.findShipAt(2, 2); + assertEquals(battleship, foundShip); + } + + @Test + public void testIsValidPosition() { + assertTrue(map.isValid(p(5, 5))); + } + + @Test + public void testIsValidCoordinates() { + assertTrue(map.isValid(5, 5)); + assertFalse(map.isValid(10, 10)); + } +} diff --git a/Projekte/battleship/run-mac.sh b/Projekte/battleship/run-mac.sh new file mode 100644 index 0000000..5adf260 --- /dev/null +++ b/Projekte/battleship/run-mac.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Starts the server and two clients in different terminal windows on MacOS + +# export JAVA_OPTS="-Duser.language=fr -Duser.region=FR -Djava.util.logging.config.file=logging.properties" +# export JAVA_OPTS="-Duser.language=en -Duser.region=US -Djava.util.logging.config.file=logging.properties" +export JAVA_OPTS="-Djava.util.logging.config.file=logging.properties" + +export CWD=`pwd`/`dirname $0` +cd $CWD/.. +./gradlew installDist +osascript -e "tell app \"Terminal\" to do script \"cd $CWD/server; build/install/battleship-server/bin/battleship-server\"" +sleep 2 +osascript -e "tell app \"Terminal\" to do script \"cd $CWD/client; build/install/battleship/bin/battleship\"" +sleep 2 +osascript -e "tell app \"Terminal\" to do script \"cd $CWD/client; build/install/battleship/bin/battleship\"" diff --git a/Projekte/battleship/run.sh b/Projekte/battleship/run.sh new file mode 100644 index 0000000..311eacc --- /dev/null +++ b/Projekte/battleship/run.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Starts two clients and the server + +# export JAVA_OPTS="-Duser.language=fr -Duser.region=FR -Djava.util.logging.config.file=logging.properties" +# export JAVA_OPTS="-Duser.language=en -Duser.region=US -Djava.util.logging.config.file=logging.properties" +export JAVA_OPTS="-Djava.util.logging.config.file=logging.properties" + +export CWD=`pwd`/`dirname $0` +cd $CWD/.. + +./gradlew installDist + +cd battleship/client +build/install/battleship/bin/battleship & +sleep 3 +build/install/battleship/bin/battleship & +cd ../server +build/install/battleship-server/bin/battleship-server diff --git a/Projekte/battleship/server/build.gradle b/Projekte/battleship/server/build.gradle new file mode 100644 index 0000000..3d0eb47 --- /dev/null +++ b/Projekte/battleship/server/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'buildlogic.java-application-conventions' +} + +description = 'Battleship Server' + +dependencies { + implementation project(":battleship:model") +} + +application { + mainClass = 'pp.battleship.server.BattleshipServer' + applicationName = 'battleship-server' +} diff --git a/Projekte/battleship/server/logging.properties b/Projekte/battleship/server/logging.properties new file mode 100644 index 0000000..0656ca0 --- /dev/null +++ b/Projekte/battleship/server/logging.properties @@ -0,0 +1,7 @@ +handlers=java.util.logging.ConsoleHandler +.level=INFO +pp.level=FINE +com.jme3.network.level=INFO +java.util.logging.ConsoleHandler.level=FINER +java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter +;java.util.logging.SimpleFormatter.format=[%4$s %2$s] %5$s%n diff --git a/Projekte/battleship/server/server.properties b/Projekte/battleship/server/server.properties new file mode 100644 index 0000000..9f168a6 --- /dev/null +++ b/Projekte/battleship/server/server.properties @@ -0,0 +1,29 @@ +######################################## +## Programming project code +## UniBw M, 2022, 2023, 2024 +## www.unibw.de/inf2 +## (c) Mark Minas (mark.minas@unibw.de) +######################################## +# +# Battleship server configuration file +# +# This file defines the configuration settings for the Battleship server. +# +# The port number on which the server will listen for incoming connections. +port=1234 +# +# The dimensions of the game map. +# 'map.width' defines the number of columns, and 'map.height' defines the number of rows. +map.width=10 +map.height=10 +# +# The number of ships of each length available in the game. +# The value is a comma-separated list where each element corresponds to the number of ships +# with a specific length. For example: +# ship.nums=4, 3, 2, 1 +# This configuration means: +# - 4 ships of length 1 +# - 3 ships of length 2 +# - 2 ships of length 3 +# - 1 ship of length 4 +ship.nums=4, 3, 2, 1 diff --git a/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java b/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java new file mode 100644 index 0000000..1ad0a2e --- /dev/null +++ b/Projekte/battleship/server/src/main/java/pp/battleship/server/BattleshipServer.java @@ -0,0 +1,179 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.server; + +import com.jme3.network.ConnectionListener; +import com.jme3.network.HostedConnection; +import com.jme3.network.Message; +import com.jme3.network.MessageListener; +import com.jme3.network.Network; +import com.jme3.network.Server; +import com.jme3.network.serializing.Serializer; +import pp.battleship.BattleshipConfig; +import pp.battleship.game.server.Player; +import pp.battleship.game.server.ServerGameLogic; +import pp.battleship.game.server.ServerSender; +import pp.battleship.message.client.ClientMessage; +import pp.battleship.message.client.MapMessage; +import pp.battleship.message.client.ShootMessage; +import pp.battleship.message.server.EffectMessage; +import pp.battleship.message.server.GameDetails; +import pp.battleship.message.server.ServerMessage; +import pp.battleship.message.server.StartBattleMessage; +import pp.battleship.model.Battleship; +import pp.battleship.model.IntPoint; +import pp.battleship.model.Shot; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.logging.LogManager; + +/** + * Server implementing the visitor pattern as MessageReceiver for ClientMessages + */ +public class BattleshipServer implements MessageListener, ConnectionListener, ServerSender { + private static final Logger LOGGER = System.getLogger(BattleshipServer.class.getName()); + private static final File CONFIG_FILE = new File("server.properties"); + + private final BattleshipConfig config = new BattleshipConfig(); + private Server myServer; + private final ServerGameLogic logic; + private final BlockingQueue pendingMessages = new LinkedBlockingQueue<>(); + + static { + // Configure logging + LogManager manager = LogManager.getLogManager(); + try { + manager.readConfiguration(new FileInputStream("logging.properties")); + LOGGER.log(Level.INFO, "Successfully read logging properties"); //NON-NLS + } + catch (IOException e) { + LOGGER.log(Level.INFO, e.getMessage()); + } + } + + /** + * Starts the Battleships server. + */ + public static void main(String[] args) { + new BattleshipServer().run(); + } + + /** + * Creates the server. + */ + BattleshipServer() { + config.readFromIfExists(CONFIG_FILE); + LOGGER.log(Level.INFO, "Configuration: {0}", config); //NON-NLS + logic = new ServerGameLogic(this, config); + } + + public void run() { + startServer(); + while (true) + processNextMessage(); + } + + private void startServer() { + try { + LOGGER.log(Level.INFO, "Starting server..."); //NON-NLS + myServer = Network.createServer(config.getPort()); + initializeSerializables(); + myServer.start(); + registerListeners(); + LOGGER.log(Level.INFO, "Server started: {0}", myServer.isRunning()); //NON-NLS + } + catch (IOException e) { + LOGGER.log(Level.ERROR, "Couldn't start server: {0}", e.getMessage()); //NON-NLS + exit(1); + } + } + + private void processNextMessage() { + try { + pendingMessages.take().process(logic); + } + catch (InterruptedException ex) { + LOGGER.log(Level.INFO, "Interrupted while waiting for messages"); //NON-NLS + Thread.currentThread().interrupt(); + } + } + + private void initializeSerializables() { + Serializer.registerClass(GameDetails.class); + Serializer.registerClass(StartBattleMessage.class); + Serializer.registerClass(MapMessage.class); + Serializer.registerClass(ShootMessage.class); + Serializer.registerClass(EffectMessage.class); + Serializer.registerClass(Battleship.class); + Serializer.registerClass(IntPoint.class); + Serializer.registerClass(Shot.class); + } + + private void registerListeners() { + myServer.addMessageListener(this, MapMessage.class); + myServer.addMessageListener(this, ShootMessage.class); + myServer.addConnectionListener(this); + } + + @Override + public void messageReceived(HostedConnection source, Message message) { + LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS + if (message instanceof ClientMessage clientMessage) + pendingMessages.add(new ReceivedMessage(clientMessage, source.getId())); + } + + @Override + public void connectionAdded(Server server, HostedConnection hostedConnection) { + LOGGER.log(Level.INFO, "new connection {0}", hostedConnection); //NON-NLS + logic.addPlayer(hostedConnection.getId()); + } + + @Override + public void connectionRemoved(Server server, HostedConnection hostedConnection) { + LOGGER.log(Level.INFO, "connection closed: {0}", hostedConnection); //NON-NLS + final Player player = logic.getPlayerById(hostedConnection.getId()); + if (player == null) + LOGGER.log(Level.INFO, "closed connection does not belong to an active player"); //NON-NLS + else { //NON-NLS + LOGGER.log(Level.INFO, "closed connection belongs to {0}", player); //NON-NLS + exit(0); + } + } + + private void exit(int exitValue) { //NON-NLS + LOGGER.log(Level.INFO, "close request"); //NON-NLS + if (myServer != null) + for (HostedConnection client : myServer.getConnections()) //NON-NLS + if (client != null) client.close("Game over"); //NON-NLS + System.exit(exitValue); + } + + /** + * Send the specified message to the specified connection. + * + * @param id the connection id + * @param message the message + */ + public void send(int id, ServerMessage message) { + if (myServer == null || !myServer.isRunning()) { + LOGGER.log(Level.ERROR, "no server running when trying to send {0}", message); //NON-NLS + return; + } + final HostedConnection connection = myServer.getConnection(id); + if (connection != null) + connection.send(message); + else + LOGGER.log(Level.ERROR, "there is no connection with id={0}", id); //NON-NLS + } +} \ No newline at end of file diff --git a/Projekte/battleship/server/src/main/java/pp/battleship/server/ReceivedMessage.java b/Projekte/battleship/server/src/main/java/pp/battleship/server/ReceivedMessage.java new file mode 100644 index 0000000..dedbda2 --- /dev/null +++ b/Projekte/battleship/server/src/main/java/pp/battleship/server/ReceivedMessage.java @@ -0,0 +1,17 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.battleship.server; + +import pp.battleship.message.client.ClientInterpreter; +import pp.battleship.message.client.ClientMessage; + +record ReceivedMessage(ClientMessage message, int from) { + void process(ClientInterpreter interpreter) { + message.accept(interpreter, from); + } +} diff --git a/Projekte/buildSrc/build.gradle b/Projekte/buildSrc/build.gradle new file mode 100644 index 0000000..7508092 --- /dev/null +++ b/Projekte/buildSrc/build.gradle @@ -0,0 +1,9 @@ +plugins { + // Support convention plugins written in Groovy. Convention plugins are build scripts in 'src/main' that automatically become available as plugins in the main build. + id 'groovy-gradle-plugin' +} + +repositories { + // Use the plugin portal to apply community plugins in convention plugins. + gradlePluginPortal() +} diff --git a/Projekte/buildSrc/settings.gradle b/Projekte/buildSrc/settings.gradle new file mode 100644 index 0000000..e2c30ab --- /dev/null +++ b/Projekte/buildSrc/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'buildSrc' diff --git a/Projekte/buildSrc/src/main/groovy/buildlogic.java-application-conventions.gradle b/Projekte/buildSrc/src/main/groovy/buildlogic.java-application-conventions.gradle new file mode 100644 index 0000000..bb776e6 --- /dev/null +++ b/Projekte/buildSrc/src/main/groovy/buildlogic.java-application-conventions.gradle @@ -0,0 +1,7 @@ +plugins { + // Apply the common convention plugin for shared build configuration between library and application projects. + id 'buildlogic.java-common-conventions' + + // Apply the application plugin to add support for building a CLI application in Java. + id 'application' +} diff --git a/Projekte/buildSrc/src/main/groovy/buildlogic.java-common-conventions.gradle b/Projekte/buildSrc/src/main/groovy/buildlogic.java-common-conventions.gradle new file mode 100644 index 0000000..d7d0039 --- /dev/null +++ b/Projekte/buildSrc/src/main/groovy/buildlogic.java-common-conventions.gradle @@ -0,0 +1,21 @@ +plugins { + // Apply the java Plugin to add support for Java. + id 'java' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + testImplementation libs.junit4 +} + +java { + compileJava.options.encoding = 'UTF-8' +} + +test { + useJUnit() +} diff --git a/Projekte/buildSrc/src/main/groovy/buildlogic.java-library-conventions.gradle b/Projekte/buildSrc/src/main/groovy/buildlogic.java-library-conventions.gradle new file mode 100644 index 0000000..f77c293 --- /dev/null +++ b/Projekte/buildSrc/src/main/groovy/buildlogic.java-library-conventions.gradle @@ -0,0 +1,7 @@ +plugins { + // Apply the common convention plugin for shared build configuration between library and application projects. + id 'buildlogic.java-common-conventions' + + // Apply the java-library plugin for API and implementation separation. + id 'java-library' +} diff --git a/Projekte/buildSrc/src/main/groovy/buildlogic.jme-application-conventions.gradle b/Projekte/buildSrc/src/main/groovy/buildlogic.jme-application-conventions.gradle new file mode 100644 index 0000000..535c3d8 --- /dev/null +++ b/Projekte/buildSrc/src/main/groovy/buildlogic.jme-application-conventions.gradle @@ -0,0 +1,29 @@ +import org.gradle.internal.os.OperatingSystem + +plugins { + // Apply the common convention plugin for shared build configuration between library and application projects. + id 'buildlogic.java-common-conventions' + + // Apply the application plugin to add support for building a CLI application in Java. + id 'application' +} + +/** + * Check whether jme3-lwjgl (i.e., version 2) should be used instead of jme3-lwjgl3. + * This is controlled by existence of the file 'use/lwjgl2' + */ +def use_lwjgl2() { + return file("${rootProject.projectDir}/use/lwjgl2").exists() +} + +dependencies { + if (use_lwjgl2()) + runtimeOnly libs.jme3.lwjgl + else + runtimeOnly libs.jme3.lwjgl3 +} + +application { + if (OperatingSystem.current().isMacOsX() && !use_lwjgl2()) + applicationDefaultJvmArgs = ['-XstartOnFirstThread'] +} diff --git a/Projekte/common/build.gradle b/Projekte/common/build.gradle new file mode 100644 index 0000000..7878132 --- /dev/null +++ b/Projekte/common/build.gradle @@ -0,0 +1,5 @@ +plugins { + id 'buildlogic.java-library-conventions' +} + +description = 'Common classes' diff --git a/Projekte/common/logging.properties b/Projekte/common/logging.properties new file mode 100644 index 0000000..c144122 --- /dev/null +++ b/Projekte/common/logging.properties @@ -0,0 +1,7 @@ +handlers=java.util.logging.ConsoleHandler +.level=INFO +;pp.level=FINE +pp.util.triangulation.Polygon.level=FINE +java.util.logging.ConsoleHandler.level=FINER +java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter +java.util.logging.SimpleFormatter.format=[%4$s %2$s] %5$s%6$s%n \ No newline at end of file diff --git a/Projekte/common/src/main/java/pp/util/Angle.java b/Projekte/common/src/main/java/pp/util/Angle.java new file mode 100644 index 0000000..f3399a7 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/Angle.java @@ -0,0 +1,257 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import java.util.Objects; + +import static pp.util.FloatMath.DEG_TO_RAD; +import static pp.util.FloatMath.FLT_EPSILON; +import static pp.util.FloatMath.RAD_TO_DEG; +import static pp.util.FloatMath.abs; +import static pp.util.FloatMath.atan2; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sin; +import static pp.util.FloatMath.sqrt; + +/** + * A class for representing angles by unit vectors where angles define + * polar coordinates. + */ +public class Angle implements Comparable { + /** + * 0 degrees, i.e., along the x-axis + */ + public static final Angle ZERO = new Angle(1f, 0f); + /** + * 180 degrees, i.e., along the negative x-axis + */ + public static final Angle PI = new Angle(-1f, 0f); + + /** + * Returns the minimum of the specified angles with respect to + * {@linkplain #compareTo(Angle)}. + * + * @param u first angle to compare + * @param v second angle to compare + */ + public static Angle min(Angle u, Angle v) { + return u.compareTo(v) <= 0 ? u : v; + } + + /** + * The x-coordinate of the unit vector. + */ + public final float x; + /** + * The y-coordinate of the unit vector. + */ + public final float y; + + /** + * Creates a new angle represented by the vector with the specified + * coordinates. Note that the vector must have length 1. + */ + private Angle(float x, float y) { + this.x = x; + this.y = y; + } + + /** + * Returns the polar coordinates angle of the specified vector. + * + * @param x the vectors x value + * @param y the vectors y value + */ + public static Angle fromVector(float x, float y) { + final float len = sqrt(x * x + y * y); + if (len < FLT_EPSILON) + throw new IllegalArgumentException("null vector"); + return new Angle(x / len, y / len); + } + + /** + * Returns the polar coordinates angle when looking from the first to the second + * specified position. + * + * @param from first position + * @param to second position + */ + public static Angle direction(Position from, Position to) { + return fromVector(to.getX() - from.getX(), + to.getY() - from.getY()); + } + + /** + * Returns an Angle object for the specified angle in radians. + * + * @param radians the specified radian value + */ + public static Angle fromRadians(float radians) { + return new Angle(cos(radians), sin(radians)); + } + + /** + * Returns an Angle object for the specified angle in degrees. + * + * @param degrees the specified degrees value + */ + public static Angle fromDegrees(float degrees) { + return fromRadians(degrees * DEG_TO_RAD); + } + + /** + * Returns the value of this angle in radians in the range (-pi,pi]. + */ + public float radians() { + return atan2(y, x); + } + + /** + * Returns the value of this angle in degrees in the range (-180,180]. + */ + public float degrees() { + return radians() * RAD_TO_DEG; + } + + /** + * Returns the x-coordinate of the unit vector, that is the cosine of the angle. + */ + public float getX() { + return x; + } + + /** + * Returns the y-coordinate of the unit vector, that is the sinus of the angle. + */ + public float getY() { + return y; + } + + /** + * Returns the angle obtained by adding the specified angle to this angle. + * + * @param o the other angle + */ + public Angle plus(Angle o) { + return new Angle(x * o.x - y * o.y, + x * o.y + y * o.x); + } + + /** + * Returns the angle obtained by subtracting the specified angle from this angle. + * + * @param o the other angle + */ + public Angle minus(Angle o) { + return new Angle(y * o.y + x * o.x, + y * o.x - x * o.y); + } + + /** + * Returns the bisector angle between this angle as left angle and the + * specified right angle, that is, the angle halfway from the right to this + * angle when turning from right to left. + * + * @param right right angle + * @return the bisector angle between this as left and the specified right angle + */ + public Angle bisector(Angle right) { + // compute vector of this.minus(right) + final float dx = y * right.y + x * right.x; + final float dy = y * right.x - x * right.y; + if (abs(dy) < FLT_EPSILON) { + // the difference is either 0° or 180° + if (dx > 0f) + return this; + else + return new Angle(-right.y, right.x); + } + final float mid = 0.5f * atan2(dy, dx); + final float sum = right.radians() + mid; + if (mid > 0f) + return new Angle(cos(sum), sin(sum)); + else + return new Angle(-cos(sum), -sin(sum)); + } + + /** + * Returns true if turning left from the specified angle towards this angle is + * shorter than turning right towards this angle. + * + * @param o another angle + */ + public boolean leftOf(Angle o) { + return y * o.x - x * o.y > 0f; + } + + /** + * Returns true if turning right from the specified angle towards this angle is + * shorter than turning left towards this angle. + * + * @param o another angle + */ + public boolean rightOf(Angle o) { + return y * o.x - x * o.y < 0f; + } + + /** + * Compares this angle with the specified one and returns -1, 0, or 1 if + * the value of this angle is less than, equal to, or greater than the value + * of the specified angle, respectively, where angle values are in the + * range [0,2*pi) and 0 means along the x-axis. + * + * @param o the other angle + */ + @Override + public int compareTo(Angle o) { + if (y == 0f) { + if (o.y < 0f) + return -1; + if (o.y > 0f) + return x > 0f ? -1 : 1; + if (x > 0f) + return o.x > 0f ? 0 : 1; + return o.x > 0f ? -1 : 0; + } + if (y > 0f) { + if (o.y < 0f) + return -1; + if (o.y == 0f) + return o.x > 0f ? 1 : -1; + } + else if (o.y >= 0f) + return 1; + final float det = x * o.y - y * o.x; + if (det == 0f) + return 0; + return det > 0f ? -1 : 1; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o instanceof Angle angle) + return compareTo(angle) == 0; + return false; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } + + /** + * Returns a string representation of this angle in degrees in the range [0,2*pi). + */ + @Override + public String toString() { + if (degrees() < 0f) + return (degrees() + 360f) + "°"; + return degrees() + "°"; + } +} diff --git a/Projekte/common/src/main/java/pp/util/FloatMath.java b/Projekte/common/src/main/java/pp/util/FloatMath.java new file mode 100644 index 0000000..3e00a28 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/FloatMath.java @@ -0,0 +1,425 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +/** + * Provides mathematical functions using float precision. + */ +public class FloatMath { + private FloatMath() { /* don't instantiate */ } + + public static final double DBL_EPSILON = 2.220446049250313E-16d; + /** + * A "close to zero" float epsilon value for use + */ + public static final float FLT_EPSILON = 1.1920928955078125E-7f; + /** + * A "close to zero" float epsilon value for use + */ + public static final float ZERO_TOLERANCE = 0.0001f; + /** + * The value 1/3, as a float. + */ + public static final float ONE_THIRD = 1f / 3f; + /** + * The value PI as a float. (180 degrees) + */ + public static final float PI = (float) Math.PI; + /** + * The value 2PI as a float. (360 degrees) + */ + public static final float TWO_PI = 2.0f * PI; + /** + * The value PI/2 as a float. (90 degrees) + */ + public static final float HALF_PI = 0.5f * PI; + /** + * The value PI/4 as a float. (45 degrees) + */ + public static final float QUARTER_PI = 0.25f * PI; + /** + * The value 1/PI as a float. + */ + public static final float INV_PI = 1.0f / PI; + /** + * The value 1/(2PI) as a float. + */ + public static final float INV_TWO_PI = 1.0f / TWO_PI; + /** + * A value to multiply a degree value by, to convert it to radians. + */ + public static final float DEG_TO_RAD = PI / 180.0f; + /** + * A value to multiply a radian value by, to convert it to degrees. + */ + public static final float RAD_TO_DEG = 180.0f / PI; + + /** + * Linear interpolation from startValue to endValue by the given percent. + * Basically: ((1 - percent) * startValue) + (percent * endValue) + * + * @param scale scale value to use. if 1, use endValue, if 0, use startValue. + * @param startValue Beginning value. 0% of f + * @param endValue ending value. 100% of f + * @return The interpolated value between startValue and endValue. + */ + public static float interpolateLinear(float scale, float startValue, float endValue) { + if (startValue == endValue) { + return startValue; + } + if (scale <= 0f) { + return startValue; + } + if (scale >= 1f) { + return endValue; + } + return ((1f - scale) * startValue) + (scale * endValue); + } + + /** + * Linear extrapolation from startValue to endValue by the given scale. + * if scale is between 0 and 1 this method returns the same result as interpolateLinear + * if the scale is over 1 the value is linearly extrapolated. + * Note that the end value is the value for a scale of 1. + * + * @param scale the scale for extrapolation + * @param startValue the starting value (scale = 0) + * @param endValue the end value (scale = 1) + * @return an extrapolation for the given parameters + */ + public static float extrapolateLinear(float scale, float startValue, float endValue) { + return ((1f - scale) * startValue) + (scale * endValue); + } + + /** + * Returns the arc cosine of a value.
+ * Special cases: + *
  • If fValue is smaller than -1, then the result is PI. + *
  • If the argument is greater than 1, then the result is 0.
+ * + * @param fValue The value to arc cosine. + * @return The angle, in radians. + * @see Math#acos(double) + */ + public static float acos(float fValue) { + if (-1.0f < fValue) { + if (fValue < 1.0f) { + return (float) Math.acos(fValue); + } + + return 0.0f; + } + + return PI; + } + + /** + * Returns the arc sine of a value.
+ * Special cases: + *
  • If fValue is smaller than -1, then the result is -HALF_PI. + *
  • If the argument is greater than 1, then the result is HALF_PI.
+ * + * @param fValue The value to arc sine. + * @return the angle in radians. + * @see Math#asin(double) + */ + public static float asin(float fValue) { + if (-1.0f < fValue) { + if (fValue < 1.0f) { + return (float) Math.asin(fValue); + } + + return HALF_PI; + } + + return -HALF_PI; + } + + /** + * Returns the arc tangent of an angle given in radians.
+ * + * @param fValue The angle, in radians. + * @return fValue's atan + * @see Math#atan(double) + */ + public static float atan(float fValue) { + return (float) Math.atan(fValue); + } + + /** + * A direct call to Math.atan2. + * + * @param fY ordinate + * @param fX abscissa + * @return Math.atan2(fY, fX) + * @see Math#atan2(double, double) + */ + public static float atan2(float fY, float fX) { + return (float) Math.atan2(fY, fX); + } + + public static float sinh(float x) { + return (float) Math.sinh(x); + } + + public static float cosh(float x) { + return (float) Math.cosh(x); + } + + public static float tanh(float x) { + return (float) Math.tanh(x); + } + + public static float coth(float x) { + return (float) (1d / Math.tanh(x)); + } + + public static float arsinh(float x) { + return log(x + sqrt(x * x + 1f)); + } + + public static float arcosh(float x) { + return log(x + sqrt(x * x - 1f)); + } + + public static float artanh(float x) { + return 0.5f * log((1f + x) / (1f - x)); + } + + public static float arcoth(float x) { + return 0.5f * log((x + 1f) / (x - 1f)); + } + + /** + * Rounds a fValue up. A call to Math.ceil + * + * @param fValue The value. + * @return The fValue rounded up + * @see Math#ceil(double) + */ + public static float ceil(float fValue) { + return (float) Math.ceil(fValue); + } + + /** + * Returns cosine of an angle. Direct call to Math + * + * @param v The angle to cosine. + * @return the cosine of the angle. + * @see Math#cos(double) + */ + public static float cos(float v) { + return (float) Math.cos(v); + } + + /** + * Returns the sine of an angle. Direct call to Math + * + * @param v The angle to sine. + * @return the sine of the angle. + * @see Math#sin(double) + */ + public static float sin(float v) { + return (float) Math.sin(v); + } + + /** + * Returns E^fValue + * + * @param fValue Value to raise to a power. + * @return The value E^fValue + * @see Math#exp(double) + */ + public static float exp(float fValue) { + return (float) Math.exp(fValue); + } + + public static float expm1(float fValue) { + return (float) Math.expm1(fValue); + } + + /** + * Returns Absolute value of a float. + * + * @param fValue The value to abs. + * @return The abs of the value. + * @see Math#abs(float) + */ + public static float abs(float fValue) { + if (fValue < 0) { + return -fValue; + } + return fValue; + } + + /** + * Returns a number rounded down. + * + * @param fValue The value to round + * @return The given number rounded down + * @see Math#floor(double) + */ + public static float floor(float fValue) { + return (float) Math.floor(fValue); + } + + /** + * Returns 1/sqrt(fValue) + * + * @param fValue The value to process. + * @return 1/sqrt(fValue) + * @see Math#sqrt(double) + */ + public static float invSqrt(float fValue) { + return (float) (1.0f / Math.sqrt(fValue)); + } + + /** + * Quickly estimate 1/sqrt(fValue). + * + * @param x the input value (≥0) + * @return an approximate value for 1/sqrt(x) + */ + public static float fastInvSqrt(float x) { + float halfX = 0.5f * x; + int i = Float.floatToIntBits(x); // get bits for floating value + i = 0x5f375a86 - (i >> 1); // gives initial guess y0 + x = Float.intBitsToFloat(i); // convert bits back to float + x = x * (1.5f - halfX * x * x); // Newton step, repeating increases accuracy + return x; + } + + /** + * Returns the log base E of a value. + * + * @param fValue The value to log. + * @return The log of fValue base E + * @see Math#log(double) + */ + public static float log(float fValue) { + return (float) Math.log(fValue); + } + + /** + * Returns a number raised to an exponent power. fBase^fExponent + * + * @param fBase The base value (IE 2) + * @param fExponent The exponent value (IE 3) + * @return base raised to exponent (IE 8) + * @see Math#pow(double, double) + */ + public static float pow(float fBase, float fExponent) { + return (float) Math.pow(fBase, fExponent); + } + + /** + * Returns the value squared. fValue ^ 2 + * + * @param fValue The value to square. + * @return The square of the given value. + */ + public static float sqr(float fValue) { + return fValue * fValue; + } + + /** + * Returns the square root of a given value. + * + * @param fValue The value to sqrt. + * @return The square root of the given value. + * @see Math#sqrt(double) + */ + public static float sqrt(float fValue) { + return (float) Math.sqrt(fValue); + } + + /** + * Returns the tangent of the specified angle. + * + * @param fValue The value to tangent, in radians. + * @return The tangent of fValue. + * @see Math#tan(double) + */ + public static float tan(float fValue) { + return (float) Math.tan(fValue); + } + + /** + * Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise + * + * @param iValue The integer to examine. + * @return The integer's sign. + */ + public static int sign(int iValue) { + return Integer.compare(iValue, 0); + } + + /** + * Returns 1 if the number is positive, -1 if the number is negative, and 0 otherwise + * + * @param fValue The float to examine. + * @return The float's sign. + */ + public static float sign(float fValue) { + return Math.signum(fValue); + } + + /** + * Take a float input and clamp it between min and max. + * + * @param input the value to be clamped + * @param min the minimum output value + * @param max the maximum output value + * @return clamped input + */ + public static float clamp(float input, float min, float max) { + return Math.max(min, Math.min(input, max)); + } + + /** + * Clamps the given float to be between 0 and 1. + * + * @param input the value to be clamped + * @return input clamped between 0 and 1. + */ + public static float saturate(float input) { + return clamp(input, 0f, 1f); + } + + /** + * Determine if two floats are approximately equal. + * This takes into account the magnitude of the floats, since + * large numbers will have larger differences be close to each other. + *

+ * Should return true for a=100000, b=100001, but false for a=10000, b=10001. + * + * @param a The first float to compare + * @param b The second float to compare + * @return True if a and b are approximately equal, false otherwise. + */ + public static boolean approximateEquals(float a, float b) { + if (a == b) { + return true; + } + else { + return (abs(a - b) / Math.max(abs(a), abs(b))) <= 0.00001f; + } + } + + /** + * Normalizes the specified angle to lie in the interval (-pi,pi] and returns the normalized value in radians. + * + * @param angle the specified angle in radians + */ + public static float normalizeAngle(float angle) { + final float res = angle % TWO_PI; + if (res <= -FloatMath.PI) return res + TWO_PI; + else if (res > FloatMath.PI) return res - TWO_PI; + return res; + } +} diff --git a/Projekte/common/src/main/java/pp/util/FloatPoint.java b/Projekte/common/src/main/java/pp/util/FloatPoint.java new file mode 100644 index 0000000..c43a3f3 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/FloatPoint.java @@ -0,0 +1,47 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +/** + * A trivial implementation of points in the plane with float coordinates. + * + * @param x x-coordinate + * @param y y-coordinate + */ +public record FloatPoint(float x, float y) implements Position { + public static final FloatPoint ZERO = new FloatPoint(0f, 0f); + + /** + * Create a new FloatPoint object for the given position. + * + * @param p a position + */ + public FloatPoint(Position p) { + this(p.getX(), p.getY()); + } + + /** + * Returns the x-coordinate. + */ + @Override + public float getX() { + return x; + } + + /** + * Returns the y-coordinate. + */ + @Override + public float getY() { + return y; + } + + public static Position p(float x, float y) { + return new FloatPoint(x, y); + } +} diff --git a/Projekte/common/src/main/java/pp/util/Interval.java b/Projekte/common/src/main/java/pp/util/Interval.java new file mode 100644 index 0000000..77c7ff9 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/Interval.java @@ -0,0 +1,77 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import static pp.util.FloatMath.ZERO_TOLERANCE; +import static pp.util.FloatMath.abs; + +/** + * Represents an interval. The start value must not be greater than the end value. + * + * @param from the start value of the interval + * @param to the end value of the interval + */ +public record Interval(float from, float to) { + + /** + * Creates a new interval between two specified values. + * + * @param from the specified start value + * @param to the specified end value + */ + public Interval { + if (from > to) + throw new IllegalArgumentException(from + " > " + to); + } + + /** + * Checks whether this interval has length 0, i.e., from and to are equal. + */ + public boolean isEmpty() { + return to == from; + } + + /** + * Checks whether the specified value is contained in this interval. Note that an empty interval may + * contain the value if the value is the start and the end value of the interval. + * + * @param value the specified value to check + */ + public boolean contains(float value) { + return from - value <= ZERO_TOLERANCE && value - to <= ZERO_TOLERANCE; + } + + /** + * Checks whether the specified interval is contained as a sub-interval. + * + * @param other the potential sub-interval + */ + public boolean contains(Interval other) { + return from - other.from < ZERO_TOLERANCE && other.to - to < ZERO_TOLERANCE; + } + + /** + * Returns a string representation of this interval. + */ + @Override + public String toString() { + return "[" + from + "; " + to + "]"; + } + + /** + * Checks whether the specified interval is almost equal to this + * interval up to the specified epsilon value. + * + * @param other the other interval to check + * @param eps the allowed epsilon value + */ + public boolean matches(Interval other, float eps) { + return abs(from - other.from) < eps && + abs(to - other.to) < eps; + } +} diff --git a/Projekte/common/src/main/java/pp/util/Position.java b/Projekte/common/src/main/java/pp/util/Position.java new file mode 100644 index 0000000..c46928f --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/Position.java @@ -0,0 +1,84 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import static pp.util.FloatMath.sqrt; + +/** + * Interface for all objects that provide a position in the plane. + */ +public interface Position extends Comparable { + /** + * Returns the x-coordinate of the position + * + * @return x-coordinate as float + */ + float getX(); + + /** + * Returns the y-coordinate of the position + * + * @return y-coordinate as float + */ + float getY(); + + /** + * Returns the distance of this position from the specified position. + * + * @param x x-coordinate of the position + * @param y y-coordinate of the position + * @return distance + */ + default float distanceTo(float x, float y) { + return sqrt(distanceSquaredTo(x, y)); + } + + /** + * Returns the distance of this position from the specified position. + * This is just a convenience method for {@linkplain #distanceTo(float, float)}. + * + * @param other the other position + * @return distance + */ + default float distanceTo(Position other) { + return distanceTo(other.getX(), other.getY()); + } + + /** + * Returns the squared distance of this position from the specified position. + * + * @param x x-coordinate of the position + * @param y y-coordinate of the position + * @return squared distance + */ + default float distanceSquaredTo(float x, float y) { + final float dx = getX() - x; + final float dy = getY() - y; + return dx * dx + dy * dy; + } + + /** + * Returns the squared distance of this position from the specified position. + * + * @param p the other position + * @return squared distance + */ + default float distanceSquaredTo(Position p) { + return distanceSquaredTo(p.getX(), p.getY()); + } + + /** + * Compares positions in the plane from top to bottom + * (y coordinates grow downwards) and then from left ro right. + */ + @Override + default int compareTo(Position other) { + final int c = Float.compare(getY(), other.getY()); + return c != 0 ? c : Float.compare(getX(), other.getX()); + } +} diff --git a/Projekte/common/src/main/java/pp/util/PreferencesUtils.java b/Projekte/common/src/main/java/pp/util/PreferencesUtils.java new file mode 100644 index 0000000..40f032a --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/PreferencesUtils.java @@ -0,0 +1,30 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import java.util.prefs.Preferences; + +/** + * A class with convenience methods for preferences. + */ +public class PreferencesUtils { + private PreferencesUtils() { + // don't instantiate + } + + /** + * Returns a preferences node for the specified class object. The path of the + * preference node corresponds to the fully qualified name of the class. + * + * @param clazz a class object + * @return a preference node for the specified class + */ + public static Preferences getPreferences(Class clazz) { + return Preferences.userNodeForPackage(clazz).node(clazz.getSimpleName()); + } +} diff --git a/Projekte/common/src/main/java/pp/util/RandomPositionIterator.java b/Projekte/common/src/main/java/pp/util/RandomPositionIterator.java new file mode 100644 index 0000000..9d6d00a --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/RandomPositionIterator.java @@ -0,0 +1,90 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Random; + +/** + * An iterator that creates a random permutation of positions (x, y) where x and y are integer values + * in the range {0, ..., width-1} x {0, ..., height-1}. All permutations are uniformly distributed + * using the Fisher–Yates shuffle (also known as Knuth shuffle). + * + * @param the type of elements returned by this iterator + */ +public class RandomPositionIterator implements Iterator { + private final Random random = new Random(); + private final int height; + private final Map movedMap = new HashMap<>(); + private int remaining; + private final Creator creator; + + /** + * Functional interface to create instances of type T. + * + * @param the type of elements created by this creator + */ + public interface Creator { + T create(int x, int y); + } + + /** + * Creates a RandomPositionIterator for Position instances with float coordinates. + * + * @param width the width of the rectangle + * @param height the height of the rectangle + * @return a RandomPositionIterator for Position instances + */ + public static RandomPositionIterator floatPoints(int width, int height) { + return new RandomPositionIterator<>(FloatPoint::new, width, height); + } + + /** + * Creates a new permutation iterator generating a random permutation of positions (x, y) + * where x and y are integer values in the range {0, ..., width-1} x {0, ..., height-1}. + * + * @param creator the creator to create instances of type T + * @param width the width of the rectangle + * @param height the height of the rectangle + */ + public RandomPositionIterator(Creator creator, int width, int height) { + this.height = height; + this.remaining = width * height; + this.creator = creator; + } + + @Override + public boolean hasNext() { + return remaining > 0; + } + + @Override + public T next() { + if (hasNext()) { + final int idx = random.nextInt(remaining--); // note that remaining is decremented + final T result = getWhere(idx); + if (idx < remaining) + movedMap.put(idx, getWhere(remaining)); + movedMap.remove(remaining); + return result; + } + throw new NoSuchElementException(); + } + + private T getWhere(int idx) { + final T movedWhere = movedMap.get(idx); + if (movedWhere != null) + return movedWhere; + final int x = idx / height; + final int y = idx % height; + return creator.create(x, y); + } +} diff --git a/Projekte/common/src/main/java/pp/util/Segment.java b/Projekte/common/src/main/java/pp/util/Segment.java new file mode 100644 index 0000000..c5f4252 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/Segment.java @@ -0,0 +1,16 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +/** + * A directed straight line segment between two positions in the plane. + * + * @param from the start position of the segment + * @param to the end position of the segment + */ +public record Segment(Position from, Position to) implements SegmentLike {} diff --git a/Projekte/common/src/main/java/pp/util/SegmentLike.java b/Projekte/common/src/main/java/pp/util/SegmentLike.java new file mode 100644 index 0000000..41edea2 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/SegmentLike.java @@ -0,0 +1,396 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import static java.lang.Float.max; +import static java.lang.Float.min; +import static pp.util.FloatMath.FLT_EPSILON; +import static pp.util.FloatMath.ZERO_TOLERANCE; +import static pp.util.FloatMath.abs; +import static pp.util.FloatMath.atan2; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sin; +import static pp.util.FloatMath.sqr; +import static pp.util.FloatMath.sqrt; + +/** + * Interface of geometrical objects like segments, i.e., having a start and an end position. + */ +public interface SegmentLike { + /** + * Returns the start position of the segment. + */ + Position from(); + + /** + * Returns the end position of the segment. + */ + Position to(); + + /** + * Returns the length, i.e., the distance between the start and the end point of this segment. + * + * @return length of the line segment + */ + default float length() { + return sqrt(lengthSquared()); + } + + /** + * Returns the length squared where the length is the distance between the start and the + * end point of this segment. + * + * @return length squared of the line segment + */ + default float lengthSquared() { + return lengthSquared(from(), to()); + } + + /** + * Returns the squared length of the vector between the specified points. + */ + static float lengthSquared(Position from, Position to) { + final float dx = to.getX() - from.getX(); + final float dy = to.getY() - from.getY(); + return dx * dx + dy * dy; + } + + /** + * Returns the length of the vector between the specified points. + */ + static float length(Position from, Position to) { + return sqrt(lengthSquared(from, to)); + } + + /** + * Returns the angle of this line segment with the x-axis. + * + * @return angle with the x-axis + */ + default float angle() { + final float dx = to().getX() - from().getX(); + final float dy = to().getY() - from().getY(); + return atan2(dy, dx); + } + + /** + * Returns the distance of the specified point from this segment. + * The distance is the length of the shortest connection between the specified + * point and any point of the line segment. + * + * @param x x-coordinate of the point + * @param y y-coordinate of the point + * @return the distance + */ + default float distanceTo(float x, float y) { + return distance(from().getX(), from().getY(), to().getX(), to().getY(), x, y); + } + + /** + * Returns the distance of the point from the segment between the specified points. + * The distance is the length of the shortest connection between the specified + * point and any point of the line segment. + * + * @param from the segment start point + * @param to the segment end point + * @param p the point + * @return the distance + */ + static float distance(Position from, Position to, Position p) { + return distance(from.getX(), from.getY(), to.getX(), to.getY(), p.getX(), p.getY()); + } + + /** + * Returns the distance of the point (x,y) from the segment from (x1,y1) to (x2,y2) + * The distance is the length of the shortest connection between the specified + * point and any point of the line segment. + * + * @param x1 x-coordinate of the segment start point + * @param y1 y-coordinate of the segment start point + * @param x2 x-coordinate of the segment end point + * @param y2 y-coordinate of the segment end point + * @param x x-coordinate of the point + * @param y y-coordinate of the point + * @return the distance + */ + static float distance(float x1, float y1, float x2, float y2, float x, float y) { + final float dx = x2 - x1; + final float dy = y2 - y1; + final float dx1 = x - x1; + final float dy1 = y - y1; + if (dx * dx1 + dy * dy1 <= 0f) + return sqrt(dx1 * dx1 + dy1 * dy1); + final float dx2 = x - x2; + final float dy2 = y - y2; + if (dx * dx2 + dy * dy2 >= 0f) + return sqrt(dx2 * dx2 + dy2 * dy2); + final float len = sqrt(dx * dx + dy * dy); + return FloatMath.abs(dx1 * dy - dy1 * dx) / len; + } + + /** + * Returns the distance of the specified position from this segment. + * This is just a convenience method for {@linkplain #distanceTo(float, float)}. + * + * @param pos a position + * @return the distance + */ + default float distanceTo(Position pos) { + return distanceTo(pos.getX(), pos.getY()); + } + + /** + * Returns the point of this segment with the specified quotient, i.e., q*from()+(1-q)*to(). + * + * @param q the quotient + */ + default Position pointAt(float q) { + if (q == 0f) return from(); + if (q == 1f) return to(); + return new FloatPoint((1f - q) * from().getX() + q * to().getX(), + (1f - q) * from().getY() + q * to().getY()); + } + + /** + * Shoots a ray from the specified position in the direction of the specified angle and returns the distance + * of the specified position from the intersection point of the ray with the straight line determined by the + * end points of this segment. Returns {@linkplain Float#NaN} if there is no intersection. + * + * @param pos the specified position + * @param angle the specified angle + */ + default float dist(Position pos, float angle) { + return quotientDist(pos, quotient(pos, angle)); + } + + /** + * Shoots a ray from the specified position in the direction of the specified angle and returns the distance + * of the specified position from the intersection point of the ray with the straight line determined by the + * end points of this segment. Returns {@linkplain Float#NaN} if there is no intersection. + * + * @param pos the specified position + * @param angle the specified angle + */ + default float dist(Position pos, Angle angle) { + return quotientDist(pos, quotient(pos, angle.x, angle.y)); + } + + /** + * Shoots a ray from the specified position in the direction of the point of this segment with the specified + * quotient, i.e., the point at q*from()+(1-q)*to(), and returns the distance + * of the specified position from the intersection point of the ray with the straight line determined by the + * end points of this segment. Returns {@linkplain Float#NaN} if there is no intersection. + * + * @param pos the specified position + * @param q the specified quotient + */ + default float quotientDist(Position pos, float q) { + final float dx = (1f - q) * from().getX() + q * to().getX() - pos.getX(); + final float dy = (1f - q) * from().getY() + q * to().getY() - pos.getY(); + return sqrt(dx * dx + dy * dy); + } + + /** + * Shoots a ray from the specified position in the direction of the specified angle and returns the + * quotient q such that the intersection point of the ray with the straight line determined by the + * end points of this segment is at q*from()+(1-q)*to(). + * + * @param pos the specified position + * @param angle the specified angle + */ + default float quotient(Position pos, float angle) { + final float ux = cos(angle); + final float uy = sin(angle); + return quotient(pos, ux, uy); + } + + /** + * Shoots a ray from the specified position in the direction of the specified vector and returns the + * quotient q such that the intersection point of the ray with the straight line determined by the + * end points of this segment is at q*from()+(1-q)*to(). + * + * @param pos the specified position + * @param ux the vectors x value + * @param uy the vectors y value + */ + private float quotient(Position pos, float ux, float uy) { + final float nom = nominator(pos, ux, uy); + final float det = determinant(ux, uy); + // the following is for dealing with floating point imprecision + if (abs(det) > FLT_EPSILON) + return nom / det; + if (abs(nom) > FLT_EPSILON) + return Float.NaN; + final float q = project(pos); + if (q > -FLT_EPSILON && q - 1f < FLT_EPSILON) + // pos lies (almost) within the segment + return q; + final float distFrom = isCandidate(pos, ux, uy, from()); + final float distTo = isCandidate(pos, ux, uy, to()); + if (distFrom >= 0f) { + if (distTo >= 0f) + return distFrom < distTo ? 0f : 1f; + else + return 0f; + } + if (distTo >= 0f) + return 1f; + return Float.NaN; + } + + /** + * Returns the determinant of a specified vector. + * + * @param ux the vectors x value + * @param uy the vectors y value + */ + private float determinant(float ux, float uy) { + return diffX() * uy - diffY() * ux; + } + + /** + * Returns the nominator of the specified vector starting at a specified position. + * + * @param pos the specified position + * @param ux the vectors x value + * @param uy the vectors y value + */ + private float nominator(Position pos, float ux, float uy) { + final float dx = pos.getX() - from().getX(); + final float dy = pos.getY() - from().getY(); + return dx * uy - dy * ux; + } + + /** + * Checks whether the (ux,uy) ray starting at pos hits (or almost hits) target. + * + * @param pos the specified start position + * @param ux the rays x value + * @param uy the rays y value + * @param target the specified target position + */ + private float isCandidate(Position pos, float ux, float uy, Position target) { + final float lambda = lambda(pos, target, ux, uy); + if (lambda < -FLT_EPSILON) return -1f; + final float dx = target.getX() - pos.getX() - lambda * ux; + final float dy = target.getY() - pos.getY() - lambda * uy; + return dx * dx + dy * dy; + } + + private float lambda(Position p1, Position p2, float ux, float uy) { + return ux * (p2.getX() - p1.getX()) + uy * (p2.getY() - p1.getY()); + } + + /** + * Returns the quotient q such that the specified point projected onto this + * segment is at q*from()+(1-q)*to(). + * + * @param pos the specified points position + */ + default float project(Position pos) { + return ((pos.getX() - from().getX()) * diffX() + (pos.getY() - from().getY()) * diffY()) / lengthSquared(); + } + + /** + * Returns the interval of quotients between leftAngle and rightAngle + * looking from the specified position. The starting point of the + * segment must be left of its end point when looking from the + * specified position. + * + * @param pos the specified position to look from + * @param leftAngle the specified left angle + * @param rightAngle the specified right angle + */ + default Interval interval(Position pos, Angle leftAngle, Angle rightAngle) { + final float nomLeft = nominator(pos, leftAngle.x, leftAngle.y); + final float detLeft = determinant(leftAngle.x, leftAngle.y); + final float nomRight = nominator(pos, rightAngle.x, rightAngle.y); + final float detRight = determinant(rightAngle.x, rightAngle.y); + if (abs(detLeft) <= FLT_EPSILON || abs(detRight) <= FLT_EPSILON) + return new Interval(0f, 0f); + final float q1 = nomLeft / detLeft; + final float q2 = nomRight / detRight; + if (q1 > q2) + return new Interval(0f, 0f); + final float lower = q1 < ZERO_TOLERANCE ? 0f : min(1f, q1); + final float upper = q2 > 1f - ZERO_TOLERANCE ? 1f : max(0f, q2); + return new Interval(lower, upper); + } + + /** + * Returns the x-coordinate of the vector from the start to the end point. + */ + default float diffX() { + return to().getX() - from().getX(); + } + + /** + * Returns the y-coordinate of the vector from the start to the end point. + */ + default float diffY() { + return to().getY() - from().getY(); + } + + /** + * Computes the determinant of the matrix whose first column vector is this segment and the + * second column vector is the specified segment. + * + * @param other the specified segment + */ + default float determinantWith(SegmentLike other) { + return diffX() * other.diffY() - diffY() * other.diffX(); + } + + /** + * Computes the square of the minimal distance between this and the specified segment. + * + * @param other other segment + * @return squared distance + */ + default float minDistanceSquared(SegmentLike other) { + final float rx = other.from().getX() - from().getX(); + final float ry = other.from().getY() - from().getY(); + final float ux = diffX(); + final float uy = diffY(); + final float vx = other.diffX(); + final float vy = other.diffY(); + + final float ru = rx * ux + ry * uy; + final float rv = rx * vx + ry * vy; + final float uu = ux * ux + uy * uy; + final float uv = ux * vx + uy * vy; + final float vv = vx * vx + vy * vy; + + if (uu < ZERO_TOLERANCE) { // this segment is in fact a single point + if (vv < ZERO_TOLERANCE) // other is a point, too + return rx * rx + ry * ry; + else + return sqr(other.distanceTo(from())); + } + if (vv < ZERO_TOLERANCE) // other is in fact a point + return sqr(distanceTo(other.from())); + + final float det = uu * vv - uv * uv; + final float s; + final float t; + + if (det < ZERO_TOLERANCE * uu * vv) { + s = min(max(ru / uu, 0f), 1f); + t = 0f; + } + else { + s = min(max((ru * vv - rv * uv) / det, 0f), 1f); + t = min(max((ru * uv - rv * uu) / det, 0f), 1f); + } + + final float mu1 = min(max((t * uv + ru) / uu, 0f), 1f); + final float mu2 = min(max((s * uv - rv) / vv, 0f), 1f); + + return pointAt(mu1).distanceSquaredTo(other.pointAt(mu2)); + } +} \ No newline at end of file diff --git a/Projekte/common/src/main/java/pp/util/Util.java b/Projekte/common/src/main/java/pp/util/Util.java new file mode 100644 index 0000000..acebd34 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/Util.java @@ -0,0 +1,90 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * A class with auxiliary functions. + */ +public class Util { + private Util() { /* do not instantiate */ } + + /** + * Calculates and returns the area of a polygon defined by a list of points, using the shoelace formula. + * The result is positive if the sequence of vertices is in clockwise order, and negative + * otherwise. + * + * @param points A list of positions that define the vertices of the polygon in planar coordinates. + * @return The calculated area of the polygon. + */ + public static float getArea(List points) { + float sum = 0; + Position prev = getLast(points); + for (var next : points) { + sum += prev.getX() * next.getY() - next.getX() * prev.getY(); + prev = next; + } + return 0.5f * sum; + } + + /** + * Returns the last element of the given list. + * + * @param list the list from which to retrieve the last element + * @param the type of elements in the list + * @return the last element of the list + * @throws IndexOutOfBoundsException if the list is empty + */ + public static T getLast(List list) { + return list.get(list.size() - 1); + } + + /** + * Reverses the order of elements in the given list. + * + * @param list the list to be reversed + * @param the type of elements in the list + * @return a new list with elements in reversed order + */ + public static List reverse(List list) { + final List reversed = new ArrayList<>(list); + Collections.reverse(reversed); + return reversed; + } + + /** + * Creates a copy of the given list. + * + * @param list the list to be copied, may be null + * @param the type of elements in the list + * @return a new list containing the elements of the original list, or null if the original list is null + */ + public static List copy(List list) { + return list == null ? null : new ArrayList<>(list); + } + + /** + * Adds an element to a set and returns a new set containing the original elements and the new element. + * + * @param set the original set, must not be null + * @param element the element to be added to the set + * @param the type of elements in the set + * @param the type of the element being added, must extend T + * @return a new set containing the original elements and the new element + */ + public static Set add(Set set, E element) { + final Set newSet = new HashSet<>(set); + newSet.add(element); + return newSet; + } +} diff --git a/Projekte/common/src/main/java/pp/util/config/Config.java b/Projekte/common/src/main/java/pp/util/config/Config.java new file mode 100644 index 0000000..5712198 --- /dev/null +++ b/Projekte/common/src/main/java/pp/util/config/Config.java @@ -0,0 +1,286 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util.config; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.function.Function; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Abstract base class for representing configurations that can be read from properties files. + * Subclasses can define fields annotated with {@link Property} to specify the configuration keys + * and optionally {@link Separator} to specify custom separators for array values. + */ +public abstract class Config { + private static final String BLANK_SEQ = " *"; + + /** + * Annotation for specifying the property key for a field. + */ + @Retention(RUNTIME) + @Target(FIELD) + @Documented + protected @interface Property { + /** + * The key of the property. + */ + String value(); + } + + /** + * Annotation for specifying a custom separator for array values. + */ + @Retention(RUNTIME) + @Target(FIELD) + @Documented + protected @interface Separator { + /** + * The separator for array values. + */ + String value(); + } + + private static final Logger LOGGER = System.getLogger(Config.class.getName()); + private static final Map, Function> CONVERTER_MAP = new HashMap<>(); + + static { + CONVERTER_MAP.put(String.class, x -> x); + CONVERTER_MAP.put(byte.class, Byte::parseByte); + CONVERTER_MAP.put(short.class, Short::parseShort); + CONVERTER_MAP.put(int.class, Integer::parseInt); + CONVERTER_MAP.put(long.class, Long::parseLong); + CONVERTER_MAP.put(boolean.class, Boolean::parseBoolean); + CONVERTER_MAP.put(float.class, Float::parseFloat); + CONVERTER_MAP.put(double.class, Double::parseDouble); + CONVERTER_MAP.put(Byte.class, Byte::parseByte); + CONVERTER_MAP.put(Short.class, Short::parseShort); + CONVERTER_MAP.put(Integer.class, Integer::parseInt); + CONVERTER_MAP.put(Long.class, Long::parseLong); + CONVERTER_MAP.put(Boolean.class, Boolean::parseBoolean); + CONVERTER_MAP.put(Float.class, Float::parseFloat); + CONVERTER_MAP.put(Double.class, Double::parseDouble); + } + + /** + * Reads the specified properties file and sets the values of this config using {@link #readFrom(Properties)}. + * + * @param file the properties file to read + * @throws IOException if an I/O error occurs + * @see #readFrom(Properties) + */ + public void readFrom(File file) throws IOException { + try (Reader reader = new FileReader(file)) { + final Properties properties = new Properties(); + properties.load(reader); + readFrom(properties); + } + } + + /** + * Sets the values of fields annotated with {@link Property} using the specified properties. + * Array fields can be split into components using the default separator (",") or a custom separator + * specified with {@link Separator}. + * + * @param props the properties to read from + */ + public void readFrom(Properties props) { + for (Class clazz = getClass(); Config.class.isAssignableFrom(clazz); clazz = clazz.getSuperclass()) { + for (Field field : clazz.getDeclaredFields()) { + final Property keyAnnot = field.getAnnotation(Property.class); + if (keyAnnot != null && props.containsKey(keyAnnot.value())) { + try { + final String text = props.getProperty(keyAnnot.value()); + final Object value = createValue(text, field); + setField(field, value); + } + catch (IllegalAccessException ex) { + LOGGER.log(Level.ERROR, "Cannot access " + field, ex); //NON-NLS + } + } + } + } + } + + /** + * Reads the specified properties file and sets the values of this config if the file exists, + * otherwise uses default values. This method is a convenience version of {@link #readFrom(File)} + * that checks the existence of the specified file and does nothing if the file does not exist. + * + * @param file the properties file to read, if it exists + */ + public void readFromIfExists(File file) { + if (!file.exists()) { + LOGGER.log(Level.INFO, "There is no config file {0}; using default configuration", //NON-NLS + file.getAbsolutePath()); + return; + } + try { + readFrom(file); + LOGGER.log(Level.INFO, "Successfully read config from {0}", file.getAbsolutePath()); //NON-NLS + } + catch (IOException e) { + LOGGER.log(Level.WARNING, "Cannot read config file " + file.getAbsolutePath(), e); //NON-NLS + } + } + + /** + * Converts a string value from the properties file into an object that can be assigned to the specified field. + * For array fields, the string value is first split into components. + * + * @param value the string value to convert + * @param field the field to set with the converted value + * @return an object of the appropriate type for the field + */ + private Object createValue(String value, Field field) { + if (!field.getType().isArray()) + return convertToType(value, field.getType()); + // the field is an array + final Separator sepAnn = field.getDeclaredAnnotation(Separator.class); + final String sep = sepAnn == null ? "," : sepAnn.value(); + final String[] split = value.split(BLANK_SEQ + sep + BLANK_SEQ, -1); + final Object array = Array.newInstance(field.getType().componentType(), split.length); + for (int i = 0; i < split.length; i++) + Array.set(array, i, convertToType(split[i], field.getType().componentType())); + return array; + } + + /** + * Converts a string value into an object of the specified type. + * + * @param value the string value to convert + * @param targetType the target type to convert to + * @return an object of the specified type + */ + protected Object convertToType(String value, Class targetType) { + Function handler = CONVERTER_MAP.get(targetType); + if (handler != null) + return handler.apply(value); + throw new IllegalArgumentException("Cannot translate " + value + " to " + targetType); + } + + /** + * Returns a string representation of the configuration object, including all properties and their values. + * + * @return a string representation of the configuration object + */ + @Override + public String toString() { + final List propertyStrings = getPropertyStrings(); + propertyStrings.sort(String.CASE_INSENSITIVE_ORDER); + return "[\n" + String.join(",\n", propertyStrings) + "\n]"; + } + + /** + * Retrieves all property strings of the configuration object. + * + * @return a list of property strings + */ + private List getPropertyStrings() { + final List propertyStrings = new ArrayList<>(); + for (Class clazz = getClass(); Config.class.isAssignableFrom(clazz); clazz = clazz.getSuperclass()) { + for (Field field : clazz.getDeclaredFields()) { + final String stringRepresentation = getStringRepresentation(field); + if (stringRepresentation != null) + propertyStrings.add(stringRepresentation); + } + } + return propertyStrings; + } + + /** + * Retrieves the string representation of a field annotated with {@link Property}. + * + * @param field the field to retrieve the string representation for + * @return the string representation of the field, or null if the field is not annotated with {@link Property} + */ + private String getStringRepresentation(Field field) { + final Property keyAnnotation = field.getAnnotation(Property.class); + if (keyAnnotation != null) { + try { + final Object fieldValue = getField(field); + final String valueString = asString(fieldValue); + return keyAnnotation.value() + " -> " + field.getName() + " = " + valueString; + } + catch (IllegalAccessException e) { + LOGGER.log(Level.ERROR, "Cannot access " + field, e); //NON-NLS + } + } + return null; + } + + /** + * Converts an object to its string representation. For arrays, string representations of their components are produced. + * + * @param value the object to convert + * @return the string representation of the object + */ + private String asString(Object value) { + if (value == null) + return "null"; //NON-NLS + if (!value.getClass().isArray()) + return value.toString(); + final int length = Array.getLength(value); + final List components = new ArrayList<>(length); + for (int i = 0; i < length; i++) { + final Object component = Array.get(value, i); + components.add(asString(component)); + } + return "{" + String.join(", ", components) + "}"; + } + + /** + * Sets the value of a field, making it accessible if necessary. + * + * @param field the field to set + * @param value the value to set + * @throws IllegalAccessException if the field cannot be accessed + */ + private void setField(Field field, Object value) throws IllegalAccessException { + boolean inaccessible = !field.canAccess(this); + if (inaccessible) + field.setAccessible(true); + field.set(this, value); + if (inaccessible) + field.setAccessible(false); + LOGGER.log(Level.TRACE, "Set {0} to {1}", field, value); //NON-NLS + } + + /** + * Retrieves the value of a field, making it accessible if necessary. + * + * @param field the field to retrieve the value from + * @return the value of the field + * @throws IllegalAccessException if the field cannot be accessed + */ + private Object getField(Field field) throws IllegalAccessException { + boolean inaccessible = !field.canAccess(this); + if (inaccessible) + field.setAccessible(true); + final Object value = field.get(this); + if (inaccessible) + field.setAccessible(false); + return value; + } +} diff --git a/Projekte/common/src/test/java/pp/util/AngleTest.java b/Projekte/common/src/test/java/pp/util/AngleTest.java new file mode 100644 index 0000000..28f333e --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/AngleTest.java @@ -0,0 +1,109 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import org.junit.Test; + +import static java.lang.Math.min; +import static org.junit.Assert.assertEquals; +import static pp.util.FloatMath.DEG_TO_RAD; +import static pp.util.FloatMath.ZERO_TOLERANCE; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sin; + +public class AngleTest { + @Test + public void compareAngles() { + for (int i = 0; i < 360; i++) { + final Angle u = Angle.fromDegrees(i); + for (int j = 0; j < 360; j++) { + final Angle v = Angle.fromDegrees(j); + assertEquals("compare " + i + "° and " + j + "°", Integer.compare(i, j), (Object) u.compareTo(v)); + } + } + } + + @Test + public void addAngles() { + for (int i = 0; i < 360; i++) { + final Angle u = Angle.fromDegrees(i); + for (int j = 0; j < 360; j++) { + final Angle v = Angle.fromDegrees(j); + final Angle sum = u.plus(v); + assertEquals(i + "° + " + j + "°, x coordinate", cos((i + j) * DEG_TO_RAD), sum.x, ZERO_TOLERANCE); + assertEquals(i + "° + " + j + "°, y coordinate", sin((i + j) * DEG_TO_RAD), sum.y, ZERO_TOLERANCE); + } + } + } + + @Test + public void subtractAngles() { + for (int i = 0; i < 360; i++) { + final Angle u = Angle.fromDegrees(i); + for (int j = 0; j < 360; j++) { + final Angle v = Angle.fromDegrees(j); + final Angle diff = u.minus(v); + assertEquals(i + "° - " + j + "°, x coordinate", cos((i - j) * DEG_TO_RAD), diff.x, ZERO_TOLERANCE); + assertEquals(i + "° - " + j + "°, y coordinate", sin((i - j) * DEG_TO_RAD), diff.y, ZERO_TOLERANCE); + } + } + } + + @Test + public void minAngle() { + for (int i = 0; i < 360; i++) { + final Angle u = Angle.fromDegrees(i); + for (int j = 0; j < 360; j++) { + final Angle v = Angle.fromDegrees(j); + final Angle diff = Angle.min(u, v); + assertEquals(i + "° - " + j + "°, x coordinate", cos(min(i, j) * DEG_TO_RAD), diff.x, ZERO_TOLERANCE); + assertEquals(i + "° - " + j + "°, y coordinate", sin(min(i, j) * DEG_TO_RAD), diff.y, ZERO_TOLERANCE); + } + } + } + + @Test + public void bisector() { + for (int right = 0; right < 360; right++) { + final Angle rightAngle = Angle.fromDegrees(right); + for (int add = 0; add < 360; add++) { + final int left = right + add; + final Angle bisector = Angle.fromDegrees(left).bisector(rightAngle); + final float exp = (right + 0.5f * add) * DEG_TO_RAD; + assertEquals("left=" + left + "° / right=" + right + "°, x coordinate", cos(exp), bisector.x, ZERO_TOLERANCE); + assertEquals("left=" + left + "° / right=" + right + "°, y coordinate", sin(exp), bisector.y, ZERO_TOLERANCE); + } + } + } + + @Test + public void leftOf() { + for (int right = 0; right < 360; right++) { + final Angle rightAngle = Angle.fromDegrees(right); + for (int add = 1; add < 360; add++) + if (add != 180) { + final int left = right + add; + final Angle leftAngle = Angle.fromDegrees(left); + assertEquals(left + "° left of " + right + "°", add < 180, leftAngle.leftOf(rightAngle)); + } + } + } + + @Test + public void rightOf() { + for (int right = 0; right < 360; right++) { + final Angle rightAngle = Angle.fromDegrees(right); + for (int add = 1; add < 360; add++) + if (add != 180) { + final int left = right + add; + final Angle leftAngle = Angle.fromDegrees(left); + assertEquals(left + "° right of " + right + "°", add > 180, leftAngle.rightOf(rightAngle)); + } + } + } +} \ No newline at end of file diff --git a/Projekte/common/src/test/java/pp/util/IntervalTest.java b/Projekte/common/src/test/java/pp/util/IntervalTest.java new file mode 100644 index 0000000..2f36702 --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/IntervalTest.java @@ -0,0 +1,39 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static pp.util.FloatMath.ZERO_TOLERANCE; + +public class IntervalTest { + private Interval interval; + + @Before + public void setUp() { + interval = new Interval(0f, 1f); + } + + @Test + public void contains() { + assertTrue(interval.contains(0.5f)); + assertTrue(interval.contains(0f)); + assertTrue(interval.contains(1f)); + assertFalse(interval.contains(1.5f)); + assertFalse(interval.contains(-0.5f)); + } + + @Test + public void matches() { + assertTrue(interval.matches(new Interval(0f, 1f), ZERO_TOLERANCE)); + assertFalse(interval.matches(new Interval(0f, 0.99f), ZERO_TOLERANCE)); + } +} \ No newline at end of file diff --git a/Projekte/common/src/test/java/pp/util/RandomPositionIteratorTest.java b/Projekte/common/src/test/java/pp/util/RandomPositionIteratorTest.java new file mode 100644 index 0000000..44eee8e --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/RandomPositionIteratorTest.java @@ -0,0 +1,36 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class RandomPositionIteratorTest { + public static final int WIDTH = 15; + public static final int HEIGHT = 25; + + @Test + public void permutation() { + for (int i = 0; i < 10; i++) { + final List permutation = new ArrayList<>(); + RandomPositionIterator.floatPoints(WIDTH, HEIGHT).forEachRemaining(permutation::add); + assertEquals(WIDTH * HEIGHT, permutation.size()); + assertEquals(permutation.size(), new HashSet<>(permutation).size()); + for (Position w : permutation) { + assertTrue(w.toString(), 0 <= w.getX() && w.getX() < WIDTH); + assertTrue(w.toString(), 0 <= w.getY() && w.getY() < HEIGHT); + } + } + } +} \ No newline at end of file diff --git a/Projekte/common/src/test/java/pp/util/SegmentTest.java b/Projekte/common/src/test/java/pp/util/SegmentTest.java new file mode 100644 index 0000000..edae4fa --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/SegmentTest.java @@ -0,0 +1,201 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static pp.util.FloatMath.FLT_EPSILON; +import static pp.util.FloatMath.PI; +import static pp.util.FloatMath.ZERO_TOLERANCE; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sqr; +import static pp.util.FloatMath.sqrt; +import static pp.util.FloatMath.tan; + +public class SegmentTest { + private static final float SQRT2 = sqrt(2f); + private static final Segment segment1 = new Segment(new FloatPoint(1f, -1f), new FloatPoint(1f, 1f)); + private static final Segment segment2 = new Segment(new FloatPoint(SQRT2, 0f), new FloatPoint(0f, SQRT2)); + private static final Segment segment3 = new Segment(new FloatPoint(2f, -1f), new FloatPoint(2f, 1f)); + private static final Segment segment4 = new Segment(new FloatPoint(SQRT2, -1f), new FloatPoint(SQRT2, 1f)); + private static final Segment segment5 = new Segment(new FloatPoint(-SQRT2, 2f * SQRT2), new FloatPoint(2f * SQRT2, -SQRT2)); + private static final Segment segment6 = new Segment(new FloatPoint(0f, 0f), new FloatPoint(SQRT2, 1f)); + private static final FloatPoint ZERO = new FloatPoint(0f, 0f); + public static final FloatPoint ONE_UP = new FloatPoint(0f, 1f); + public static final FloatPoint ONE_DOWN = new FloatPoint(0f, -1f); + + @Test + public void dist1() { + assertEquals(1f, segment1.dist(ZERO, 0f), FLT_EPSILON); + assertEquals(1f, segment1.dist(ONE_UP, 0f), FLT_EPSILON); + assertEquals(1f, segment1.dist(ONE_DOWN, 0f), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ZERO, 0.125f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ONE_UP, 0.125f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ONE_DOWN, 0.125f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ZERO, -0.125f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ONE_UP, -0.125f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment1.dist(ONE_DOWN, -0.125f * PI), FLT_EPSILON); + assertEquals(SQRT2, segment1.dist(ZERO, 0.25f * PI), FLT_EPSILON); + assertEquals(SQRT2, segment1.dist(ZERO, -0.25f * PI), FLT_EPSILON); + } + + @Test + public void dist2() { + assertEquals(1f, segment2.dist(ZERO, 0.25f * PI), FLT_EPSILON); + assertEquals(SQRT2, segment2.dist(ZERO, 0f), FLT_EPSILON); + assertEquals(SQRT2, segment2.dist(ZERO, 0.5f * PI), FLT_EPSILON); + assertEquals(1f / cos(0.125f * PI), segment2.dist(ZERO, 0.375f * PI), FLT_EPSILON); + assertEquals(SQRT2, segment2.dist(ZERO, PI / 2f), FLT_EPSILON); + } + + @Test + public void quotient1() { + assertEquals(0.5f, segment1.quotient(ZERO, 0f), FLT_EPSILON); + assertEquals(1f, segment1.quotient(ONE_UP, 0f), FLT_EPSILON); + assertEquals(0f, segment1.quotient(ONE_DOWN, 0f), FLT_EPSILON); + assertEquals(0.5f * tan(0.125f * PI) + 0.5f, segment1.quotient(ZERO, 0.125f * PI), FLT_EPSILON); + assertEquals(0.5f * tan(0.125f * PI) + 1f, segment1.quotient(ONE_UP, 0.125f * PI), FLT_EPSILON); + assertEquals(0.5f * tan(0.125f * PI), segment1.quotient(ONE_DOWN, 0.125f * PI), FLT_EPSILON); + assertEquals(0.5f - 0.5f * tan(0.125f * PI), segment1.quotient(ZERO, -0.125f * PI), FLT_EPSILON); + assertEquals(1f - 0.5f * tan(0.125f * PI), segment1.quotient(ONE_UP, -0.125f * PI), FLT_EPSILON); + assertEquals(-0.5f * tan(0.125f * PI), segment1.quotient(ONE_DOWN, -0.125f * PI), FLT_EPSILON); + assertEquals(1f, segment1.quotient(ZERO, 0.25f * PI), FLT_EPSILON); + assertEquals(0f, segment1.quotient(ZERO, -0.25f * PI), FLT_EPSILON); + } + + @Test + public void quotient2() { + assertEquals(0.5f, segment2.quotient(ZERO, 0.25f * PI), FLT_EPSILON); + assertEquals(0f, segment2.quotient(ZERO, 0f), FLT_EPSILON); + assertEquals(1f, segment2.quotient(ZERO, 0.5f * PI), FLT_EPSILON); + assertEquals(0.5f * SQRT2, segment2.quotient(ZERO, 0.375f * PI), FLT_EPSILON); + assertEquals(1f - 0.5f * SQRT2, segment2.quotient(ZERO, 0.125f * PI), FLT_EPSILON); + } + + @Test + public void project() { + assertEquals(0.5f, segment1.project(ZERO), FLT_EPSILON); + assertEquals(0.5f, segment2.project(ZERO), FLT_EPSILON); + } + + @Test + public void minDistanceSquared1() { + assertEquals(0f, segment1.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(0f, segment1.minDistanceSquared(segment2), ZERO_TOLERANCE); + assertEquals(0f, segment2.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(1f, segment1.minDistanceSquared(segment3), ZERO_TOLERANCE); + assertEquals(1f, segment3.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(sqr(SQRT2 - 1f), segment1.minDistanceSquared(segment4), ZERO_TOLERANCE); + assertEquals(sqr(SQRT2 - 1f), segment4.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(0f, segment1.minDistanceSquared(segment5), ZERO_TOLERANCE); + assertEquals(0f, segment5.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(0f, segment1.minDistanceSquared(segment6), ZERO_TOLERANCE); + assertEquals(0f, segment6.minDistanceSquared(segment1), ZERO_TOLERANCE); + + assertEquals(0f, segment2.minDistanceSquared(segment2), ZERO_TOLERANCE); + + assertEquals(sqr(2f - SQRT2), segment2.minDistanceSquared(segment3), ZERO_TOLERANCE); + assertEquals(sqr(2f - SQRT2), segment3.minDistanceSquared(segment2), ZERO_TOLERANCE); + + assertEquals(0f, segment2.minDistanceSquared(segment4), ZERO_TOLERANCE); + assertEquals(0f, segment4.minDistanceSquared(segment2), ZERO_TOLERANCE); + + assertEquals(0f, segment2.minDistanceSquared(segment5), ZERO_TOLERANCE); + assertEquals(0f, segment5.minDistanceSquared(segment2), ZERO_TOLERANCE); + + assertEquals(0f, segment2.minDistanceSquared(segment6), ZERO_TOLERANCE); + assertEquals(0f, segment6.minDistanceSquared(segment2), ZERO_TOLERANCE); + + assertEquals(0f, segment3.minDistanceSquared(segment3), ZERO_TOLERANCE); + + assertEquals(sqr(2f - SQRT2), segment3.minDistanceSquared(segment4), ZERO_TOLERANCE); + assertEquals(sqr(2f - SQRT2), segment4.minDistanceSquared(segment3), ZERO_TOLERANCE); + + assertEquals(0f, segment3.minDistanceSquared(segment5), ZERO_TOLERANCE); + assertEquals(0f, segment5.minDistanceSquared(segment3), ZERO_TOLERANCE); + + assertEquals(sqr(2f - SQRT2), segment3.minDistanceSquared(segment6), ZERO_TOLERANCE); + assertEquals(sqr(2f - SQRT2), segment6.minDistanceSquared(segment3), ZERO_TOLERANCE); + + assertEquals(0f, segment4.minDistanceSquared(segment4), ZERO_TOLERANCE); + + assertEquals(0f, segment4.minDistanceSquared(segment5), ZERO_TOLERANCE); + assertEquals(0f, segment5.minDistanceSquared(segment4), ZERO_TOLERANCE); + + assertEquals(0f, segment4.minDistanceSquared(segment6), ZERO_TOLERANCE); + assertEquals(0f, segment6.minDistanceSquared(segment4), ZERO_TOLERANCE); + + assertEquals(0f, segment5.minDistanceSquared(segment5), ZERO_TOLERANCE); + + assertEquals(0f, segment5.minDistanceSquared(segment6), ZERO_TOLERANCE); + assertEquals(0f, segment6.minDistanceSquared(segment5), ZERO_TOLERANCE); + + assertEquals(0f, segment6.minDistanceSquared(segment6), ZERO_TOLERANCE); + } + + @Test + public void minDistanceSquared2() { + final Segment s1 = new Segment(new FloatPoint(0f, 0f), new FloatPoint(2f, 1f)); + for (int i = -20; i <= 40; i++) { + final float x = i * 0.1f; + final Segment s2 = new Segment(new FloatPoint(x, 2f), new FloatPoint(x + 2f, -2f)); + final float dist; + if (i <= -10) + dist = 0.8f * sqr(1f + x); + else if (i <= 15) + dist = 0f; + else + dist = 0.8f * sqr(x - 1.5f); + assertEquals("x = " + x, dist, s1.minDistanceSquared(s2), ZERO_TOLERANCE); + assertEquals("x = " + x, dist, s2.minDistanceSquared(s1), ZERO_TOLERANCE); + } + } + + @Test + public void minDistanceSquared3() { + final Segment s1 = new Segment(new FloatPoint(0f, 0f), new FloatPoint(2f, 1f)); + for (float i = -30; i <= 30; i++) { + final float x = i * 0.1f; + final Segment s2 = new Segment(new FloatPoint(x, 0.5f * x), new FloatPoint(x + 2f, 0.5f * x + 1f)); + final float dist; + if (i <= -20) + dist = 1.25f * sqr(2f + x); + else if (i <= 20) + dist = 0f; + else + dist = 1.25f * sqr(x - 2f); + assertEquals("x = " + x, dist, s1.minDistanceSquared(s2), ZERO_TOLERANCE); + assertEquals("x = " + x, dist, s2.minDistanceSquared(s1), ZERO_TOLERANCE); + } + } + + @Test + public void minDistanceSquared4() { + final Segment s1 = new Segment(new FloatPoint(0f, 0f), new FloatPoint(3f, 1.5f)); + for (float i = -30; i <= 50; i++) { + final float x = i * 0.1f; + final float y = 1f - 0.5f * x; + final Segment s2 = new Segment(new FloatPoint(x, 1f), new FloatPoint(x, 1f)); + final float dist; + if (i <= -5) + dist = sqr(x) + 1f; + else if (i <= 32) + dist = 0.2f * sqr(x - 2f); + else + dist = sqr(x - 3f) + 0.25f; + assertEquals("x = " + x, dist, s1.minDistanceSquared(s2), ZERO_TOLERANCE); + assertEquals("x = " + x, dist, s2.minDistanceSquared(s1), ZERO_TOLERANCE); + } + } +} \ No newline at end of file diff --git a/Projekte/common/src/test/java/pp/util/config/ConfigTest.java b/Projekte/common/src/test/java/pp/util/config/ConfigTest.java new file mode 100644 index 0000000..99fefbb --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/config/ConfigTest.java @@ -0,0 +1,101 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util.config; + +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Properties; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ConfigTest { + + private TestConfig config; + + @Before + public void setUp() { + config = new TestConfig(); + } + + @Test + public void testReadFromProperties() { + Properties properties = new Properties(); + properties.setProperty("test.string", "hello"); //NON-NLS + properties.setProperty("test.int", "42"); + properties.setProperty("test.boolean", "true"); //NON-NLS + properties.setProperty("test.intArray", "1; 2 ;3;4"); + + config.readFrom(properties); + + assertEquals("hello", config.getTestString()); + assertEquals(42, config.getTestInt()); + assertTrue(config.isTestBoolean()); + assertArrayEquals(new int[]{1, 2, 3, 4}, config.getTestIntArray()); + } + + @Test + public void testReadFromFile() throws IOException { + Properties properties = new Properties(); + properties.setProperty("test.string", "fileTest"); + properties.setProperty("test.int", "24"); + properties.setProperty("test.boolean", "false"); //NON-NLS + properties.setProperty("test.intArray", "10;20;30"); + + File tempFile = File.createTempFile("testConfig", ".properties"); + try (FileWriter writer = new FileWriter(tempFile)) { + properties.store(writer, null); + } + + config.readFrom(tempFile); + + assertEquals("fileTest", config.getTestString()); + assertEquals(24, config.getTestInt()); + assertFalse(config.isTestBoolean()); + assertArrayEquals(new int[]{10, 20, 30}, config.getTestIntArray()); + + // Clean up + tempFile.delete(); + } + + @Test + public void testConvertToType() { + assertEquals(42, config.convertToType("42", int.class)); + assertEquals(true, config.convertToType("true", boolean.class)); //NON-NLS + assertEquals(3.14, config.convertToType("3.14", double.class)); + } + + @Test(expected = IllegalArgumentException.class) + public void testConvertToTypeWithUnsupportedType() { + config.convertToType("unsupported", Object.class); //NON-NLS + } + + @Test + public void testToString() { + Properties properties = new Properties(); + properties.setProperty("test.string", "stringValue"); + properties.setProperty("test.int", "123"); + properties.setProperty("test.boolean", "true"); //NON-NLS + properties.setProperty("test.intArray", "5;6;7"); + + config.readFrom(properties); + + String expected = "[\ntest.boolean -> testBoolean = true,\n" + + "test.int -> testInt = 123,\n" + + "test.intArray -> testIntArray = {5, 6, 7},\n" + + "test.string -> testString = stringValue\n" + + "]"; + assertEquals(expected, config.toString()); + } +} diff --git a/Projekte/common/src/test/java/pp/util/config/TestConfig.java b/Projekte/common/src/test/java/pp/util/config/TestConfig.java new file mode 100644 index 0000000..0ede0bd --- /dev/null +++ b/Projekte/common/src/test/java/pp/util/config/TestConfig.java @@ -0,0 +1,40 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.util.config; + +class TestConfig extends Config { + @Property("test.string") + private String testString; + + @Property("test.int") + private int testInt; + + @Property("test.boolean") + private boolean testBoolean; + + @Property("test.intArray") + @Separator(";") + private int[] testIntArray; + + // Getters for testing + public String getTestString() { + return testString; + } + + public int getTestInt() { + return testInt; + } + + public boolean isTestBoolean() { + return testBoolean; + } + + public int[] getTestIntArray() { + return testIntArray; + } +} diff --git a/Projekte/gradle/wrapper/gradle-wrapper.jar b/Projekte/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/Projekte/gradle/wrapper/gradle-wrapper.jar differ diff --git a/Projekte/gradle/wrapper/gradle-wrapper.properties b/Projekte/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..d642e7f --- /dev/null +++ b/Projekte/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/Projekte/gradlew b/Projekte/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/Projekte/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/Projekte/gradlew.bat b/Projekte/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/Projekte/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Projekte/jme-common/build.gradle b/Projekte/jme-common/build.gradle new file mode 100644 index 0000000..b04d945 --- /dev/null +++ b/Projekte/jme-common/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'buildlogic.java-library-conventions' +} + +description = 'Common classes used in jME applications' + +dependencies { + implementation libs.jme3.core + api libs.lemur + api project(':common') + + runtimeOnly libs.groovy.jsr223 + runtimeOnly libs.slf4j.nop +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/Dialog.java b/Projekte/jme-common/src/main/java/pp/dialog/Dialog.java new file mode 100644 index 0000000..188952a --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/Dialog.java @@ -0,0 +1,102 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.simsilica.lemur.Container; + +/** + * Represents a dialog within a dialog manager system. + * Extends the Container class from the Lemur GUI library. + */ +public class Dialog extends Container { + /** + * The depth of the dialog within the dialog stack. + * Dialogs with lower depth values are considered to be "on top" of dialogs with higher values. + */ + protected final int depth; + + /** + * The manager responsible for handling this dialog. + */ + protected final DialogManager manager; + + /** + * Constructs a new Dialog with a depth automatically assigned by the DialogManager. + * + * @param manager The DialogManager that manages this dialog. + */ + public Dialog(DialogManager manager) { + this(manager, manager.nextDepth()); + } + + /** + * Constructs a new Dialog with the specified depth. + * + * @param manager The DialogManager that manages this dialog. + * @param depth The depth of this dialog within the dialog stack. + * @throws IllegalArgumentException if the specified depth is invalid (i.e., it is not greater than the depth of the top dialog in the manager's stack). + */ + public Dialog(DialogManager manager, int depth) { + this.manager = manager; + this.depth = depth; + // Ensure the dialog depth is greater than the depth of the current top dialog in the stack + if (!manager.getDialogStack().isEmpty() && manager.getDialogStack().getLast().depth >= depth) + throw new IllegalArgumentException("Invalid dialog depth " + depth); + } + + /** + * Checks if this dialog is the topmost dialog in the dialog stack. + * + * @return true if this dialog is the topmost dialog, false otherwise. + */ + public boolean isTopDialog() { + return manager.isTop(this); + } + + /** + * Runs the specified runnable if this dialog is the topmost dialog in the dialog stack. + * + * @param runnable the runnable. + * @see Dialog#isTopDialog() + */ + public void ifTopDialog(Runnable runnable) { + if (isTopDialog()) runnable.run(); + } + + /** + * Opens this dialog, centers it, and notifies the DialogManager to manage it. + */ + public void open() { + manager.centering(this, depth); + manager.open(this); + } + + /** + * Closes this dialog and notifies the DialogManager to stop managing it. + */ + public void close() { + manager.close(this); + } + + /** + * This method is called whenever the {@linkplain pp.dialog.DialogManager} would + * like to update this dialog. + */ + public void update() { /* empty */ } + + /** + * This method is called by {@linkplain DialogManager#update(float)} for periodically + * updating this dialog. The default implementation does nothing. + */ + public void update(float delta) { /* empty */ } + + /** + * This method calls the escape action if this dialog is the top dialog. + */ + public void escape() { /* empty */ } +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/DialogBuilder.java b/Projekte/jme-common/src/main/java/pp/dialog/DialogBuilder.java new file mode 100644 index 0000000..33228bc --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/DialogBuilder.java @@ -0,0 +1,319 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.jme3.scene.Spatial; +import com.simsilica.lemur.Button; +import com.simsilica.lemur.Container; +import com.simsilica.lemur.Label; +import com.simsilica.lemur.component.BorderLayout; +import com.simsilica.lemur.style.ElementId; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; + +import static com.simsilica.lemur.component.BorderLayout.Position.East; +import static com.simsilica.lemur.component.BorderLayout.Position.West; + +/** + * A builder class for creating and customizing dialog boxes of type {@link SimpleDialog} or its subclasses. + * This builder pattern facilitates the construction of dialog boxes with various configurations, + * such as titles, text content, buttons, and additional custom behaviors. + * + * @param the type of dialog to be built, typically extending {@link SimpleDialog} + */ +public class DialogBuilder { + + /** + * Creates a {@link DialogBuilder} for a simple dialog with default settings. + * + * @param manager the dialog manager responsible for managing the dialog's lifecycle + * @return a {@link DialogBuilder} instance for creating simple dialogs + */ + public static DialogBuilder simple(DialogManager manager) { + return new DialogBuilder<>(manager, SimpleDialog::new); + } + + protected final DialogManager manager; + private final Function dialogFactory; + private final List> extensionList = new ArrayList<>(); + private String title; + private String text; + private String okLabel; + private String noLabel; + private Consumer okAction = d -> {}; + private Consumer noAction = d -> {}; + private boolean okClose = true; + private boolean noClose = true; + private Function focus; + + /** + * Constructs a dialog builder with the specified dialog manager and dialog factory. + * + * @param manager the dialog manager responsible for managing the dialog's lifecycle + * @param dialogFactory a factory function to create instances of the dialog + */ + public DialogBuilder(DialogManager manager, Function dialogFactory) { + this.manager = manager; + this.dialogFactory = dialogFactory; + } + + /** + * Applies all registered extensions to the given dialog. + * Extensions allow for additional customizations beyond the standard configurations. + * + * @param dialog the dialog object to which the extensions will be applied + * @see #setExtension(java.util.function.Consumer) + */ + protected void extendDialog(D dialog) { + for (Consumer extension : extensionList) + extension.accept(dialog); + } + + /** + * Builds and returns the dialog with the specified configurations. + * This method creates a new dialog object and applies all the configured settings. + * + * @return the fully configured dialog object + */ + public D build() { + return build(dialogFactory.apply(manager)); + } + + /** + * Builds the dialog by configuring an existing dialog object with the specified settings. + * This method allows for further customization of a pre-existing dialog object. + * + * @param dialog the dialog object to configure + * @return the configured dialog object for chaining + */ + public D build(D dialog) { + configureTitle(dialog); + configureText(dialog); + extendDialog(dialog); + configureButtons(dialog); + configureFocus(dialog); + + return dialog; + } + + /** + * Configures the title of the dialog if a title has been set. + * + * @param dialog the dialog to which the title will be added + */ + private void configureTitle(D dialog) { + if (title != null) + dialog.addChild(new Label(title, new ElementId("header"))); // NON-NLS + } + + /** + * Configures the main text content of the dialog if text has been set. + * + * @param dialog the dialog to which the text content will be added + */ + private void configureText(D dialog) { + if (text != null) + dialog.addChild(new Label(text)); + } + + /** + * Configures the OK and NO buttons for the dialog if labels for them have been set. + * + * @param dialog the dialog to which the buttons will be added + */ + private void configureButtons(D dialog) { + if (okLabel != null || noLabel != null) { + final Container buttons = dialog.addChild(new Container(new BorderLayout())); + if (okLabel != null) { + final Button okButton = buttons.addChild(new Button(okLabel), West); + dialog.setOkButton(okButton); + configureButton(okButton, okAction, okClose, dialog); + } + if (noLabel != null) { + final Button noButton = buttons.addChild(new Button(noLabel), East); + configureButton(noButton, noAction, noClose, dialog); + } + } + } + + /** + * Configures a button with its action and whether the dialog should close after the action is performed. + * + * @param button the button to configure + * @param action the action to perform when the button is clicked + * @param close whether the dialog should close after the action is performed + * @param dialog the dialog that contains the button + */ + private void configureButton(Button button, Consumer action, boolean close, D dialog) { + button.addClickCommands(s -> { + if (dialog.isTopDialog()) { + action.accept(dialog); + if (close) { + dialog.close(); + } + } + }); + } + + /** + * Configures the initial focus for the dialog when it is displayed. + * The focus will be set to either a specified component or the OK button if available. + * + * @param dialog the dialog to configure focus for + */ + private void configureFocus(D dialog) { + final Spatial focusComponent = focus == null ? null : focus.apply(dialog); + if (focusComponent != null || dialog.getOkButton() != null) + manager.setFocus(focusComponent != null ? focusComponent : dialog.getOkButton()); + } + + /** + * Sets the title of the dialog. + * + * @param title the title text to be displayed at the top of the dialog + * @return this builder instance for chaining + */ + public DialogBuilder setTitle(String title) { + this.title = title; + return this; + } + + /** + * Sets the main text content of the dialog. + * + * @param text the main content text to be displayed in the dialog + * @return this builder instance for chaining + */ + public DialogBuilder setText(String text) { + this.text = text; + return this; + } + + /** + * Sets the label for the OK button. + * + * @param okLabel the text label to display on the OK button + * @return this builder instance for chaining + */ + public DialogBuilder setOkButton(String okLabel) { + this.okLabel = okLabel; + return this; + } + + /** + * Sets the label and action for the OK button. + * When the OK button is clicked, the specified action will be executed. + * + * @param okLabel the text label to display on the OK button + * @param okAction the action to perform when the OK button is clicked + * @return this builder instance for chaining + */ + public DialogBuilder setOkButton(String okLabel, Consumer okAction) { + this.okAction = okAction; + return setOkButton(okLabel); + } + + /** + * Sets the label and action for the OK button. + * When the OK button is clicked, the specified runnable action will be executed. + * + * @param okLabel the text label to display on the OK button + * @param okAction the runnable action to perform when the OK button is clicked + * @return this builder instance for chaining + */ + public DialogBuilder setOkButton(String okLabel, Runnable okAction) { + this.okAction = d -> okAction.run(); + return setOkButton(okLabel); + } + + /** + * Sets the label for the NO button. + * + * @param noLabel the text label to display on the NO button + * @return this builder instance for chaining + */ + public DialogBuilder setNoButton(String noLabel) { + this.noLabel = noLabel; + return this; + } + + /** + * Sets the label and action for the NO button. + * When the NO button is clicked, the specified action will be executed. + * + * @param noLabel the text label to display on the NO button + * @param noAction the action to perform when the NO button is clicked + * @return this builder instance for chaining + */ + public DialogBuilder setNoButton(String noLabel, Consumer noAction) { + this.noAction = noAction; + return setNoButton(noLabel); + } + + /** + * Sets the label and action for the NO button. + * When the NO button is clicked, the specified runnable action will be executed. + * + * @param noLabel the text label to display on the NO button + * @param noAction the runnable action to perform when the NO button is clicked + * @return this builder instance for chaining + */ + public DialogBuilder setNoButton(String noLabel, Runnable noAction) { + this.noAction = d -> noAction.run(); + return setNoButton(noLabel); + } + + /** + * Sets whether the dialog should automatically close when the OK button is clicked. + * + * @param okClose true to close the dialog when the OK button is clicked, false otherwise + * @return this builder instance for chaining + */ + public DialogBuilder setOkClose(boolean okClose) { + this.okClose = okClose; + return this; + } + + /** + * Sets whether the dialog should automatically close when the NO button is clicked. + * + * @param noClose true to close the dialog when the NO button is clicked, false otherwise + * @return this builder instance for chaining + */ + public DialogBuilder setNoClose(boolean noClose) { + this.noClose = noClose; + return this; + } + + /** + * Sets the component that should initially receive focus when the dialog is displayed. + * If a focus function is not provided, the focus defaults to the OK button. + * + * @param focus a function specifying which component of the dialog should receive focus + * @return this builder instance for chaining + */ + public DialogBuilder setFocus(Function focus) { + this.focus = focus; + return this; + } + + /** + * Adds an extension to the dialog. + * Extensions allow for additional customizations and behaviors beyond the basic configuration. + * + * @param extender a consumer that applies the extension to the dialog + * @return this builder instance for chaining + */ + public DialogBuilder setExtension(Consumer extender) { + extensionList.add(extender); + return this; + } +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/DialogManager.java b/Projekte/jme-common/src/main/java/pp/dialog/DialogManager.java new file mode 100644 index 0000000..ca0069e --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/DialogManager.java @@ -0,0 +1,157 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.jme3.app.SimpleApplication; +import com.jme3.math.Vector3f; +import com.jme3.scene.Spatial; +import com.jme3.system.AppSettings; +import com.simsilica.lemur.Panel; +import com.simsilica.lemur.focus.FocusManagerState; + +import java.util.ArrayDeque; +import java.util.Deque; + +import static java.lang.Math.max; + +/** + * Manages dialog boxes within the application, handling their display, positioning, and focus. + */ +public class DialogManager { + /** + * The application instance. + */ + private final SimpleApplication app; + + /** + * A stack to keep track of the dialogs. + */ + private final Deque

dialogStack = new ArrayDeque<>(); + + /** + * Constructs a DialogManager for the specified application. + * + * @param app the SimpleApplication instance + */ + public DialogManager(SimpleApplication app) { + this.app = app; + } + + /** + * Checks if any dialog is currently displayed. + * + * @return true if any dialog is currently shown, false otherwise + */ + public boolean showsDialog() { + return !dialogStack.isEmpty(); + } + + /** + * Retrieves the stack of dialogs. + * + * @return the dialog stack + */ + public Deque getDialogStack() { + return dialogStack; + } + + /** + * Calculates the depth for the next dialog to be displayed. + * + * @return the next depth value + */ + public int nextDepth() { + return dialogStack.isEmpty() ? 10 : dialogStack.peek().depth + 10; + } + + /** + * Positions the specified panel in the center of the screen, with a specified z coordinate. + * + * @param panel the panel to center + * @param z the z coordinate + */ + public void centering(Panel panel, float z) { + final Vector3f size = panel.getPreferredSize(); + centering(panel, size.getX(), size.getY(), z); + } + + /** + * Positions the specified spatial in the center of the screen, with specified width, height, and z coordinate. + * + * @param spatial the spatial to center + * @param width the width reserved for the spatial + * @param height the height reserved for the spatial + * @param z the z coordinate + */ + public void centering(Spatial spatial, float width, float height, float z) { + final AppSettings settings = app.getContext().getSettings(); + spatial.setLocalTranslation(max(0f, 0.5f * (settings.getWidth() - width)), + max(0f, 0.5f * (settings.getHeight() + height)), + z); + } + + /** + * Arranges for the specified spatial to receive the focus. + * + * @param spatial the spatial to focus + */ + public void setFocus(Spatial spatial) { + final var focusManager = app.getStateManager().getState(FocusManagerState.class); + if (focusManager != null) + focusManager.setFocus(spatial); + } + + /** + * Opens the specified dialog and adds it to the dialog stack. + * + * @param dialog the dialog to open + */ + void open(Dialog dialog) { + dialogStack.push(dialog); + dialog.update(); + app.getGuiNode().attachChild(dialog); + } + + /** + * Checks if the specified dialog is the topmost dialog in the dialog stack. + * + * @param dialog a dialog. + * @return true if the dialog is the top dialog, false otherwise. + */ + boolean isTop(Dialog dialog) { + return !dialogStack.isEmpty() && dialogStack.peek() == dialog; + } + + /** + * Closes the specified dialog, removing it from the dialog stack. + * + * @param dialog the dialog to close + * @throws IllegalArgumentException if the specified dialog is not the top dialog + */ + void close(Dialog dialog) { + if (!isTop(dialog)) + throw new IllegalArgumentException(dialog + " is not the top dialog"); + dialogStack.pop(); + if (!dialogStack.isEmpty()) + dialogStack.peek().update(); + app.getGuiNode().detachChild(dialog); + } + + /** + * Calls the escape action of the top dialog, if a dialog is shown. + */ + public void escape() { + if (dialogStack.isEmpty()) return; + dialogStack.peek().escape(); + } + + public void update(float delta) { + for (Dialog dialog : dialogStack) + dialog.update(delta); + } +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/SimpleDialog.java b/Projekte/jme-common/src/main/java/pp/dialog/SimpleDialog.java new file mode 100644 index 0000000..8dd3be3 --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/SimpleDialog.java @@ -0,0 +1,64 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.simsilica.lemur.Button; + +/** + * Represents a simple dialog with OK and Cancel buttons. + * It extends the Dialog class and provides methods to get and set these buttons. + */ +public class SimpleDialog extends Dialog { + private Button okButton; + private Button cancelButton; + + /** + * Constructs a SimpleDialog with the specified DialogManager. + * + * @param manager the DialogManager to manage this dialog + */ + public SimpleDialog(DialogManager manager) { + super(manager); + } + + /** + * Returns the OK button of this dialog. + * + * @return the OK button + */ + public Button getOkButton() { + return okButton; + } + + /** + * Sets the OK button of this dialog. + * + * @param okButton the OK button to set + */ + void setOkButton(Button okButton) { + this.okButton = okButton; + } + + /** + * Returns the Cancel button of this dialog. + * + * @return the Cancel button + */ + public Button getCancelButton() { + return cancelButton; + } + + /** + * Sets the Cancel button of this dialog. + * + * @param cancelButton the Cancel button to set + */ + void setCancelButton(Button cancelButton) { + this.cancelButton = cancelButton; + } +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/StateCheckboxModel.java b/Projekte/jme-common/src/main/java/pp/dialog/StateCheckboxModel.java new file mode 100644 index 0000000..7cee7dd --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/StateCheckboxModel.java @@ -0,0 +1,53 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.jme3.app.Application; +import com.jme3.app.state.AppState; +import com.simsilica.lemur.DefaultCheckboxModel; + +/** + * A checkbox model for enabling and disabling app states. + * This model links a checkbox with an AppState, so that checking + * or unchecking the box enables or disables the state, respectively. + */ +public class StateCheckboxModel extends DefaultCheckboxModel { + private final AppState state; + + /** + * Constructs a StateCheckboxModel for the specified app state class. + * + * @param app the application containing the state manager + * @param stateClass the class of the app state to be controlled + */ + public StateCheckboxModel(Application app, Class stateClass) { + this(app.getStateManager().getState(stateClass)); + } + + /** + * Constructs a StateCheckboxModel for the specified app state. + * + * @param state the app state to be controlled + */ + public StateCheckboxModel(AppState state) { + this.state = state; + setChecked(state.isEnabled()); + } + + /** + * Sets the checked state of the checkbox and enables or disables + * the associated app state accordingly. + * + * @param checked true to check the box and enable the state, false to uncheck the box and disable the state + */ + @Override + public void setChecked(boolean checked) { + super.setChecked(checked); + state.setEnabled(checked); + } +} diff --git a/Projekte/jme-common/src/main/java/pp/dialog/TextInputDialog.java b/Projekte/jme-common/src/main/java/pp/dialog/TextInputDialog.java new file mode 100644 index 0000000..bed26dc --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/dialog/TextInputDialog.java @@ -0,0 +1,132 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.dialog; + +import com.jme3.input.KeyInput; +import com.simsilica.lemur.Container; +import com.simsilica.lemur.Label; +import com.simsilica.lemur.TextField; +import com.simsilica.lemur.component.SpringGridLayout; +import com.simsilica.lemur.event.KeyAction; + +/** + * A dialog class that asks for text input. Usually, this is a single-line + * text input. + * + * @see #getInput() + */ +public class TextInputDialog extends SimpleDialog { + // TextField for user input + private final TextField input = new TextField(""); + + /** + * Constructs a TextInputDialog associated with the specified dialog manager. + * + * @param manager the dialog manager to associate the dialog with + */ + private TextInputDialog(DialogManager manager) { + super(manager); + input.setSingleLine(true); // Set the input field to be single-line + input.setPreferredWidth(500f); // Set preferred width of the input field + } + + /** + * Returns the input field. + * + * @return the input field + */ + public TextField getInput() { + return input; + } + + /** + * Maps the specified key action to trigger a click on the OK button. + * + * @param action the key action to map + */ + private void clickOkOn(KeyAction action) { + input.getActionMap().put(action, (c, k) -> { + if (getOkButton() != null) + getOkButton().click(); + }); + } + + /** + * Creates a builder for TextInputDialog. + * + * @param manager the dialog manager to associate the dialog with + * @return a TextInputDialogBuilder instance + */ + public static TextInputDialogBuilder builder(DialogManager manager) { + return new TextInputDialogBuilder(manager); + } + + /** + * A builder class for creating TextInputDialog instances. + */ + public static class TextInputDialogBuilder extends DialogBuilder { + private String label; + private boolean returnHitsOK = true; + + /** + * Constructs a TextInputDialogBuilder with the specified dialog manager. + * + * @param manager the dialog manager to associate the dialog with + */ + private TextInputDialogBuilder(DialogManager manager) { + super(manager, TextInputDialog::new); + } + + /** + * Extends the dialog with additional components like a label and input field. + * + * @param dialog the dialog to be extended + */ + @Override + protected void extendDialog(TextInputDialog dialog) { + final TextField textField = dialog.getInput(); + if (label == null) { + dialog.addChild(textField); + } + else { + final Container c = dialog.addChild(new Container(new SpringGridLayout())); + c.addChild(new Label(label)); + c.addChild(textField, 1); + } + if (returnHitsOK) { + // move the caret right so that it becomes visible at the end of a long text + textField.getDocumentModel().right(); + // Hitting a return key is like pushing the ok button + dialog.clickOkOn(new KeyAction(KeyInput.KEY_RETURN)); + dialog.clickOkOn(new KeyAction(KeyInput.KEY_NUMPADENTER)); + } + } + + /** + * Sets the label for the input field. + * + * @param label the label text + * @return this builder instance for chaining + */ + public TextInputDialogBuilder setLabel(String label) { + this.label = label; + return this; + } + + /** + * Sets whether hitting the return key triggers the OK button. + * + * @param returnHitsOK true to trigger OK button on return key, false otherwise + * @return this builder instance for chaining + */ + public TextInputDialogBuilder setReturnHitsOK(boolean returnHitsOK) { + this.returnHitsOK = returnHitsOK; + return this; + } + } +} diff --git a/Projekte/jme-common/src/main/java/pp/graphics/Draw.java b/Projekte/jme-common/src/main/java/pp/graphics/Draw.java new file mode 100644 index 0000000..52b017e --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/graphics/Draw.java @@ -0,0 +1,229 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.graphics; + +import com.jme3.asset.AssetManager; +import com.jme3.material.Material; +import com.jme3.material.RenderState; +import com.jme3.material.RenderState.BlendMode; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.Mesh; +import com.jme3.scene.VertexBuffer; +import com.jme3.scene.shape.Quad; +import pp.util.Position; +import pp.util.SegmentLike; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.HashMap; +import java.util.Map; + +import static pp.util.FloatMath.FLT_EPSILON; +import static pp.util.FloatMath.TWO_PI; +import static pp.util.FloatMath.cos; +import static pp.util.FloatMath.sin; +import static pp.util.FloatMath.sqr; +import static pp.util.FloatMath.sqrt; + +/** + * Class for creating graphical primitives. + */ +public class Draw { + private static final Logger LOGGER = System.getLogger(Draw.class.getName()); + private static final int NUM = 10; + private static final String UNSHADED = "Common/MatDefs/Misc/Unshaded.j3md"; //NON-NLS + private static final String COLOR = "Color"; //NON-NLS + private final AssetManager am; + private final Map lineMap = new HashMap<>(); + private final Map rectangleMap = new HashMap<>(); + private final Map circleMap = new HashMap<>(); + private Mesh lineMesh; + private Mesh circleMesh; + + /** + * Creates an in stance of the Draw class with the specified + * asset manager. + * + * @param assetManager the specified asset manager + */ + public Draw(AssetManager assetManager) { + am = assetManager; + } + + private Geometry makeLine(ColorRGBA color) { + LOGGER.log(Level.DEBUG, "create line with color {0}", color); //NON-NLS + if (lineMesh == null) { + lineMesh = new Mesh(); + lineMesh.setMode(Mesh.Mode.Lines); + lineMesh.setBuffer(VertexBuffer.Type.Position, 3, new float[]{0, 0, 0, 0, 1, 0}); + lineMesh.setBuffer(VertexBuffer.Type.Index, 2, new short[]{0, 1}); + } + final Geometry lineGeom = new Geometry("lineMesh", lineMesh.clone()); + Material matWireframe = new Material(am, UNSHADED); //NON-NLS + matWireframe.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off); + matWireframe.setColor(COLOR, color); //NON-NLS + lineGeom.setMaterial(matWireframe); + + return lineGeom; + } + + /** + * Creates a line for the specified segment. + * + * @param segment the segment with its start and end point + * @param z depth information + * @param color line color + */ + public Geometry makeLine(SegmentLike segment, float z, ColorRGBA color) { + return makeLine(segment.from(), segment.to(), z, color); + } + + /** + * Creates a straight line between the specified points with the specified color. + * + * @param p1 start point + * @param p2 end point + * @param z depth information + * @param color line color + */ + public Geometry makeLine(Position p1, Position p2, float z, ColorRGBA color) { + return makeLine(p1.getX(), p1.getY(), p2.getX(), p2.getY(), z, color); + } + + /** + * Creates a straight line between the specified points with the specified color. + * + * @param x1 x-coordinate of the start point + * @param y1 y-coordinate of the start point + * @param x2 x-coordinate of the end point + * @param y2 y-coordinate of the end point + * @param z depth information + * @param color line color + */ + public Geometry makeLine(float x1, float y1, float x2, float y2, float z, ColorRGBA color) { + final Geometry line = lineMap.computeIfAbsent(color, this::makeLine).clone(); + line.lookAt(Vector3f.UNIT_Z, new Vector3f(x2 - x1, y2 - y1, 0)); + line.setLocalScale(sqrt(sqr(x2 - x1) + sqr(y2 - y1))); + line.setLocalTranslation(x1, y1, z); + return line; + } + + /** + * Creates a straight line between the specified points with the specified width and color. + * + * @param p1 start point + * @param p2 end point + * @param z depth information + * @param color line color + * @param width width of the line + */ + public Geometry makeFatLine(Position p1, Position p2, float z, ColorRGBA color, float width) { + return makeFatLine(p1.getX(), p1.getY(), p2.getX(), p2.getY(), z, color, width); + } + + /** + * Creates a straight line between the specified points with the specified width and color. + * + * @param x1 x-coordinate of the start point + * @param y1 y-coordinate of the start point + * @param x2 x-coordinate of the end point + * @param y2 y-coordinate of the end point + * @param z depth information + * @param color line color + * @param width width of the line + */ + public Geometry makeFatLine(float x1, float y1, float x2, float y2, float z, ColorRGBA color, float width) { + final Geometry line = rectangleMap.computeIfAbsent(color, this::makeRectangle).clone(); + final float dx = x2 - x1; + final float dy = y2 - y1; + final float len = sqrt(dx * dx + dy * dy); + line.setLocalScale(width, len + width, 1f); + if (len <= FLT_EPSILON) + line.setLocalTranslation(x1 - 0.5f * width, y1 - 0.5f * width, z); + else { + final float f = 0.5f * width / len; + line.setLocalTranslation(x1 - f * (dy + dx), y1 - f * (dy - dx), z); + line.getLocalRotation().lookAt(Vector3f.UNIT_Z, new Vector3f(dx, dy, 0f)); + } + return line; + } + + private Geometry makeRectangle(ColorRGBA color) { + final Mesh quad = new Quad(1f, 1f); + final Geometry rectangle = new Geometry("quad", quad); //NON-NLS + Material mat = new Material(am, UNSHADED); //NON-NLS + mat.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); + mat.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off); + mat.setColor(COLOR, color); //NON-NLS + rectangle.setMaterial(mat); + return rectangle; + } + + /** + * Creates an axis-parallel rectangle with the specified color. + * + * @param x x-coordinate of the bottom-left corner + * @param y y-coordinate of the bottom-left corner + * @param w width of the rectangle + * @param h height of the rectangle + * @param z depth information + * @param color line color + */ + public Geometry makeRectangle(float x, float y, float z, float w, float h, ColorRGBA color) { + final Geometry rectangle = rectangleMap.computeIfAbsent(color, this::makeRectangle).clone(); + rectangle.setLocalScale(w, h, 1f); + rectangle.setLocalTranslation(x, y, z); + return rectangle; + } + + private Geometry makeCircle(ColorRGBA color) { + if (circleMesh == null) { + circleMesh = new Mesh(); + circleMesh.setMode(Mesh.Mode.LineLoop); + final float[] pointBuffer = new float[3 * NUM]; + final short[] indexBuffer = new short[NUM]; + int j = 0; + for (short i = 0; i < NUM; i++) { + final float a = TWO_PI / NUM * i; + pointBuffer[j++] = 0.5f * cos(a); + pointBuffer[j++] = 0.5f * sin(a); + pointBuffer[j++] = 0f; + indexBuffer[i] = i; + } + circleMesh.setBuffer(VertexBuffer.Type.Position, 3, pointBuffer); + circleMesh.setBuffer(VertexBuffer.Type.Index, 2, indexBuffer); + } + + final Geometry circle = new Geometry("circleMesh", circleMesh.clone()); + Material matWireframe = new Material(am, UNSHADED); //NON-NLS + matWireframe.getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off); + matWireframe.setColor(COLOR, color); //NON-NLS + circle.setMaterial(matWireframe); + + return circle; + } + + /** + * Creates an ellipse with the specified color. + * + * @param x x-coordinate of the center point + * @param y y-coordinate of the center point + * @param w width of the ellipse + * @param h height of the ellipse + * @param z depth information + * @param color line color + */ + public Geometry makeEllipse(float x, float y, float z, float w, float h, ColorRGBA color) { + final Geometry ellipse = circleMap.computeIfAbsent(color, this::makeCircle).clone(); + ellipse.setLocalScale(w, h, 1f); + ellipse.setLocalTranslation(x, y, z); + return ellipse; + } +} diff --git a/Projekte/jme-common/src/main/java/pp/view/ModelViewSynchronizer.java b/Projekte/jme-common/src/main/java/pp/view/ModelViewSynchronizer.java new file mode 100644 index 0000000..02538ce --- /dev/null +++ b/Projekte/jme-common/src/main/java/pp/view/ModelViewSynchronizer.java @@ -0,0 +1,90 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + +package pp.view; + +import com.jme3.scene.Node; +import com.jme3.scene.Spatial; + +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.HashMap; +import java.util.Map; + +/** + * Abstract base class for keeping the scene graph (=view) in sync with the model. + */ +public abstract class ModelViewSynchronizer { + private static final Logger LOGGER = System.getLogger(ModelViewSynchronizer.class.getName()); + private final Node itemNode = new Node("items"); //NON-NLS + private final Map itemMap = new HashMap<>(); + + /** + * Saves the game state and the node. + * + * @param root particular node + */ + protected ModelViewSynchronizer(Node root) { + root.attachChild(itemNode); + } + + /** + * Returns the spatial representing the specified item, + * or null if the item has no view counterpart. + */ + public Spatial getSpatial(I item) { + return itemMap.get(item); + } + + /** + * removes spatial from map + * + * @param item spatial that should be removed + */ + public void delete(I item) { + final Spatial spatial = itemMap.remove(item); + if (spatial != null) { + spatial.removeFromParent(); + LOGGER.log(Level.DEBUG, "removed spatial for {0} in {1}", item, this); //NON-NLS + } + } + + /** + * add spatial to map + * + * @param item spatial that schuld be added + */ + public void add(I item) { + if (itemMap.containsKey(item)) { + LOGGER.log(Level.WARNING, "Item {0} already managed by {1}", item, this); //NON-NLS + return; + } + final Spatial spatial = translate(item); + itemMap.put(item, spatial); + LOGGER.log(Level.DEBUG, "added spatial for {0} in {1}", item, this); //NON-NLS + if (spatial != null) + itemNode.attachChild(spatial); + } + + /** + * Removed every item + */ + public void clear() { + LOGGER.log(Level.DEBUG, "clear"); //NON-NLS + itemMap.clear(); + itemNode.detachAllChildren(); + } + + /** + * Creates the spatial for the specified item. Implementations may decide to return null. This + * means that the item shall not be represented in the scene graph. + * + * @param item the item whose representing spatial is asked for + * @return the spatial of the item, or null if the item shall not be represented by a spatial. + */ + protected abstract Spatial translate(I item); +} diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.fnt b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.fnt new file mode 100644 index 0000000..85f5d76 --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.fnt @@ -0,0 +1,524 @@ +info face="Metropolis Bold" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2 +common lineHeight=33 base=26 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="Metropolis-Bold-32.png" +chars count=170 +char id=0 x=0 y=0 width=14 height=35 xoffset=1 yoffset=-1 xadvance=16 page=0 chnl=0 +char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0 +char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=9 page=0 chnl=0 +char id=33 x=359 y=117 width=9 height=24 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=0 +char id=34 x=44 y=165 width=16 height=12 xoffset=0 yoffset=3 xadvance=17 page=0 chnl=0 +char id=35 x=422 y=117 width=23 height=24 xoffset=-1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=36 x=281 y=35 width=22 height=29 xoffset=-1 yoffset=1 xadvance=20 page=0 chnl=0 +char id=37 x=395 y=117 width=27 height=24 xoffset=0 yoffset=3 xadvance=27 page=0 chnl=0 +char id=38 x=280 y=66 width=23 height=25 xoffset=-1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=39 x=503 y=141 width=8 height=12 xoffset=0 yoffset=3 xadvance=9 page=0 chnl=0 +char id=40 x=48 y=35 width=13 height=30 xoffset=0 yoffset=3 xadvance=12 page=0 chnl=0 +char id=41 x=61 y=35 width=12 height=30 xoffset=0 yoffset=3 xadvance=12 page=0 chnl=0 +char id=42 x=490 y=141 width=13 height=16 xoffset=0 yoffset=1 xadvance=13 page=0 chnl=0 +char id=43 x=471 y=141 width=19 height=18 xoffset=0 yoffset=6 xadvance=19 page=0 chnl=0 +char id=44 x=16 y=165 width=9 height=13 xoffset=0 yoffset=19 xadvance=9 page=0 chnl=0 +char id=45 x=142 y=165 width=12 height=6 xoffset=0 yoffset=14 xadvance=12 page=0 chnl=0 +char id=46 x=85 y=165 width=9 height=8 xoffset=0 yoffset=19 xadvance=9 page=0 chnl=0 +char id=47 x=243 y=35 width=19 height=29 xoffset=-2 yoffset=1 xadvance=15 page=0 chnl=0 +char id=48 x=336 y=117 width=23 height=24 xoffset=0 yoffset=3 xadvance=23 page=0 chnl=0 +char id=49 x=201 y=117 width=13 height=24 xoffset=-1 yoffset=3 xadvance=13 page=0 chnl=0 +char id=50 x=214 y=117 width=19 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=51 x=239 y=66 width=21 height=25 xoffset=-1 yoffset=3 xadvance=19 page=0 chnl=0 +char id=52 x=233 y=117 width=22 height=24 xoffset=-1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=53 x=260 y=66 width=20 height=25 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=54 x=255 y=117 width=21 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=55 x=276 y=117 width=19 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=56 x=295 y=117 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=57 x=315 y=117 width=21 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=58 x=375 y=141 width=9 height=19 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0 +char id=59 x=386 y=117 width=9 height=24 xoffset=0 yoffset=8 xadvance=9 page=0 chnl=0 +char id=60 x=384 y=141 width=18 height=19 xoffset=0 yoffset=6 xadvance=19 page=0 chnl=0 +char id=61 x=25 y=165 width=19 height=13 xoffset=0 yoffset=9 xadvance=19 page=0 chnl=0 +char id=62 x=402 y=141 width=18 height=19 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=0 +char id=63 x=368 y=117 width=18 height=24 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=64 x=303 y=35 width=28 height=28 xoffset=0 yoffset=3 xadvance=28 page=0 chnl=0 +char id=65 x=21 y=92 width=26 height=24 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=66 x=47 y=92 width=22 height=24 xoffset=1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=67 x=69 y=92 width=23 height=24 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=68 x=92 y=92 width=23 height=24 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=69 x=115 y=92 width=20 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=70 x=135 y=92 width=20 height=24 xoffset=1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=71 x=155 y=92 width=23 height=24 xoffset=0 yoffset=3 xadvance=24 page=0 chnl=0 +char id=72 x=178 y=92 width=22 height=24 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=73 x=200 y=92 width=7 height=24 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0 +char id=74 x=207 y=92 width=18 height=24 xoffset=-1 yoffset=3 xadvance=17 page=0 chnl=0 +char id=75 x=225 y=92 width=23 height=24 xoffset=1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=76 x=248 y=92 width=18 height=24 xoffset=1 yoffset=3 xadvance=19 page=0 chnl=0 +char id=77 x=266 y=92 width=26 height=24 xoffset=1 yoffset=3 xadvance=28 page=0 chnl=0 +char id=78 x=292 y=92 width=23 height=24 xoffset=1 yoffset=3 xadvance=25 page=0 chnl=0 +char id=79 x=315 y=92 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=80 x=341 y=92 width=21 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=81 x=362 y=92 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=82 x=388 y=92 width=21 height=24 xoffset=1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=83 x=409 y=92 width=22 height=24 xoffset=-1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=84 x=431 y=92 width=21 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=85 x=452 y=92 width=23 height=24 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=86 x=475 y=92 width=26 height=24 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=87 x=0 y=117 width=36 height=24 xoffset=-1 yoffset=3 xadvance=35 page=0 chnl=0 +char id=88 x=36 y=117 width=25 height=24 xoffset=-1 yoffset=3 xadvance=23 page=0 chnl=0 +char id=89 x=61 y=117 width=25 height=24 xoffset=-1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=90 x=86 y=117 width=21 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=91 x=73 y=35 width=11 height=30 xoffset=1 yoffset=2 xadvance=12 page=0 chnl=0 +char id=92 x=262 y=35 width=19 height=29 xoffset=-2 yoffset=1 xadvance=15 page=0 chnl=0 +char id=93 x=84 y=35 width=12 height=30 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=0 +char id=94 x=60 y=165 width=16 height=11 xoffset=0 yoffset=3 xadvance=16 page=0 chnl=0 +char id=95 x=154 y=165 width=22 height=5 xoffset=-2 yoffset=27 xadvance=19 page=0 chnl=0 +char id=96 x=94 y=165 width=10 height=7 xoffset=1 yoffset=2 xadvance=12 page=0 chnl=0 +char id=97 x=128 y=141 width=18 height=19 xoffset=0 yoffset=8 xadvance=19 page=0 chnl=0 +char id=98 x=107 y=117 width=20 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=99 x=146 y=141 width=18 height=19 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0 +char id=100 x=127 y=117 width=21 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=101 x=164 y=141 width=19 height=19 xoffset=0 yoffset=8 xadvance=19 page=0 chnl=0 +char id=102 x=357 y=35 width=14 height=26 xoffset=-1 yoffset=1 xadvance=12 page=0 chnl=0 +char id=103 x=157 y=66 width=20 height=25 xoffset=0 yoffset=8 xadvance=21 page=0 chnl=0 +char id=104 x=148 y=117 width=19 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=105 x=349 y=35 width=8 height=27 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=0 +char id=106 x=14 y=0 width=12 height=33 xoffset=-3 yoffset=0 xadvance=9 page=0 chnl=0 +char id=107 x=167 y=117 width=20 height=24 xoffset=0 yoffset=3 xadvance=18 page=0 chnl=0 +char id=108 x=501 y=92 width=7 height=24 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0 +char id=109 x=183 y=141 width=29 height=19 xoffset=0 yoffset=8 xadvance=30 page=0 chnl=0 +char id=110 x=212 y=141 width=19 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=111 x=231 y=141 width=21 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=112 x=177 y=66 width=20 height=25 xoffset=1 yoffset=8 xadvance=21 page=0 chnl=0 +char id=113 x=197 y=66 width=21 height=25 xoffset=0 yoffset=8 xadvance=21 page=0 chnl=0 +char id=114 x=491 y=117 width=13 height=20 xoffset=1 yoffset=7 xadvance=13 page=0 chnl=0 +char id=115 x=252 y=141 width=17 height=19 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0 +char id=116 x=187 y=117 width=14 height=24 xoffset=-1 yoffset=3 xadvance=13 page=0 chnl=0 +char id=117 x=269 y=141 width=19 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=118 x=288 y=141 width=21 height=19 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0 +char id=119 x=309 y=141 width=29 height=19 xoffset=-1 yoffset=8 xadvance=27 page=0 chnl=0 +char id=120 x=338 y=141 width=20 height=19 xoffset=-1 yoffset=8 xadvance=18 page=0 chnl=0 +char id=121 x=218 y=66 width=21 height=25 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0 +char id=122 x=358 y=141 width=17 height=19 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=0 +char id=123 x=96 y=35 width=13 height=30 xoffset=0 yoffset=3 xadvance=13 page=0 chnl=0 +char id=124 x=502 y=0 width=6 height=29 xoffset=2 yoffset=1 xadvance=10 page=0 chnl=0 +char id=125 x=109 y=35 width=13 height=30 xoffset=0 yoffset=3 xadvance=13 page=0 chnl=0 +char id=126 x=104 y=165 width=14 height=7 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=0 +char id=161 x=497 y=35 width=8 height=25 xoffset=1 yoffset=8 xadvance=10 page=0 chnl=0 +char id=162 x=303 y=66 width=18 height=25 xoffset=0 yoffset=5 xadvance=18 page=0 chnl=0 +char id=163 x=445 y=117 width=21 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=165 x=466 y=117 width=25 height=24 xoffset=-1 yoffset=3 xadvance=22 page=0 chnl=0 +char id=168 x=118 y=165 width=14 height=7 xoffset=1 yoffset=2 xadvance=15 page=0 chnl=0 +char id=175 x=176 y=165 width=14 height=5 xoffset=1 yoffset=4 xadvance=15 page=0 chnl=0 +char id=180 x=132 y=165 width=10 height=7 xoffset=1 yoffset=2 xadvance=12 page=0 chnl=0 +char id=184 x=76 y=165 width=9 height=9 xoffset=1 yoffset=25 xadvance=11 page=0 chnl=0 +char id=191 x=321 y=66 width=18 height=25 xoffset=-1 yoffset=8 xadvance=16 page=0 chnl=0 +char id=192 x=94 y=0 width=26 height=31 xoffset=-1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=193 x=120 y=0 width=26 height=31 xoffset=-1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=194 x=146 y=0 width=26 height=31 xoffset=-1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=195 x=172 y=0 width=26 height=31 xoffset=-1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=196 x=198 y=0 width=26 height=31 xoffset=-1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=197 x=26 y=0 width=26 height=33 xoffset=-1 yoffset=-6 xadvance=24 page=0 chnl=0 +char id=198 x=0 y=141 width=36 height=24 xoffset=-1 yoffset=3 xadvance=34 page=0 chnl=0 +char id=199 x=122 y=35 width=23 height=30 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=200 x=224 y=0 width=20 height=31 xoffset=1 yoffset=-4 xadvance=21 page=0 chnl=0 +char id=201 x=244 y=0 width=20 height=31 xoffset=1 yoffset=-4 xadvance=21 page=0 chnl=0 +char id=202 x=264 y=0 width=20 height=31 xoffset=1 yoffset=-4 xadvance=21 page=0 chnl=0 +char id=203 x=284 y=0 width=20 height=31 xoffset=1 yoffset=-4 xadvance=21 page=0 chnl=0 +char id=204 x=304 y=0 width=12 height=31 xoffset=-3 yoffset=-4 xadvance=9 page=0 chnl=0 +char id=205 x=316 y=0 width=12 height=31 xoffset=1 yoffset=-4 xadvance=9 page=0 chnl=0 +char id=206 x=328 y=0 width=13 height=31 xoffset=-2 yoffset=-4 xadvance=9 page=0 chnl=0 +char id=207 x=341 y=0 width=17 height=31 xoffset=-3 yoffset=-4 xadvance=9 page=0 chnl=0 +char id=208 x=36 y=141 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=209 x=358 y=0 width=23 height=31 xoffset=1 yoffset=-4 xadvance=25 page=0 chnl=0 +char id=210 x=381 y=0 width=26 height=31 xoffset=0 yoffset=-4 xadvance=26 page=0 chnl=0 +char id=211 x=407 y=0 width=26 height=31 xoffset=0 yoffset=-4 xadvance=26 page=0 chnl=0 +char id=212 x=145 y=35 width=26 height=30 xoffset=0 yoffset=-3 xadvance=26 page=0 chnl=0 +char id=213 x=171 y=35 width=26 height=30 xoffset=0 yoffset=-3 xadvance=26 page=0 chnl=0 +char id=214 x=197 y=35 width=26 height=30 xoffset=0 yoffset=-3 xadvance=26 page=0 chnl=0 +char id=215 x=0 y=165 width=16 height=16 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0 +char id=216 x=62 y=141 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=217 x=433 y=0 width=23 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=218 x=456 y=0 width=23 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=219 x=479 y=0 width=23 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=220 x=0 y=35 width=23 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=221 x=23 y=35 width=25 height=31 xoffset=-1 yoffset=-4 xadvance=22 page=0 chnl=0 +char id=222 x=88 y=141 width=21 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=223 x=339 y=66 width=19 height=25 xoffset=1 yoffset=2 xadvance=20 page=0 chnl=0 +char id=224 x=371 y=35 width=18 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=225 x=389 y=35 width=18 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=226 x=358 y=66 width=18 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=227 x=376 y=66 width=18 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=228 x=394 y=66 width=18 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=229 x=331 y=35 width=18 height=28 xoffset=0 yoffset=-1 xadvance=19 page=0 chnl=0 +char id=230 x=420 y=141 width=30 height=19 xoffset=0 yoffset=8 xadvance=30 page=0 chnl=0 +char id=231 x=412 y=66 width=18 height=25 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0 +char id=232 x=407 y=35 width=19 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=233 x=426 y=35 width=19 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=234 x=430 y=66 width=19 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=235 x=449 y=66 width=19 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=236 x=445 y=35 width=12 height=26 xoffset=-3 yoffset=1 xadvance=9 page=0 chnl=0 +char id=237 x=457 y=35 width=12 height=26 xoffset=1 yoffset=1 xadvance=9 page=0 chnl=0 +char id=238 x=469 y=35 width=13 height=26 xoffset=-2 yoffset=1 xadvance=9 page=0 chnl=0 +char id=239 x=482 y=35 width=15 height=26 xoffset=-3 yoffset=1 xadvance=9 page=0 chnl=0 +char id=240 x=0 y=66 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=241 x=20 y=66 width=19 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=242 x=39 y=66 width=21 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=243 x=60 y=66 width=21 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=244 x=468 y=66 width=21 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=245 x=489 y=66 width=21 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=246 x=0 y=92 width=21 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=247 x=109 y=141 width=19 height=20 xoffset=0 yoffset=5 xadvance=19 page=0 chnl=0 +char id=248 x=450 y=141 width=21 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=249 x=81 y=66 width=19 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=250 x=100 y=66 width=19 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=251 x=119 y=66 width=19 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=252 x=138 y=66 width=19 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=253 x=52 y=0 width=21 height=32 xoffset=-1 yoffset=1 xadvance=19 page=0 chnl=0 +char id=254 x=223 y=35 width=20 height=30 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=255 x=73 y=0 width=21 height=32 xoffset=-1 yoffset=1 xadvance=19 page=0 chnl=0 +kernings count=349 +kerning first=244 second=119 amount=-1 +kerning first=86 second=225 amount=-1 +kerning first=119 second=245 amount=-1 +kerning first=253 second=243 amount=-1 +kerning first=111 second=89 amount=-4 +kerning first=248 second=86 amount=-2 +kerning first=84 second=211 amount=-1 +kerning first=84 second=194 amount=-2 +kerning first=221 second=235 amount=-4 +kerning first=192 second=221 amount=-1 +kerning first=121 second=44 amount=-3 +kerning first=65 second=89 amount=-1 +kerning first=75 second=216 amount=-1 +kerning first=87 second=248 amount=-2 +kerning first=89 second=242 amount=-4 +kerning first=221 second=111 amount=-4 +kerning first=233 second=221 amount=-4 +kerning first=75 second=195 amount=1 +kerning first=234 second=86 amount=-2 +kerning first=121 second=233 amount=-1 +kerning first=119 second=235 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=76 second=86 amount=-3 +kerning first=246 second=221 amount=-4 +kerning first=86 second=198 amount=-3 +kerning first=118 second=242 amount=-1 +kerning first=89 second=194 amount=-1 +kerning first=92 second=92 amount=-4 +kerning first=119 second=111 amount=-1 +kerning first=86 second=232 amount=-2 +kerning first=194 second=221 amount=-1 +kerning first=89 second=101 amount=-4 +kerning first=87 second=234 amount=-2 +kerning first=192 second=86 amount=-3 +kerning first=86 second=246 amount=-2 +kerning first=233 second=86 amount=-2 +kerning first=197 second=84 amount=-2 +kerning first=92 second=47 amount=3 +kerning first=75 second=193 amount=1 +kerning first=118 second=101 amount=-1 +kerning first=243 second=221 amount=-4 +kerning first=245 second=87 amount=-2 +kerning first=246 second=86 amount=-2 +kerning first=84 second=197 amount=-2 +kerning first=121 second=46 amount=-3 +kerning first=193 second=221 amount=-1 +kerning first=197 second=87 amount=-1 +kerning first=194 second=86 amount=-3 +kerning first=89 second=99 amount=-2 +kerning first=87 second=231 amount=-2 +kerning first=235 second=87 amount=-2 +kerning first=195 second=71 amount=-1 +kerning first=99 second=89 amount=-4 +kerning first=89 second=197 amount=-1 +kerning first=121 second=244 amount=-1 +kerning first=221 second=196 amount=-1 +kerning first=243 second=86 amount=-2 +kerning first=68 second=196 amount=-1 +kerning first=84 second=65 amount=-2 +kerning first=221 second=233 amount=-4 +kerning first=86 second=245 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=75 second=210 amount=-1 +kerning first=89 second=243 amount=-4 +kerning first=193 second=86 amount=-3 +kerning first=87 second=242 amount=-2 +kerning first=231 second=221 amount=-4 +kerning first=255 second=232 amount=-1 +kerning first=230 second=89 amount=-4 +kerning first=196 second=84 amount=-2 +kerning first=119 second=233 amount=-1 +kerning first=255 second=246 amount=-1 +kerning first=89 second=65 amount=-1 +kerning first=118 second=243 amount=-1 +kerning first=242 second=87 amount=-2 +kerning first=87 second=194 amount=-1 +kerning first=118 second=228 amount=-1 +kerning first=86 second=235 amount=-2 +kerning first=87 second=101 amount=-2 +kerning first=196 second=87 amount=-1 +kerning first=230 second=119 amount=-1 +kerning first=213 second=87 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=253 second=232 amount=-1 +kerning first=101 second=87 amount=-2 +kerning first=192 second=71 amount=-1 +kerning first=245 second=118 amount=-1 +kerning first=231 second=86 amount=-2 +kerning first=121 second=248 amount=-1 +kerning first=86 second=226 amount=-1 +kerning first=221 second=195 amount=-1 +kerning first=253 second=246 amount=-1 +kerning first=68 second=195 amount=-1 +kerning first=84 second=214 amount=-1 +kerning first=244 second=87 amount=-2 +kerning first=84 second=192 amount=-2 +kerning first=232 second=89 amount=-4 +kerning first=119 second=46 amount=-3 +kerning first=221 second=244 amount=-4 +kerning first=47 second=47 amount=-4 +kerning first=87 second=99 amount=-2 +kerning first=121 second=234 amount=-1 +kerning first=194 second=71 amount=-1 +kerning first=65 second=84 amount=-2 +kerning first=255 second=245 amount=-1 +kerning first=89 second=192 amount=-1 +kerning first=87 second=197 amount=-1 +kerning first=119 second=244 amount=-1 +kerning first=221 second=193 amount=-1 +kerning first=111 second=87 amount=-2 +kerning first=118 second=227 amount=-1 +kerning first=68 second=193 amount=-1 +kerning first=195 second=89 amount=-1 +kerning first=232 second=119 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=65 second=87 amount=-1 +kerning first=75 second=211 amount=-1 +kerning first=87 second=243 amount=-2 +kerning first=210 second=87 amount=-1 +kerning first=255 second=235 amount=-1 +kerning first=86 second=229 amount=-1 +kerning first=75 second=194 amount=1 +kerning first=193 second=71 amount=-1 +kerning first=242 second=118 amount=-1 +kerning first=253 second=245 amount=-1 +kerning first=248 second=89 amount=-4 +kerning first=255 second=111 amount=-1 +kerning first=84 second=213 amount=-1 +kerning first=86 second=196 amount=-3 +kerning first=84 second=198 amount=-2 +kerning first=87 second=65 amount=-1 +kerning first=118 second=225 amount=-1 +kerning first=221 second=248 amount=-4 +kerning first=86 second=233 amount=-2 +kerning first=234 second=89 amount=-4 +kerning first=212 second=87 amount=-1 +kerning first=248 second=119 amount=-1 +kerning first=253 second=235 amount=-1 +kerning first=244 second=118 amount=-1 +kerning first=89 second=198 amount=-1 +kerning first=121 second=242 amount=-1 +kerning first=86 second=97 amount=-1 +kerning first=119 second=248 amount=-1 +kerning first=253 second=111 amount=-1 +kerning first=84 second=79 amount=-1 +kerning first=89 second=232 amount=-4 +kerning first=221 second=234 amount=-4 +kerning first=192 second=89 amount=-1 +kerning first=234 second=119 amount=-1 +kerning first=89 second=246 amount=-4 +kerning first=233 second=89 amount=-4 +kerning first=75 second=197 amount=1 +kerning first=79 second=87 amount=-1 +kerning first=118 second=232 amount=-1 +kerning first=121 second=101 amount=-1 +kerning first=119 second=234 amount=-1 +kerning first=99 second=87 amount=-2 +kerning first=245 second=221 amount=-4 +kerning first=111 second=118 amount=-1 +kerning first=246 second=89 amount=-4 +kerning first=86 second=195 amount=-3 +kerning first=118 second=246 amount=-1 +kerning first=87 second=192 amount=-1 +kerning first=197 second=221 amount=-1 +kerning first=194 second=89 amount=-1 +kerning first=233 second=119 amount=-1 +kerning first=255 second=44 amount=-3 +kerning first=221 second=231 amount=-2 +kerning first=235 second=221 amount=-4 +kerning first=86 second=244 amount=-2 +kerning first=255 second=233 amount=-1 +kerning first=86 second=224 amount=-1 +kerning first=246 second=119 amount=-1 +kerning first=75 second=65 amount=1 +kerning first=230 second=87 amount=-2 +kerning first=243 second=89 amount=-4 +kerning first=245 second=86 amount=-2 +kerning first=86 second=193 amount=-3 +kerning first=89 second=245 amount=-4 +kerning first=193 second=89 amount=-1 +kerning first=253 second=44 amount=-3 +kerning first=197 second=86 amount=-3 +kerning first=221 second=242 amount=-4 +kerning first=235 second=86 amount=-2 +kerning first=253 second=233 amount=-1 +kerning first=243 second=119 amount=-1 +kerning first=118 second=245 amount=-1 +kerning first=242 second=221 amount=-4 +kerning first=87 second=198 amount=-1 +kerning first=121 second=243 amount=-1 +kerning first=221 second=194 amount=-1 +kerning first=119 second=242 amount=-1 +kerning first=68 second=194 amount=-1 +kerning first=255 second=46 amount=-3 +kerning first=89 second=235 amount=-4 +kerning first=87 second=232 amount=-2 +kerning first=196 second=221 amount=-1 +kerning first=221 second=101 amount=-4 +kerning first=86 second=248 amount=-2 +kerning first=75 second=214 amount=-1 +kerning first=101 second=221 amount=-4 +kerning first=89 second=111 amount=-4 +kerning first=87 second=246 amount=-2 +kerning first=232 second=87 amount=-2 +kerning first=231 second=89 amount=-4 +kerning first=195 second=84 amount=-2 +kerning first=86 second=230 amount=-1 +kerning first=75 second=192 amount=1 +kerning first=118 second=235 amount=-1 +kerning first=119 second=101 amount=-1 +kerning first=255 second=244 amount=-1 +kerning first=244 second=221 amount=-4 +kerning first=118 second=111 amount=-1 +kerning first=242 second=86 amount=-2 +kerning first=118 second=226 amount=-1 +kerning first=253 second=46 amount=-3 +kerning first=86 second=234 amount=-2 +kerning first=195 second=87 amount=-1 +kerning first=196 second=86 amount=-3 +kerning first=221 second=99 amount=-2 +kerning first=101 second=86 amount=-2 +kerning first=221 second=197 amount=-1 +kerning first=253 second=244 amount=-1 +kerning first=118 second=100 amount=-1 +kerning first=111 second=221 amount=-4 +kerning first=248 second=87 amount=-2 +kerning first=84 second=212 amount=-1 +kerning first=68 second=197 amount=-1 +kerning first=244 second=86 amount=-2 +kerning first=76 second=84 amount=-1 +kerning first=84 second=196 amount=-2 +kerning first=65 second=221 amount=-1 +kerning first=75 second=213 amount=-1 +kerning first=87 second=245 amount=-2 +kerning first=221 second=243 amount=-4 +kerning first=86 second=231 amount=-2 +kerning first=75 second=198 amount=1 +kerning first=234 second=87 amount=-2 +kerning first=197 second=71 amount=-1 +kerning first=192 second=84 amount=-2 +kerning first=255 second=248 amount=-1 +kerning first=89 second=196 amount=-1 +kerning first=221 second=65 amount=-1 +kerning first=119 second=243 amount=-1 +kerning first=118 second=229 amount=-1 +kerning first=111 second=86 amount=-2 +kerning first=68 second=65 amount=-1 +kerning first=89 second=233 amount=-4 +kerning first=87 second=235 amount=-2 +kerning first=192 second=87 amount=-1 +kerning first=118 second=44 amount=-3 +kerning first=65 second=86 amount=-3 +kerning first=86 second=242 amount=-2 +kerning first=75 second=79 amount=-1 +kerning first=87 second=111 amount=-2 +kerning first=233 second=87 amount=-2 +kerning first=194 second=84 amount=-2 +kerning first=253 second=248 amount=-1 +kerning first=255 second=234 amount=-1 +kerning first=118 second=233 amount=-1 +kerning first=84 second=216 amount=-1 +kerning first=246 second=87 amount=-2 +kerning first=86 second=194 amount=-3 +kerning first=84 second=195 amount=-2 +kerning first=118 second=97 amount=-1 +kerning first=86 second=101 amount=-2 +kerning first=194 second=87 amount=-1 +kerning first=216 second=87 amount=-1 +kerning first=99 second=221 amount=-4 +kerning first=121 second=232 amount=-1 +kerning first=253 second=234 amount=-1 +kerning first=196 second=71 amount=-1 +kerning first=248 second=118 amount=-1 +kerning first=193 second=84 amount=-2 +kerning first=89 second=195 amount=-1 +kerning first=121 second=246 amount=-1 +kerning first=221 second=192 amount=-1 +kerning first=243 second=87 amount=-2 +kerning first=68 second=192 amount=-1 +kerning first=84 second=193 amount=-2 +kerning first=118 second=46 amount=-3 +kerning first=89 second=244 amount=-4 +kerning first=193 second=87 amount=-1 +kerning first=86 second=99 amount=-2 +kerning first=230 second=221 amount=-4 +kerning first=99 second=86 amount=-2 +kerning first=255 second=242 amount=-1 +kerning first=245 second=89 amount=-4 +kerning first=86 second=197 amount=-3 +kerning first=89 second=193 amount=-1 +kerning first=87 second=196 amount=-1 +kerning first=118 second=244 amount=-1 +kerning first=118 second=224 amount=-1 +kerning first=197 second=89 amount=-1 +kerning first=87 second=233 amount=-2 +kerning first=235 second=89 amount=-4 +kerning first=86 second=243 amount=-2 +kerning first=214 second=87 amount=-1 +kerning first=245 second=119 amount=-1 +kerning first=255 second=101 amount=-1 +kerning first=231 second=87 amount=-2 +kerning first=246 second=118 amount=-1 +kerning first=65 second=71 amount=-1 +kerning first=86 second=228 amount=-1 +kerning first=221 second=198 amount=-1 +kerning first=121 second=245 amount=-1 +kerning first=230 second=86 amount=-2 +kerning first=253 second=242 amount=-1 +kerning first=68 second=198 amount=-1 +kerning first=84 second=210 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=221 second=232 amount=-4 +kerning first=235 second=119 amount=-1 +kerning first=89 second=248 amount=-4 +kerning first=232 second=221 amount=-4 +kerning first=221 second=246 amount=-4 +kerning first=211 second=87 amount=-1 +kerning first=121 second=235 amount=-1 +kerning first=119 second=232 amount=-1 +kerning first=253 second=101 amount=-1 +kerning first=243 second=118 amount=-1 +kerning first=118 second=248 amount=-1 +kerning first=242 second=89 amount=-4 +kerning first=87 second=195 amount=-1 +kerning first=121 second=111 amount=-1 +kerning first=119 second=246 amount=-1 +kerning first=118 second=230 amount=-1 +kerning first=195 second=221 amount=-1 +kerning first=89 second=234 amount=-4 +kerning first=196 second=89 amount=-1 +kerning first=82 second=221 amount=-1 +kerning first=75 second=212 amount=-1 +kerning first=101 second=89 amount=-4 +kerning first=87 second=244 amount=-2 +kerning first=232 second=86 amount=-2 +kerning first=86 second=227 amount=-1 +kerning first=75 second=196 amount=1 +kerning first=242 second=119 amount=-1 +kerning first=118 second=234 amount=-1 +kerning first=248 second=221 amount=-4 +kerning first=255 second=243 amount=-1 +kerning first=244 second=89 amount=-4 +kerning first=86 second=192 amount=-3 +kerning first=87 second=193 amount=-1 +kerning first=221 second=245 amount=-4 +kerning first=101 second=119 amount=-1 +kerning first=195 second=86 amount=-3 +kerning first=89 second=231 amount=-2 +kerning first=234 second=221 amount=-4 diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.png b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.png new file mode 100644 index 0000000..6f75242 Binary files /dev/null and b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-32.png differ diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt new file mode 100644 index 0000000..4d808ea --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt @@ -0,0 +1,545 @@ +info face="Metropolis Bold" size=42 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2 +common lineHeight=43 base=34 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="Metropolis-Bold-42.png" +chars count=170 +char id=0 x=0 y=0 width=17 height=44 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=0 +char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0 +char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=12 page=0 chnl=0 +char id=33 x=467 y=155 width=11 height=32 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=0 +char id=34 x=397 y=251 width=20 height=15 xoffset=1 yoffset=4 xadvance=22 page=0 chnl=0 +char id=35 x=144 y=220 width=29 height=31 xoffset=0 yoffset=4 xadvance=28 page=0 chnl=0 +char id=36 x=426 y=44 width=27 height=39 xoffset=-1 yoffset=0 xadvance=27 page=0 chnl=0 +char id=37 x=51 y=155 width=35 height=33 xoffset=0 yoffset=3 xadvance=35 page=0 chnl=0 +char id=38 x=322 y=84 width=29 height=34 xoffset=0 yoffset=3 xadvance=29 page=0 chnl=0 +char id=39 x=417 y=251 width=9 height=15 xoffset=1 yoffset=4 xadvance=12 page=0 chnl=0 +char id=40 x=362 y=44 width=15 height=39 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=41 x=377 y=44 width=15 height=39 xoffset=0 yoffset=3 xadvance=16 page=0 chnl=0 +char id=42 x=346 y=251 width=17 height=18 xoffset=0 yoffset=2 xadvance=17 page=0 chnl=0 +char id=43 x=302 y=251 width=23 height=23 xoffset=1 yoffset=8 xadvance=25 page=0 chnl=0 +char id=44 x=363 y=251 width=11 height=16 xoffset=1 yoffset=26 xadvance=12 page=0 chnl=0 +char id=45 x=14 y=277 width=15 height=8 xoffset=0 yoffset=18 xadvance=15 page=0 chnl=0 +char id=46 x=458 y=251 width=10 height=10 xoffset=1 yoffset=26 xadvance=12 page=0 chnl=0 +char id=47 x=0 y=84 width=25 height=37 xoffset=-3 yoffset=1 xadvance=19 page=0 chnl=0 +char id=48 x=0 y=155 width=29 height=33 xoffset=0 yoffset=3 xadvance=30 page=0 chnl=0 +char id=49 x=75 y=220 width=17 height=31 xoffset=-1 yoffset=4 xadvance=17 page=0 chnl=0 +char id=50 x=416 y=155 width=25 height=32 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=51 x=402 y=121 width=25 height=33 xoffset=0 yoffset=3 xadvance=25 page=0 chnl=0 +char id=52 x=92 y=220 width=27 height=31 xoffset=0 yoffset=4 xadvance=27 page=0 chnl=0 +char id=53 x=441 y=155 width=26 height=32 xoffset=0 yoffset=4 xadvance=26 page=0 chnl=0 +char id=54 x=427 y=121 width=27 height=33 xoffset=0 yoffset=3 xadvance=27 page=0 chnl=0 +char id=55 x=119 y=220 width=25 height=31 xoffset=0 yoffset=4 xadvance=25 page=0 chnl=0 +char id=56 x=454 y=121 width=26 height=33 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=57 x=480 y=121 width=27 height=33 xoffset=0 yoffset=3 xadvance=27 page=0 chnl=0 +char id=58 x=112 y=251 width=10 height=25 xoffset=1 yoffset=11 xadvance=12 page=0 chnl=0 +char id=59 x=499 y=155 width=11 height=31 xoffset=1 yoffset=11 xadvance=12 page=0 chnl=0 +char id=60 x=234 y=251 width=22 height=24 xoffset=1 yoffset=8 xadvance=25 page=0 chnl=0 +char id=61 x=374 y=251 width=23 height=16 xoffset=1 yoffset=12 xadvance=25 page=0 chnl=0 +char id=62 x=256 y=251 width=23 height=24 xoffset=1 yoffset=8 xadvance=25 page=0 chnl=0 +char id=63 x=29 y=155 width=22 height=33 xoffset=-1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=64 x=50 y=84 width=37 height=36 xoffset=0 yoffset=4 xadvance=37 page=0 chnl=0 +char id=65 x=28 y=188 width=33 height=31 xoffset=-1 yoffset=4 xadvance=32 page=0 chnl=0 +char id=66 x=61 y=188 width=27 height=31 xoffset=2 yoffset=4 xadvance=29 page=0 chnl=0 +char id=67 x=96 y=121 width=30 height=33 xoffset=0 yoffset=3 xadvance=29 page=0 chnl=0 +char id=68 x=88 y=188 width=30 height=31 xoffset=2 yoffset=4 xadvance=32 page=0 chnl=0 +char id=69 x=118 y=188 width=26 height=31 xoffset=1 yoffset=4 xadvance=27 page=0 chnl=0 +char id=70 x=144 y=188 width=26 height=31 xoffset=1 yoffset=4 xadvance=27 page=0 chnl=0 +char id=71 x=126 y=121 width=30 height=33 xoffset=0 yoffset=3 xadvance=31 page=0 chnl=0 +char id=72 x=170 y=188 width=29 height=31 xoffset=1 yoffset=4 xadvance=31 page=0 chnl=0 +char id=73 x=489 y=155 width=10 height=31 xoffset=1 yoffset=4 xadvance=12 page=0 chnl=0 +char id=74 x=289 y=155 width=23 height=32 xoffset=-1 yoffset=4 xadvance=23 page=0 chnl=0 +char id=75 x=199 y=188 width=29 height=31 xoffset=2 yoffset=4 xadvance=29 page=0 chnl=0 +char id=76 x=228 y=188 width=24 height=31 xoffset=1 yoffset=4 xadvance=24 page=0 chnl=0 +char id=77 x=252 y=188 width=33 height=31 xoffset=2 yoffset=4 xadvance=36 page=0 chnl=0 +char id=78 x=285 y=188 width=29 height=31 xoffset=2 yoffset=4 xadvance=33 page=0 chnl=0 +char id=79 x=156 y=121 width=34 height=33 xoffset=0 yoffset=3 xadvance=34 page=0 chnl=0 +char id=80 x=314 y=188 width=27 height=31 xoffset=1 yoffset=4 xadvance=28 page=0 chnl=0 +char id=81 x=190 y=121 width=34 height=33 xoffset=0 yoffset=3 xadvance=34 page=0 chnl=0 +char id=82 x=341 y=188 width=28 height=31 xoffset=1 yoffset=4 xadvance=28 page=0 chnl=0 +char id=83 x=224 y=121 width=27 height=33 xoffset=-1 yoffset=3 xadvance=27 page=0 chnl=0 +char id=84 x=369 y=188 width=27 height=31 xoffset=0 yoffset=4 xadvance=27 page=0 chnl=0 +char id=85 x=312 y=155 width=29 height=32 xoffset=1 yoffset=4 xadvance=32 page=0 chnl=0 +char id=86 x=396 y=188 width=33 height=31 xoffset=-1 yoffset=4 xadvance=32 page=0 chnl=0 +char id=87 x=429 y=188 width=47 height=31 xoffset=-1 yoffset=4 xadvance=45 page=0 chnl=0 +char id=88 x=476 y=188 width=32 height=31 xoffset=-1 yoffset=4 xadvance=30 page=0 chnl=0 +char id=89 x=0 y=220 width=31 height=31 xoffset=-1 yoffset=4 xadvance=29 page=0 chnl=0 +char id=90 x=31 y=220 width=27 height=31 xoffset=0 yoffset=4 xadvance=28 page=0 chnl=0 +char id=91 x=453 y=44 width=15 height=38 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=92 x=25 y=84 width=25 height=37 xoffset=-2 yoffset=1 xadvance=19 page=0 chnl=0 +char id=93 x=468 y=44 width=15 height=38 xoffset=0 yoffset=3 xadvance=16 page=0 chnl=0 +char id=94 x=426 y=251 width=20 height=14 xoffset=0 yoffset=4 xadvance=21 page=0 chnl=0 +char id=95 x=47 y=277 width=28 height=6 xoffset=-2 yoffset=36 xadvance=25 page=0 chnl=0 +char id=96 x=486 y=251 width=14 height=9 xoffset=1 yoffset=2 xadvance=16 page=0 chnl=0 +char id=97 x=333 y=220 width=23 height=26 xoffset=0 yoffset=10 xadvance=24 page=0 chnl=0 +char id=98 x=251 y=121 width=27 height=33 xoffset=1 yoffset=3 xadvance=28 page=0 chnl=0 +char id=99 x=356 y=220 width=23 height=26 xoffset=0 yoffset=10 xadvance=23 page=0 chnl=0 +char id=100 x=278 y=121 width=27 height=33 xoffset=0 yoffset=3 xadvance=28 page=0 chnl=0 +char id=101 x=379 y=220 width=25 height=26 xoffset=0 yoffset=10 xadvance=25 page=0 chnl=0 +char id=102 x=305 y=121 width=17 height=33 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=0 +char id=103 x=322 y=121 width=26 height=33 xoffset=0 yoffset=10 xadvance=27 page=0 chnl=0 +char id=104 x=341 y=155 width=24 height=32 xoffset=1 yoffset=3 xadvance=26 page=0 chnl=0 +char id=105 x=312 y=84 width=10 height=34 xoffset=1 yoffset=1 xadvance=11 page=0 chnl=0 +char id=106 x=50 y=0 width=17 height=42 xoffset=-4 yoffset=1 xadvance=11 page=0 chnl=0 +char id=107 x=365 y=155 width=24 height=32 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=108 x=499 y=84 width=9 height=32 xoffset=1 yoffset=3 xadvance=11 page=0 chnl=0 +char id=109 x=27 y=251 width=37 height=25 xoffset=1 yoffset=10 xadvance=39 page=0 chnl=0 +char id=110 x=64 y=251 width=24 height=25 xoffset=1 yoffset=10 xadvance=26 page=0 chnl=0 +char id=111 x=404 y=220 width=27 height=26 xoffset=0 yoffset=10 xadvance=27 page=0 chnl=0 +char id=112 x=348 y=121 width=27 height=33 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 +char id=113 x=375 y=121 width=27 height=33 xoffset=0 yoffset=10 xadvance=28 page=0 chnl=0 +char id=114 x=491 y=220 width=17 height=25 xoffset=1 yoffset=10 xadvance=17 page=0 chnl=0 +char id=115 x=431 y=220 width=21 height=26 xoffset=0 yoffset=10 xadvance=21 page=0 chnl=0 +char id=116 x=58 y=220 width=17 height=31 xoffset=0 yoffset=5 xadvance=17 page=0 chnl=0 +char id=117 x=88 y=251 width=24 height=25 xoffset=1 yoffset=11 xadvance=26 page=0 chnl=0 +char id=118 x=122 y=251 width=27 height=24 xoffset=-1 yoffset=11 xadvance=25 page=0 chnl=0 +char id=119 x=149 y=251 width=37 height=24 xoffset=-1 yoffset=11 xadvance=35 page=0 chnl=0 +char id=120 x=186 y=251 width=26 height=24 xoffset=-1 yoffset=11 xadvance=24 page=0 chnl=0 +char id=121 x=389 y=155 width=27 height=32 xoffset=-1 yoffset=11 xadvance=25 page=0 chnl=0 +char id=122 x=212 y=251 width=22 height=24 xoffset=0 yoffset=11 xadvance=22 page=0 chnl=0 +char id=123 x=392 y=44 width=17 height=39 xoffset=0 yoffset=3 xadvance=17 page=0 chnl=0 +char id=124 x=503 y=0 width=7 height=37 xoffset=3 yoffset=1 xadvance=13 page=0 chnl=0 +char id=125 x=409 y=44 width=17 height=39 xoffset=0 yoffset=3 xadvance=17 page=0 chnl=0 +char id=126 x=468 y=251 width=18 height=10 xoffset=0 yoffset=14 xadvance=19 page=0 chnl=0 +char id=161 x=478 y=155 width=11 height=32 xoffset=1 yoffset=10 xadvance=13 page=0 chnl=0 +char id=162 x=173 y=220 width=23 height=31 xoffset=0 yoffset=8 xadvance=23 page=0 chnl=0 +char id=163 x=0 y=188 width=28 height=32 xoffset=0 yoffset=3 xadvance=27 page=0 chnl=0 +char id=165 x=196 y=220 width=31 height=31 xoffset=-1 yoffset=4 xadvance=29 page=0 chnl=0 +char id=168 x=29 y=277 width=18 height=8 xoffset=1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=175 x=75 y=277 width=18 height=6 xoffset=1 yoffset=5 xadvance=20 page=0 chnl=0 +char id=180 x=0 y=277 width=14 height=9 xoffset=1 yoffset=2 xadvance=16 page=0 chnl=0 +char id=184 x=446 y=251 width=12 height=11 xoffset=1 yoffset=32 xadvance=14 page=0 chnl=0 +char id=191 x=86 y=155 width=22 height=33 xoffset=0 yoffset=10 xadvance=21 page=0 chnl=0 +char id=192 x=437 y=0 width=33 height=40 xoffset=-1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=193 x=470 y=0 width=33 height=40 xoffset=-1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=194 x=0 y=44 width=33 height=40 xoffset=-1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=195 x=33 y=44 width=33 height=40 xoffset=-1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=196 x=66 y=44 width=33 height=40 xoffset=-1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=197 x=17 y=0 width=33 height=43 xoffset=-1 yoffset=-8 xadvance=32 page=0 chnl=0 +char id=198 x=227 y=220 width=46 height=31 xoffset=-1 yoffset=4 xadvance=45 page=0 chnl=0 +char id=199 x=169 y=0 width=30 height=41 xoffset=0 yoffset=3 xadvance=29 page=0 chnl=0 +char id=200 x=99 y=44 width=26 height=40 xoffset=1 yoffset=-5 xadvance=27 page=0 chnl=0 +char id=201 x=125 y=44 width=26 height=40 xoffset=1 yoffset=-5 xadvance=27 page=0 chnl=0 +char id=202 x=151 y=44 width=26 height=40 xoffset=1 yoffset=-5 xadvance=27 page=0 chnl=0 +char id=203 x=177 y=44 width=26 height=40 xoffset=1 yoffset=-5 xadvance=27 page=0 chnl=0 +char id=204 x=203 y=44 width=17 height=40 xoffset=-4 yoffset=-5 xadvance=12 page=0 chnl=0 +char id=205 x=220 y=44 width=17 height=40 xoffset=1 yoffset=-5 xadvance=12 page=0 chnl=0 +char id=206 x=237 y=44 width=18 height=40 xoffset=-2 yoffset=-5 xadvance=12 page=0 chnl=0 +char id=207 x=255 y=44 width=20 height=40 xoffset=-3 yoffset=-5 xadvance=12 page=0 chnl=0 +char id=208 x=273 y=220 width=33 height=31 xoffset=0 yoffset=4 xadvance=34 page=0 chnl=0 +char id=209 x=275 y=44 width=29 height=40 xoffset=2 yoffset=-5 xadvance=33 page=0 chnl=0 +char id=210 x=67 y=0 width=34 height=42 xoffset=0 yoffset=-6 xadvance=34 page=0 chnl=0 +char id=211 x=101 y=0 width=34 height=42 xoffset=0 yoffset=-6 xadvance=34 page=0 chnl=0 +char id=212 x=135 y=0 width=34 height=42 xoffset=0 yoffset=-6 xadvance=34 page=0 chnl=0 +char id=213 x=199 y=0 width=34 height=41 xoffset=0 yoffset=-5 xadvance=34 page=0 chnl=0 +char id=214 x=233 y=0 width=34 height=41 xoffset=0 yoffset=-5 xadvance=34 page=0 chnl=0 +char id=215 x=325 y=251 width=21 height=21 xoffset=1 yoffset=9 xadvance=24 page=0 chnl=0 +char id=216 x=108 y=155 width=34 height=33 xoffset=0 yoffset=3 xadvance=34 page=0 chnl=0 +char id=217 x=267 y=0 width=29 height=41 xoffset=1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=218 x=296 y=0 width=29 height=41 xoffset=1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=219 x=325 y=0 width=29 height=41 xoffset=1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=220 x=354 y=0 width=29 height=41 xoffset=1 yoffset=-5 xadvance=32 page=0 chnl=0 +char id=221 x=304 y=44 width=31 height=40 xoffset=-1 yoffset=-5 xadvance=29 page=0 chnl=0 +char id=222 x=306 y=220 width=27 height=31 xoffset=1 yoffset=4 xadvance=28 page=0 chnl=0 +char id=223 x=142 y=155 width=25 height=33 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=224 x=87 y=84 width=23 height=35 xoffset=0 yoffset=1 xadvance=24 page=0 chnl=0 +char id=225 x=110 y=84 width=23 height=35 xoffset=0 yoffset=1 xadvance=24 page=0 chnl=0 +char id=226 x=133 y=84 width=23 height=35 xoffset=0 yoffset=1 xadvance=24 page=0 chnl=0 +char id=227 x=351 y=84 width=23 height=34 xoffset=0 yoffset=2 xadvance=24 page=0 chnl=0 +char id=228 x=374 y=84 width=23 height=34 xoffset=0 yoffset=2 xadvance=24 page=0 chnl=0 +char id=229 x=483 y=44 width=23 height=38 xoffset=0 yoffset=-2 xadvance=24 page=0 chnl=0 +char id=230 x=452 y=220 width=39 height=26 xoffset=0 yoffset=10 xadvance=39 page=0 chnl=0 +char id=231 x=397 y=84 width=23 height=34 xoffset=0 yoffset=10 xadvance=23 page=0 chnl=0 +char id=232 x=156 y=84 width=25 height=35 xoffset=0 yoffset=1 xadvance=25 page=0 chnl=0 +char id=233 x=181 y=84 width=25 height=35 xoffset=0 yoffset=1 xadvance=25 page=0 chnl=0 +char id=234 x=206 y=84 width=25 height=35 xoffset=0 yoffset=1 xadvance=25 page=0 chnl=0 +char id=235 x=420 y=84 width=25 height=34 xoffset=0 yoffset=2 xadvance=25 page=0 chnl=0 +char id=236 x=167 y=155 width=16 height=33 xoffset=-4 yoffset=2 xadvance=11 page=0 chnl=0 +char id=237 x=183 y=155 width=16 height=33 xoffset=1 yoffset=2 xadvance=11 page=0 chnl=0 +char id=238 x=199 y=155 width=19 height=33 xoffset=-3 yoffset=2 xadvance=11 page=0 chnl=0 +char id=239 x=218 y=155 width=21 height=33 xoffset=-3 yoffset=2 xadvance=11 page=0 chnl=0 +char id=240 x=239 y=155 width=26 height=33 xoffset=0 yoffset=3 xadvance=27 page=0 chnl=0 +char id=241 x=265 y=155 width=24 height=33 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=242 x=231 y=84 width=27 height=35 xoffset=0 yoffset=1 xadvance=27 page=0 chnl=0 +char id=243 x=258 y=84 width=27 height=35 xoffset=0 yoffset=1 xadvance=27 page=0 chnl=0 +char id=244 x=285 y=84 width=27 height=35 xoffset=0 yoffset=1 xadvance=27 page=0 chnl=0 +char id=245 x=445 y=84 width=27 height=34 xoffset=0 yoffset=2 xadvance=27 page=0 chnl=0 +char id=246 x=472 y=84 width=27 height=34 xoffset=0 yoffset=2 xadvance=27 page=0 chnl=0 +char id=247 x=279 y=251 width=23 height=24 xoffset=1 yoffset=8 xadvance=25 page=0 chnl=0 +char id=248 x=0 y=251 width=27 height=26 xoffset=0 yoffset=10 xadvance=27 page=0 chnl=0 +char id=249 x=0 y=121 width=24 height=34 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=250 x=24 y=121 width=24 height=34 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=251 x=48 y=121 width=24 height=34 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=252 x=72 y=121 width=24 height=34 xoffset=1 yoffset=2 xadvance=26 page=0 chnl=0 +char id=253 x=383 y=0 width=27 height=41 xoffset=-1 yoffset=2 xadvance=25 page=0 chnl=0 +char id=254 x=335 y=44 width=27 height=40 xoffset=1 yoffset=3 xadvance=28 page=0 chnl=0 +char id=255 x=410 y=0 width=27 height=41 xoffset=-1 yoffset=2 xadvance=25 page=0 chnl=0 +kernings count=370 +kerning first=244 second=119 amount=-1 +kerning first=86 second=225 amount=-2 +kerning first=119 second=245 amount=-1 +kerning first=253 second=243 amount=-1 +kerning first=111 second=89 amount=-5 +kerning first=248 second=86 amount=-3 +kerning first=67 second=79 amount=-1 +kerning first=84 second=211 amount=-1 +kerning first=84 second=194 amount=-2 +kerning first=221 second=235 amount=-5 +kerning first=192 second=221 amount=-1 +kerning first=121 second=44 amount=-4 +kerning first=65 second=89 amount=-1 +kerning first=75 second=216 amount=-1 +kerning first=87 second=248 amount=-2 +kerning first=89 second=242 amount=-5 +kerning first=221 second=111 amount=-5 +kerning first=233 second=221 amount=-5 +kerning first=75 second=195 amount=1 +kerning first=234 second=86 amount=-3 +kerning first=121 second=233 amount=-1 +kerning first=119 second=235 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=76 second=86 amount=-5 +kerning first=246 second=221 amount=-5 +kerning first=86 second=198 amount=-4 +kerning first=118 second=242 amount=-1 +kerning first=89 second=194 amount=-1 +kerning first=92 second=92 amount=-6 +kerning first=199 second=211 amount=-1 +kerning first=119 second=111 amount=-1 +kerning first=114 second=242 amount=-1 +kerning first=86 second=232 amount=-3 +kerning first=194 second=221 amount=-1 +kerning first=89 second=101 amount=-5 +kerning first=87 second=234 amount=-2 +kerning first=192 second=86 amount=-4 +kerning first=86 second=246 amount=-3 +kerning first=233 second=86 amount=-3 +kerning first=197 second=84 amount=-3 +kerning first=92 second=47 amount=3 +kerning first=75 second=193 amount=1 +kerning first=118 second=101 amount=-1 +kerning first=243 second=221 amount=-5 +kerning first=245 second=87 amount=-2 +kerning first=246 second=86 amount=-3 +kerning first=84 second=197 amount=-2 +kerning first=121 second=46 amount=-4 +kerning first=193 second=221 amount=-1 +kerning first=197 second=87 amount=-2 +kerning first=194 second=86 amount=-4 +kerning first=89 second=99 amount=-3 +kerning first=87 second=231 amount=-2 +kerning first=235 second=87 amount=-2 +kerning first=195 second=71 amount=-1 +kerning first=99 second=89 amount=-5 +kerning first=89 second=197 amount=-1 +kerning first=121 second=244 amount=-1 +kerning first=221 second=196 amount=-1 +kerning first=243 second=86 amount=-3 +kerning first=68 second=196 amount=-2 +kerning first=84 second=65 amount=-2 +kerning first=221 second=233 amount=-5 +kerning first=86 second=245 amount=-3 +kerning first=119 second=44 amount=-3 +kerning first=75 second=210 amount=-1 +kerning first=89 second=243 amount=-5 +kerning first=193 second=86 amount=-4 +kerning first=87 second=242 amount=-2 +kerning first=231 second=221 amount=-5 +kerning first=255 second=232 amount=-1 +kerning first=230 second=89 amount=-5 +kerning first=196 second=84 amount=-3 +kerning first=119 second=233 amount=-1 +kerning first=255 second=246 amount=-1 +kerning first=89 second=65 amount=-1 +kerning first=118 second=243 amount=-1 +kerning first=242 second=87 amount=-2 +kerning first=87 second=194 amount=-2 +kerning first=118 second=228 amount=-1 +kerning first=114 second=243 amount=-1 +kerning first=86 second=235 amount=-3 +kerning first=87 second=101 amount=-2 +kerning first=196 second=87 amount=-2 +kerning first=230 second=119 amount=-1 +kerning first=213 second=87 amount=-1 +kerning first=86 second=111 amount=-3 +kerning first=253 second=232 amount=-1 +kerning first=101 second=87 amount=-2 +kerning first=192 second=71 amount=-1 +kerning first=245 second=118 amount=-1 +kerning first=231 second=86 amount=-3 +kerning first=121 second=248 amount=-1 +kerning first=86 second=226 amount=-2 +kerning first=221 second=195 amount=-1 +kerning first=253 second=246 amount=-1 +kerning first=67 second=212 amount=-1 +kerning first=68 second=195 amount=-2 +kerning first=84 second=214 amount=-1 +kerning first=244 second=87 amount=-2 +kerning first=84 second=192 amount=-2 +kerning first=232 second=89 amount=-5 +kerning first=119 second=46 amount=-3 +kerning first=221 second=244 amount=-5 +kerning first=47 second=47 amount=-6 +kerning first=87 second=99 amount=-2 +kerning first=121 second=234 amount=-1 +kerning first=194 second=71 amount=-1 +kerning first=65 second=84 amount=-3 +kerning first=255 second=245 amount=-1 +kerning first=89 second=192 amount=-1 +kerning first=87 second=197 amount=-2 +kerning first=199 second=214 amount=-1 +kerning first=119 second=244 amount=-1 +kerning first=221 second=193 amount=-1 +kerning first=111 second=87 amount=-2 +kerning first=118 second=227 amount=-1 +kerning first=68 second=193 amount=-2 +kerning first=195 second=89 amount=-1 +kerning first=232 second=119 amount=-1 +kerning first=82 second=89 amount=-2 +kerning first=65 second=87 amount=-2 +kerning first=75 second=211 amount=-1 +kerning first=87 second=243 amount=-2 +kerning first=210 second=87 amount=-1 +kerning first=255 second=235 amount=-1 +kerning first=86 second=229 amount=-2 +kerning first=75 second=194 amount=1 +kerning first=193 second=71 amount=-1 +kerning first=242 second=118 amount=-1 +kerning first=253 second=245 amount=-1 +kerning first=248 second=89 amount=-5 +kerning first=255 second=111 amount=-1 +kerning first=67 second=216 amount=-1 +kerning first=84 second=213 amount=-1 +kerning first=86 second=196 amount=-4 +kerning first=84 second=198 amount=-2 +kerning first=87 second=65 amount=-2 +kerning first=118 second=225 amount=-1 +kerning first=221 second=248 amount=-5 +kerning first=86 second=233 amount=-3 +kerning first=234 second=89 amount=-5 +kerning first=212 second=87 amount=-1 +kerning first=248 second=119 amount=-1 +kerning first=253 second=235 amount=-1 +kerning first=244 second=118 amount=-1 +kerning first=89 second=198 amount=-1 +kerning first=199 second=213 amount=-1 +kerning first=121 second=242 amount=-1 +kerning first=86 second=97 amount=-2 +kerning first=119 second=248 amount=-1 +kerning first=253 second=111 amount=-1 +kerning first=84 second=79 amount=-1 +kerning first=89 second=232 amount=-5 +kerning first=221 second=234 amount=-5 +kerning first=192 second=89 amount=-1 +kerning first=234 second=119 amount=-1 +kerning first=89 second=246 amount=-5 +kerning first=233 second=89 amount=-5 +kerning first=75 second=197 amount=1 +kerning first=79 second=87 amount=-1 +kerning first=118 second=232 amount=-1 +kerning first=121 second=101 amount=-1 +kerning first=119 second=234 amount=-1 +kerning first=99 second=87 amount=-2 +kerning first=245 second=221 amount=-5 +kerning first=111 second=118 amount=-1 +kerning first=246 second=89 amount=-5 +kerning first=86 second=195 amount=-4 +kerning first=118 second=246 amount=-1 +kerning first=87 second=192 amount=-2 +kerning first=199 second=79 amount=-1 +kerning first=197 second=221 amount=-1 +kerning first=114 second=246 amount=-1 +kerning first=194 second=89 amount=-1 +kerning first=233 second=119 amount=-1 +kerning first=255 second=44 amount=-4 +kerning first=221 second=231 amount=-3 +kerning first=235 second=221 amount=-5 +kerning first=86 second=244 amount=-3 +kerning first=255 second=233 amount=-1 +kerning first=86 second=224 amount=-2 +kerning first=246 second=119 amount=-1 +kerning first=75 second=65 amount=1 +kerning first=230 second=87 amount=-2 +kerning first=243 second=89 amount=-5 +kerning first=67 second=210 amount=-1 +kerning first=245 second=86 amount=-3 +kerning first=86 second=193 amount=-4 +kerning first=89 second=245 amount=-5 +kerning first=193 second=89 amount=-1 +kerning first=253 second=44 amount=-4 +kerning first=197 second=86 amount=-4 +kerning first=221 second=242 amount=-5 +kerning first=235 second=86 amount=-3 +kerning first=253 second=233 amount=-1 +kerning first=243 second=119 amount=-1 +kerning first=118 second=245 amount=-1 +kerning first=242 second=221 amount=-5 +kerning first=87 second=198 amount=-2 +kerning first=121 second=243 amount=-1 +kerning first=221 second=194 amount=-1 +kerning first=119 second=242 amount=-1 +kerning first=68 second=194 amount=-2 +kerning first=114 second=245 amount=-1 +kerning first=255 second=46 amount=-4 +kerning first=89 second=235 amount=-5 +kerning first=87 second=232 amount=-2 +kerning first=196 second=221 amount=-1 +kerning first=221 second=101 amount=-5 +kerning first=86 second=248 amount=-3 +kerning first=75 second=214 amount=-1 +kerning first=101 second=221 amount=-5 +kerning first=89 second=111 amount=-5 +kerning first=87 second=246 amount=-2 +kerning first=232 second=87 amount=-2 +kerning first=231 second=89 amount=-5 +kerning first=195 second=84 amount=-3 +kerning first=86 second=230 amount=-2 +kerning first=75 second=192 amount=1 +kerning first=118 second=235 amount=-1 +kerning first=119 second=101 amount=-1 +kerning first=255 second=244 amount=-1 +kerning first=244 second=221 amount=-5 +kerning first=118 second=111 amount=-1 +kerning first=242 second=86 amount=-3 +kerning first=118 second=226 amount=-1 +kerning first=253 second=46 amount=-4 +kerning first=114 second=111 amount=-1 +kerning first=86 second=234 amount=-3 +kerning first=195 second=87 amount=-2 +kerning first=196 second=86 amount=-4 +kerning first=221 second=99 amount=-3 +kerning first=101 second=86 amount=-3 +kerning first=221 second=197 amount=-1 +kerning first=253 second=244 amount=-1 +kerning first=118 second=100 amount=-1 +kerning first=111 second=221 amount=-5 +kerning first=248 second=87 amount=-2 +kerning first=67 second=211 amount=-1 +kerning first=68 second=197 amount=-2 +kerning first=84 second=212 amount=-1 +kerning first=244 second=86 amount=-3 +kerning first=76 second=84 amount=-1 +kerning first=84 second=196 amount=-2 +kerning first=65 second=221 amount=-1 +kerning first=75 second=213 amount=-1 +kerning first=87 second=245 amount=-2 +kerning first=221 second=243 amount=-5 +kerning first=86 second=231 amount=-3 +kerning first=75 second=198 amount=1 +kerning first=234 second=87 amount=-2 +kerning first=197 second=71 amount=-1 +kerning first=192 second=84 amount=-3 +kerning first=255 second=248 amount=-1 +kerning first=89 second=196 amount=-1 +kerning first=199 second=212 amount=-1 +kerning first=221 second=65 amount=-1 +kerning first=119 second=243 amount=-1 +kerning first=118 second=229 amount=-1 +kerning first=111 second=86 amount=-3 +kerning first=68 second=65 amount=-2 +kerning first=89 second=233 amount=-5 +kerning first=87 second=235 amount=-2 +kerning first=192 second=87 amount=-2 +kerning first=118 second=44 amount=-4 +kerning first=65 second=86 amount=-4 +kerning first=86 second=242 amount=-3 +kerning first=75 second=79 amount=-1 +kerning first=87 second=111 amount=-2 +kerning first=233 second=87 amount=-2 +kerning first=194 second=84 amount=-3 +kerning first=253 second=248 amount=-1 +kerning first=255 second=234 amount=-1 +kerning first=118 second=233 amount=-1 +kerning first=84 second=216 amount=-1 +kerning first=246 second=87 amount=-2 +kerning first=86 second=194 amount=-4 +kerning first=84 second=195 amount=-2 +kerning first=118 second=97 amount=-1 +kerning first=86 second=101 amount=-3 +kerning first=194 second=87 amount=-2 +kerning first=216 second=87 amount=-1 +kerning first=99 second=221 amount=-5 +kerning first=121 second=232 amount=-1 +kerning first=253 second=234 amount=-1 +kerning first=196 second=71 amount=-1 +kerning first=248 second=118 amount=-1 +kerning first=193 second=84 amount=-3 +kerning first=89 second=195 amount=-1 +kerning first=199 second=216 amount=-1 +kerning first=121 second=246 amount=-1 +kerning first=221 second=192 amount=-1 +kerning first=243 second=87 amount=-2 +kerning first=68 second=192 amount=-2 +kerning first=84 second=193 amount=-2 +kerning first=118 second=46 amount=-4 +kerning first=89 second=244 amount=-5 +kerning first=193 second=87 amount=-2 +kerning first=86 second=99 amount=-3 +kerning first=230 second=221 amount=-5 +kerning first=99 second=86 amount=-3 +kerning first=255 second=242 amount=-1 +kerning first=245 second=89 amount=-5 +kerning first=86 second=197 amount=-4 +kerning first=89 second=193 amount=-1 +kerning first=87 second=196 amount=-2 +kerning first=118 second=244 amount=-1 +kerning first=118 second=224 amount=-1 +kerning first=197 second=89 amount=-1 +kerning first=114 second=244 amount=-1 +kerning first=87 second=233 amount=-2 +kerning first=235 second=89 amount=-5 +kerning first=86 second=243 amount=-3 +kerning first=214 second=87 amount=-1 +kerning first=245 second=119 amount=-1 +kerning first=255 second=101 amount=-1 +kerning first=231 second=87 amount=-2 +kerning first=246 second=118 amount=-1 +kerning first=65 second=71 amount=-1 +kerning first=86 second=228 amount=-2 +kerning first=221 second=198 amount=-1 +kerning first=121 second=245 amount=-1 +kerning first=230 second=86 amount=-3 +kerning first=253 second=242 amount=-1 +kerning first=67 second=214 amount=-1 +kerning first=68 second=198 amount=-2 +kerning first=84 second=210 amount=-1 +kerning first=86 second=65 amount=-4 +kerning first=221 second=232 amount=-5 +kerning first=235 second=119 amount=-1 +kerning first=89 second=248 amount=-5 +kerning first=232 second=221 amount=-5 +kerning first=221 second=246 amount=-5 +kerning first=211 second=87 amount=-1 +kerning first=121 second=235 amount=-1 +kerning first=119 second=232 amount=-1 +kerning first=253 second=101 amount=-1 +kerning first=243 second=118 amount=-1 +kerning first=118 second=248 amount=-1 +kerning first=242 second=89 amount=-5 +kerning first=87 second=195 amount=-2 +kerning first=199 second=210 amount=-1 +kerning first=121 second=111 amount=-1 +kerning first=119 second=246 amount=-1 +kerning first=118 second=230 amount=-1 +kerning first=114 second=248 amount=-1 +kerning first=195 second=221 amount=-1 +kerning first=89 second=234 amount=-5 +kerning first=196 second=89 amount=-1 +kerning first=82 second=221 amount=-2 +kerning first=75 second=212 amount=-1 +kerning first=101 second=89 amount=-5 +kerning first=87 second=244 amount=-2 +kerning first=232 second=86 amount=-3 +kerning first=86 second=227 amount=-2 +kerning first=75 second=196 amount=1 +kerning first=242 second=119 amount=-1 +kerning first=118 second=234 amount=-1 +kerning first=248 second=221 amount=-5 +kerning first=255 second=243 amount=-1 +kerning first=67 second=213 amount=-1 +kerning first=244 second=89 amount=-5 +kerning first=86 second=192 amount=-4 +kerning first=87 second=193 amount=-2 +kerning first=221 second=245 amount=-5 +kerning first=101 second=119 amount=-1 +kerning first=195 second=86 amount=-4 +kerning first=89 second=231 amount=-3 +kerning first=234 second=221 amount=-5 diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.png b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.png new file mode 100644 index 0000000..2153dbd Binary files /dev/null and b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-42.png differ diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-64.fnt b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-64.fnt new file mode 100644 index 0000000..f620a9b --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-64.fnt @@ -0,0 +1,581 @@ +info face="Metropolis Bold" size=64 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2 +common lineHeight=65 base=51 scaleW=512 scaleH=512 pages=2 packed=0 +page id=0 file="Metropolis-Bold-641.png" +page id=1 file="Metropolis-Bold-642.png" +chars count=170 +char id=0 x=0 y=0 width=24 height=66 xoffset=4 yoffset=-1 xadvance=32 page=0 chnl=0 +char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0 +char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=18 page=0 chnl=0 +char id=33 x=114 y=386 width=15 height=47 xoffset=2 yoffset=6 xadvance=20 page=0 chnl=0 +char id=34 x=103 y=479 width=29 height=22 xoffset=2 yoffset=6 xadvance=33 page=0 chnl=0 +char id=36 x=394 y=126 width=40 height=57 xoffset=0 yoffset=1 xadvance=41 page=0 chnl=0 +char id=37 x=43 y=338 width=52 height=48 xoffset=1 yoffset=5 xadvance=54 page=0 chnl=0 +char id=38 x=109 y=240 width=43 height=49 xoffset=0 yoffset=5 xadvance=43 page=0 chnl=0 +char id=39 x=132 y=479 width=13 height=22 xoffset=2 yoffset=6 xadvance=18 page=0 chnl=0 +char id=40 x=261 y=126 width=22 height=58 xoffset=2 yoffset=5 xadvance=25 page=0 chnl=0 +char id=41 x=283 y=126 width=22 height=58 xoffset=1 yoffset=5 xadvance=25 page=0 chnl=0 +char id=42 x=30 y=479 width=24 height=26 xoffset=1 yoffset=4 xadvance=25 page=0 chnl=0 +char id=44 x=88 y=479 width=15 height=23 xoffset=2 yoffset=39 xadvance=19 page=0 chnl=0 +char id=45 x=291 y=479 width=21 height=10 xoffset=1 yoffset=28 xadvance=23 page=0 chnl=0 +char id=46 x=190 y=479 width=15 height=14 xoffset=2 yoffset=39 xadvance=19 page=0 chnl=0 +char id=47 x=434 y=126 width=36 height=55 xoffset=-3 yoffset=2 xadvance=30 page=0 chnl=0 +char id=48 x=0 y=338 width=43 height=48 xoffset=1 yoffset=5 xadvance=45 page=0 chnl=0 +char id=50 x=40 y=386 width=37 height=47 xoffset=1 yoffset=5 xadvance=39 page=0 chnl=0 +char id=51 x=319 y=290 width=38 height=48 xoffset=0 yoffset=5 xadvance=39 page=0 chnl=0 +char id=53 x=77 y=386 width=37 height=47 xoffset=1 yoffset=6 xadvance=40 page=0 chnl=0 +char id=54 x=357 y=290 width=39 height=48 xoffset=1 yoffset=5 xadvance=41 page=0 chnl=0 +char id=56 x=396 y=290 width=38 height=48 xoffset=1 yoffset=5 xadvance=40 page=0 chnl=0 +char id=57 x=434 y=290 width=39 height=48 xoffset=1 yoffset=5 xadvance=41 page=0 chnl=0 +char id=58 x=495 y=433 width=15 height=37 xoffset=2 yoffset=16 xadvance=19 page=0 chnl=0 +char id=59 x=489 y=386 width=15 height=46 xoffset=2 yoffset=16 xadvance=19 page=0 chnl=0 +char id=61 x=54 y=479 width=34 height=25 xoffset=2 yoffset=17 xadvance=39 page=0 chnl=0 +char id=63 x=473 y=290 width=32 height=48 xoffset=0 yoffset=5 xadvance=32 page=0 chnl=0 +char id=64 x=34 y=185 width=54 height=53 xoffset=1 yoffset=7 xadvance=56 page=0 chnl=0 +char id=65 x=183 y=386 width=50 height=46 xoffset=-1 yoffset=6 xadvance=48 page=0 chnl=0 +char id=66 x=233 y=386 width=41 height=46 xoffset=3 yoffset=6 xadvance=45 page=0 chnl=0 +char id=67 x=412 y=240 width=44 height=48 xoffset=1 yoffset=5 xadvance=45 page=0 chnl=0 +char id=68 x=274 y=386 width=44 height=46 xoffset=3 yoffset=6 xadvance=49 page=0 chnl=0 +char id=69 x=318 y=386 width=37 height=46 xoffset=3 yoffset=6 xadvance=41 page=0 chnl=0 +char id=70 x=355 y=386 width=37 height=46 xoffset=3 yoffset=6 xadvance=41 page=0 chnl=0 +char id=71 x=456 y=240 width=44 height=48 xoffset=1 yoffset=5 xadvance=48 page=0 chnl=0 +char id=72 x=392 y=386 width=42 height=46 xoffset=3 yoffset=6 xadvance=48 page=0 chnl=0 +char id=73 x=434 y=386 width=12 height=46 xoffset=3 yoffset=6 xadvance=18 page=0 chnl=0 +char id=74 x=305 y=338 width=33 height=47 xoffset=-1 yoffset=6 xadvance=35 page=0 chnl=0 +char id=75 x=446 y=386 width=43 height=46 xoffset=3 yoffset=6 xadvance=45 page=0 chnl=0 +char id=76 x=0 y=433 width=34 height=46 xoffset=3 yoffset=6 xadvance=37 page=0 chnl=0 +char id=77 x=34 y=433 width=49 height=46 xoffset=3 yoffset=6 xadvance=55 page=0 chnl=0 +char id=78 x=83 y=433 width=43 height=46 xoffset=3 yoffset=6 xadvance=50 page=0 chnl=0 +char id=79 x=0 y=290 width=50 height=48 xoffset=1 yoffset=5 xadvance=52 page=0 chnl=0 +char id=80 x=126 y=433 width=39 height=46 xoffset=3 yoffset=6 xadvance=42 page=0 chnl=0 +char id=81 x=50 y=290 width=50 height=48 xoffset=1 yoffset=5 xadvance=52 page=0 chnl=0 +char id=82 x=165 y=433 width=40 height=46 xoffset=3 yoffset=6 xadvance=43 page=0 chnl=0 +char id=83 x=100 y=290 width=40 height=48 xoffset=0 yoffset=5 xadvance=41 page=0 chnl=0 +char id=84 x=205 y=433 width=39 height=46 xoffset=1 yoffset=6 xadvance=41 page=0 chnl=0 +char id=85 x=338 y=338 width=43 height=47 xoffset=3 yoffset=6 xadvance=48 page=0 chnl=0 +char id=86 x=244 y=433 width=50 height=46 xoffset=-1 yoffset=6 xadvance=48 page=0 chnl=0 +char id=87 x=294 y=433 width=69 height=46 xoffset=0 yoffset=6 xadvance=69 page=0 chnl=0 +char id=88 x=363 y=433 width=46 height=46 xoffset=0 yoffset=6 xadvance=46 page=0 chnl=0 +char id=89 x=409 y=433 width=47 height=46 xoffset=-1 yoffset=6 xadvance=44 page=0 chnl=0 +char id=90 x=456 y=433 width=39 height=46 xoffset=2 yoffset=6 xadvance=42 page=0 chnl=0 +char id=91 x=305 y=126 width=20 height=58 xoffset=3 yoffset=4 xadvance=25 page=0 chnl=0 +char id=92 x=470 y=126 width=36 height=55 xoffset=-2 yoffset=2 xadvance=30 page=0 chnl=0 +char id=93 x=325 y=126 width=21 height=58 xoffset=1 yoffset=4 xadvance=25 page=0 chnl=0 +char id=94 x=145 y=479 width=29 height=20 xoffset=1 yoffset=6 xadvance=31 page=0 chnl=0 +char id=95 x=312 y=479 width=41 height=8 xoffset=-2 yoffset=54 xadvance=38 page=0 chnl=0 +char id=96 x=230 y=479 width=18 height=12 xoffset=3 yoffset=3 xadvance=24 page=0 chnl=0 +char id=98 x=140 y=290 width=38 height=48 xoffset=3 yoffset=5 xadvance=42 page=0 chnl=0 +char id=100 x=178 y=290 width=39 height=48 xoffset=1 yoffset=5 xadvance=42 page=0 chnl=0 +char id=102 x=217 y=290 width=25 height=48 xoffset=0 yoffset=4 xadvance=24 page=0 chnl=0 +char id=103 x=381 y=338 width=38 height=47 xoffset=1 yoffset=16 xadvance=42 page=0 chnl=0 +char id=104 x=419 y=338 width=35 height=47 xoffset=2 yoffset=5 xadvance=39 page=0 chnl=0 +char id=105 x=88 y=185 width=13 height=50 xoffset=2 yoffset=2 xadvance=17 page=0 chnl=0 +char id=106 x=74 y=0 width=23 height=62 xoffset=-5 yoffset=2 xadvance=17 page=0 chnl=0 +char id=107 x=454 y=338 width=36 height=47 xoffset=2 yoffset=5 xadvance=37 page=0 chnl=0 +char id=108 x=490 y=338 width=12 height=47 xoffset=3 yoffset=5 xadvance=17 page=0 chnl=0 +char id=112 x=242 y=290 width=38 height=48 xoffset=3 yoffset=16 xadvance=42 page=0 chnl=0 +char id=113 x=280 y=290 width=39 height=48 xoffset=1 yoffset=16 xadvance=42 page=0 chnl=0 +char id=121 x=0 y=386 width=40 height=47 xoffset=-1 yoffset=17 xadvance=38 page=0 chnl=0 +char id=123 x=346 y=126 width=24 height=58 xoffset=1 yoffset=5 xadvance=26 page=0 chnl=0 +char id=124 x=500 y=66 width=9 height=55 xoffset=5 yoffset=2 xadvance=19 page=0 chnl=0 +char id=125 x=370 y=126 width=24 height=58 xoffset=1 yoffset=5 xadvance=26 page=0 chnl=0 +char id=126 x=205 y=479 width=25 height=13 xoffset=2 yoffset=21 xadvance=29 page=0 chnl=0 +char id=161 x=129 y=386 width=14 height=47 xoffset=3 yoffset=16 xadvance=20 page=0 chnl=0 +char id=163 x=143 y=386 width=40 height=47 xoffset=1 yoffset=5 xadvance=42 page=0 chnl=0 +char id=168 x=266 y=479 width=25 height=11 xoffset=3 yoffset=4 xadvance=31 page=0 chnl=0 +char id=175 x=353 y=479 width=25 height=8 xoffset=3 yoffset=7 xadvance=30 page=0 chnl=0 +char id=180 x=248 y=479 width=18 height=12 xoffset=3 yoffset=3 xadvance=24 page=0 chnl=0 +char id=184 x=174 y=479 width=16 height=16 xoffset=3 yoffset=49 xadvance=21 page=0 chnl=0 +char id=191 x=95 y=338 width=33 height=48 xoffset=0 yoffset=16 xadvance=32 page=0 chnl=0 +char id=192 x=423 y=0 width=50 height=60 xoffset=-1 yoffset=-8 xadvance=48 page=0 chnl=0 +char id=193 x=0 y=66 width=50 height=60 xoffset=-1 yoffset=-8 xadvance=48 page=0 chnl=0 +char id=194 x=400 y=66 width=50 height=59 xoffset=-1 yoffset=-7 xadvance=48 page=0 chnl=0 +char id=195 x=450 y=66 width=50 height=59 xoffset=-1 yoffset=-7 xadvance=48 page=0 chnl=0 +char id=196 x=0 y=126 width=50 height=59 xoffset=-1 yoffset=-7 xadvance=48 page=0 chnl=0 +char id=197 x=24 y=0 width=50 height=65 xoffset=-1 yoffset=-13 xadvance=48 page=0 chnl=0 +char id=199 x=50 y=66 width=44 height=60 xoffset=1 yoffset=5 xadvance=45 page=0 chnl=0 +char id=200 x=473 y=0 width=37 height=60 xoffset=3 yoffset=-8 xadvance=41 page=0 chnl=0 +char id=201 x=94 y=66 width=37 height=60 xoffset=3 yoffset=-8 xadvance=41 page=0 chnl=0 +char id=202 x=50 y=126 width=37 height=59 xoffset=3 yoffset=-7 xadvance=41 page=0 chnl=0 +char id=203 x=87 y=126 width=37 height=59 xoffset=3 yoffset=-7 xadvance=41 page=0 chnl=0 +char id=204 x=131 y=66 width=23 height=60 xoffset=-5 yoffset=-8 xadvance=18 page=0 chnl=0 +char id=205 x=154 y=66 width=23 height=60 xoffset=3 yoffset=-8 xadvance=18 page=0 chnl=0 +char id=206 x=124 y=126 width=26 height=59 xoffset=-3 yoffset=-7 xadvance=18 page=0 chnl=0 +char id=207 x=150 y=126 width=30 height=59 xoffset=-4 yoffset=-7 xadvance=18 page=0 chnl=0 +char id=209 x=180 y=126 width=43 height=59 xoffset=3 yoffset=-7 xadvance=50 page=0 chnl=0 +char id=210 x=97 y=0 width=50 height=61 xoffset=1 yoffset=-8 xadvance=52 page=0 chnl=0 +char id=211 x=147 y=0 width=50 height=61 xoffset=1 yoffset=-8 xadvance=52 page=0 chnl=0 +char id=212 x=197 y=0 width=50 height=61 xoffset=1 yoffset=-8 xadvance=52 page=0 chnl=0 +char id=213 x=247 y=0 width=50 height=61 xoffset=1 yoffset=-8 xadvance=52 page=0 chnl=0 +char id=214 x=177 y=66 width=50 height=60 xoffset=1 yoffset=-7 xadvance=52 page=0 chnl=0 +char id=215 x=0 y=479 width=30 height=30 xoffset=3 yoffset=15 xadvance=36 page=0 chnl=0 +char id=216 x=128 y=338 width=50 height=48 xoffset=1 yoffset=5 xadvance=52 page=0 chnl=0 +char id=217 x=297 y=0 width=43 height=61 xoffset=3 yoffset=-8 xadvance=48 page=0 chnl=0 +char id=218 x=340 y=0 width=43 height=61 xoffset=3 yoffset=-8 xadvance=48 page=0 chnl=0 +char id=219 x=227 y=66 width=43 height=60 xoffset=3 yoffset=-7 xadvance=48 page=0 chnl=0 +char id=220 x=270 y=66 width=43 height=60 xoffset=3 yoffset=-7 xadvance=48 page=0 chnl=0 +char id=221 x=313 y=66 width=47 height=60 xoffset=-1 yoffset=-8 xadvance=44 page=0 chnl=0 +char id=223 x=178 y=338 width=36 height=48 xoffset=3 yoffset=4 xadvance=39 page=0 chnl=0 +char id=224 x=101 y=185 width=34 height=50 xoffset=1 yoffset=3 xadvance=37 page=0 chnl=0 +char id=225 x=135 y=185 width=34 height=50 xoffset=1 yoffset=3 xadvance=37 page=0 chnl=0 +char id=226 x=169 y=185 width=34 height=50 xoffset=1 yoffset=3 xadvance=37 page=0 chnl=0 +char id=227 x=203 y=185 width=34 height=50 xoffset=1 yoffset=3 xadvance=37 page=0 chnl=0 +char id=228 x=152 y=240 width=34 height=49 xoffset=1 yoffset=4 xadvance=37 page=0 chnl=0 +char id=229 x=0 y=185 width=34 height=55 xoffset=1 yoffset=-2 xadvance=37 page=0 chnl=0 +char id=231 x=186 y=240 width=34 height=49 xoffset=1 yoffset=16 xadvance=35 page=0 chnl=0 +char id=232 x=237 y=185 width=36 height=50 xoffset=1 yoffset=3 xadvance=38 page=0 chnl=0 +char id=233 x=273 y=185 width=36 height=50 xoffset=1 yoffset=3 xadvance=38 page=0 chnl=0 +char id=234 x=309 y=185 width=36 height=50 xoffset=1 yoffset=3 xadvance=38 page=0 chnl=0 +char id=235 x=220 y=240 width=36 height=49 xoffset=1 yoffset=4 xadvance=38 page=0 chnl=0 +char id=236 x=256 y=240 width=23 height=49 xoffset=-5 yoffset=3 xadvance=17 page=0 chnl=0 +char id=237 x=279 y=240 width=24 height=49 xoffset=3 yoffset=3 xadvance=17 page=0 chnl=0 +char id=238 x=214 y=338 width=27 height=48 xoffset=-3 yoffset=4 xadvance=17 page=0 chnl=0 +char id=239 x=241 y=338 width=29 height=48 xoffset=-4 yoffset=4 xadvance=17 page=0 chnl=0 +char id=240 x=345 y=185 width=38 height=50 xoffset=1 yoffset=3 xadvance=40 page=0 chnl=0 +char id=241 x=270 y=338 width=35 height=48 xoffset=2 yoffset=4 xadvance=39 page=0 chnl=0 +char id=242 x=383 y=185 width=39 height=50 xoffset=1 yoffset=3 xadvance=41 page=0 chnl=0 +char id=243 x=422 y=185 width=39 height=50 xoffset=1 yoffset=3 xadvance=41 page=0 chnl=0 +char id=244 x=461 y=185 width=39 height=50 xoffset=1 yoffset=3 xadvance=41 page=0 chnl=0 +char id=245 x=0 y=240 width=39 height=50 xoffset=1 yoffset=3 xadvance=41 page=0 chnl=0 +char id=246 x=303 y=240 width=39 height=49 xoffset=1 yoffset=4 xadvance=41 page=0 chnl=0 +char id=249 x=39 y=240 width=35 height=50 xoffset=2 yoffset=3 xadvance=39 page=0 chnl=0 +char id=250 x=74 y=240 width=35 height=50 xoffset=2 yoffset=3 xadvance=39 page=0 chnl=0 +char id=251 x=342 y=240 width=35 height=49 xoffset=2 yoffset=4 xadvance=39 page=0 chnl=0 +char id=252 x=377 y=240 width=35 height=49 xoffset=2 yoffset=4 xadvance=39 page=0 chnl=0 +char id=253 x=383 y=0 width=40 height=61 xoffset=-1 yoffset=3 xadvance=38 page=0 chnl=0 +char id=254 x=223 y=126 width=38 height=59 xoffset=3 yoffset=5 xadvance=42 page=0 chnl=0 +char id=255 x=360 y=66 width=40 height=60 xoffset=-1 yoffset=4 xadvance=38 page=0 chnl=0 +char id=35 x=125 y=0 width=43 height=46 xoffset=0 yoffset=6 xadvance=43 page=1 chnl=0 +char id=43 x=70 y=83 width=34 height=34 xoffset=2 yoffset=13 xadvance=39 page=1 chnl=0 +char id=49 x=25 y=0 width=24 height=46 xoffset=-1 yoffset=6 xadvance=27 page=1 chnl=0 +char id=52 x=49 y=0 width=41 height=46 xoffset=0 yoffset=6 xadvance=41 page=1 chnl=0 +char id=55 x=90 y=0 width=35 height=46 xoffset=2 yoffset=6 xadvance=39 page=1 chnl=0 +char id=60 x=349 y=46 width=33 height=36 xoffset=2 yoffset=11 xadvance=38 page=1 chnl=0 +char id=62 x=382 y=46 width=33 height=36 xoffset=3 yoffset=11 xadvance=38 page=1 chnl=0 +char id=97 x=406 y=0 width=34 height=37 xoffset=1 yoffset=16 xadvance=37 page=1 chnl=0 +char id=99 x=440 y=0 width=34 height=37 xoffset=1 yoffset=16 xadvance=35 page=1 chnl=0 +char id=101 x=474 y=0 width=36 height=37 xoffset=1 yoffset=16 xadvance=38 page=1 chnl=0 +char id=109 x=201 y=46 width=55 height=36 xoffset=2 yoffset=16 xadvance=59 page=1 chnl=0 +char id=110 x=256 y=46 width=35 height=36 xoffset=2 yoffset=16 xadvance=39 page=1 chnl=0 +char id=111 x=0 y=46 width=39 height=37 xoffset=1 yoffset=16 xadvance=41 page=1 chnl=0 +char id=114 x=291 y=46 width=23 height=36 xoffset=3 yoffset=16 xadvance=26 page=1 chnl=0 +char id=115 x=39 y=46 width=31 height=37 xoffset=0 yoffset=16 xadvance=32 page=1 chnl=0 +char id=116 x=0 y=0 width=25 height=46 xoffset=0 yoffset=7 xadvance=25 page=1 chnl=0 +char id=117 x=314 y=46 width=35 height=36 xoffset=2 yoffset=17 xadvance=39 page=1 chnl=0 +char id=118 x=415 y=46 width=40 height=35 xoffset=-1 yoffset=17 xadvance=39 page=1 chnl=0 +char id=119 x=455 y=46 width=54 height=35 xoffset=0 yoffset=17 xadvance=54 page=1 chnl=0 +char id=120 x=0 y=83 width=38 height=35 xoffset=-1 yoffset=17 xadvance=36 page=1 chnl=0 +char id=122 x=38 y=83 width=32 height=35 xoffset=1 yoffset=17 xadvance=34 page=1 chnl=0 +char id=162 x=168 y=0 width=34 height=46 xoffset=1 yoffset=12 xadvance=35 page=1 chnl=0 +char id=165 x=202 y=0 width=47 height=46 xoffset=-1 yoffset=6 xadvance=44 page=1 chnl=0 +char id=198 x=249 y=0 width=69 height=46 xoffset=-1 yoffset=6 xadvance=69 page=1 chnl=0 +char id=208 x=318 y=0 width=49 height=46 xoffset=1 yoffset=6 xadvance=51 page=1 chnl=0 +char id=222 x=367 y=0 width=39 height=46 xoffset=3 yoffset=6 xadvance=42 page=1 chnl=0 +char id=230 x=70 y=46 width=58 height=37 xoffset=1 yoffset=16 xadvance=60 page=1 chnl=0 +char id=247 x=128 y=46 width=34 height=37 xoffset=2 yoffset=11 xadvance=39 page=1 chnl=0 +char id=248 x=162 y=46 width=39 height=37 xoffset=1 yoffset=16 xadvance=41 page=1 chnl=0 +kernings count=405 +kerning first=244 second=119 amount=-2 +kerning first=86 second=225 amount=-2 +kerning first=119 second=245 amount=-2 +kerning first=253 second=243 amount=-2 +kerning first=111 second=89 amount=-7 +kerning first=248 second=86 amount=-4 +kerning first=67 second=79 amount=-1 +kerning first=84 second=211 amount=-2 +kerning first=99 second=242 amount=-1 +kerning first=84 second=194 amount=-3 +kerning first=221 second=235 amount=-7 +kerning first=192 second=221 amount=-2 +kerning first=121 second=44 amount=-6 +kerning first=65 second=89 amount=-2 +kerning first=75 second=216 amount=-2 +kerning first=87 second=248 amount=-3 +kerning first=89 second=242 amount=-7 +kerning first=221 second=111 amount=-7 +kerning first=233 second=221 amount=-7 +kerning first=246 second=255 amount=-1 +kerning first=75 second=195 amount=2 +kerning first=234 second=86 amount=-4 +kerning first=121 second=233 amount=-1 +kerning first=119 second=235 amount=-2 +kerning first=111 second=119 amount=-2 +kerning first=76 second=86 amount=-7 +kerning first=246 second=221 amount=-7 +kerning first=86 second=198 amount=-6 +kerning first=118 second=242 amount=-2 +kerning first=89 second=194 amount=-1 +kerning first=92 second=92 amount=-8 +kerning first=199 second=211 amount=-1 +kerning first=119 second=111 amount=-2 +kerning first=114 second=242 amount=-1 +kerning first=86 second=232 amount=-4 +kerning first=194 second=221 amount=-2 +kerning first=89 second=101 amount=-7 +kerning first=87 second=234 amount=-3 +kerning first=192 second=86 amount=-6 +kerning first=86 second=246 amount=-4 +kerning first=243 second=255 amount=-1 +kerning first=248 second=121 amount=-1 +kerning first=233 second=86 amount=-4 +kerning first=197 second=84 amount=-4 +kerning first=92 second=47 amount=5 +kerning first=75 second=193 amount=2 +kerning first=118 second=101 amount=-2 +kerning first=243 second=221 amount=-7 +kerning first=245 second=87 amount=-3 +kerning first=246 second=86 amount=-4 +kerning first=84 second=197 amount=-3 +kerning first=121 second=46 amount=-6 +kerning first=193 second=221 amount=-2 +kerning first=197 second=87 amount=-3 +kerning first=194 second=86 amount=-6 +kerning first=89 second=99 amount=-4 +kerning first=87 second=231 amount=-3 +kerning first=235 second=87 amount=-3 +kerning first=195 second=71 amount=-1 +kerning first=99 second=89 amount=-7 +kerning first=89 second=197 amount=-1 +kerning first=121 second=244 amount=-2 +kerning first=221 second=196 amount=-1 +kerning first=243 second=86 amount=-4 +kerning first=68 second=196 amount=-3 +kerning first=99 second=243 amount=-1 +kerning first=84 second=65 amount=-3 +kerning first=221 second=233 amount=-7 +kerning first=86 second=245 amount=-4 +kerning first=119 second=44 amount=-5 +kerning first=75 second=210 amount=-2 +kerning first=89 second=243 amount=-7 +kerning first=193 second=86 amount=-6 +kerning first=87 second=242 amount=-3 +kerning first=231 second=221 amount=-7 +kerning first=246 second=121 amount=-1 +kerning first=245 second=253 amount=-1 +kerning first=230 second=89 amount=-7 +kerning first=255 second=232 amount=-1 +kerning first=196 second=84 amount=-4 +kerning first=119 second=233 amount=-2 +kerning first=255 second=246 amount=-2 +kerning first=89 second=65 amount=-1 +kerning first=118 second=243 amount=-2 +kerning first=242 second=87 amount=-3 +kerning first=87 second=194 amount=-3 +kerning first=231 second=244 amount=-1 +kerning first=118 second=228 amount=-2 +kerning first=114 second=243 amount=-1 +kerning first=86 second=235 amount=-4 +kerning first=87 second=101 amount=-3 +kerning first=196 second=87 amount=-3 +kerning first=230 second=119 amount=-2 +kerning first=213 second=87 amount=-1 +kerning first=86 second=111 amount=-4 +kerning first=101 second=87 amount=-3 +kerning first=243 second=121 amount=-1 +kerning first=192 second=71 amount=-1 +kerning first=245 second=118 amount=-2 +kerning first=231 second=86 amount=-4 +kerning first=253 second=232 amount=-1 +kerning first=121 second=248 amount=-2 +kerning first=86 second=226 amount=-2 +kerning first=221 second=195 amount=-1 +kerning first=253 second=246 amount=-2 +kerning first=67 second=212 amount=-1 +kerning first=68 second=195 amount=-3 +kerning first=84 second=214 amount=-2 +kerning first=244 second=87 amount=-3 +kerning first=84 second=192 amount=-3 +kerning first=232 second=89 amount=-7 +kerning first=119 second=46 amount=-5 +kerning first=221 second=244 amount=-7 +kerning first=47 second=47 amount=-8 +kerning first=87 second=99 amount=-3 +kerning first=242 second=253 amount=-1 +kerning first=121 second=234 amount=-1 +kerning first=194 second=71 amount=-1 +kerning first=65 second=84 amount=-4 +kerning first=255 second=245 amount=-2 +kerning first=89 second=192 amount=-1 +kerning first=87 second=197 amount=-3 +kerning first=199 second=214 amount=-1 +kerning first=119 second=244 amount=-2 +kerning first=221 second=193 amount=-1 +kerning first=231 second=248 amount=-1 +kerning first=111 second=87 amount=-3 +kerning first=118 second=227 amount=-2 +kerning first=68 second=193 amount=-3 +kerning first=195 second=89 amount=-2 +kerning first=232 second=119 amount=-2 +kerning first=82 second=89 amount=-2 +kerning first=65 second=87 amount=-3 +kerning first=75 second=211 amount=-2 +kerning first=87 second=243 amount=-3 +kerning first=210 second=87 amount=-1 +kerning first=244 second=253 amount=-1 +kerning first=86 second=229 amount=-2 +kerning first=75 second=194 amount=2 +kerning first=193 second=71 amount=-1 +kerning first=242 second=118 amount=-2 +kerning first=253 second=245 amount=-2 +kerning first=255 second=235 amount=-1 +kerning first=248 second=89 amount=-7 +kerning first=255 second=111 amount=-2 +kerning first=67 second=216 amount=-1 +kerning first=84 second=213 amount=-2 +kerning first=86 second=196 amount=-6 +kerning first=84 second=198 amount=-3 +kerning first=87 second=65 amount=-3 +kerning first=118 second=225 amount=-2 +kerning first=221 second=248 amount=-7 +kerning first=86 second=233 amount=-4 +kerning first=234 second=89 amount=-7 +kerning first=212 second=87 amount=-1 +kerning first=111 second=253 amount=-1 +kerning first=248 second=119 amount=-2 +kerning first=253 second=235 amount=-1 +kerning first=244 second=118 amount=-2 +kerning first=89 second=198 amount=-1 +kerning first=199 second=213 amount=-1 +kerning first=121 second=242 amount=-2 +kerning first=86 second=97 amount=-2 +kerning first=119 second=248 amount=-2 +kerning first=253 second=111 amount=-2 +kerning first=84 second=79 amount=-2 +kerning first=99 second=246 amount=-1 +kerning first=89 second=232 amount=-7 +kerning first=221 second=234 amount=-7 +kerning first=192 second=89 amount=-2 +kerning first=234 second=119 amount=-2 +kerning first=89 second=246 amount=-7 +kerning first=233 second=89 amount=-7 +kerning first=245 second=255 amount=-1 +kerning first=75 second=197 amount=2 +kerning first=79 second=87 amount=-1 +kerning first=118 second=232 amount=-2 +kerning first=121 second=101 amount=-1 +kerning first=119 second=234 amount=-2 +kerning first=99 second=87 amount=-3 +kerning first=245 second=221 amount=-7 +kerning first=111 second=118 amount=-2 +kerning first=246 second=89 amount=-7 +kerning first=86 second=195 amount=-6 +kerning first=118 second=246 amount=-2 +kerning first=87 second=192 amount=-3 +kerning first=199 second=79 amount=-1 +kerning first=231 second=242 amount=-1 +kerning first=197 second=221 amount=-2 +kerning first=114 second=246 amount=-1 +kerning first=194 second=89 amount=-2 +kerning first=233 second=119 amount=-2 +kerning first=255 second=44 amount=-6 +kerning first=221 second=231 amount=-4 +kerning first=235 second=221 amount=-7 +kerning first=86 second=244 amount=-4 +kerning first=255 second=233 amount=-1 +kerning first=86 second=224 amount=-2 +kerning first=246 second=119 amount=-2 +kerning first=75 second=65 amount=2 +kerning first=230 second=87 amount=-3 +kerning first=243 second=89 amount=-7 +kerning first=67 second=210 amount=-1 +kerning first=245 second=86 amount=-4 +kerning first=99 second=245 amount=-1 +kerning first=86 second=193 amount=-6 +kerning first=89 second=245 amount=-7 +kerning first=193 second=89 amount=-2 +kerning first=253 second=44 amount=-6 +kerning first=197 second=86 amount=-6 +kerning first=221 second=242 amount=-7 +kerning first=242 second=255 amount=-1 +kerning first=235 second=86 amount=-4 +kerning first=253 second=233 amount=-1 +kerning first=243 second=119 amount=-2 +kerning first=118 second=245 amount=-2 +kerning first=242 second=221 amount=-7 +kerning first=87 second=198 amount=-3 +kerning first=121 second=243 amount=-2 +kerning first=221 second=194 amount=-1 +kerning first=119 second=242 amount=-2 +kerning first=68 second=194 amount=-3 +kerning first=114 second=245 amount=-1 +kerning first=99 second=111 amount=-1 +kerning first=255 second=46 amount=-6 +kerning first=89 second=235 amount=-7 +kerning first=87 second=232 amount=-3 +kerning first=196 second=221 amount=-2 +kerning first=221 second=101 amount=-7 +kerning first=86 second=248 amount=-4 +kerning first=75 second=214 amount=-2 +kerning first=101 second=221 amount=-7 +kerning first=89 second=111 amount=-7 +kerning first=87 second=246 amount=-3 +kerning first=232 second=87 amount=-3 +kerning first=244 second=255 amount=-1 +kerning first=231 second=89 amount=-7 +kerning first=245 second=121 amount=-1 +kerning first=195 second=84 amount=-4 +kerning first=86 second=230 amount=-2 +kerning first=75 second=192 amount=2 +kerning first=118 second=235 amount=-2 +kerning first=119 second=101 amount=-2 +kerning first=255 second=244 amount=-2 +kerning first=244 second=221 amount=-7 +kerning first=118 second=111 amount=-2 +kerning first=242 second=86 amount=-4 +kerning first=231 second=243 amount=-1 +kerning first=118 second=226 amount=-2 +kerning first=253 second=46 amount=-6 +kerning first=114 second=111 amount=-1 +kerning first=86 second=234 amount=-4 +kerning first=195 second=87 amount=-3 +kerning first=196 second=86 amount=-6 +kerning first=221 second=99 amount=-4 +kerning first=111 second=255 amount=-1 +kerning first=101 second=86 amount=-4 +kerning first=221 second=197 amount=-1 +kerning first=253 second=244 amount=-2 +kerning first=118 second=100 amount=-1 +kerning first=111 second=221 amount=-7 +kerning first=248 second=87 amount=-3 +kerning first=67 second=211 amount=-1 +kerning first=68 second=197 amount=-3 +kerning first=84 second=212 amount=-2 +kerning first=244 second=86 amount=-4 +kerning first=76 second=84 amount=-1 +kerning first=84 second=196 amount=-3 +kerning first=65 second=221 amount=-2 +kerning first=75 second=213 amount=-2 +kerning first=87 second=245 amount=-3 +kerning first=221 second=243 amount=-7 +kerning first=86 second=231 amount=-4 +kerning first=75 second=198 amount=2 +kerning first=242 second=121 amount=-1 +kerning first=234 second=87 amount=-3 +kerning first=197 second=71 amount=-1 +kerning first=192 second=84 amount=-4 +kerning first=255 second=248 amount=-2 +kerning first=89 second=196 amount=-1 +kerning first=199 second=212 amount=-1 +kerning first=221 second=65 amount=-1 +kerning first=119 second=243 amount=-2 +kerning first=118 second=229 amount=-2 +kerning first=111 second=86 amount=-4 +kerning first=68 second=65 amount=-3 +kerning first=89 second=233 amount=-7 +kerning first=87 second=235 amount=-3 +kerning first=192 second=87 amount=-3 +kerning first=118 second=44 amount=-6 +kerning first=65 second=86 amount=-6 +kerning first=86 second=242 amount=-4 +kerning first=75 second=79 amount=-2 +kerning first=87 second=111 amount=-3 +kerning first=233 second=87 amount=-3 +kerning first=244 second=121 amount=-1 +kerning first=248 second=253 amount=-1 +kerning first=194 second=84 amount=-4 +kerning first=253 second=248 amount=-2 +kerning first=118 second=233 amount=-2 +kerning first=255 second=234 amount=-1 +kerning first=84 second=216 amount=-2 +kerning first=246 second=87 amount=-3 +kerning first=86 second=194 amount=-6 +kerning first=84 second=195 amount=-3 +kerning first=118 second=97 amount=-2 +kerning first=86 second=101 amount=-4 +kerning first=194 second=87 amount=-3 +kerning first=216 second=87 amount=-1 +kerning first=99 second=221 amount=-7 +kerning first=121 second=232 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=253 second=234 amount=-1 +kerning first=196 second=71 amount=-1 +kerning first=248 second=118 amount=-2 +kerning first=193 second=84 amount=-4 +kerning first=89 second=195 amount=-1 +kerning first=199 second=216 amount=-1 +kerning first=121 second=246 amount=-2 +kerning first=221 second=192 amount=-1 +kerning first=243 second=87 amount=-3 +kerning first=68 second=192 amount=-3 +kerning first=99 second=244 amount=-1 +kerning first=84 second=193 amount=-3 +kerning first=118 second=46 amount=-6 +kerning first=89 second=244 amount=-7 +kerning first=193 second=87 amount=-3 +kerning first=246 second=253 amount=-1 +kerning first=86 second=99 amount=-4 +kerning first=230 second=221 amount=-7 +kerning first=99 second=86 amount=-4 +kerning first=255 second=242 amount=-2 +kerning first=245 second=89 amount=-7 +kerning first=86 second=197 amount=-6 +kerning first=89 second=193 amount=-1 +kerning first=87 second=196 amount=-3 +kerning first=118 second=244 amount=-2 +kerning first=231 second=246 amount=-1 +kerning first=118 second=224 amount=-2 +kerning first=197 second=89 amount=-2 +kerning first=114 second=244 amount=-1 +kerning first=87 second=233 amount=-3 +kerning first=235 second=89 amount=-7 +kerning first=86 second=243 amount=-4 +kerning first=214 second=87 amount=-1 +kerning first=245 second=119 amount=-2 +kerning first=243 second=253 amount=-1 +kerning first=231 second=87 amount=-3 +kerning first=255 second=101 amount=-1 +kerning first=246 second=118 amount=-2 +kerning first=65 second=71 amount=-1 +kerning first=86 second=228 amount=-2 +kerning first=221 second=198 amount=-1 +kerning first=121 second=245 amount=-2 +kerning first=230 second=86 amount=-4 +kerning first=253 second=242 amount=-2 +kerning first=67 second=214 amount=-1 +kerning first=68 second=198 amount=-3 +kerning first=84 second=210 amount=-2 +kerning first=99 second=248 amount=-1 +kerning first=86 second=65 amount=-6 +kerning first=221 second=232 amount=-7 +kerning first=235 second=119 amount=-2 +kerning first=89 second=248 amount=-7 +kerning first=232 second=221 amount=-7 +kerning first=221 second=246 amount=-7 +kerning first=211 second=87 amount=-1 +kerning first=121 second=235 amount=-1 +kerning first=119 second=232 amount=-2 +kerning first=253 second=101 amount=-1 +kerning first=243 second=118 amount=-2 +kerning first=118 second=248 amount=-2 +kerning first=242 second=89 amount=-7 +kerning first=87 second=195 amount=-3 +kerning first=199 second=210 amount=-1 +kerning first=121 second=111 amount=-2 +kerning first=119 second=246 amount=-2 +kerning first=231 second=245 amount=-1 +kerning first=118 second=230 amount=-2 +kerning first=114 second=248 amount=-1 +kerning first=195 second=221 amount=-2 +kerning first=89 second=234 amount=-7 +kerning first=196 second=89 amount=-2 +kerning first=82 second=221 amount=-2 +kerning first=75 second=212 amount=-2 +kerning first=101 second=89 amount=-7 +kerning first=87 second=244 amount=-3 +kerning first=232 second=86 amount=-4 +kerning first=248 second=255 amount=-1 +kerning first=86 second=227 amount=-2 +kerning first=75 second=196 amount=2 +kerning first=242 second=119 amount=-2 +kerning first=118 second=234 amount=-2 +kerning first=248 second=221 amount=-7 +kerning first=255 second=243 amount=-2 +kerning first=67 second=213 amount=-1 +kerning first=244 second=89 amount=-7 +kerning first=86 second=192 amount=-6 +kerning first=87 second=193 amount=-3 +kerning first=231 second=111 amount=-1 +kerning first=221 second=245 amount=-7 +kerning first=101 second=119 amount=-2 +kerning first=195 second=86 amount=-6 +kerning first=89 second=231 amount=-4 +kerning first=234 second=221 amount=-7 diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-641.png b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-641.png new file mode 100644 index 0000000..401a166 Binary files /dev/null and b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-641.png differ diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-642.png b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-642.png new file mode 100644 index 0000000..03e18be Binary files /dev/null and b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Bold-642.png differ diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.fnt b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.fnt new file mode 100644 index 0000000..b8b6f30 --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.fnt @@ -0,0 +1,550 @@ +info face="Metropolis-Regular" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2 +common lineHeight=33 base=26 scaleW=512 scaleH=512 pages=1 packed=0 +page id=0 file="Metropolis-Regular-32.png" +chars count=170 +char id=0 x=0 y=0 width=14 height=35 xoffset=1 yoffset=-1 xadvance=16 page=0 chnl=0 +char id=10 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=0 page=0 chnl=0 +char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=0 xadvance=9 page=0 chnl=0 +char id=33 x=494 y=91 width=7 height=24 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0 +char id=34 x=353 y=139 width=11 height=10 xoffset=1 yoffset=3 xadvance=13 page=0 chnl=0 +char id=35 x=158 y=115 width=22 height=24 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=36 x=212 y=35 width=19 height=29 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=37 x=133 y=115 width=25 height=24 xoffset=0 yoffset=3 xadvance=25 page=0 chnl=0 +char id=38 x=180 y=115 width=22 height=24 xoffset=0 yoffset=3 xadvance=21 page=0 chnl=0 +char id=39 x=364 y=139 width=6 height=10 xoffset=1 yoffset=3 xadvance=7 page=0 chnl=0 +char id=40 x=449 y=0 width=11 height=30 xoffset=0 yoffset=3 xadvance=11 page=0 chnl=0 +char id=41 x=460 y=0 width=11 height=30 xoffset=0 yoffset=3 xadvance=11 page=0 chnl=0 +char id=42 x=308 y=139 width=13 height=14 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=0 +char id=43 x=259 y=139 width=17 height=18 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=0 +char id=44 x=370 y=139 width=7 height=10 xoffset=1 yoffset=21 xadvance=8 page=0 chnl=0 +char id=45 x=423 y=139 width=12 height=5 xoffset=0 yoffset=15 xadvance=12 page=0 chnl=0 +char id=46 x=417 y=139 width=6 height=6 xoffset=1 yoffset=21 xadvance=8 page=0 chnl=0 +char id=47 x=178 y=35 width=17 height=29 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=0 +char id=48 x=94 y=115 width=22 height=24 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=49 x=427 y=91 width=11 height=24 xoffset=-1 yoffset=3 xadvance=11 page=0 chnl=0 +char id=50 x=438 y=91 width=18 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=51 x=456 y=91 width=18 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=52 x=474 y=91 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=53 x=0 y=115 width=19 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=54 x=19 y=115 width=19 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=55 x=38 y=115 width=18 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=56 x=56 y=115 width=19 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=57 x=75 y=115 width=19 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=58 x=504 y=115 width=6 height=19 xoffset=1 yoffset=8 xadvance=8 page=0 chnl=0 +char id=59 x=501 y=91 width=7 height=23 xoffset=1 yoffset=8 xadvance=8 page=0 chnl=0 +char id=60 x=173 y=139 width=18 height=19 xoffset=0 yoffset=6 xadvance=19 page=0 chnl=0 +char id=61 x=321 y=139 width=17 height=12 xoffset=1 yoffset=9 xadvance=19 page=0 chnl=0 +char id=62 x=191 y=139 width=17 height=19 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=0 +char id=63 x=116 y=115 width=17 height=24 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0 +char id=64 x=257 y=35 width=28 height=28 xoffset=0 yoffset=3 xadvance=28 page=0 chnl=0 +char id=65 x=312 y=65 width=25 height=24 xoffset=0 yoffset=3 xadvance=24 page=0 chnl=0 +char id=66 x=337 y=65 width=19 height=24 xoffset=2 yoffset=3 xadvance=22 page=0 chnl=0 +char id=67 x=356 y=65 width=22 height=24 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=68 x=378 y=65 width=22 height=24 xoffset=2 yoffset=3 xadvance=24 page=0 chnl=0 +char id=69 x=400 y=65 width=19 height=24 xoffset=1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=70 x=419 y=65 width=19 height=24 xoffset=1 yoffset=3 xadvance=19 page=0 chnl=0 +char id=71 x=438 y=65 width=23 height=24 xoffset=0 yoffset=3 xadvance=24 page=0 chnl=0 +char id=72 x=461 y=65 width=21 height=24 xoffset=1 yoffset=3 xadvance=23 page=0 chnl=0 +char id=73 x=482 y=65 width=6 height=24 xoffset=1 yoffset=3 xadvance=8 page=0 chnl=0 +char id=74 x=488 y=65 width=17 height=24 xoffset=-1 yoffset=3 xadvance=17 page=0 chnl=0 +char id=75 x=0 y=91 width=21 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=76 x=21 y=91 width=17 height=24 xoffset=1 yoffset=3 xadvance=18 page=0 chnl=0 +char id=77 x=38 y=91 width=24 height=24 xoffset=2 yoffset=3 xadvance=27 page=0 chnl=0 +char id=78 x=62 y=91 width=21 height=24 xoffset=2 yoffset=3 xadvance=25 page=0 chnl=0 +char id=79 x=83 y=91 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=80 x=109 y=91 width=20 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=81 x=129 y=91 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=82 x=155 y=91 width=20 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=83 x=17 y=65 width=19 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=84 x=175 y=91 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=85 x=195 y=91 width=22 height=24 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=0 +char id=86 x=217 y=91 width=25 height=24 xoffset=0 yoffset=3 xadvance=24 page=0 chnl=0 +char id=87 x=242 y=91 width=35 height=24 xoffset=0 yoffset=3 xadvance=35 page=0 chnl=0 +char id=88 x=277 y=91 width=23 height=24 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=89 x=300 y=91 width=23 height=24 xoffset=-1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=90 x=323 y=91 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=91 x=471 y=0 width=11 height=30 xoffset=1 yoffset=1 xadvance=12 page=0 chnl=0 +char id=92 x=195 y=35 width=17 height=29 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=0 +char id=93 x=482 y=0 width=11 height=30 xoffset=0 yoffset=1 xadvance=12 page=0 chnl=0 +char id=94 x=338 y=139 width=15 height=11 xoffset=0 yoffset=3 xadvance=16 page=0 chnl=0 +char id=95 x=435 y=139 width=22 height=5 xoffset=-2 yoffset=27 xadvance=19 page=0 chnl=0 +char id=96 x=385 y=139 width=9 height=7 xoffset=1 yoffset=2 xadvance=10 page=0 chnl=0 +char id=97 x=433 y=115 width=17 height=19 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0 +char id=98 x=343 y=91 width=19 height=24 xoffset=1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=99 x=450 y=115 width=18 height=19 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=0 +char id=100 x=362 y=91 width=19 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=101 x=468 y=115 width=19 height=19 xoffset=0 yoffset=8 xadvance=19 page=0 chnl=0 +char id=102 x=36 y=65 width=12 height=25 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=0 +char id=103 x=48 y=65 width=19 height=25 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=104 x=381 y=91 width=17 height=24 xoffset=1 yoffset=3 xadvance=19 page=0 chnl=0 +char id=105 x=302 y=35 width=6 height=26 xoffset=1 yoffset=1 xadvance=7 page=0 chnl=0 +char id=106 x=39 y=0 width=11 height=32 xoffset=-3 yoffset=1 xadvance=7 page=0 chnl=0 +char id=107 x=398 y=91 width=17 height=24 xoffset=1 yoffset=3 xadvance=17 page=0 chnl=0 +char id=108 x=505 y=65 width=5 height=24 xoffset=1 yoffset=3 xadvance=7 page=0 chnl=0 +char id=109 x=0 y=139 width=27 height=19 xoffset=1 yoffset=8 xadvance=29 page=0 chnl=0 +char id=110 x=487 y=115 width=17 height=19 xoffset=1 yoffset=8 xadvance=19 page=0 chnl=0 +char id=111 x=27 y=139 width=20 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=112 x=67 y=65 width=19 height=25 xoffset=1 yoffset=8 xadvance=20 page=0 chnl=0 +char id=113 x=86 y=65 width=19 height=25 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=114 x=47 y=139 width=12 height=19 xoffset=1 yoffset=8 xadvance=12 page=0 chnl=0 +char id=115 x=59 y=139 width=16 height=19 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0 +char id=116 x=415 y=91 width=12 height=24 xoffset=0 yoffset=3 xadvance=12 page=0 chnl=0 +char id=117 x=75 y=139 width=17 height=19 xoffset=1 yoffset=8 xadvance=19 page=0 chnl=0 +char id=118 x=92 y=139 width=20 height=19 xoffset=-1 yoffset=8 xadvance=18 page=0 chnl=0 +char id=119 x=112 y=139 width=27 height=19 xoffset=0 yoffset=8 xadvance=27 page=0 chnl=0 +char id=120 x=139 y=139 width=18 height=19 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=0 +char id=121 x=105 y=65 width=20 height=25 xoffset=-1 yoffset=8 xadvance=19 page=0 chnl=0 +char id=122 x=157 y=139 width=16 height=19 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0 +char id=123 x=493 y=0 width=13 height=30 xoffset=0 yoffset=3 xadvance=13 page=0 chnl=0 +char id=124 x=506 y=0 width=5 height=29 xoffset=2 yoffset=1 xadvance=9 page=0 chnl=0 +char id=125 x=0 y=35 width=13 height=30 xoffset=0 yoffset=3 xadvance=13 page=0 chnl=0 +char id=126 x=394 y=139 width=14 height=7 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=0 +char id=161 x=125 y=65 width=7 height=25 xoffset=1 yoffset=8 xadvance=9 page=0 chnl=0 +char id=162 x=132 y=65 width=18 height=25 xoffset=0 yoffset=5 xadvance=17 page=0 chnl=0 +char id=163 x=202 y=115 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=165 x=222 y=115 width=23 height=24 xoffset=-1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=168 x=457 y=139 width=12 height=5 xoffset=1 yoffset=3 xadvance=13 page=0 chnl=0 +char id=175 x=469 y=139 width=12 height=4 xoffset=1 yoffset=4 xadvance=14 page=0 chnl=0 +char id=180 x=408 y=139 width=9 height=7 xoffset=1 yoffset=2 xadvance=10 page=0 chnl=0 +char id=184 x=377 y=139 width=8 height=9 xoffset=1 yoffset=24 xadvance=10 page=0 chnl=0 +char id=191 x=150 y=65 width=17 height=25 xoffset=0 yoffset=8 xadvance=16 page=0 chnl=0 +char id=192 x=70 y=0 width=25 height=31 xoffset=0 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=193 x=95 y=0 width=25 height=31 xoffset=0 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=194 x=120 y=0 width=25 height=31 xoffset=0 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=195 x=145 y=0 width=25 height=31 xoffset=0 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=196 x=13 y=35 width=25 height=30 xoffset=0 yoffset=-3 xadvance=24 page=0 chnl=0 +char id=197 x=14 y=0 width=25 height=33 xoffset=0 yoffset=-6 xadvance=24 page=0 chnl=0 +char id=198 x=245 y=115 width=32 height=24 xoffset=0 yoffset=3 xadvance=33 page=0 chnl=0 +char id=199 x=38 y=35 width=22 height=30 xoffset=0 yoffset=3 xadvance=22 page=0 chnl=0 +char id=200 x=170 y=0 width=19 height=31 xoffset=1 yoffset=-4 xadvance=20 page=0 chnl=0 +char id=201 x=189 y=0 width=19 height=31 xoffset=1 yoffset=-4 xadvance=20 page=0 chnl=0 +char id=202 x=208 y=0 width=19 height=31 xoffset=1 yoffset=-4 xadvance=20 page=0 chnl=0 +char id=203 x=60 y=35 width=19 height=30 xoffset=1 yoffset=-3 xadvance=20 page=0 chnl=0 +char id=204 x=227 y=0 width=11 height=31 xoffset=-3 yoffset=-4 xadvance=8 page=0 chnl=0 +char id=205 x=238 y=0 width=11 height=31 xoffset=1 yoffset=-4 xadvance=8 page=0 chnl=0 +char id=206 x=249 y=0 width=12 height=31 xoffset=-2 yoffset=-4 xadvance=8 page=0 chnl=0 +char id=207 x=79 y=35 width=12 height=30 xoffset=-2 yoffset=-3 xadvance=8 page=0 chnl=0 +char id=208 x=277 y=115 width=24 height=24 xoffset=0 yoffset=3 xadvance=25 page=0 chnl=0 +char id=209 x=261 y=0 width=21 height=31 xoffset=2 yoffset=-4 xadvance=25 page=0 chnl=0 +char id=210 x=282 y=0 width=26 height=31 xoffset=0 yoffset=-4 xadvance=26 page=0 chnl=0 +char id=211 x=308 y=0 width=26 height=31 xoffset=0 yoffset=-4 xadvance=26 page=0 chnl=0 +char id=212 x=91 y=35 width=26 height=30 xoffset=0 yoffset=-3 xadvance=26 page=0 chnl=0 +char id=213 x=334 y=0 width=26 height=31 xoffset=0 yoffset=-4 xadvance=26 page=0 chnl=0 +char id=214 x=231 y=35 width=26 height=29 xoffset=0 yoffset=-2 xadvance=26 page=0 chnl=0 +char id=215 x=293 y=139 width=15 height=15 xoffset=1 yoffset=8 xadvance=17 page=0 chnl=0 +char id=216 x=301 y=115 width=26 height=24 xoffset=0 yoffset=3 xadvance=26 page=0 chnl=0 +char id=217 x=360 y=0 width=22 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=218 x=382 y=0 width=22 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=219 x=404 y=0 width=22 height=31 xoffset=1 yoffset=-4 xadvance=24 page=0 chnl=0 +char id=220 x=117 y=35 width=22 height=30 xoffset=1 yoffset=-3 xadvance=24 page=0 chnl=0 +char id=221 x=426 y=0 width=23 height=31 xoffset=-1 yoffset=-4 xadvance=21 page=0 chnl=0 +char id=222 x=327 y=115 width=20 height=24 xoffset=1 yoffset=3 xadvance=21 page=0 chnl=0 +char id=223 x=167 y=65 width=17 height=25 xoffset=1 yoffset=2 xadvance=18 page=0 chnl=0 +char id=224 x=308 y=35 width=17 height=26 xoffset=0 yoffset=1 xadvance=18 page=0 chnl=0 +char id=225 x=325 y=35 width=17 height=26 xoffset=0 yoffset=1 xadvance=18 page=0 chnl=0 +char id=226 x=184 y=65 width=17 height=25 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=0 +char id=227 x=201 y=65 width=17 height=25 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=0 +char id=228 x=347 y=115 width=17 height=24 xoffset=0 yoffset=3 xadvance=18 page=0 chnl=0 +char id=229 x=285 y=35 width=17 height=28 xoffset=0 yoffset=-1 xadvance=18 page=0 chnl=0 +char id=230 x=208 y=139 width=31 height=19 xoffset=0 yoffset=8 xadvance=31 page=0 chnl=0 +char id=231 x=218 y=65 width=18 height=25 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=0 +char id=232 x=342 y=35 width=19 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=233 x=361 y=35 width=19 height=26 xoffset=0 yoffset=1 xadvance=19 page=0 chnl=0 +char id=234 x=236 y=65 width=19 height=25 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=0 +char id=235 x=364 y=115 width=19 height=24 xoffset=0 yoffset=3 xadvance=19 page=0 chnl=0 +char id=236 x=380 y=35 width=10 height=26 xoffset=-3 yoffset=1 xadvance=7 page=0 chnl=0 +char id=237 x=390 y=35 width=12 height=26 xoffset=1 yoffset=1 xadvance=7 page=0 chnl=0 +char id=238 x=402 y=35 width=12 height=26 xoffset=-2 yoffset=1 xadvance=7 page=0 chnl=0 +char id=239 x=383 y=115 width=13 height=24 xoffset=-2 yoffset=3 xadvance=7 page=0 chnl=0 +char id=240 x=414 y=35 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=241 x=255 y=65 width=17 height=25 xoffset=1 yoffset=2 xadvance=19 page=0 chnl=0 +char id=242 x=434 y=35 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=243 x=454 y=35 width=20 height=26 xoffset=0 yoffset=1 xadvance=20 page=0 chnl=0 +char id=244 x=272 y=65 width=20 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=245 x=292 y=65 width=20 height=25 xoffset=0 yoffset=2 xadvance=20 page=0 chnl=0 +char id=246 x=396 y=115 width=20 height=24 xoffset=0 yoffset=3 xadvance=20 page=0 chnl=0 +char id=247 x=276 y=139 width=17 height=16 xoffset=1 yoffset=7 xadvance=19 page=0 chnl=0 +char id=248 x=239 y=139 width=20 height=19 xoffset=0 yoffset=8 xadvance=20 page=0 chnl=0 +char id=249 x=474 y=35 width=17 height=26 xoffset=1 yoffset=1 xadvance=19 page=0 chnl=0 +char id=250 x=491 y=35 width=17 height=26 xoffset=1 yoffset=1 xadvance=19 page=0 chnl=0 +char id=251 x=0 y=65 width=17 height=26 xoffset=1 yoffset=1 xadvance=19 page=0 chnl=0 +char id=252 x=416 y=115 width=17 height=24 xoffset=1 yoffset=3 xadvance=19 page=0 chnl=0 +char id=253 x=50 y=0 width=20 height=32 xoffset=-1 yoffset=1 xadvance=19 page=0 chnl=0 +char id=254 x=139 y=35 width=19 height=30 xoffset=1 yoffset=3 xadvance=20 page=0 chnl=0 +char id=255 x=158 y=35 width=20 height=30 xoffset=-1 yoffset=3 xadvance=19 page=0 chnl=0 +kernings count=375 +kerning first=244 second=119 amount=-1 +kerning first=86 second=225 amount=-1 +kerning first=119 second=245 amount=-1 +kerning first=253 second=243 amount=-1 +kerning first=111 second=89 amount=-4 +kerning first=248 second=86 amount=-2 +kerning first=84 second=211 amount=-1 +kerning first=84 second=194 amount=-2 +kerning first=221 second=235 amount=-4 +kerning first=192 second=221 amount=-1 +kerning first=121 second=44 amount=-4 +kerning first=65 second=89 amount=-1 +kerning first=75 second=216 amount=-1 +kerning first=87 second=248 amount=-2 +kerning first=89 second=242 amount=-4 +kerning first=221 second=111 amount=-4 +kerning first=233 second=221 amount=-4 +kerning first=246 second=255 amount=-1 +kerning first=75 second=195 amount=1 +kerning first=234 second=86 amount=-2 +kerning first=121 second=233 amount=-1 +kerning first=119 second=235 amount=-1 +kerning first=111 second=119 amount=-1 +kerning first=76 second=86 amount=-3 +kerning first=246 second=221 amount=-4 +kerning first=86 second=198 amount=-3 +kerning first=118 second=242 amount=-1 +kerning first=89 second=194 amount=-1 +kerning first=92 second=92 amount=-4 +kerning first=119 second=111 amount=-1 +kerning first=114 second=242 amount=-1 +kerning first=86 second=232 amount=-2 +kerning first=194 second=221 amount=-1 +kerning first=89 second=101 amount=-4 +kerning first=87 second=234 amount=-2 +kerning first=192 second=86 amount=-3 +kerning first=86 second=246 amount=-2 +kerning first=243 second=255 amount=-1 +kerning first=248 second=121 amount=-1 +kerning first=233 second=86 amount=-2 +kerning first=197 second=84 amount=-2 +kerning first=92 second=47 amount=2 +kerning first=75 second=193 amount=1 +kerning first=118 second=101 amount=-1 +kerning first=243 second=221 amount=-4 +kerning first=245 second=87 amount=-2 +kerning first=246 second=86 amount=-2 +kerning first=84 second=197 amount=-2 +kerning first=121 second=46 amount=-4 +kerning first=193 second=221 amount=-1 +kerning first=197 second=87 amount=-1 +kerning first=194 second=86 amount=-3 +kerning first=89 second=99 amount=-4 +kerning first=87 second=231 amount=-2 +kerning first=235 second=87 amount=-2 +kerning first=195 second=71 amount=-1 +kerning first=99 second=89 amount=-4 +kerning first=89 second=197 amount=-1 +kerning first=121 second=244 amount=-1 +kerning first=221 second=196 amount=-1 +kerning first=243 second=86 amount=-2 +kerning first=68 second=196 amount=-2 +kerning first=84 second=65 amount=-2 +kerning first=221 second=233 amount=-4 +kerning first=86 second=245 amount=-2 +kerning first=119 second=44 amount=-3 +kerning first=75 second=210 amount=-1 +kerning first=89 second=243 amount=-4 +kerning first=193 second=86 amount=-3 +kerning first=87 second=242 amount=-2 +kerning first=231 second=221 amount=-4 +kerning first=246 second=121 amount=-1 +kerning first=245 second=253 amount=-1 +kerning first=230 second=89 amount=-4 +kerning first=255 second=232 amount=-1 +kerning first=196 second=84 amount=-2 +kerning first=119 second=233 amount=-1 +kerning first=255 second=246 amount=-1 +kerning first=89 second=65 amount=-1 +kerning first=118 second=243 amount=-1 +kerning first=242 second=87 amount=-2 +kerning first=87 second=194 amount=-1 +kerning first=118 second=228 amount=-1 +kerning first=114 second=243 amount=-1 +kerning first=86 second=235 amount=-2 +kerning first=87 second=101 amount=-2 +kerning first=196 second=87 amount=-1 +kerning first=230 second=119 amount=-1 +kerning first=213 second=87 amount=-1 +kerning first=86 second=111 amount=-2 +kerning first=101 second=87 amount=-2 +kerning first=243 second=121 amount=-1 +kerning first=192 second=71 amount=-1 +kerning first=245 second=118 amount=-1 +kerning first=231 second=86 amount=-2 +kerning first=253 second=232 amount=-1 +kerning first=121 second=248 amount=-1 +kerning first=86 second=226 amount=-1 +kerning first=221 second=195 amount=-1 +kerning first=253 second=246 amount=-1 +kerning first=68 second=195 amount=-2 +kerning first=84 second=214 amount=-1 +kerning first=244 second=87 amount=-2 +kerning first=84 second=192 amount=-2 +kerning first=119 second=46 amount=-3 +kerning first=232 second=89 amount=-4 +kerning first=221 second=244 amount=-4 +kerning first=47 second=47 amount=-4 +kerning first=87 second=99 amount=-2 +kerning first=242 second=253 amount=-1 +kerning first=121 second=234 amount=-1 +kerning first=194 second=71 amount=-1 +kerning first=65 second=84 amount=-2 +kerning first=255 second=245 amount=-1 +kerning first=89 second=192 amount=-1 +kerning first=87 second=197 amount=-1 +kerning first=119 second=244 amount=-1 +kerning first=221 second=193 amount=-1 +kerning first=111 second=87 amount=-2 +kerning first=118 second=227 amount=-1 +kerning first=68 second=193 amount=-2 +kerning first=195 second=89 amount=-1 +kerning first=232 second=119 amount=-1 +kerning first=82 second=89 amount=-1 +kerning first=65 second=87 amount=-1 +kerning first=75 second=211 amount=-1 +kerning first=87 second=243 amount=-2 +kerning first=210 second=87 amount=-1 +kerning first=244 second=253 amount=-1 +kerning first=86 second=229 amount=-1 +kerning first=75 second=194 amount=1 +kerning first=193 second=71 amount=-1 +kerning first=242 second=118 amount=-1 +kerning first=253 second=245 amount=-1 +kerning first=255 second=235 amount=-1 +kerning first=248 second=89 amount=-4 +kerning first=255 second=111 amount=-1 +kerning first=84 second=213 amount=-1 +kerning first=86 second=196 amount=-3 +kerning first=84 second=198 amount=-2 +kerning first=87 second=65 amount=-1 +kerning first=118 second=225 amount=-1 +kerning first=221 second=248 amount=-4 +kerning first=86 second=233 amount=-2 +kerning first=234 second=89 amount=-4 +kerning first=212 second=87 amount=-1 +kerning first=111 second=253 amount=-1 +kerning first=248 second=119 amount=-1 +kerning first=253 second=235 amount=-1 +kerning first=244 second=118 amount=-1 +kerning first=89 second=198 amount=-1 +kerning first=121 second=242 amount=-1 +kerning first=86 second=97 amount=-1 +kerning first=119 second=248 amount=-1 +kerning first=253 second=111 amount=-1 +kerning first=84 second=79 amount=-1 +kerning first=89 second=232 amount=-4 +kerning first=221 second=234 amount=-4 +kerning first=192 second=89 amount=-1 +kerning first=234 second=119 amount=-1 +kerning first=89 second=246 amount=-4 +kerning first=233 second=89 amount=-4 +kerning first=245 second=255 amount=-1 +kerning first=75 second=197 amount=1 +kerning first=79 second=87 amount=-1 +kerning first=118 second=232 amount=-1 +kerning first=121 second=101 amount=-1 +kerning first=119 second=234 amount=-1 +kerning first=99 second=87 amount=-2 +kerning first=245 second=221 amount=-4 +kerning first=111 second=118 amount=-1 +kerning first=246 second=89 amount=-4 +kerning first=86 second=195 amount=-3 +kerning first=118 second=246 amount=-1 +kerning first=87 second=192 amount=-1 +kerning first=197 second=221 amount=-1 +kerning first=114 second=246 amount=-1 +kerning first=194 second=89 amount=-1 +kerning first=233 second=119 amount=-1 +kerning first=255 second=44 amount=-4 +kerning first=235 second=221 amount=-4 +kerning first=86 second=244 amount=-2 +kerning first=255 second=233 amount=-1 +kerning first=86 second=224 amount=-1 +kerning first=246 second=119 amount=-1 +kerning first=75 second=65 amount=1 +kerning first=230 second=87 amount=-2 +kerning first=243 second=89 amount=-4 +kerning first=245 second=86 amount=-2 +kerning first=86 second=193 amount=-3 +kerning first=89 second=245 amount=-4 +kerning first=193 second=89 amount=-1 +kerning first=253 second=44 amount=-4 +kerning first=197 second=86 amount=-3 +kerning first=221 second=242 amount=-4 +kerning first=242 second=255 amount=-1 +kerning first=235 second=86 amount=-2 +kerning first=253 second=233 amount=-1 +kerning first=243 second=119 amount=-1 +kerning first=118 second=245 amount=-1 +kerning first=242 second=221 amount=-4 +kerning first=87 second=198 amount=-1 +kerning first=121 second=243 amount=-1 +kerning first=221 second=194 amount=-1 +kerning first=119 second=242 amount=-1 +kerning first=68 second=194 amount=-2 +kerning first=114 second=245 amount=-1 +kerning first=255 second=46 amount=-4 +kerning first=89 second=235 amount=-4 +kerning first=87 second=232 amount=-2 +kerning first=196 second=221 amount=-1 +kerning first=221 second=101 amount=-4 +kerning first=86 second=248 amount=-2 +kerning first=75 second=214 amount=-1 +kerning first=101 second=221 amount=-4 +kerning first=89 second=111 amount=-4 +kerning first=87 second=246 amount=-2 +kerning first=232 second=87 amount=-2 +kerning first=244 second=255 amount=-1 +kerning first=231 second=89 amount=-4 +kerning first=245 second=121 amount=-1 +kerning first=195 second=84 amount=-2 +kerning first=86 second=230 amount=-1 +kerning first=75 second=192 amount=1 +kerning first=118 second=235 amount=-1 +kerning first=119 second=101 amount=-1 +kerning first=255 second=244 amount=-1 +kerning first=244 second=221 amount=-4 +kerning first=118 second=111 amount=-1 +kerning first=242 second=86 amount=-2 +kerning first=118 second=226 amount=-1 +kerning first=253 second=46 amount=-4 +kerning first=114 second=111 amount=-1 +kerning first=86 second=234 amount=-2 +kerning first=195 second=87 amount=-1 +kerning first=196 second=86 amount=-3 +kerning first=221 second=99 amount=-4 +kerning first=111 second=255 amount=-1 +kerning first=101 second=86 amount=-2 +kerning first=221 second=197 amount=-1 +kerning first=253 second=244 amount=-1 +kerning first=118 second=100 amount=-1 +kerning first=111 second=221 amount=-4 +kerning first=248 second=87 amount=-2 +kerning first=84 second=212 amount=-1 +kerning first=68 second=197 amount=-2 +kerning first=244 second=86 amount=-2 +kerning first=76 second=84 amount=-1 +kerning first=84 second=196 amount=-2 +kerning first=65 second=221 amount=-1 +kerning first=75 second=213 amount=-1 +kerning first=87 second=245 amount=-2 +kerning first=221 second=243 amount=-4 +kerning first=86 second=231 amount=-2 +kerning first=75 second=198 amount=1 +kerning first=242 second=121 amount=-1 +kerning first=234 second=87 amount=-2 +kerning first=197 second=71 amount=-1 +kerning first=192 second=84 amount=-2 +kerning first=255 second=248 amount=-1 +kerning first=89 second=196 amount=-1 +kerning first=221 second=65 amount=-1 +kerning first=119 second=243 amount=-1 +kerning first=118 second=229 amount=-1 +kerning first=111 second=86 amount=-2 +kerning first=68 second=65 amount=-2 +kerning first=89 second=233 amount=-4 +kerning first=87 second=235 amount=-2 +kerning first=192 second=87 amount=-1 +kerning first=118 second=44 amount=-4 +kerning first=65 second=86 amount=-3 +kerning first=86 second=242 amount=-2 +kerning first=75 second=79 amount=-1 +kerning first=87 second=111 amount=-2 +kerning first=233 second=87 amount=-2 +kerning first=244 second=121 amount=-1 +kerning first=248 second=253 amount=-1 +kerning first=194 second=84 amount=-2 +kerning first=253 second=248 amount=-1 +kerning first=118 second=233 amount=-1 +kerning first=255 second=234 amount=-1 +kerning first=84 second=216 amount=-1 +kerning first=246 second=87 amount=-2 +kerning first=86 second=194 amount=-3 +kerning first=84 second=195 amount=-2 +kerning first=118 second=97 amount=-1 +kerning first=86 second=101 amount=-2 +kerning first=194 second=87 amount=-1 +kerning first=216 second=87 amount=-1 +kerning first=99 second=221 amount=-4 +kerning first=121 second=232 amount=-1 +kerning first=111 second=121 amount=-1 +kerning first=253 second=234 amount=-1 +kerning first=196 second=71 amount=-1 +kerning first=248 second=118 amount=-1 +kerning first=193 second=84 amount=-2 +kerning first=89 second=195 amount=-1 +kerning first=121 second=246 amount=-1 +kerning first=221 second=192 amount=-1 +kerning first=243 second=87 amount=-2 +kerning first=68 second=192 amount=-2 +kerning first=84 second=193 amount=-2 +kerning first=118 second=46 amount=-4 +kerning first=89 second=244 amount=-4 +kerning first=193 second=87 amount=-1 +kerning first=246 second=253 amount=-1 +kerning first=86 second=99 amount=-2 +kerning first=230 second=221 amount=-4 +kerning first=99 second=86 amount=-2 +kerning first=255 second=242 amount=-1 +kerning first=245 second=89 amount=-4 +kerning first=86 second=197 amount=-3 +kerning first=89 second=193 amount=-1 +kerning first=87 second=196 amount=-1 +kerning first=118 second=244 amount=-1 +kerning first=118 second=224 amount=-1 +kerning first=197 second=89 amount=-1 +kerning first=114 second=244 amount=-1 +kerning first=87 second=233 amount=-2 +kerning first=235 second=89 amount=-4 +kerning first=86 second=243 amount=-2 +kerning first=214 second=87 amount=-1 +kerning first=245 second=119 amount=-1 +kerning first=243 second=253 amount=-1 +kerning first=231 second=87 amount=-2 +kerning first=255 second=101 amount=-1 +kerning first=246 second=118 amount=-1 +kerning first=65 second=71 amount=-1 +kerning first=86 second=228 amount=-1 +kerning first=221 second=198 amount=-1 +kerning first=121 second=245 amount=-1 +kerning first=230 second=86 amount=-2 +kerning first=253 second=242 amount=-1 +kerning first=68 second=198 amount=-2 +kerning first=84 second=210 amount=-1 +kerning first=86 second=65 amount=-3 +kerning first=221 second=232 amount=-4 +kerning first=235 second=119 amount=-1 +kerning first=89 second=248 amount=-4 +kerning first=232 second=221 amount=-4 +kerning first=221 second=246 amount=-4 +kerning first=211 second=87 amount=-1 +kerning first=121 second=235 amount=-1 +kerning first=119 second=232 amount=-1 +kerning first=253 second=101 amount=-1 +kerning first=243 second=118 amount=-1 +kerning first=118 second=248 amount=-1 +kerning first=242 second=89 amount=-4 +kerning first=87 second=195 amount=-1 +kerning first=121 second=111 amount=-1 +kerning first=119 second=246 amount=-1 +kerning first=118 second=230 amount=-1 +kerning first=114 second=248 amount=-1 +kerning first=195 second=221 amount=-1 +kerning first=89 second=234 amount=-4 +kerning first=196 second=89 amount=-1 +kerning first=82 second=221 amount=-1 +kerning first=75 second=212 amount=-1 +kerning first=101 second=89 amount=-4 +kerning first=87 second=244 amount=-2 +kerning first=232 second=86 amount=-2 +kerning first=248 second=255 amount=-1 +kerning first=86 second=227 amount=-1 +kerning first=75 second=196 amount=1 +kerning first=242 second=119 amount=-1 +kerning first=118 second=234 amount=-1 +kerning first=248 second=221 amount=-4 +kerning first=255 second=243 amount=-1 +kerning first=244 second=89 amount=-4 +kerning first=86 second=192 amount=-3 +kerning first=87 second=193 amount=-1 +kerning first=221 second=245 amount=-4 +kerning first=101 second=119 amount=-1 +kerning first=195 second=86 amount=-3 +kerning first=234 second=221 amount=-4 diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.png b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.png new file mode 100644 index 0000000..d538a06 Binary files /dev/null and b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/Metropolis-Regular-32.png differ diff --git a/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/SIL Open Font License.txt b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/SIL Open Font License.txt new file mode 100644 index 0000000..2608640 --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Fonts/Metropolis/SIL Open Font License.txt @@ -0,0 +1,43 @@ +Copyright (c) 2015, Chris Simpson, with Reserved Font Name: "Metropolis". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright statement(s). + +"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy new file mode 100644 index 0000000..c8c8de4 --- /dev/null +++ b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy @@ -0,0 +1,201 @@ +// Styling of Lemur components +// For documentation, see +// https://github.com/jMonkeyEngine-Contributions/Lemur/wiki/Styling + +import com.simsilica.lemur.Button +import com.simsilica.lemur.Button.ButtonAction +import com.simsilica.lemur.Command +import com.simsilica.lemur.HAlignment +import com.simsilica.lemur.Insets3f +import com.simsilica.lemur.component.QuadBackgroundComponent +import com.simsilica.lemur.component.TbtQuadBackgroundComponent + +def bgColor = color(0.25, 0.5, 0.5, 1) +def buttonEnabledColor = color(0.8, 0.9, 1, 1) +def buttonDisabledColor = color(0.8, 0.9, 1, 0.2) +def buttonBgColor = color(0, 0.75, 0.75, 1) +def sliderColor = color(0.6, 0.8, 0.8, 1) +def sliderBgColor = color(0.5, 0.75, 0.75, 1) +def gradientColor = color(0.5, 0.75, 0.85, 0.5) +def tabbuttonEnabledColor = color(0.4, 0.45, 0.5, 1) + +def gradient = TbtQuadBackgroundComponent.create( + texture(name: "/com/simsilica/lemur/icons/bordered-gradient.png", + generateMips: false), + 1, 1, 1, 126, 126, + 1f, false) + +def doubleGradient = new QuadBackgroundComponent(gradientColor) +doubleGradient.texture = texture(name: "/com/simsilica/lemur/icons/double-gradient-128.png", + generateMips: false) + +selector("pp") { + font = font("Interface/Fonts/Metropolis/Metropolis-Regular-32.fnt") +} + +selector("label", "pp") { + insets = new Insets3f(2, 2, 2, 2) + color = buttonEnabledColor +} + +selector("header", "pp") { + font = font("Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt") + insets = new Insets3f(2, 2, 2, 2) + color = color(1, 0.5, 0, 1) + textHAlignment = HAlignment.Center +} + +selector("container", "pp") { + background = gradient.clone() + background.setColor(bgColor) +} + +selector("slider", "pp") { + background = gradient.clone() + background.setColor(bgColor) +} + +def pressedCommand = new Command