diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 75cbdf8..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..8f892a4 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2022 George112n + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/LiveWeather/.DS_Store b/LiveWeather/.DS_Store deleted file mode 100644 index b5c6097..0000000 Binary files a/LiveWeather/.DS_Store and /dev/null differ diff --git a/LiveWeather/.classpath b/LiveWeather/.classpath deleted file mode 100755 index dc29d94..0000000 --- a/LiveWeather/.classpath +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/LiveWeather/.project b/LiveWeather/.project deleted file mode 100755 index ffd0ab3..0000000 --- a/LiveWeather/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - LiveWeather - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/LiveWeather/.settings/org.eclipse.jdt.core.prefs b/LiveWeather/.settings/org.eclipse.jdt.core.prefs deleted file mode 100755 index 3a21537..0000000 --- a/LiveWeather/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/LiveWeather/src/.DS_Store b/LiveWeather/src/.DS_Store deleted file mode 100644 index db9f78e..0000000 Binary files a/LiveWeather/src/.DS_Store and /dev/null differ diff --git a/LiveWeather/src/.gitattributes b/LiveWeather/src/.gitattributes deleted file mode 100755 index dfe0770..0000000 --- a/LiveWeather/src/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/LiveWeather/src/LiveWeather/Commands/Live.java b/LiveWeather/src/LiveWeather/Commands/Live.java deleted file mode 100644 index b42a8f6..0000000 --- a/LiveWeather/src/LiveWeather/Commands/Live.java +++ /dev/null @@ -1,93 +0,0 @@ -package LiveWeather.Commands; - -import java.util.ArrayList; -import java.util.UUID; - -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import LiveWeather.LiveWeatherUtil; -import LiveWeather.Main; -import LiveWeather.UpdateCall; -import LiveWeather.WeatherPreference; - -public class Live implements CommandExecutor -{ - @EventHandler - public void onCmd(PlayerCommandPreprocessEvent e) - { - if (!(e.getPlayer().hasPermission("Liveweather.live.toggleSelf") || e.getPlayer().hasPermission("Liveweather.live.toggleOthers"))) - { - e.setCancelled(true); - e.getPlayer().sendMessage(ChatColor.RED +"You do not have permission to use this command"); - } - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) - { - //Check is command sender is a player - if (!(sender instanceof Player)) - { - sender.sendMessage("&cYou cannot add a player to a region!"); - return true; - } - - //Convert sender to player - Player p = (Player) sender; - - //Gets the list of players with live - ArrayList playersWithLive = Main.getInstance().getLiveList(); - for (UUID uuid : playersWithLive) - { - if (uuid.equals(p.getUniqueId())) - { - playersWithLive.remove(uuid); - p.resetPlayerWeather(); - p.resetPlayerTime(); - p.setGameMode(GameMode.CREATIVE); - p.setWalkSpeed((float) 0.2); - p.setResourcePack(Main.getInstance().getConfig().getString("defaultResourcePack")); - - //Now reenables liveweather or livetime - - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - if (wp.getWeather() || wp.getTime()) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(wp.getWeather(), wp.getTime(), true); - long lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - - if (wp.getTime()) - { - p.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - } - } - - //Remove player from list - playersWithLive.remove(p.getUniqueId()); - return true; - } - } - //Only reaches this if the player isn't in the /live list - //Adds player to the live list - playersWithLive.add(p.getUniqueId()); - UpdateCall.InitialLiveRun(p); - return true; - } -} diff --git a/LiveWeather/src/LiveWeather/Commands/LiveTime.java b/LiveWeather/src/LiveWeather/Commands/LiveTime.java deleted file mode 100755 index d88f8de..0000000 --- a/LiveWeather/src/LiveWeather/Commands/LiveTime.java +++ /dev/null @@ -1,234 +0,0 @@ -package LiveWeather.Commands; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import LiveWeather.WeatherPreference; -import LiveWeather.LiveWeatherUtil; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 14:08:09 - */ - -public class LiveTime implements CommandExecutor -{ - @EventHandler - public void onCmd(PlayerCommandPreprocessEvent e) - { - if (!(e.getPlayer().hasPermission("Liveweather.time.toggleSelf") || e.getPlayer().hasPermission("Liveweather.time.toggleOthers"))) - { - e.setCancelled(true); - e.getPlayer().sendMessage(ChatColor.RED +"You do not have permission to use this command"); - } - } - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) - { - //Check is command sender is a player - if (!(sender instanceof Player)) - { - sender.sendMessage("&cYou cannot add a player to a region!"); - return true; - } - - //Convert sender to player - Player p = (Player) sender; - - if (args.length == 0) - { - if (!p.hasPermission("Liveweather.time.toggleSelf")) - { - p.sendMessage(ChatColor.RED +"You do not have permission to toggle your live time"); - return true; - } - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - boolean newState; - long lCurrentTime; - - newState = wp.toogleTime(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live time enabled"); - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(false, true, false); - lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - } - else - { - p.sendMessage(ChatColor.GOLD + "Live time disabled"); - p.resetPlayerTime(); - } - return true; - } - else if (args.length > 0) - { - if (!p.hasPermission("Liveweather.time.toggleOthers")) - { - if (!p.hasPermission("Liveweather.time.toggleSelf")) - { - p.sendMessage(ChatColor.RED +"You do not have permission to toggle your live time"); - return true; - } - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - boolean newState; - long lCurrentTime; - - newState = wp.toogleTime(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live time enabled"); - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(false, true, false); - lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - } - else - { - p.sendMessage(ChatColor.GOLD + "Live time disabled"); - p.resetPlayerTime(); - } - } - else - { - - Player user = Bukkit.getPlayer(args[0]); - - - if (user == null) - { - p.sendMessage(ChatColor.RED + args[0] + " is not online!"); - return true; - } - - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(user.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - boolean newState; - long lCurrentTime; - - newState = wp.toogleTime(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live time enabled for "+user.getName()); - user.sendMessage(ChatColor.GOLD +p.getName() +" enabled your live time"); - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(false, true, false); - lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - user.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - } - else - { - p.sendMessage(ChatColor.GOLD + "Live time disabled for "+user.getName()); - user.sendMessage(ChatColor.GOLD +p.getName() +" disabled your live time"); - user.resetPlayerTime(); - } - return true; - } - } - - return true; - - //Get player's preferences - - - /* if (args.length > 0) - { - /* if (args[0].equalsIgnoreCase("Seasonal")) - { - newState = wp.toogleSeasonal(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Seasonal time enabled"); - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(false, false, true, false); - lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time updated for "+ChatColor.RED +szTime); - } - else - { - p.sendMessage(ChatColor.GOLD + "Seasonal time disabled"); - lCurrentTime = Main.updateTime(p); - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time updated for "+ChatColor.RED +szTime); - } - return true; - } - */ - /* else - { - p.sendMessage(ChatColor.RED + "/livetime [seasonal]"); - return true; - } - /* - } - */ - /* else - { - newState = wp.toogleTime(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live time enabled"); - // if (wp.getSeasonal()) - // { - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(false, false, true, false); - lCurrentTime = LWU.lTime; - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - // } - /* else - { - lCurrentTime = Main.updateTime(p); - String szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - p.sendMessage(ChatColor.GOLD + "Time set to non seasonal "+ChatColor.RED +szTime); - } - - } - else - { - p.sendMessage(ChatColor.GOLD + "Live time disabled"); - p.resetPlayerTime(); - } - } - return true; - */ - } -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/Commands/LiveWeather.java b/LiveWeather/src/LiveWeather/Commands/LiveWeather.java deleted file mode 100755 index 9495d1f..0000000 --- a/LiveWeather/src/LiveWeather/Commands/LiveWeather.java +++ /dev/null @@ -1,130 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 23:37:13 - */ -package LiveWeather.Commands; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import LiveWeather.LiveWeatherUtil; -import LiveWeather.WeatherPreference; - -public class LiveWeather implements CommandExecutor -{ - @EventHandler - public void onCmd(PlayerCommandPreprocessEvent e) - { - if (!(e.getPlayer().hasPermission("Liveweather.weather.toggleSelf") || e.getPlayer().hasPermission("Liveweather.weather.toggleOthers"))) - { - e.setCancelled(true); - e.getPlayer().sendMessage(ChatColor.RED +"You do not have permission to use this command"); - } - } - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) - { - //Check is command sender is a player - if (!(sender instanceof Player)) - { - sender.sendMessage("&cYou cannot give a non player weather!"); - return true; - } - - //Convert sender to player - Player p = (Player) sender; - - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Used for toggling live weather on and off - if (args.length == 0) - { - if (!p.hasPermission("Liveweather.weather.toggleSelf")) - { - p.sendMessage(ChatColor.RED +"You do not have permission to toggle your live weather"); - return true; - } - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - //Fog is turned off within function if weather is turned off - boolean newState = wp.toogleWeather(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live weather enabled."); - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - //Updates whether - LWU.call(true, false, true); - p.sendMessage(ChatColor.GOLD + "Weather set to "+ChatColor.RED +LWU.szWeather +ChatColor.GOLD+" at "+ChatColor.RED +LWU.szLocation); - } - else - { - p.sendMessage(ChatColor.GOLD + "Live weather disabled"); - p.resetPlayerWeather(); - } - return true; - } - - //For fog or player - if (args.length == 1) - { - //Attempt to get player - if (p.hasPermission("Liveweather.weather.toggleOthers")) - { - //-----------Forked from Elgamer----------- - Player user = Bukkit.getPlayer(args[0]); - - if (user == null) - { - p.sendMessage(ChatColor.RED + args[0] + " is not online!"); - return true; - } - - //Sets the UUID into the wp class - wp.setUUID(user.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - //Fog is turned off within function if weather is turned off - boolean newState = wp.toogleWeather(); - if (newState) - { - p.sendMessage(ChatColor.GOLD + "Live weather enabled for "+user.getName()); - user.sendMessage(ChatColor.GOLD +p.getName() +" enabled your live weather"); - LiveWeatherUtil LWU = new LiveWeatherUtil(user); - //Updates whether - LWU.call(true, false, true); - user.sendMessage(ChatColor.GOLD + "Weather set to "+ChatColor.RED +LWU.szWeather +ChatColor.GOLD+" at "+ChatColor.RED +LWU.szLocation); - } - else - { - p.sendMessage(ChatColor.GOLD + "Live weather disabled for "+user.getName()); - user.sendMessage(ChatColor.GOLD +p.getName() +" disabled your live weather"); - user.resetPlayerWeather(); - } - return true; - } else { - p.sendMessage(ChatColor.RED + "You do not have permission to toggle liveweather of others!"); - } - - } - - return true; - } -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/DBConnection.java b/LiveWeather/src/LiveWeather/DBConnection.java deleted file mode 100755 index 39f2e8c..0000000 --- a/LiveWeather/src/LiveWeather/DBConnection.java +++ /dev/null @@ -1,137 +0,0 @@ -package LiveWeather; -import java.sql.*; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; - -/** - * @Name George - * @CandidateNumber 5371 - * @date 10 Aug 2020 - * @time 11:41:25 - */ - -public class DBConnection extends Main -{ - private String DB_CON = "jdbc:mysql://LocalHost/LiveWeather"; - - private String HOST; - private int PORT; - public String Database; - private String USER; - private String PASSWORD; - public String WeatherPreferences; - - Connection connection = null; - - boolean bIsConnected; - - public void main(String[] args) - { - DBConnection test1 = new DBConnection(); - test1.connect(); - } - - // ---------------------------------------------------------------------- - // Constructor - // ---------------------------------------------------------------------- - public DBConnection() - { - reset() ; - return ; - } - - //Setters - private void reset() - { - this.bIsConnected = false ; - return ; - } - - public void mysqlSetup() - { - this.HOST = getConfig().getString("MySQL_host"); - this.PORT = getConfig().getInt("MySQL_port"); - this.Database = getConfig().getString("MySQL_database"); - this.USER = getConfig().getString("MySQL_username"); - this.PASSWORD = getConfig().getString("MySQL_password"); - this.WeatherPreferences = getConfig().getString("MySQL_weatherpreferences"); - - this.DB_CON = "jdbc:mysql://" + this.HOST + ":" - + this.PORT + "/" + this.Database + "?&useSSL=false&"; - } - - public boolean connect() - { - try - { - // System.out.println(this.getClass().getName() +" : Connecting la la la"); - DriverManager.getDriver(DB_CON); - connection = DriverManager.getConnection(DB_CON, USER, PASSWORD); - if (this.connection != null) - return true; - else - return false; - } - catch (SQLException e) - { - if (e.toString().contains("Access denied")) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Access denied"); - System.out.println("Access denied"); - } - else if (e.toString().contains("Communications link failure")) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Communications link failure"); - System.out.println("Communications link failure"); - } - else - { - e.printStackTrace(); - System.out.println(e.toString()); - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Other SQLException - "+e.getMessage()); - } - return false; - } - catch (Exception e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Other Exception - "+e.getMessage()); - return false; - } - finally - { - - } - } - public void disconnect() - { - try - { - this.connection.close() ; - this.bIsConnected = false ; - // System.err.println( this.getClass().getName() + ":: disconnected." ) ; - } - catch ( SQLException se ) - { - System.err.println( this.getClass().getName() + ":: SQL error " + se ) ; - se.printStackTrace() ; - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - SQLException"); - } - catch ( Exception e ) - { - System.err.println( this.getClass().getName() + ":: error " + e ) ; - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Exception"); - e.printStackTrace() ; - } - finally - { - } - return ; - } - - -} -//End Class - -//Created by Mr Singh -//modified by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/GetWeather.java b/LiveWeather/src/LiveWeather/GetWeather.java deleted file mode 100755 index ddd9d0f..0000000 --- a/LiveWeather/src/LiveWeather/GetWeather.java +++ /dev/null @@ -1,211 +0,0 @@ -package LiveWeather; -import java.io.IOException; -import java.io.PrintStream; -import java.time.LocalDateTime; - -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.xml.sax.Attributes; -import org.xml.sax.ContentHandler; -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.DefaultHandler; - -import OpenWeatherMap.Current; - -public class GetWeather extends DefaultHandler -{ - private static Current current; - - Location pLocation; - long[] coord; - - String[] DataReturned; - - boolean testValueVaryWeather = true; - - public static Current entry(String URL) - { - current = new Current(); - try - { - SAXParserFactory spf = SAXParserFactory.newInstance(); - spf.setNamespaceAware(true); - SAXParser saxParser = spf.newSAXParser(); - XMLReader xmlReader = saxParser.getXMLReader(); - xmlReader.setErrorHandler(new MyErrorHandler(System.err)); - - xmlReader.setContentHandler((ContentHandler) new GetWeather()); - xmlReader.parse(URL); - } - catch (SAXException e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - SAXException: Error reading in api xml weather file"); - e.printStackTrace(); - } - catch (IOException e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - IOException: Error reading in api xml weather file"); - e.printStackTrace(); - } - catch (Exception e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - Exception: Error reading in api xml weather file"); - e.printStackTrace(); - } - return current; - } - - public static void main(String[] args) - { - try - { - SAXParserFactory spf = SAXParserFactory.newInstance(); - spf.setNamespaceAware(true); - SAXParser saxParser = spf.newSAXParser(); - XMLReader xmlReader = saxParser.getXMLReader(); - xmlReader.setErrorHandler(new MyErrorHandler(System.err)); - - xmlReader.setContentHandler((ContentHandler) new GetWeather()); - xmlReader.parse("http://api.openweathermap.org/data/2.5/weather?lat=51.441592&lon=0.367756&appid=ac594611afb90c97e2382439671e9112&mode=xml"); - } - catch (SAXException e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - SAXException: Error reading in api xml weather file"); - e.printStackTrace(); - } - catch (IOException e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - IOException: Error reading in api xml weather file"); - e.printStackTrace(); - } - catch (Exception e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - Exception: Error reading in api xml weather file"); - e.printStackTrace(); - } - } - - public void startDocument() throws SAXException - { - current = new Current(); - } - - public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException - { - int i; - int iAttributes = atts.getLength(); - // System.out.println("Section: "+localName); - // System.out.println("Attributes: "+iAttributes); - - //Checks the element name for precipitation - if (localName.equals("precipitation")) - { - //Goes through the attributes of precipitation until it finds mode - for (i = 0 ; i < iAttributes ; i++) - { - // System.out.print("Member "+i+": " + atts.getLocalName(i) +" = "); - // System.out.println(atts.getValue(i)); - if (atts.getLocalName(i).equals("mode")) - { - current.prec.setMode(atts.getValue(i)); - } - } - } - //Checks the element name for weather - else if (localName.equals("weather")) - { - //Goes through the attributes of weather until it finds number - for (i = 0 ; i < iAttributes ; i++) - { - // System.out.print("Member "+i+": " + atts.getLocalName(i) +" = "); - // System.out.println(atts.getValue(i)); - if (atts.getLocalName(i).equals("number")) - { - current.setNumber(Integer.parseInt(atts.getValue(i))); - } - } - } - //Checks the element name for sun - else if (localName.equals("sun")) - { - //Goes through the attributes of sun until it finds rise and set - for (i = 0 ; i < iAttributes ; i++) - { - // System.out.print("Member "+i+": " + atts.getLocalName(i) +" = "); - // System.out.println(atts.getValue(i)); - if (atts.getLocalName(i).equals("rise")) - { - current.setSunrise((LocalDateTime.parse(atts.getValue(i)))); - } - if (atts.getLocalName(i).equals("set")) - { - current.setSunset((LocalDateTime.parse(atts.getValue(i)))); - } - } - } - //Checks the element name for city - else if (localName.equals("city")) - { - //Goes through the attributes of city until it finds name - for (i = 0 ; i < iAttributes ; i++) - { - // System.out.print("Member "+i+": " + atts.getLocalName(i) +" = "); - // System.out.println(atts.getValue(i)); - if (atts.getLocalName(i).equals("name")) - { - current.setCityName(atts.getValue(i)); - } - } - } - } - - public void endDocument() throws SAXException - { - - } -} - -class MyErrorHandler implements ErrorHandler -{ - private PrintStream out; - - MyErrorHandler(PrintStream out) - { - this.out = out; - } - - private String getParseExceptionInfo(SAXParseException spe) - { - String systemId = spe.getSystemId(); - - if (systemId == null) { - systemId = "null"; - } - - String info = "URI=" + systemId + " Line=" - + spe.getLineNumber() + ": " + spe.getMessage(); - - return info; - } - - public void warning(SAXParseException spe) throws SAXException { - out.println("Warning: " + getParseExceptionInfo(spe)); - } - - public void error(SAXParseException spe) throws SAXException { - String message = "Error: " + getParseExceptionInfo(spe); - throw new SAXException(message); - } - - public void fatalError(SAXParseException spe) throws SAXException { - String message = "Fatal Error: " + getParseExceptionInfo(spe); - throw new SAXException(message); - } -} diff --git a/LiveWeather/src/LiveWeather/LiveWeatherUtil.java b/LiveWeather/src/LiveWeather/LiveWeatherUtil.java deleted file mode 100755 index 16a5874..0000000 --- a/LiveWeather/src/LiveWeather/LiveWeatherUtil.java +++ /dev/null @@ -1,204 +0,0 @@ -package LiveWeather; -import org.bukkit.entity.Player; - -import OpenWeatherMap.Current; -import Projections.ModifiedAirocean; - -import java.time.LocalDateTime; - -import org.bukkit.Location; -import org.bukkit.WeatherType; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 12:11:00 - */ - -//resetPlayerWeather returns it back to server - -public class LiveWeatherUtil -{ - String apiKey; - static String szURL; - Player p; - Location pLocation; - static double[] coords; - public String szLocation; - public long lTime; - public String szWeather; - - public LiveWeatherUtil() - { - - } - public LiveWeatherUtil(Player player) - { - reset(); - this.p = player; - this.pLocation = player.getLocation(); - this.apiKey = Main.getInstance().getConfig().getString("apiKey"); - this.lTime = 0L; - } - - public LiveWeatherUtil(Player player, Location location) - { - reset(); - this.p = player; - this.pLocation = location; - this.apiKey = Main.getInstance().getConfig().getString("apiKey"); - this.lTime = 0L; - } - - private void reset() - { - szURL = ""; - pLocation = null; - coords = new double[2]; - szLocation = ""; - lTime = -1; - szWeather = ""; - } - - public static void main(String[] args) - { - int iWeatherCode; - - Current current; - - double x; - double z; - - x = 2709234; - z = -5552662; - coords = getCoords(x, z); - - if (coords[0] == Double.NaN) - { - return; - } - - //Compiles the request URL - compileSourceURL(coords); - - System.out.println(szURL); - current = GetWeather.entry(szURL); - - iWeatherCode = current.getWeather().getNumber(); - - //https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2 - if (iWeatherCode >= 800) - { - // p.setPlayerWeather(WeatherType.CLEAR); - System.out.println("Clear"); - } - else if (iWeatherCode >= 701 && iWeatherCode <= 781) - { - // p.setPlayerWeather(WeatherType.CLEAR); - System.out.println("Clear"); - } - else if (iWeatherCode >= 200 && iWeatherCode <= 622) - { - // p.setPlayerWeather(WeatherType.DOWNFALL); - System.out.println("Rain"); - } - if (iWeatherCode >= 200 && iWeatherCode <= 232) - { - System.out.println("Thunder"); - } - System.out.println(current.getCity().getName()); - System.out.println(current.getCity().getCountry()); - } - - public void call(boolean weather, boolean seasonalTime, boolean bLocation) - { - int iWeatherCode; - LocalDateTime dSunrise; - LocalDateTime dSunset; - long currentTime; - - Current current; - - double x; - double z; - - x = pLocation.getX(); - z = pLocation.getZ(); - coords = getCoords(x, z); - if (coords[0] == Double.NaN) - { - return; - } - - //Compiles the request URL - compileSourceURL(coords); - - //Gets the weather - current = GetWeather.entry(szURL); - - iWeatherCode = current.getWeather().getNumber(); - - if (weather) - { - //https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2 - if (iWeatherCode >= 800) - { - p.setPlayerWeather(WeatherType.CLEAR); - szWeather = WeatherType.CLEAR.toString(); - // System.out.println("Clear"); - } - else if (iWeatherCode >= 701 && iWeatherCode <= 781) - { - p.setPlayerWeather(WeatherType.CLEAR); - szWeather = WeatherType.CLEAR.toString(); - // System.out.println("Clear"); - } - else if (iWeatherCode >= 200 && iWeatherCode <= 622) - { - p.setPlayerWeather(WeatherType.DOWNFALL); - szWeather = WeatherType.DOWNFALL.toString(); - // System.out.println("Rain"); - } - if (iWeatherCode >= 200 && iWeatherCode <= 232) - { - // System.out.println("Thunder"); - } - } - - if (seasonalTime) - { - dSunrise = current.getCity().getSunrise(); - dSunset = current.getCity().getSunset(); - - currentTime = Main.updateTimeSeasonal(p, dSunrise, dSunset); - lTime = currentTime; - } - if (bLocation) - { - szLocation = current.getCity().getName(); - } - - // iInputWeatherType = MetofficeWeatherType(iLocation); - // changeWeatherMetoffice(p, iInputWeatherType); - } - - public static double[] getCoords(double x, double z) - { - ModifiedAirocean projection = new ModifiedAirocean(); - double[] latlong = projection.toGeo(x, z); - return latlong; - } - - public static void compileSourceURL(double[] coords) - { - szURL = "http://api.openweathermap.org/data/2.5/weather?lat="; - szURL = szURL + coords[1]; - szURL = szURL + "&lon="; - szURL = szURL + coords[0]; - szURL = szURL + "&appid=" + "ac594611afb90c97e2382439671e9112";//apiKey; - szURL = szURL + "&mode=xml"; - } -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/Main.java b/LiveWeather/src/LiveWeather/Main.java deleted file mode 100755 index 140ceb1..0000000 --- a/LiveWeather/src/LiveWeather/Main.java +++ /dev/null @@ -1,342 +0,0 @@ -package LiveWeather; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.util.ArrayList; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - -import LiveWeather.Commands.Live; -import LiveWeather.Commands.LiveTime; -import LiveWeather.Commands.LiveWeather; -import LiveWeather.listeners.BigMoveEvent; -import LiveWeather.listeners.JoinEvent; -import LiveWeather.listeners.pTimeEvent; - - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 23:34:41 - */ - -public class Main extends JavaPlugin -{ - String sql; - - Statement SQL = null; - ResultSet resultSet = null; - - static Main instance; - static FileConfiguration config; - - private String HOST; - private int PORT; - public String Database; - private String USER; - private String PASSWORD; - public String WeatherPreferences; - - private Connection connection = null; - - boolean bIsConnected; - - private String DB_CON = "jdbc:mysql://LocalHost/LiveWeather"; - - private ArrayList playersWithLive; - - @Override - public void onEnable() - { - //Config Setup - Main.instance = this; - Main.config = this.getConfig(); - saveDefaultConfig(); - - //MySQL - boolean bSuccess; - mysqlSetup(); - bSuccess = connect(); - - if (bSuccess) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[Liveweather] MySQL CONNECTED"); - } - - //Creates List - playersWithLive = new ArrayList(); - - //Creates the mysql table if not already exists - createWeatherPrefsTable(); - - //Listeners - new JoinEvent(this); - new pTimeEvent(this); - new BigMoveEvent(this); - - //Commands - getCommand("liveweather").setExecutor(new LiveWeather()); - getCommand("livetime").setExecutor(new LiveTime()); - getCommand("live").setExecutor(new Live()); - - int minute = (int) 1200L; - - this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() - { - public void run() - { - UpdateCall up = new UpdateCall(instance); - up.run(); - } - }, 0L, minute * config.getInt("timerInterval")); - } - - @Override - public void onDisable() - { - disconnect(); - } - - /* public static long updateTime(Player player) - { - long lCurrentTime; - long militaryTime; - militaryTime = LocalTime.now().getHour()*100 + LocalTime.now().getMinute(); - lCurrentTime = (LocalTime.now().getHour()*1000-6000) + (LocalTime.now().getMinute()*10-60); - player.setPlayerTime(lCurrentTime, false); - return militaryTime; - } - */ - public static long updateTimeSeasonal(Player player, LocalDateTime sunrise, LocalDateTime sunset) - { - long lSeasonalTime; - long lSeasonalNightTime; - long militaryTime; - final float mcSunLight = 14076F; - final float mcSunRise = 22967F; - float fractionOfDaylightComplete; - float fractionOfNightlightComplete; - float fSunset = sunset.getHour()*60 + sunset.getMinute(); - float fSunrise = sunrise.getHour()*60 + sunrise.getMinute(); - - //Daylight in minutes - float fDaylight = 60*(sunset.getHour() - sunrise.getHour()) + sunset.getMinute() - sunrise.getMinute(); - - float fMinutesAfterSunrise = ((LocalTime.now().getHour()-sunrise.getHour())*60 + (LocalTime.now().getMinute())-sunrise.getMinute()); - - //Work out the minecraft ticks count - fractionOfDaylightComplete = fMinutesAfterSunrise/fDaylight; - lSeasonalTime = (long) (mcSunRise + fractionOfDaylightComplete * mcSunLight); - - if (fMinutesAfterSunrise < 0) //Sun not risen - { - if (lSeasonalTime < 22000) - { - float fMinutesOfNightAlg = fSunrise - 937 *(fDaylight/mcSunLight); - // System.out.println("Mins btween sunset + nghtalg: "+fMinutesOfNightAlg); - fractionOfNightlightComplete = ((float)(LocalTime.now().getHour()*60 + LocalTime.now().getMinute())/ (fMinutesOfNightAlg)); - - // System.out.println(fractionOfNightlightComplete); - lSeasonalNightTime = (long) (18000 + fractionOfNightlightComplete*4000); - lSeasonalTime = lSeasonalNightTime; - } - else - { - - } - } - else if (fMinutesAfterSunrise < fDaylight) //Sun still up - { - //Delt with as standard - } - - else //Sun has set but is before midnight - { - lSeasonalTime = lSeasonalTime - 24000; - - //If the seasonal time goes over 14000, use night algorithm - if (!(lSeasonalTime < 14000)) - { - //Minutes of the day that the night algorithm begins - float fMinutesOfNightAlg = fSunset + 957 *(fDaylight/mcSunLight); - - //Fration of night alg to midnight that is done - fractionOfNightlightComplete = ((float)(LocalTime.now().getHour()*60 + LocalTime.now().getMinute())-(fMinutesOfNightAlg))/ (1440 - (fMinutesOfNightAlg)); - - //Ticks - lSeasonalNightTime = (long) (14000 + fractionOfNightlightComplete*4000); - lSeasonalTime = lSeasonalNightTime; - } - } - - lSeasonalTime = lSeasonalTime % 24000; - - player.setPlayerTime(lSeasonalTime, false); - - militaryTime = (LocalTime.now().getHour()+config.getLong("HourOffset"))*100 + LocalTime.now().getMinute(); - return militaryTime; - } - - public void mysqlSetup() - { - this.HOST = config.getString("MySQL_host"); - this.PORT = config.getInt("MySQL_port"); - this.Database = config.getString("MySQL_database"); - this.USER = config.getString("MySQL_username"); - this.PASSWORD = config.getString("MySQL_password"); - this.WeatherPreferences = config.getString("MySQL_weatherpreferences"); - - this.DB_CON = "jdbc:mysql://" + this.HOST + ":" - + this.PORT + "/" + this.Database + "?&useSSL=false&"; - } - - public boolean connect() - { - try - { - // System.out.println(this.getClass().getName() +" : Connecting la la la"); - DriverManager.getDriver(DB_CON); - connection = DriverManager.getConnection(DB_CON, USER, PASSWORD); - if (this.connection != null) - return true; - else - return false; - } - catch (SQLException e) - { - if (e.toString().contains("Access denied")) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Access denied"); - System.out.println("Access denied"); - } - else if (e.toString().contains("Communications link failure")) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Communications link failure"); - System.out.println("Communications link failure"); - } - else - { - // e.printStackTrace(); - System.out.println(e.toString()); - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Other SQLException - "+e.getMessage()); - } - return false; - } - catch (Exception e) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Other Exception - "+e.getMessage()); - return false; - } - finally - { - } - } - - public void disconnect() - { - try - { - this.connection.close() ; - this.bIsConnected = false ; - // System.err.println( this.getClass().getName() + ":: disconnected." ) ; - } - catch ( SQLException se ) - { - System.err.println( this.getClass().getName() + ":: SQL error " + se ) ; - se.printStackTrace() ; - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - SQLException"); - } - catch ( Exception e ) - { - System.err.println( this.getClass().getName() + ":: error " + e ) ; - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.DBConnection - Exception"); - e.printStackTrace() ; - } - finally - { - } - return; - } - - public boolean createWeatherPrefsTable() - { - boolean bSuccess = false; - int iCount = -1; - - try - { - //Adds a weather pref table - sql = "CREATE TABLE IF NOT EXISTS `"+this.Database+"`.`"+this.WeatherPreferences+"` (\n" + - " `UUID` VARCHAR(36) NOT NULL,\n" + - " `LiveWeather` TINYINT NOT NULL DEFAULT 0,\n" + - " `LiveFog` TINYINT NOT NULL DEFAULT 0,\n" + - " `LiveTime` TINYINT NOT NULL DEFAULT 0,\n" + - " `Seasonal` TINYINT NOT NULL DEFAULT 1,\n" + - " UNIQUE INDEX `UUID_UNIQUE` (`UUID` ASC));"; - SQL = connection.createStatement(); - - //Executes the update and returns how many rows were changed - iCount = SQL.executeUpdate(sql); - - //If only 1 record was changed, success is set to true - if (iCount == 1) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "Created new liveweather preferences table"); - bSuccess = true; - } - } - catch(SQLException se) - { - se.printStackTrace(); - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "SQL Error creating new liveweather preferences table"); - } - catch (Exception e) - { - e.printStackTrace(); - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Error creating new liveweather preferences table"); - } - return (bSuccess); - } - - public static Main getInstance() - { - return instance; - } - - public Connection getConnection() - { - try - { - if(connection == null) - { - connect(); - } - else if(connection.isClosed()) - { - connect(); - } - } - catch (SQLException e) - { - e.printStackTrace(); - } - return connection; - } - - public ArrayList getLiveList() - { - return playersWithLive; - } - -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/UpdateCall.java b/LiveWeather/src/LiveWeather/UpdateCall.java deleted file mode 100755 index 9f5b697..0000000 --- a/LiveWeather/src/LiveWeather/UpdateCall.java +++ /dev/null @@ -1,290 +0,0 @@ -package LiveWeather; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.scheduler.BukkitRunnable; - -/** - * @author 14walkerg - * @date 4 Jan 2021 - * @time 18:20:43 - */ - -public class UpdateCall extends BukkitRunnable -{ -// private final JavaPlugin plugin; - private Player player; - - public UpdateCall(JavaPlugin plugin, PlayerJoinEvent event) - { - // this.plugin = plugin; - this.player = event.getPlayer(); - } - - public UpdateCall(JavaPlugin plugin) - { - // this.plugin = plugin; - } - - public UpdateCall(JavaPlugin plugin, Player player) - { - // this.plugin = plugin; - this.player = player; - } - - @Override - public void run() - { - final Collection players = Bukkit.getOnlinePlayers(); - - //Initiates wp - WeatherPreference wp = new WeatherPreference(); - - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "[LiveWeather] Running liveweather and time update"); - - //Gets the list of players with live - ArrayList playersWithLive = Main.getInstance().getLiveList(); - - for (Player player: players) - { - //Checks whether they are in live first - for (UUID uuid : playersWithLive) - { - if (uuid.equals(player.getUniqueId())) - { - LiveUpdateRun(player); - continue; - } - } - - boolean bSeasonalTime = false; - - //Gets UUID of player - String UUID = player.getUniqueId().toString(); - - //Sets UUID into wp - wp.setUUID(UUID); - - //If there isn't a wp record for this UUID, create one - if (!wp.exists()) - { - wp.createNewPref(); - } - //If this didn't work, skip them - if (!wp.exists()) - { - continue; - } - //Load preferences into wp - wp.fetchFromUUID(); - - //Updates time - bSeasonalTime = wp.getTime(); - - //Avoids making sperate api request for weather and fog - //Runs seasonal time update - if (wp.getWeather() && wp.getFog()) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player); - LWU.call(true, bSeasonalTime, false); - } - else if (wp.getWeather()) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player); - LWU.call(true, bSeasonalTime, false); - } - else if (wp.getFog()) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player); - LWU.call(false, bSeasonalTime, false); - } - //Checks whether time is on and makes the api request if it is not handled through the weather api request - else if (bSeasonalTime) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player); - LWU.call(false, bSeasonalTime, false); - } - } - } - - public void initialRun() - { - Player player = this.player; - - boolean bSeasonalTime = false; - boolean bWeather = false; - - long lCurrentTime; - - String szTime = ""; - - //Gets UUID of player joined - String UUID = player.getUniqueId().toString(); - - //Initiates wp - WeatherPreference wp = new WeatherPreference(); - - //Sets UUID into wp - wp.setUUID(UUID); - - //If there isn't a wp record for this UUID, create one - if (!wp.exists()) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "No weather preference record exists so creating one for "+player.getUniqueId().toString()); - boolean bCreated; - bCreated = wp.createNewPref(); - if (bCreated) - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "Created new liveweather preference record for "+player.getUniqueId().toString()); - else - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Unable to create new liveweather preference record for "+player.getUniqueId().toString()); - } - } - - //Gets weather preferences - wp.fetchFromUUID(); - - //Updates time - bSeasonalTime = wp.getTime(); - - /* if (wp.getTime()) - { - //Gets whether seasonal or not - bSeasonalTime = wp.getSeasonal(); - - if (!bSeasonalTime) //If not seasonal, update time - { - lCurrentTime = Main.updateTime(player); - szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - player.sendMessage(ChatColor.GOLD + "Time set to non seasonal "+ChatColor.RED +szTime); - } - } - */ - //Avoids making sperate api request for weather and fog - //Time handled through here as well - if (wp.getWeather()) - { - bWeather = true; - } - - - LiveWeatherUtil LWU = new LiveWeatherUtil(player); - LWU.call(bWeather, bSeasonalTime, true); - lCurrentTime = LWU.lTime; - szTime = String.format("%02d:%02d", lCurrentTime/100, lCurrentTime %100); - - if (bSeasonalTime) - { - player.sendMessage(ChatColor.GOLD + "Time set to "+ChatColor.RED +szTime); - } - } - - public void locationMoveRun(Location locationTo) - { - Player player = this.player; - - //Gets the list of players with live - ArrayList playersWithLive = Main.getInstance().getLiveList(); - - //Checks whether they are in live first - for (UUID uuid : playersWithLive) - { - if (uuid.equals(player.getUniqueId())) - { - LiveUpdateRun(player); - return; - } - } - - boolean bSeasonalTime = false; - - //Gets UUID of player joined - String UUID = player.getUniqueId().toString(); - - //Initiates wp - WeatherPreference wp = new WeatherPreference(); - - //Sets UUID into wp - wp.setUUID(UUID); - - //If there isn't a wp record for this UUID, create one - if (!wp.exists()) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "[Liveweather] No weather preference record exists so creating one for "+player.getUniqueId().toString()); - boolean bCreated; - bCreated = wp.createNewPref(); - if (bCreated) - Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "[Liveweather] Created new liveweather preference record for "+player.getUniqueId().toString()); - else - { - Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[Liveweather] Unable to create new live weather preference record for "+player.getUniqueId().toString()); - return; - } - } - - //Gets weather preferences - wp.fetchFromUUID(); - - //Updates time - bSeasonalTime = wp.getTime(); - - /* if (wp.getTime()) - { - //Gets whether seasonal or not - bSeasonalTime = wp.getSeasonal(); - - if (!bSeasonalTime) //If not seasonal, update time - { - Main.updateTime(player); - } - } - */ - //Avoids making sperate api request for weather and fog - //Also, if time is seasonal, it will be run through here, to avoid 2 api requests - if (wp.getWeather()) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player, locationTo); - LWU.call(true, bSeasonalTime, true); - player.sendMessage(ChatColor.GOLD + "Weather set to "+ChatColor.RED +LWU.szWeather +ChatColor.GOLD+" at "+ChatColor.RED +LWU.szLocation); - } - //Checks whether time was set on and makes the api request if it is not handled through a weather api request - else if (bSeasonalTime) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(player, locationTo); - LWU.call(false, bSeasonalTime, true); - } - } - - public static void InitialLiveRun(Player p) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(true, true, false); - p.setGameMode(GameMode.ADVENTURE); - p.setAllowFlight(false); - p.setWalkSpeed((float) 0.14); - p.setResourcePack(Main.getInstance().getConfig().getString("resourcePack")); - } - - //Same as above for now but is here for future - private void LiveUpdateRun(Player p) - { - LiveWeatherUtil LWU = new LiveWeatherUtil(p); - LWU.call(true, true, false); - p.setGameMode(GameMode.ADVENTURE); - p.setAllowFlight(false); - p.setWalkSpeed((float) 0.14); - } - - -} //End Class - -//Created by Bluecarpet in London diff --git a/LiveWeather/src/LiveWeather/WeatherPreference.java b/LiveWeather/src/LiveWeather/WeatherPreference.java deleted file mode 100755 index a7317b8..0000000 --- a/LiveWeather/src/LiveWeather/WeatherPreference.java +++ /dev/null @@ -1,362 +0,0 @@ -package LiveWeather; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; - -/** - * @author 14walkerg - * @date 4 Jan 2021 - * @time 12:17:19 - */ - -public class WeatherPreference -{ - //Member variable - private String UUID; - private boolean LiveWeather; - private boolean LiveFog; - private boolean LiveTime; -// private boolean Seasonal; - - //Contructor - public WeatherPreference() - { - reset(); - return; - } - - private void reset() - { - this.UUID = ""; - this.LiveFog = false; - this.LiveWeather = false; - this.LiveTime = false; - // this.Seasonal = false; - } - - //Setters - public void setUUID (String UUID) - { - this.UUID = UUID; - } - - //Getters - public boolean getWeather() - { - return this.LiveWeather; - } - public boolean getFog() - { - return this.LiveFog; - } - public boolean getTime() - { - return this.LiveTime; - } -/* public boolean getSeasonal() - { - return this.Seasonal; - } -*/ - //Set by UUID - public void fetchFromUUID() - { - boolean bSuccess = false; - - String sql; - - Statement SQL = null; - ResultSet resultSet = null; - - try - { - //Collects all fields for the specified EID - sql = "SELECT * FROM "+Main.getInstance().WeatherPreferences +" WHERE UUID = \""+this.UUID +"\""; - - SQL = Main.getInstance().getConnection().createStatement(); - resultSet = SQL.executeQuery(sql); - //Moves the curser to the next line - bSuccess = resultSet.next(); - - //If no user is found, program will notify thing - if (bSuccess == false) - { - System.out.println("Setting preferences from UUID: No user found with UUID "+this.UUID); - } - //Checks that there is only 1 record returned - else if (resultSet.next() == false) - { - //Runs if there is no second record - //Colects results again - resultSet = SQL.executeQuery(sql); - resultSet.next(); - - //Stores results into the object - this.LiveWeather = resultSet.getBoolean("LiveWeather"); - this.LiveFog = resultSet.getBoolean("LiveFog"); - this.LiveTime = resultSet.getBoolean("LiveTime"); - // this.Seasonal = resultSet.getBoolean("Seasonal"); - } - else - { - System.out.println("Setting preferences from UUID: More than one user found"); - } - } - catch (SQLException e) - { - e.printStackTrace(); - } - } - - //Checks whether a record exists - public boolean exists() - { - boolean bSuccess = false; - - String sql; - - Statement SQL = null; - ResultSet resultSet = null; - - try - { - //Collects all fields for the specified EID - sql = "SELECT * FROM "+Main.getInstance().WeatherPreferences +" WHERE UUID = \""+this.UUID +"\""; - - SQL = Main.getInstance().getConnection().createStatement(); - resultSet = SQL.executeQuery(sql); - //Moves the curser to the next line - bSuccess = resultSet.next(); - - //If no user is found, program will return false - if (bSuccess == false) - { - return false; - } - //Checks that there is only 1 record returned by moving line on again - else if (resultSet.next() == false) - { - return true; - } - else - { - //Avoids creation of yet another preference - System.out.println("Output to console here"); - return true; - } - } - catch (SQLException e) - { - e.printStackTrace(); - return true; - } - } - - //-------------------------- - //----Toggle preferences---- - //-------------------------- - - public boolean toogleWeather() - { - //Puts current value through a NOT operation - boolean newWeatherPref = !this.LiveWeather; - - String sql; - - Statement SQL = null; - - try - { - if (newWeatherPref) - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveWeather = 1 Where UUID = \""+this.UUID+"\";"; - else - { - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveWeather = 0 Where UUID = \""+this.UUID+"\";"; - //Turns fog off - manualFog(0); - } - SQL = Main.getInstance().getConnection().createStatement(); - - //Executes the update and returns how many rows were changed - SQL.executeUpdate(sql); - } - catch (SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - return newWeatherPref; - } - - public void manualFog(int i) - { - String sql; - - Statement SQL = null; - - try - { - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveFog = "+i +" Where UUID = \""+this.UUID+"\";"; - - SQL = Main.getInstance().getConnection().createStatement(); - - //Executes the update and returns how many rows were changed - SQL.executeUpdate(sql); - } - catch (SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - - public boolean toogleFog() - { - //Puts current value through a NOT operation - boolean newFogPref = !this.LiveFog; - - String sql; - - Statement SQL = null; - - try - { - if (newFogPref) - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveFog = 1 Where UUID = \""+this.UUID+"\";"; - else - { - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveFog = 0 Where UUID = \""+this.UUID+"\";"; - } - SQL = Main.getInstance().getConnection().createStatement(); - - //Executes the update and returns how many rows were changed - SQL.executeUpdate(sql); - } - catch (SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - return newFogPref; - } - - public boolean toogleTime() - { - //Puts current value through a NOT operation - boolean newTimePref = !this.LiveTime; - - String sql; - - Statement SQL = null; - - try - { - if (newTimePref) - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveTime = 1 Where UUID = \""+this.UUID+"\";"; - else - { - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET LiveTime = 0 Where UUID = \""+this.UUID+"\";"; - } - SQL = Main.getInstance().getConnection().createStatement(); - - //Executes the update and returns how many rows were changed - SQL.executeUpdate(sql); - } - catch (SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - return newTimePref; - } - -/* public boolean toogleSeasonal() - { - //Puts current value through a NOT operation - boolean newSeasonalPref = !this.Seasonal; - - int iCount = -1; - String sql; - - Statement SQL = null; - - try - { - if (newSeasonalPref) - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET Seasonal = 1 Where UUID = \""+this.UUID+"\";"; - else - { - sql = "UPDATE "+Main.getInstance().WeatherPreferences +" SET Seasonal = 0 Where UUID = \""+this.UUID+"\";"; - } - SQL = Main.getInstance().connection.createStatement(); - - //Executes the update and returns how many rows were changed - iCount = SQL.executeUpdate(sql); - } - catch (SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - return newSeasonalPref; - } - */ - - //-------------------------------------- - //----Creating new preference record---- - //-------------------------------------- - //SQL Changes - public boolean createNewPref() - { - boolean bSuccess = false; - int iCount = -1; - String sql; - - Statement SQL = null; - - try - { - //Compiles the command to add the new user - sql = "INSERT INTO "+Main.getInstance().WeatherPreferences +" (UUID)" - + "VALUES(\"" - + this.UUID +"\");"; - SQL = Main.getInstance().getConnection().createStatement(); - - //Executes the update and returns the amount of records updated - iCount = SQL.executeUpdate(sql); - - //Checks whether only 1 record was updated - if (iCount == 1) - { - //If so, bSuccess is set to true - bSuccess = true; - } - } - catch(SQLException se) - { - se.printStackTrace(); - } - catch (Exception e) - { - e.printStackTrace(); - } - return bSuccess; - } -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/listeners/BigMoveEvent.java b/LiveWeather/src/LiveWeather/listeners/BigMoveEvent.java deleted file mode 100755 index 0651c28..0000000 --- a/LiveWeather/src/LiveWeather/listeners/BigMoveEvent.java +++ /dev/null @@ -1,56 +0,0 @@ - -/** - * @author 14walkerg - * @date 30 Jan 2021 - * @time 11:18:21 - */ - -package LiveWeather.listeners; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; - -import LiveWeather.Main; -import LiveWeather.UpdateCall; - -public class BigMoveEvent implements Listener -{ - private final Main plugin; - - public BigMoveEvent(Main plugin) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "BigMoveEvent loaded"); - this.plugin = plugin; - Bukkit.getServer().getPluginManager().registerEvents(this, plugin); - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "BigMoveEvent ready"); - } - - @EventHandler - public void TeleportEvent(PlayerTeleportEvent event) - { - //Convert sender to player - Player player = event.getPlayer(); - - if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.PLUGIN) - { - double FromX = event.getFrom().getX(); - double FromZ = event.getFrom().getZ(); - double ToX = event.getTo().getX(); - double ToZ = event.getTo().getZ(); - - //Checks whether it is outside a 2km radius - if (Math.sqrt( (FromX - ToX)*(FromX - ToX) + (FromZ - ToZ)*(FromZ - ToZ) ) > 2000) - { - UpdateCall up = new UpdateCall(plugin, player); - up.locationMoveRun(event.getTo()); - } - } - } -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/listeners/JoinEvent.java b/LiveWeather/src/LiveWeather/listeners/JoinEvent.java deleted file mode 100755 index 41329b4..0000000 --- a/LiveWeather/src/LiveWeather/listeners/JoinEvent.java +++ /dev/null @@ -1,57 +0,0 @@ - -/** - * @author 14walkerg - * @date 4 Jan 2021 - * @time 17:55:24 - */ -package LiveWeather.listeners; - -import java.util.ArrayList; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import LiveWeather.Main; -import LiveWeather.UpdateCall; - -public class JoinEvent implements Listener -{ - private final Main plugin; - - public JoinEvent(Main plugin) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[Liveweather] JoinEvent loaded"); - this.plugin = plugin; - Bukkit.getServer().getPluginManager().registerEvents(this, plugin); - } - - @EventHandler - public void playerJoin(PlayerJoinEvent event) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[Liveweather] Player joined, calling update call"); - UpdateCall up = new UpdateCall(plugin, event); - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[Liveweather] Running initial run"); - up.initialRun(); - } - - @EventHandler - public void playerLeave(PlayerQuitEvent event) - { - Player p = event.getPlayer(); - - //Gets the list of players with live - ArrayList playersWithLive = Main.getInstance().getLiveList(); - - //Removes player from live - playersWithLive.remove(p.getUniqueId()); - } -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/LiveWeather/listeners/pTimeEvent.java b/LiveWeather/src/LiveWeather/listeners/pTimeEvent.java deleted file mode 100755 index 17c9b38..0000000 --- a/LiveWeather/src/LiveWeather/listeners/pTimeEvent.java +++ /dev/null @@ -1,79 +0,0 @@ - -/** - * @author 14walkerg - * @date 9 Jan 2021 - * @time 20:46:36 - */ -package LiveWeather.listeners; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -import LiveWeather.Main; -import LiveWeather.WeatherPreference; - -public class pTimeEvent implements Listener -{ - public pTimeEvent(Main plugin) - { - Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[Liveweather] pTimeEvent loaded"); - Bukkit.getServer().getPluginManager().registerEvents(this, plugin); - } - - @EventHandler - public void ptimeCalled(PlayerCommandPreprocessEvent event) - { - if (event.getMessage().toLowerCase().startsWith(("/ptime"))) - { - //Convert sender to player - Player p = event.getPlayer(); - - //Get player's preferences - - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - if (wp.getTime()) - { - wp.toogleTime(); - p.sendMessage(ChatColor.GOLD + "Live time disabled"); - } - } - else if (event.getMessage().toLowerCase().startsWith(("/pweather"))) - { - //Convert sender to player - Player p = event.getPlayer(); - - //Get player's preferences - - //Initiate player preferences - WeatherPreference wp = new WeatherPreference(); - - //Sets the UUID into the wp class - wp.setUUID(p.getUniqueId().toString()); - - //Gets weather preferences - wp.fetchFromUUID(); - - if (wp.getWeather()) - { - wp.toogleWeather(); - p.sendMessage(ChatColor.GOLD + "Live weather disabled"); - } - } - } - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/DV.java b/LiveWeather/src/Metoffice/DV.java deleted file mode 100755 index 988b307..0000000 --- a/LiveWeather/src/Metoffice/DV.java +++ /dev/null @@ -1,19 +0,0 @@ -package Metoffice; -import java.time.LocalDateTime; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 15:52:10 - */ - -public class DV -{ - String type; - LocalDateTime dataDate; - - WeatherLocation[] location; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/Param.java b/LiveWeather/src/Metoffice/Param.java deleted file mode 100755 index 04616ac..0000000 --- a/LiveWeather/src/Metoffice/Param.java +++ /dev/null @@ -1,15 +0,0 @@ -package Metoffice; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 15:53:14 - */ - -public class Param -{ - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/Period.java b/LiveWeather/src/Metoffice/Period.java deleted file mode 100755 index c44fcb5..0000000 --- a/LiveWeather/src/Metoffice/Period.java +++ /dev/null @@ -1,19 +0,0 @@ -package Metoffice; -import java.time.LocalDate; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 16:06:23 - */ - -public class Period -{ - String szType; - LocalDate val; - - Rep[] reps; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/Rep.java b/LiveWeather/src/Metoffice/Rep.java deleted file mode 100755 index 49672b7..0000000 --- a/LiveWeather/src/Metoffice/Rep.java +++ /dev/null @@ -1,35 +0,0 @@ -package Metoffice; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 15:58:38 - * @Purpose contains single observation - */ - -public class Rep -{ - //Weather type - WeatherType W; - //Visibility - String V; - //Temperature - int T; - //Windspeed - int S; - //Pressure - int P; - //Wind gusts - int G; - //Wind direction - String D; - //Pressure tendancy - int Pt; - //Dew point - int Dp; - //Screen relative humidity - int H; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/WeatherLocation.java b/LiveWeather/src/Metoffice/WeatherLocation.java deleted file mode 100755 index eb1bf5e..0000000 --- a/LiveWeather/src/Metoffice/WeatherLocation.java +++ /dev/null @@ -1,59 +0,0 @@ -package Metoffice; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 15:29:45 - * continent: This describes the continent in which the location is located - * country: This describes the country in which the location is situated - * name: This provides the name of the location - * lon: This provides the longitude of the location - * lat: This provides the latitude of the location - * i: This provides the ID of the location - * elevation: This provides the elevation of the location - */ - -public class WeatherLocation -{ - private String Continent; - private String Country; - private String Name; - private float Lon; - private float Lat; - private int i; - private int Elevation; - - public String getContinent() - { - return Continent; - } - public String getCountry() - { - return Country; - } - public String getName() - { - return Name; - } - public float getLon() - { - return Lon; - } - public float getLat() - { - return Lat; - } - public int getID() - { - return i; - } - public float getElevation() - { - return Elevation; - } - -} - -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Metoffice/WeatherType.java b/LiveWeather/src/Metoffice/WeatherType.java deleted file mode 100755 index 79c8be6..0000000 --- a/LiveWeather/src/Metoffice/WeatherType.java +++ /dev/null @@ -1,46 +0,0 @@ -package Metoffice; - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 16:13:27 - */ - -public enum WeatherType -{ - NotAvailable, - ClearNight, - SunnyDay, - PartCloudyNight, - PartCloudyDay, - NotUsed, - Mist, - Fog, - Cloudy, - Overcast, - LightRainShowerNight, - LightRainShowerDay, - Drizzle, - LightRain, - HeavyRainShowerNight, - HeavyRainShowerDay, - HeavyRain, - SleetShowerNight, - SleetShowerDay, - Sleet, - HailShowerNight, - HailShowerDay, - Hail, - LightSnowShowerNight, - LightSnowShowerDay, - LightSnow, - HeavySnowShowerNight, - HeavySnowShowerDay, - HeavySnow, - ThunderShowerNight, - ThunderShowerDay, - Thunder; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/City.java b/LiveWeather/src/OpenWeatherMap/City.java deleted file mode 100755 index 309af11..0000000 --- a/LiveWeather/src/OpenWeatherMap/City.java +++ /dev/null @@ -1,75 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:42:06 - */ -package OpenWeatherMap; - -import java.time.LocalDateTime; - -public class City -{ - private int id; - private String szName; - private int CoordLong; - private int CoordLat; - private String szCountry; - private int Timezone; - private LocalDateTime sunrise; - private LocalDateTime sunset; - - public City() - { - reset(); - } - public void reset() - { - this.sunrise = LocalDateTime.parse("2021-01-01T06:00:00"); - this.sunset = LocalDateTime.parse("2021-01-01T18:00:00"); - } - - //Getters - public LocalDateTime getSunrise() - { - return this.sunrise; - } - - public LocalDateTime getSunset() - { - return this.sunset; - } - - public String getName() - { - return this.szName; - } - - public String getCountry() - { - return this.szCountry; - } - - //Setters - public void setSunrise(LocalDateTime dSunrise) - { - this.sunrise = dSunrise; - } - - public void setSunset(LocalDateTime dSunset) - { - this.sunset = dSunset; - } - - public void setName(String szName) - { - this.szName = szName; - } - - public void setCountry(String szCountry) - { - this.szCountry = szCountry; - } -} //End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Clouds.java b/LiveWeather/src/OpenWeatherMap/Clouds.java deleted file mode 100755 index f58ba88..0000000 --- a/LiveWeather/src/OpenWeatherMap/Clouds.java +++ /dev/null @@ -1,15 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:44:45 - */ -package OpenWeatherMap; - -public class Clouds -{ - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Current.java b/LiveWeather/src/OpenWeatherMap/Current.java deleted file mode 100755 index ed92e94..0000000 --- a/LiveWeather/src/OpenWeatherMap/Current.java +++ /dev/null @@ -1,76 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:37:28 - */ -package OpenWeatherMap; - -import java.time.LocalDateTime; - -public class Current -{ - private City city; - private Temperature temp; - private FeelsLike feels; - private Humidity humid; - private Pressure press; - private Wind wind; - private Clouds cloud; - private int Visibility; - public Precipitation prec; - private Weather weather; - private LocalDateTime lastUpdate; - - public Current() - { - reset(); - } - - private void reset() - { - this.city = new City(); - this.prec = new Precipitation(); - this.Visibility = -1; - this.weather = new Weather(); - } - - public Weather getWeather() - { - return this.weather; - } - - public City getCity() - { - return this.city; - } - - public void setNumber(int iNum) - { - this.weather.setNumber(iNum); - } - - public void setSunrise(LocalDateTime dDateTime) - { - this.city.setSunrise(dDateTime); - } - - public void setSunset(LocalDateTime dDateTime) - { - this.city.setSunset(dDateTime); - } - - public void setCityName(String szName) - { - this.city.setName(szName); - } - - public void setCountry(String szCountry) - { - this.city.setCountry(szCountry); - } -} - -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/FeelsLike.java b/LiveWeather/src/OpenWeatherMap/FeelsLike.java deleted file mode 100755 index c33c163..0000000 --- a/LiveWeather/src/OpenWeatherMap/FeelsLike.java +++ /dev/null @@ -1,16 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:44:22 - */ -package OpenWeatherMap; - -public class FeelsLike -{ - private int value; - private String unit; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Humidity.java b/LiveWeather/src/OpenWeatherMap/Humidity.java deleted file mode 100755 index fd44ed0..0000000 --- a/LiveWeather/src/OpenWeatherMap/Humidity.java +++ /dev/null @@ -1,14 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:44:29 - */ -package OpenWeatherMap; - -public class Humidity { - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Precipitation.java b/LiveWeather/src/OpenWeatherMap/Precipitation.java deleted file mode 100755 index 7265e61..0000000 --- a/LiveWeather/src/OpenWeatherMap/Precipitation.java +++ /dev/null @@ -1,47 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:45:10 - */ -package OpenWeatherMap; - -public class Precipitation -{ - private float value; - private String mode; - - //Setters - public void setValue(float value) - { - this.value = value; - } - public void setMode(String mode) - { - this.mode = mode; - } - - //Getters - public float getValue() - { - return this.value; - } - public String getMode() - { - return this.mode; - } - - public Precipitation() - { - reset(); - } - private void reset() - { - //Declare Variables - this.mode = ""; - this.value = -1; - } -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Pressure.java b/LiveWeather/src/OpenWeatherMap/Pressure.java deleted file mode 100755 index f4eb4f7..0000000 --- a/LiveWeather/src/OpenWeatherMap/Pressure.java +++ /dev/null @@ -1,14 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:44:36 - */ -package OpenWeatherMap; - -public class Pressure { - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Temperature.java b/LiveWeather/src/OpenWeatherMap/Temperature.java deleted file mode 100755 index 3bf3619..0000000 --- a/LiveWeather/src/OpenWeatherMap/Temperature.java +++ /dev/null @@ -1,18 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:44:03 - */ -package OpenWeatherMap; - -public class Temperature -{ - private int value; - private int min; - private int max; - private String unit; -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Weather.java b/LiveWeather/src/OpenWeatherMap/Weather.java deleted file mode 100755 index 23cded3..0000000 --- a/LiveWeather/src/OpenWeatherMap/Weather.java +++ /dev/null @@ -1,54 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:45:19 - */ -package OpenWeatherMap; - -public class Weather -{ - private int Number; - private String Value; - private String Icon; - - public int getNumber() - { - return Number; - } - public String getValue() - { - return Value; - } - public String getIcon() - { - return Icon; - } - - public void setNumber(int Number) - { - this.Number = Number; - } - public void setValue(String Value) - { - this.Value = Value; - } - public void setIcon(String Icon) - { - this.Icon = Icon; - } - - public Weather() - { - reset(); - } - private void reset() - { - this.Icon = ""; - this.Number = 0; - this.Value = ""; - } -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/OpenWeatherMap/Wind.java b/LiveWeather/src/OpenWeatherMap/Wind.java deleted file mode 100755 index 6212061..0000000 --- a/LiveWeather/src/OpenWeatherMap/Wind.java +++ /dev/null @@ -1,15 +0,0 @@ - -/** - * @author 14walkerg - * @date 3 Jan 2021 - * @time 18:37:59 - */ -package OpenWeatherMap; - -public class Wind -{ - -} -//End Class - -//Created by Bluecarpet in London \ No newline at end of file diff --git a/LiveWeather/src/Projections/Airocean.java b/LiveWeather/src/Projections/Airocean.java deleted file mode 100755 index 77c7200..0000000 --- a/LiveWeather/src/Projections/Airocean.java +++ /dev/null @@ -1,631 +0,0 @@ -package Projections; - -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; -import java.io.FileInputStream; -import java.io.File; -import java.util.function.Consumer; -import java.util.function.Function; - -import javax.imageio.ImageIO; - -public class Airocean extends GeographicProjection { - - protected static double ARC = 2*Math.asin(Math.sqrt(5-Math.sqrt(5))/Math.sqrt(10)); - - protected static final double TO_RADIANS = Math.PI/180.0; - protected static final double ROOT3 = Math.sqrt(3); - - private int newton = 5; - - protected static double[] VERT = new double[] { - 10.536199, 64.700000, - -5.245390, 2.300882, - 58.157706, 10.447378, - 122.300000, 39.100000, - -143.478490, 50.103201, - -67.132330, 23.717925, - 36.521510, -50.103200, - 112.867673, -23.717930, - 174.754610, -2.300882, - -121.842290, -10.447350, - -57.700000, -39.100000, - -169.463800, -64.700000, - }; - - protected static final int[] ISO = new int[] { - 2, 1, 6, - 1, 0, 2, - 0, 1, 5, - 1, 5, 10, - 1, 6, 10, - 7, 2, 6, - 2, 3, 7, - 3, 0, 2, - 0, 3, 4, - 4, 0, 5, //9, qubec - 5, 4, 9, - 9, 5, 10, - 10, 9, 11, - 11, 6, 10, - 6, 7, 11, - 8, 3, 7, - 8, 3, 4, - 8, 4, 9, - 9, 8, 11, - 7, 8, 11, - 11, 6, 7, //child of 14 - 3, 7, 8, //child of 15 - }; - - public static double[] CENTER_MAP = new double[] { - -3,7, - -2,5, - -1,7, - 2,5, - 4,5, - -4,1, - -3,-1, - -2,1, - -1,-1, - 0,1, - 1,-1, - 2,1, - 3,-1, - 4,1, - 5,-1, //14, left side, right to be cut - -3,-5, - -1,-5, - 1,-5, - 2,-7, - -4, -7, - -5,-5, //20, pseudo triangle, child of 14 - -2,-7, //21 , pseudo triangle, child of 15 - }; - - public static byte[] FLIP_TRIANGLE = new byte[] { - 1,0,1,0,0, - 1,0,1,0,1,0,1,0,1,0, - 1,1,1,0,0, - 1,0, - }; - - protected static final double[] CENTROID = new double[66]; - protected static final double[] ROTATION_MATRIX = new double[198]; - protected static final double[] INVERSE_ROTATION_MATRIX = new double[198]; - - static { - - for(int i=0; i<22; i++) { - CENTER_MAP[2*i] *= 0.5*ARC; - CENTER_MAP[2*i+1] *= ARC*ROOT3/12; - } - } - - static { - - for(int i=0; i< 12; i++) { - VERT[2*i+1] = 90-VERT[2*i+1]; - - VERT[2*i] *= TO_RADIANS; - VERT[2*i+1] *= TO_RADIANS; - } - - for (int i = 0; i < 22; i++) { - double[] a = cart(VERT[2*ISO[i*3]], VERT[2*ISO[i*3]+1]); - double[] b = cart(VERT[2*ISO[i*3+1]], VERT[2*ISO[i*3+1]+1]); - double[] c = cart(VERT[2*ISO[i*3+2]], VERT[2*ISO[i*3+2]+1]); - - double xsum = a[0] + b[0] + c[0]; - double ysum = a[1] + b[1] + c[1]; - double zsum = a[2] + b[2] + c[2]; - - double mag = Math.sqrt(xsum*xsum + ysum*ysum + zsum*zsum); - - CENTROID[3*i] = xsum/mag; - CENTROID[3*i+1] = ysum/mag; - CENTROID[3*i+2] = zsum/mag; - - double clon = Math.atan2(ysum,xsum); - double clat = Math.atan2(Math.sqrt(xsum*xsum + ysum*ysum),zsum); - - double v[] = new double[] {VERT[2*ISO[i*3]],VERT[2*ISO[i*3]+1]}; - v = yRot(v[0] - clon, v[1], -clat); - - produceZYZRotationMatrix(ROTATION_MATRIX, i*9, -clon, -clat, (Math.PI/2) - v[0]); - produceZYZRotationMatrix(INVERSE_ROTATION_MATRIX, i*9, v[0] - (Math.PI/2), clat, clon); - } - } - - public static void produceZYZRotationMatrix(double[] out, int offset, double a, double b, double c) { - - double sina = Math.sin(a), cosa = Math.cos(a), sinb = Math.sin(b), cosb = Math.cos(b), sinc = Math.sin(c), cosc = Math.cos(c); - - out[offset+0] = cosa*cosb*cosc - sinc*sina; - out[offset+1] = - sina*cosb*cosc - sinc*cosa; - out[offset+2] = cosc*sinb; - - out[offset+3] = sinc*cosb*cosa + cosc*sina; - out[offset+4] = cosc*cosa - sinc*cosb*sina; - out[offset+5] = sinc*sinb; - - out[offset+6] = -sinb*cosa; - out[offset+7] = sinb*sina; - out[offset+8] = cosb; - } - - - protected static double[] cart(double lambda, double phi) { - double sinphi = Math.sin(phi); - return new double[]{sinphi * Math.cos(lambda), sinphi * Math.sin(lambda), Math.cos(phi)}; - } - - protected static int findTriangle(double x, double y, double z) { - - double min = Double.MAX_VALUE; - int face = 0; - - for(int i=0; i<20; i++) { - double xd = CENTROID[3*i]-x; - double yd = CENTROID[3*i+1]-y; - double zd = CENTROID[3*i+2]-z; - - double dissq = xd*xd + yd*yd + zd*zd; - if(dissq-0.25) { - if(yp<0.25) { //middle - row = 1; - } - else if(yp<=0.75){ //top - row = 0; - yp = 0.5-yp; //translate to middle and flip - } - else return -1; - } else if (yp>=-0.75) { //bottom - row = 2; - yp = -yp-0.5; //translate to middle and flip - } else return -1; - - yp += 0.25; //change origin to vertex 4, to allow grids to allign - - //rotate coords 45 degrees so left and right sides of the triangle become the x/y axies (also side lengths are now 1) - double xr = xp - yp; - double yr = xp + yp; - - //assign a order to what grid along the y=x line it is - int gx = (int)Math.floor(xr); - int gy = (int)Math.floor(yr); - - int col = 2*gx + (gy != gx ? 1 : 0) + 6; - - //out of bounds - if(col<0 || col>=11) - return -1; - - return FACE_ON_GRID[row*11 + col]; //get face at this position - } - - protected static final double Z = Math.sqrt(5 + 2*Math.sqrt(5)) / Math.sqrt(15); - protected static final double EL = Math.sqrt(8) / Math.sqrt(5 + Math.sqrt(5)); - protected static final double EL6 = EL/6; - protected static final double DVE = Math.sqrt(3 + Math.sqrt(5)) / Math.sqrt(5 + Math.sqrt(5)); - protected static final double R = -3*EL6/DVE; - - protected double[] triangleTransform(double x, double y, double z) { - - double S = Z/z; - - double xp = S*x; - double yp = S*y; - - double a = Math.atan((2*yp/ROOT3 - EL6)/ DVE); //ARC/2 terms cancel - double b = Math.atan((xp - yp/ROOT3 - EL6)/ DVE); - double c = Math.atan((- xp - yp/ROOT3 - EL6)/ DVE); - - return new double[] {0.5*(b-c), (2*a - b - c)/(2*ROOT3)}; - } - - protected double[] inverseTriangleTransformNewton(double xpp, double ypp) { - - //a & b are linearly related to c, so using the tan of sum formula we know: tan(c+off) = (tanc + tanoff)/(1-tanc*tanoff) - double tanaoff = Math.tan(ROOT3*ypp + xpp); // a = c + root3*y'' + x'' - double tanboff = Math.tan(2*xpp); // b = c + 2x'' - - double anumer = tanaoff*tanaoff + 1; - double bnumer = tanboff*tanboff + 1; - - //we will be solving for tanc, starting at t=0, tan(0) = 0 - double tana = tanaoff, tanb = tanboff, tanc = 0; - - double adenom = 1, bdenom = 1; - - //double fp = anumer + bnumer + 1; //derivative relative to tanc - - //int i = newton; - for(int i=0; i out[1]*ROOT3) || face == 14) && x > 0) { - out[0] = 0.5*x - 0.5*ROOT3*out[1]; - out[1] = 0.5*ROOT3*x + 0.5*out[1]; - face += 6; //shift 14->20 & 15->21 - } - - out[0] += CENTER_MAP[face * 2]; - out[1] += CENTER_MAP[face * 2 + 1]; - - return out; - } - - public static double[] OUT_OF_BOUNDS = new double[]{0.0/0, 0.0/0}; - - public double[] toGeo(double x, double y) { - int face = findTriangleGrid(x,y); - - if(face==-1) - return OUT_OF_BOUNDS; - - x -= CENTER_MAP[face*2]; - y -= CENTER_MAP[face*2 + 1]; - - //deal with bounds of special snowflakes - switch (face) { - case 14: - if(x>0) return OUT_OF_BOUNDS; - break; - - case 20: - if(-y*ROOT3 > x) return OUT_OF_BOUNDS; - break; - - case 15: - if(x>0 && x > y*ROOT3) return OUT_OF_BOUNDS; - break; - - case 21: - if(x<0 || -y*ROOT3 > x) return OUT_OF_BOUNDS; - break; - } - - //flip triangle to upright orientation (if not already) - if(FLIP_TRIANGLE[face]!=0) { - x = -x; - y = -y; - } - - //invert triangle transform - double[] c = inverseTriangleTransform(x, y); - x = c[0]; - y = c[1]; - double z = c[2]; - - //apply inverse rotation matrix (move triangle from template triangle to correct position on globe) - int off = 9*face; - double xp = x*INVERSE_ROTATION_MATRIX[off + 0] + y*INVERSE_ROTATION_MATRIX[off + 1] + z*INVERSE_ROTATION_MATRIX[off + 2]; - double yp = x*INVERSE_ROTATION_MATRIX[off + 3] + y*INVERSE_ROTATION_MATRIX[off + 4] + z*INVERSE_ROTATION_MATRIX[off + 5]; - double zp = x*INVERSE_ROTATION_MATRIX[off + 6] + y*INVERSE_ROTATION_MATRIX[off + 7] + z*INVERSE_ROTATION_MATRIX[off + 8]; - - //convert back to spherical coordinates - return new double[] {Math.atan2(yp, xp)/TO_RADIANS, 90-Math.acos(zp)/TO_RADIANS}; - } - - public double[] bounds() { - return new double[] {-3*ARC, -0.75*ARC*ROOT3, 2.5*ARC, 0.75*ARC*ROOT3}; - } - - public boolean upright() {return false;} - - public double metersPerUnit() { - return Math.sqrt(510100000000000.0/(20*ROOT3*ARC*ARC/4)); - } - - /*public static void main(String[] args) throws IOException { - Airocean projection = new ModifiedAirocean(); - double[] c = projection.fromGeo(12.4900422, 41.8902102);//-73.985821, 40.723241); - System.out.println(c[0] + " " + c[1]); - c = projection.toGeo(c[0], c[1]); - System.out.println(c[0] + " " + c[1]); - System.out.println((new ConformalEstimate()).fromGeo(170.185772, 53.611924)[0]); - System.out.println((new ConformalEstimate()).fromGeo(170.185772, 53.611924)[1]); - System.out.println(ARC); - BufferedImage base; - InputStream is = new FileInputStream("../../../../../resources/assets/terra121/data/map.png"); - base = ImageIO.read(is); - BufferedImage img = new BufferedImage(1024, 1024, BufferedImage.TYPE_INT_ARGB); - //scale should be able to fit whole earth inside texture - double[] bounds = projection.bounds(); - double scale = Math.max(Math.abs(bounds[2] - bounds[0]), Math.abs(bounds[3] - bounds[1])); - int w = img.getWidth(); - int h = img.getHeight(); - for (int lon = 0; lon < base.getWidth(); lon++) { - for (int lat = 0; lat < base.getHeight(); lat++) { - //lat lon to reference image coords - double Lon = (lon / (double) base.getWidth() - 0.5) * 360; - double Lat = (lat / (double) base.getHeight() - 0.5) * 180; - double proj[] = projection.fromGeo(Lon, Lat); //projection coords to x y - int x = (int) (w * (proj[0] - bounds[0]) / scale); - int y = (int) (h * (proj[1] - bounds[1]) / scale); - //get pixel from reference image if possible - if (x >= 0 && y >= 0 && x < img.getHeight() && y < img.getWidth()) { - img.setRGB(x, h - y - 1, base.getRGB(lon, base.getHeight() - lat - 1)); - } - } - } - ImageIO.write(img, "png", new File("out.png")); - }*/ - -public static void main(String[] args) throws IOException { - Airocean projection = new ModifiedAirocean(); - - //System.out.println(projection.metersPerUnit()); - //System.out.println((projection.bounds()[0])*projection.metersPerUnit()); - //System.out.println((projection.bounds()[2]-projection.bounds()[0])*projection.metersPerUnit()); - //System.out.println((projection.bounds()[3]-projection.bounds()[1])*projection.metersPerUnit()); - - double[] f = (new ConformalEstimate()).fromGeo(-169.245937, 65.865726); - f = projection.toGeo(f[0], f[1]); - - //System.out.println(f[0] + " " + f[1]); - - BufferedImage base; - - InputStream is = new FileInputStream("../resources/assets/terra121/data/map.png"); - base = ImageIO.read(is); - - BufferedImage img = new BufferedImage(4096,4096,BufferedImage.TYPE_INT_ARGB); - - //scale should be able to fit whole earth inside texture - double[] bounds = projection.bounds(); - double scale = Math.max(Math.abs(bounds[2]-bounds[0]), Math.abs(bounds[3]-bounds[1])); - - int w = img.getWidth(); - int h = img.getHeight(); - - long og = System.nanoTime(); - - ConformalEstimate cp = new ConformalEstimate(); - - double[] oc = cp.toGeo(0,ARC*ROOT3/12); - f = cp.fromGeo(oc[0],oc[1]+360.0*0.001/40075017); - double[] g = cp.fromGeo(oc[0], oc[1]); - System.out.println(Math.sqrt((f[0]-g[0])*(f[0]-g[0]) + (f[1]-g[1])*(f[1]-g[1]))*cp.metersPerUnit()); - - System.out.println(cp.metersPerUnit()/40075017); - System.out.println(ARC); - - System.out.println((System.nanoTime()-og)/1000000000.0); - - for(int x=0;x=0 && lat>=0 && lat < base.getHeight() && lon < base.getWidth()) { - //if(lon!=1024 || lat!=512) - //System.out.println(lon+" "+lat); - img.setRGB(x, h-y-1, base.getRGB(lon, base.getHeight()-lat-1)); - } //else System.out.println(proj[0]+" "+proj[1]+" "+lon+" "+lat); - } - } - } - - System.out.println((System.nanoTime()-og)/1000000000.0); - - ImageIO.write(img, "png", new File("out.png")); - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/CenteredMapsProjection.java b/LiveWeather/src/Projections/CenteredMapsProjection.java deleted file mode 100755 index 2e98c58..0000000 --- a/LiveWeather/src/Projections/CenteredMapsProjection.java +++ /dev/null @@ -1,32 +0,0 @@ -package Projections; - -public class CenteredMapsProjection extends GeographicProjection { - private static final double TO_RADIANS = Math.PI/180.0; - - public double[] toGeo(double x, double y) { - return new double[] { - x*180.0, - (Math.atan(Math.exp(-y*Math.PI))*2 - Math.PI/2)/TO_RADIANS - }; - } - - public double[] fromGeo(double lon, double lat) { - return new double[] { - lon/180.0, - -(Math.log( Math.tan((Math.PI/2 + lat*TO_RADIANS)/2) ) ) / Math.PI - }; - } - - public double[] bounds() { - return new double[]{-1,-1,1,1}; - } - - @Override - public double metersPerUnit() { - return Math.cos(30*Math.PI/180)*EARTH_CIRCUMFERENCE/2; //Accurate at about 30 degrees - } - - public boolean upright() { - return true; - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/ConformalEstimate.java b/LiveWeather/src/Projections/ConformalEstimate.java deleted file mode 100755 index d7a4488..0000000 --- a/LiveWeather/src/Projections/ConformalEstimate.java +++ /dev/null @@ -1,168 +0,0 @@ -package Projections; - -import java.io.*; -import java.util.Scanner; - -public class ConformalEstimate extends Airocean { - - InvertableVectorField forward; - InvertableVectorField inverse; - - double VECTOR_SCALE_FACTOR = 1/1.1473979730192934; - - public ConformalEstimate () { - InputStream is = null; - - - int sideLength = 256; - - double[][] xs = new double[sideLength + 1][]; - double[][] ys = new double[xs.length][]; - - try { - //is = new FileInputStream("../resources/assets/terra121/data/conformal.txt"); - is = getClass().getClassLoader().getResourceAsStream("conformal.txt"); - Scanner sc = new Scanner(is); - - for (int u = 0; u < xs.length; u++) { - double[] px = new double[xs.length - u]; - double[] py = new double[xs.length - u]; - xs[u] = px; - ys[u] = py; - } - - for (int v = 0; v < xs.length; v++) { - for (int u = 0; u < xs.length - v; u++) { - String line = sc.nextLine(); - line = line.substring(1, line.length() - 3); - String[] split = line.split(", "); - xs[u][v] = Double.parseDouble(split[0]) * VECTOR_SCALE_FACTOR; - ys[u][v] = Double.parseDouble(split[1]) * VECTOR_SCALE_FACTOR; - } - } - - is.close(); - }catch (IOException e) { - System.err.println("Can't load conformal: "+e); - } - - inverse = new InvertableVectorField(xs, ys); - } - - /*public ConformalEstimate () { - int sideLength = 5; - double[][] xs = new double[sideLength+1][]; - double[][] ys = new double[xs.length][]; - for(int u=0; u projections; - - static { - projections = new HashMap(); - projections.put("web_mercator", new CenteredMapsProjection()); - projections.put("equirectangular", new GeographicProjection()); - projections.put("sinusoidal", new SinusoidalProjection()); - projections.put("equal_earth", new EqualEarth()); - projections.put("airocean", new Airocean()); - projections.put("transverse_mercator", new TransverseMercatorProjection()); - projections.put("airocean", new Airocean()); - projections.put("conformal", new ConformalEstimate()); - projections.put("bteairocean", new ModifiedAirocean()); - } - - public static enum Orientation { - none, upright, swapped - }; - - public static GeographicProjection orientProjection(GeographicProjection base, Orientation o) { - if(base.upright()) { - if(o==Orientation.upright) - return base; - base = new UprightOrientation(base); - } - - if(o==Orientation.swapped) { - return new InvertedOrientation(base); - } else if(o==Orientation.upright) { - base = new UprightOrientation(base); - } - - return base; - } - - public double[] toGeo(double x, double y) { - return new double[] {x,y}; - } - - public double[] fromGeo(double lon, double lat) { - return new double[] {lon, lat}; - } - - public double metersPerUnit() { - return 100000; - } - - public double[] bounds() { - - //get max in by using extreme coordinates - double[] b = new double[] { - fromGeo(-180,0)[0], - fromGeo(0,-90)[1], - fromGeo(180,0)[0], - fromGeo(0,90)[1] - }; - - if(b[0]>b[2]) { - double t = b[0]; - b[0] = b[2]; - b[2] = t; - } - - if(b[1]>b[3]) { - double t = b[1]; - b[1] = b[3]; - b[3] = t; - } - - return b; - } - - public boolean upright() { - return fromGeo(0,90)[1]<=fromGeo(0,-90)[1]; - } - - public double[] vector(double x, double y, double north, double east) { - double geo[] = toGeo(x,y); - - //TODO: east may be slightly off because earth not a sphere - double off[] = fromGeo(geo[0] + east*360.0/(Math.cos(geo[1]*Math.PI/180.0)*EARTH_CIRCUMFERENCE), - geo[1] + north*360.0/EARTH_POLAR_CIRCUMFERENCE); - - return new double[] {off[0]-x,off[1]-y}; - } - - public double[] tissot(double lon, double lat, double d) { - - double R = EARTH_CIRCUMFERENCE/(2*Math.PI); - - double ddeg = d*180.0/Math.PI; - - double[] base = fromGeo(lon, lat); - double[] lonoff = fromGeo(lon+ddeg, lat); - double[] latoff = fromGeo(lon,lat+ddeg); - - double dxdl = (lonoff[0]-base[0])/d; - double dxdp = (latoff[0]-base[0])/d; - double dydl = (lonoff[1]-base[1])/d; - double dydp = (latoff[1]-base[1])/d; - - double cosp = Math.cos(lat*Math.PI/180.0); - - double h = Math.sqrt(dxdp*dxdp + dydp*dydp)/R; - double k = Math.sqrt(dxdl*dxdl + dydl*dydl)/(cosp*R); - - double sint = Math.abs(dydp*dxdl - dxdp*dydl)/(R*R*cosp*h*k); - double ap = Math.sqrt(h*h + k*k + 2*h*k*sint); - double bp = Math.sqrt(h*h + k*k - 2*h*k*sint); - - double a = (ap+bp)/2; - double b = (ap-bp)/2; - - return new double[] {h*k*sint, 2*Math.asin(bp/ap), a, b}; - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/InvertableVectorField.java b/LiveWeather/src/Projections/InvertableVectorField.java deleted file mode 100755 index 2c2c90a..0000000 --- a/LiveWeather/src/Projections/InvertableVectorField.java +++ /dev/null @@ -1,92 +0,0 @@ -package Projections; - -public class InvertableVectorField { - protected double[][] VECTOR_X; - protected double[][] VECTOR_Y; - - protected static double ROOT3 = Math.sqrt(3); - - public int sideLength; - - public InvertableVectorField(double[][] vx, double[][] vy) { - sideLength = vx.length-1; - VECTOR_X = vx; - VECTOR_Y = vy; - } - - - public double[] getInterpolatedVector(double x, double y) { - //scale up triangle to be triangleSize across - x *= sideLength; - y *= sideLength; - - //convert to triangle units - double v = 2*y/ROOT3; - double u = x - v*0.5; - - int u1 = (int)u; - int v1 = (int)v; - - if(u1<0)u1 = 0; - else if(u1>=sideLength)u1 = sideLength-1; - - if(v1<0)v1 = 0; - else if(v1>=sideLength-u1)v1 = sideLength-u1-1; - - double valx1, valy1, valx2, valy2, valx3, valy3; - double y3, x3; - - double flip = 1; - - if(y < -ROOT3*(x-u1-v1-1) || v1 == sideLength-u1-1) { - valx1 = VECTOR_X[u1][v1]; - valy1 = VECTOR_Y[u1][v1]; - valx2 = VECTOR_X[u1][v1+1]; - valy2 = VECTOR_Y[u1][v1+1]; - valx3 = VECTOR_X[u1+1][v1]; - valy3 = VECTOR_Y[u1+1][v1]; - - y3 = 0.5*ROOT3*v1; - x3 = (u1+1) + 0.5*v1; - } else { - valx1 = VECTOR_X[u1][v1+1]; - valy1 = VECTOR_Y[u1][v1+1]; - valx2 = VECTOR_X[u1+1][v1]; - valy2 = VECTOR_Y[u1+1][v1]; - valx3 = VECTOR_X[u1+1][v1+1]; - valy3 = VECTOR_Y[u1+1][v1+1]; - - flip = -1; - y = -y; - - y3 = -(0.5*ROOT3*(v1+1)); - x3 = (u1+1) + 0.5*(v1+1); - } - - //TODO: not sure if weights are right (but weirdly mirrors stuff so there may be simplifcation yet) - double w1 = -(y-y3)/ROOT3-(x-x3); - double w2 = 2*(y-y3)/ROOT3; - double w3 = 1-w1-w2; - - return new double[] {valx1*w1 + valx2*w2 + valx3*w3, valy1*w1 + valy2*w2 + valy3*w3, - (valx3 - valx1)*sideLength, sideLength*flip*(2*valx2 - valx1 - valx3)/ROOT3, - (valy3 - valy1)*sideLength, sideLength*flip*(2*valy2 - valy1 - valy3)/ROOT3}; - } - - public double[] applyNewtonsMethod(double expectedf, double expectedg, double xest, double yest, int iter) { - for(int i=0; i0; - else if(y>ARC/2)easia = x>-ROOT3*ARC/2; - else easia = y*-ROOT30)return false; - if(x<-0.5*ARC)return true; - - if(y>ROOT3*ARC/4) //above arctic ocean - return x < 0; - - if(yBERING_Y) { //boundary across arctic ocean - - if(y ALEUTIAN_M*x + ALEUTIAN_B; - } - - public double[] bounds() { - return new double[] {-1.5*ARC*ROOT3, -1.5*ARC, 3*ARC, ROOT3*ARC}; //TODO: 3*ARC is prly to high - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/ProjectionTransform.java b/LiveWeather/src/Projections/ProjectionTransform.java deleted file mode 100755 index 2e7657e..0000000 --- a/LiveWeather/src/Projections/ProjectionTransform.java +++ /dev/null @@ -1,21 +0,0 @@ -package Projections; - -public abstract class ProjectionTransform extends GeographicProjection { - protected GeographicProjection input; - - public ProjectionTransform(GeographicProjection input) { - this.input = input; - } - - public boolean upright() { - return input.upright(); - } - - public double[] bounds() { - return input.bounds(); - } - - public double metersPerUnit() { - return input.metersPerUnit(); - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/SinusoidalProjection.java b/LiveWeather/src/Projections/SinusoidalProjection.java deleted file mode 100755 index ad09d91..0000000 --- a/LiveWeather/src/Projections/SinusoidalProjection.java +++ /dev/null @@ -1,18 +0,0 @@ -package Projections; - -public class SinusoidalProjection extends GeographicProjection { - - private static final double TO_RADIANS = Math.PI/180.0; - - public double[] toGeo(double x, double y) { - return new double[] {x/Math.cos(y*TO_RADIANS), y}; - } - - public double[] fromGeo(double lon, double lat) { - return new double[] {lon*Math.cos(lat*TO_RADIANS), lat}; - } - - public double metersPerUnit() { - return EARTH_CIRCUMFERENCE/360.0; //gotta make good on that exact area - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/TransverseMercatorProjection.java b/LiveWeather/src/Projections/TransverseMercatorProjection.java deleted file mode 100755 index 4c75f13..0000000 --- a/LiveWeather/src/Projections/TransverseMercatorProjection.java +++ /dev/null @@ -1,39 +0,0 @@ -package Projections; - -public class TransverseMercatorProjection extends GeographicProjection { - public static final double zoneWidth = Math.toRadians(6.0); - - public static double getCentralMeridian(double longitude) { - return (Math.floor(longitude / zoneWidth) + 0.5) * zoneWidth; - } - - public double[] fromGeo(double lon, double lat) { - double lam = Math.toRadians(lon); - double phi = Math.toRadians(lat); - double centralMeridian = getCentralMeridian(lam); - lam -= centralMeridian; - - double b = Math.cos(phi) * Math.sin(lam); - double x = Math.log((1.0 + b) / (1.0 - b)) / 2; - double y = Math.atan2(Math.tan(phi), Math.cos(lam)); - x += centralMeridian; - return new double[] {x, y}; - } - - public double[] toGeo(double x, double y) { - double centralMeridian = getCentralMeridian(x); - x -= centralMeridian; - double lam = Math.atan2(Math.sinh(x), Math.cos(y)) + centralMeridian; - double phi = Math.asin(Math.sin(y) / Math.cosh(x)); - double lon = Math.toDegrees(lam); - double lat = Math.toDegrees(phi); - return new double[] {lon, lat}; - } - - private static final double metersPerUnit = EARTH_CIRCUMFERENCE / (2 * Math.PI); - - @Override - public double metersPerUnit() { - return metersPerUnit; - } -} \ No newline at end of file diff --git a/LiveWeather/src/Projections/UprightOrientation.java b/LiveWeather/src/Projections/UprightOrientation.java deleted file mode 100755 index 4766014..0000000 --- a/LiveWeather/src/Projections/UprightOrientation.java +++ /dev/null @@ -1,27 +0,0 @@ -package Projections; - -public class UprightOrientation extends ProjectionTransform { - - public UprightOrientation (GeographicProjection input) { - super(input); - } - - public double[] toGeo(double x, double y) { - return input.toGeo(x, -y); - } - - public double[] fromGeo(double lon, double lat) { - double[] p = input.fromGeo(lon, lat); - p[1] = -p[1]; - return p; - } - - public boolean upright() { - return !input.upright(); - } - - public double[] bounds() { - double[] b = input.bounds(); - return new double[] {b[0],-b[3],b[2],-b[1]}; - } -} \ No newline at end of file diff --git a/LiveWeather/src/config.yml b/LiveWeather/src/config.yml deleted file mode 100755 index f08b0e0..0000000 --- a/LiveWeather/src/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -MySQL_host: LocalHost -MySQL_port: 3306 -MySQL_database: LiveWeather -MySQL_username: newuser1 -MySQL_password: xxxx -MySQL_weatherpreferences: WeatherPreferences -timerInterval: 5 -apiKey: ac594611afb90c97e2382439671e9112 -resourcePack: -defaultResourcePack: \ No newline at end of file diff --git a/LiveWeather/src/conformal.txt b/LiveWeather/src/conformal.txt deleted file mode 100755 index 62c3f9c..0000000 --- a/LiveWeather/src/conformal.txt +++ /dev/null @@ -1,33153 +0,0 @@ -[-0.6351700973139, -0.3667156266654], -[-0.6332386638017, -0.3667154970657], -[-0.6307333159771, -0.3667154668726], -[-0.627953033324, -0.3667154412246], -[-0.62497767569, -0.3667154167002], -[-0.62184831668, -0.3667153921149], -[-0.6185904798345, -0.3667153495524], -[-0.6152218639918, -0.3667153215288], -[-0.6117554087646, -0.3667152921131], -[-0.6082010785718, -0.3667152366931], -[-0.6045669121148, -0.3667152016076], -[-0.6008598155569, -0.3667156266654], -[-0.5970843007998, -0.3667156266654], -[-0.5932448034883, -0.3667156087944], -[-0.589346642021, -0.3667156031266], -[-0.5853926385977, -0.3667155936461], -[-0.5813858271793, -0.3667155705314], -[-0.5773288853414, -0.3667154199067], -[-0.5732250015773, -0.3667156265536], -[-0.5690749418579, -0.3667156266654], -[-0.5648813874288, -0.3667156266653], -[-0.5606461479909, -0.3667156266654], -[-0.5563708816832, -0.3667156266653], -[-0.5520564238951, -0.3667154006255], -[-0.5477055754422, -0.3667153500261], -[-0.5433189846719, -0.3667152882329], -[-0.5388978512169, -0.3667151851958], -[-0.5344437960554, -0.3667156266654], -[-0.5299561082675, -0.3667154888901], -[-0.5254384740664, -0.3667156266654], -[-0.5208897157761, -0.3667156238017], -[-0.516311445013, -0.3667156266654], -[-0.511704488272, -0.3667156266652], -[-0.5070696498042, -0.366715626665], -[-0.5024071428568, -0.3667151547853], -[-0.4977193275148, -0.3667156266654], -[-0.4930052554016, -0.3667156266654], -[-0.4882654443629, -0.3667154957748], -[-0.4835019104101, -0.366715445006], -[-0.478714554805, -0.3667153207538], -[-0.4739046099364, -0.3667156266654], -[-0.4690713202944, -0.3667156266654], -[-0.4642158832913, -0.3667156266654], -[-0.4593388151641, -0.3667156266654], -[-0.4544406139445, -0.3667156266654], -[-0.4495217606634, -0.3667156266654], -[-0.4445821920892, -0.3667151641332], -[-0.4396239435474, -0.3667156266654], -[-0.4346458662275, -0.3667156266654], -[-0.4296482257486, -0.3667154707082], -[-0.4246328340908, -0.3667153961262], -[-0.4195994659054, -0.3667152131445], -[-0.4145488354924, -0.3667156266654], -[-0.4094803676119, -0.3667156266654], -[-0.4043949671444, -0.3667156266654], -[-0.3992929931667, -0.3667156266654], -[-0.3941747960578, -0.3667156266654], -[-0.3890407179631, -0.3667156266654], -[-0.3838910932262, -0.3667156266654], -[-0.3787256411054, -0.366715371515], -[-0.3735459362062, -0.3667152954597], -[-0.3683521738758, -0.3667156266654], -[-0.3631435635734, -0.3667156266654], -[-0.3579209745809, -0.3667156266654], -[-0.3526847020622, -0.3667156266654], -[-0.3474350357217, -0.3667156266654], -[-0.3421722600624, -0.3667156266654], -[-0.336896654628, -0.3667156266654], -[-0.331607979197, -0.3667152808065], -[-0.3263075884672, -0.3667152323034], -[-0.3209955854524, -0.3667156266654], -[-0.3156713649331, -0.3667156266654], -[-0.3103350804551, -0.3667153430088], -[-0.3049881912735, -0.3667152587305], -[-0.2996307233776, -0.3667156266654], -[-0.2942615097155, -0.3667152661399], -[-0.2888828101098, -0.3667156266654], -[-0.2834933395229, -0.3667156266654], -[-0.2780938442086, -0.3667156266654], -[-0.2726845589507, -0.3667156266654], -[-0.2672657157619, -0.3667156266654], -[-0.2618375439986, -0.3667156266654], -[-0.2564002704722, -0.3667156266654], -[-0.2509536767794, -0.3667152796242], -[-0.2454993132722, -0.3667156266654], -[-0.2400360714168, -0.3667156266654], -[-0.2345640856315, -0.3667154017068], -[-0.2290847040314, -0.3667152592733], -[-0.2235978985277, -0.3667156266654], -[-0.218103070517, -0.3667156266654], -[-0.2126003264499, -0.3667154107394], -[-0.2070915210263, -0.3667156266654], -[-0.2015752141374, -0.3667156266654], -[-0.1960521594952, -0.3667156266654], -[-0.1905225604196, -0.3667156266654], -[-0.1849866187585, -0.3667156266654], -[-0.1794445349503, -0.3667156266654], -[-0.1738965080837, -0.3667156266654], -[-0.168342215407, -0.3667154260231], -[-0.162783415131, -0.3667156266654], -[-0.1572181860148, -0.3667155267475], -[-0.1516484421886, -0.3667153299145], -[-0.1460741086956, -0.3667156266654], -[-0.1404940299724, -0.366715450538], -[-0.1349103804866, -0.3667156266654], -[-0.1293212882195, -0.3667156251093], -[-0.1237286369425, -0.3667153387557], -[-0.1181323169837, -0.3667156266654], -[-0.1125311835048, -0.3667155505598], -[-0.1069274934963, -0.3667156266654], -[-0.1013194017709, -0.3667153128205], -[-0.09570837330089, -0.3667154255351], -[-0.09009481915143, -0.3667156266654], -[-0.08447747780695, -0.3667153265315], -[-0.07885823480855, -0.3667156266654], -[-0.07323605363854, -0.3667156266654], -[-0.06761112860125, -0.3667153322906], -[-0.06198482733564, -0.3667156266654], -[-0.05635564139802, -0.3667155586256], -[-0.05072556753063, -0.3667156066549], -[-0.04509355741854, -0.3667156266654], -[-0.03946001133611, -0.3667156266654], -[-0.03382520521212, -0.3667156266654], -[-0.02818931948403, -0.3667156266654], -[-0.02255253438973, -0.3667156266654], -[-0.01691503000114, -0.3667156266654], -[-0.01127698625763, -0.3667156266654], -[-0.005638582999264, -0.3667156266654], -[1.847108089679e-15, -0.3667156266654], -[0.005638582999268, -0.3667156266654], -[0.01127698625763, -0.3667156266654], -[0.01691503000115, -0.3667156266654], -[0.02255253438973, -0.3667156266654], -[0.02818931948403, -0.3667156266654], -[0.03382520521212, -0.3667156266654], -[0.03946001133612, -0.3667156266654], -[0.04509355741854, -0.3667156266654], -[0.05072556712433, -0.366715604886], -[0.05635614650765, -0.3667156266654], -[0.0619852957041, -0.3667154432319], -[0.06761152369553, -0.3667156266654], -[0.07323605363854, -0.3667156266654], -[0.07885823480856, -0.3667156266654], -[0.08447788440603, -0.3667156266654], -[0.09009481915143, -0.3667156266654], -[0.09570885524815, -0.3667156266654], -[0.1013198083447, -0.3667156266654], -[0.1069274934963, -0.3667156266654], -[0.1125317251258, -0.3667156266654], -[0.1181323169837, -0.3667156266654], -[0.1237290821075, -0.3667156266654], -[0.1293212878792, -0.3667156245435], -[0.1349103804866, -0.3667156266654], -[0.1404945358721, -0.3667156266654], -[0.1460741086956, -0.3667156266654], -[0.1516489077848, -0.3667156266654], -[0.1572187409891, -0.3667156266654], -[0.162783415131, -0.3667156266654], -[0.1683427359565, -0.3667156266654], -[0.1738965080838, -0.3667156266654], -[0.1794445349503, -0.3667156266654], -[0.1849866187585, -0.3667156266654], -[0.1905225604196, -0.3667156266654], -[0.1960521594952, -0.3667156266654], -[0.2015752141374, -0.3667156266654], -[0.2070915210263, -0.3667156266654], -[0.2126008753059, -0.3667156266654], -[0.218103070517, -0.3667156266654], -[0.2235978985277, -0.3667156266654], -[0.2290851494615, -0.3667156266654], -[0.2345646116224, -0.3667156266654], -[0.2400360714168, -0.3667156266654], -[0.2454993132722, -0.3667156266654], -[0.2509541195531, -0.3667156266654], -[0.2564002704722, -0.3667156266654], -[0.2618375439987, -0.3667156266654], -[0.2672657157619, -0.3667156266654], -[0.2726845589507, -0.3667156266654], -[0.2780938442086, -0.3667156266654], -[0.2834933395229, -0.3667156266654], -[0.2888828101098, -0.3667156266654], -[0.2942620182933, -0.3667156266654], -[0.2996307233776, -0.3667156266654], -[0.3049886815139, -0.3667156266654], -[0.3103356455602, -0.3667156266654], -[0.3156713649331, -0.3667156266654], -[0.3209955854524, -0.3667156266654], -[0.3263080491771, -0.3667156266654], -[0.3316084942327, -0.3667156266654], -[0.336896654628, -0.3667156266654], -[0.3421722600624, -0.3667156266654], -[0.3474350357217, -0.3667156266654], -[0.3526847020622, -0.3667156266654], -[0.3579209745809, -0.3667156266654], -[0.3631435635734, -0.3667156266654], -[0.3683521738758, -0.3667156266654], -[0.3735465045901, -0.3667156266654], -[0.3787262487932, -0.3667156266654], -[0.383891093001, -0.3667156266489], -[0.3890407179631, -0.3667156266654], -[0.3941747960578, -0.3667156266654], -[0.3992929931667, -0.3667156266654], -[0.4043949671444, -0.3667156266654], -[0.4094803676119, -0.3667156266654], -[0.4145488354924, -0.3667156266654], -[0.4196000025133, -0.3667156266654], -[0.4246334906713, -0.3667156266654], -[0.4296489116558, -0.3667156266654], -[0.4346458659344, -0.366715626638], -[0.4396239435474, -0.3667156266654], -[0.4445827204512, -0.3667156266654], -[0.4495217606635, -0.3667156266654], -[0.4544406139445, -0.3667156266654], -[0.4593388151641, -0.3667156266654], -[0.4642158832913, -0.3667156266654], -[0.4690713202944, -0.3667156266654], -[0.4739046096237, -0.3667156266653], -[0.478715216457, -0.3667156266654], -[0.4835025831249, -0.3667156266654], -[0.4882661306451, -0.3667156266654], -[0.4930052550484, -0.3667156266642], -[0.4977193275148, -0.3667156266654], -[0.5024076886867, -0.3667156266654], -[0.5070696498042, -0.366715626665], -[0.5117044882719, -0.3667156266652], -[0.516311445013, -0.3667156266654], -[0.5208897161028, -0.3667156238617], -[0.5254384737674, -0.3667156266639], -[0.529956813436, -0.3667156266654], -[0.5344437957607, -0.366715626664], -[0.5388984204549, -0.3667156266654], -[0.5433196205147, -0.3667156266654], -[0.5477062581472, -0.3667156266654], -[0.5520571148203, -0.3667156266654], -[0.5563708816837, -0.3667156266654], -[0.5606461479909, -0.3667156266654], -[0.5648813874292, -0.3667156266654], -[0.5690749418579, -0.3667156266654], -[0.5732250018003, -0.3667156266654], -[0.5773295826238, -0.3667156266636], -[0.5813858269512, -0.3667155704813], -[0.5853926383501, -0.3667155935923], -[0.5893466417545, -0.3667156030693], -[0.5932448032047, -0.3667156087341], -[0.5970843002, -0.3667156266605], -[0.6008598150395, -0.3667156266645], -[0.6045674014662, -0.3667156266633], -[0.6082016184861, -0.3667156266625], -[0.6117559498681, -0.3667156266646], -[0.6152224285476, -0.3667156266637], -[0.618591056973, -0.3667156266594], -[0.621848859512, -0.3667156266621], -[0.6249782101179, -0.3667156266622], -[0.6279535478163, -0.3667156266547], -[0.6307337950092, -0.3667156266596], -[0.6332390780071, -0.3667156265926], -[0.6351700973139, -0.3667156266654], -[-0.6342042681505, -0.3650430151451], -[-0.6317108510898, -0.3647184299268], -[-0.628971828904, -0.3645158804729], -[-0.6260376749537, -0.3643674706112], -[-0.6229462836853, -0.3642493113158], -[-0.6197232358938, -0.364150583404], -[-0.6163866225566, -0.3640654717298], -[-0.6129498782272, -0.3639904795325], -[-0.6094233814073, -0.3639233329736], -[-0.6058154037608, -0.3638624659109], -[-0.6021327040514, -0.3638067511096], -[-0.5983809176941, -0.3637553485574], -[-0.5945648226304, -0.3637076144282], -[-0.5906885269803, -0.3636630436715], -[-0.5867556053053, -0.3636212323004], -[-0.5827691999821, -0.3635818517599], -[-0.5787320982334, -0.363544630996], -[-0.5746467917184, -0.363509343592], -[-0.5705155233903, -0.363475798341], -[-0.566340324862, -0.3634438322025], -[-0.5621230465801, -0.3634133049515], -[-0.5578653824678, -0.3633840950522], -[-0.5535688902563, -0.3633560964325], -[-0.5492350084233, -0.3633292159346], -[-0.5448650703745, -0.3633033712673], -[-0.5404603165069, -0.3632784893645], -[-0.5360219044361, -0.363254505037], -[-0.5315509177835, -0.3632313598681], -[-0.5270483737548, -0.3632090012968], -[-0.5225152297116, -0.363187381854], -[-0.5179523889012, -0.3631664585201], -[-0.5133607054745, -0.363146192182], -[-0.5087409889005, -0.3631265471716], -[-0.5040940078671, -0.3631074908718], -[-0.4994204937373, -0.3630889933763], -[-0.49472114363, -0.3630710271986], -[-0.4899966231677, -0.3630535670174], -[-0.4852475689398, -0.3630365894562], -[-0.4804745907158, -0.3630200728899], -[-0.4756782734407, -0.3630039972758], -[-0.4708591790379, -0.3629883440046], -[-0.4660178480427, -0.3629730957683], -[-0.4611548010862, -0.3629582364435], -[-0.4562705402458, -0.3629437509881], -[-0.4513655502782, -0.3629296253483], -[-0.4464402997461, -0.3629158463762], -[-0.4414952420503, -0.3629024017554], -[-0.4365308163781, -0.3628892799347], -[-0.4315474485748, -0.3628764700678], -[-0.4265455519467, -0.3628639619594], -[-0.4215255280019, -0.3628517460162], -[-0.4164877671356, -0.3628398132021], -[-0.4114326492643, -0.3628281549983], -[-0.4063605444135, -0.3628167633663], -[-0.4012718132637, -0.3628056307144], -[-0.3961668076581, -0.3627947498673], -[-0.3910458710754, -0.3627841140379], -[-0.3859093390697, -0.3627737168013], -[-0.3807575396826, -0.362763552072], -[-0.3755907938272, -0.3627536140816], -[-0.3704094156474, -0.362743897359], -[-0.3652137128553, -0.3627343967119], -[-0.3600039870468, -0.3627251072101], -[-0.3547805339984, -0.3627160241694], -[-0.3495436439455, -0.3627071431372], -[-0.344293601845, -0.3626984598791], -[-0.3390306876221, -0.3626899703661], -[-0.3337551764028, -0.3626816707633], -[-0.3284673387338, -0.3626735574188], -[-0.3231674407894, -0.3626656268537], -[-0.3178557445681, -0.3626578757527], -[-0.3125325080774, -0.3626503009554], -[-0.3071979855099, -0.3626428994479], -[-0.3018524274094, -0.3626356683554], -[-0.2964960808288, -0.362628604935], -[-0.2911291894801, -0.3626217065687], -[-0.2857519938765, -0.3626149707574], -[-0.2803647314681, -0.362608395115], -[-0.2749676367707, -0.3626019773626], -[-0.2695609414883, -0.3625957153236], -[-0.2641448746306, -0.3625896069188], -[-0.258719662624, -0.3625836501614], -[-0.2532855294186, -0.3625778431533], -[-0.2478426965901, -0.3625721840804], -[-0.242391383437, -0.3625666712094], -[-0.2369318070738, -0.3625613028835], -[-0.2314641825205, -0.3625560775194], -[-0.225988722788, -0.3625509936044], -[-0.2205056389605, -0.3625460496924], -[-0.215015140274, -0.3625412444021], -[-0.2095174341923, -0.3625365764135], -[-0.2040127264802, -0.3625320444661], -[-0.1985012212722, -0.3625276473548], -[-0.1929831211429, -0.3625233839306], -[-0.1874586271691, -0.3625192530956], -[-0.1819279389946, -0.3625152538023], -[-0.1763912548901, -0.3625113850514], -[-0.1708487718123, -0.3625076458899], -[-0.1653006854606, -0.3625040354098], -[-0.1597471903318, -0.3625005527458], -[-0.1541884797736, -0.3624971970743], -[-0.1486247460366, -0.3624939676117], -[-0.1430561803239, -0.3624908636131], -[-0.1374829728403, -0.362487884371], -[-0.1319053128393, -0.362485029214], -[-0.12632338867, -0.3624822975058], -[-0.1207373878214, -0.362479688644], -[-0.1151474969667, -0.3624772020591], -[-0.1095539020058, -0.3624748372135], -[-0.1039567881079, -0.3624725936009], -[-0.09835633975163, -0.3624704707448], -[-0.09275274076572, -0.3624684681984], -[-0.08714617436821, -0.3624665855435], -[-0.08153682320506, -0.3624648223899], -[-0.07592486938806, -0.3624631783747], -[-0.07031049453211, -0.362461653162], -[-0.06469387979194, -0.3624602464416], -[-0.05907520589831, -0.3624589579297], -[-0.05345465319362, -0.3624577873671], -[-0.04783240166716, -0.3624567345198], -[-0.04220863098995, -0.3624557991782], -[-0.03658352054921, -0.3624549811568], -[-0.03095724948243, -0.362454280294], -[-0.0253299967113, -0.3624536964516], -[-0.01970194097528, -0.3624532295149], -[-0.01407326086502, -0.3624528793923], -[-0.008444134855606, -0.3624526460153], -[-0.002814741339652, -0.3624525293382], -[0.002814741339656, -0.3624525293382], -[0.008444134855609, -0.3624526460153], -[0.01407326086503, -0.3624528793923], -[0.01970194097528, -0.3624532295149], -[0.0253299967113, -0.3624536964516], -[0.03095724948243, -0.362454280294], -[0.03658352054921, -0.3624549811568], -[0.04220863098996, -0.3624557991782], -[0.04783240166716, -0.3624567345198], -[0.05345465319362, -0.3624577873671], -[0.05907520589832, -0.3624589579297], -[0.06469387979195, -0.3624602464416], -[0.07031049453211, -0.362461653162], -[0.07592486938806, -0.3624631783747], -[0.08153682320507, -0.3624648223899], -[0.08714617436822, -0.3624665855435], -[0.09275274076572, -0.3624684681984], -[0.09835633975163, -0.3624704707448], -[0.1039567881079, -0.3624725936009], -[0.1095539020059, -0.3624748372135], -[0.1151474969667, -0.3624772020591], -[0.1207373878214, -0.362479688644], -[0.12632338867, -0.3624822975058], -[0.1319053128393, -0.362485029214], -[0.1374829728403, -0.362487884371], -[0.1430561803239, -0.3624908636131], -[0.1486247460367, -0.3624939676117], -[0.1541884797737, -0.3624971970743], -[0.1597471903318, -0.3625005527458], -[0.1653006854606, -0.3625040354098], -[0.1708487718124, -0.3625076458899], -[0.1763912548901, -0.3625113850514], -[0.1819279389946, -0.3625152538023], -[0.1874586271691, -0.3625192530956], -[0.1929831211429, -0.3625233839306], -[0.1985012212722, -0.3625276473548], -[0.2040127264798, -0.3625320444656], -[0.2095174341923, -0.3625365764135], -[0.215015140274, -0.3625412444021], -[0.2205056389605, -0.3625460496924], -[0.225988722788, -0.3625509936044], -[0.2314641825205, -0.3625560775194], -[0.2369318070738, -0.3625613028835], -[0.242391383437, -0.3625666712094], -[0.2478426965901, -0.3625721840804], -[0.2532855294186, -0.3625778431533], -[0.258719662624, -0.3625836501614], -[0.2641448746306, -0.3625896069188], -[0.2695609414884, -0.3625957153236], -[0.2749676367707, -0.3626019773626], -[0.2803647314681, -0.362608395115], -[0.2857519938765, -0.3626149707574], -[0.2911291894801, -0.3626217065687], -[0.2964960808288, -0.362628604935], -[0.3018524274094, -0.3626356683554], -[0.3071979855099, -0.3626428994479], -[0.3125325080774, -0.3626503009554], -[0.3178557445681, -0.3626578757527], -[0.3231674407894, -0.3626656268537], -[0.3284673387337, -0.3626735574188], -[0.3337551764028, -0.3626816707634], -[0.3390306876221, -0.3626899703661], -[0.344293601845, -0.3626984598791], -[0.3495436439455, -0.3627071431372], -[0.3547805339984, -0.3627160241694], -[0.3600039870468, -0.3627251072101], -[0.3652137128553, -0.3627343967119], -[0.3704094156474, -0.362743897359], -[0.3755907938272, -0.3627536140816], -[0.3807575396827, -0.362763552072], -[0.3859093390697, -0.3627737168013], -[0.3910458710754, -0.3627841140379], -[0.3961668076581, -0.3627947498673], -[0.4012718132637, -0.3628056307144], -[0.4063605444135, -0.3628167633663], -[0.4114326492643, -0.3628281549983], -[0.4164877671356, -0.3628398132021], -[0.4215255280019, -0.3628517460162], -[0.4265455519467, -0.3628639619594], -[0.4315474485748, -0.3628764700678], -[0.4365308163781, -0.3628892799347], -[0.4414952420502, -0.3629024017554], -[0.446440299746, -0.3629158463762], -[0.4513655502783, -0.3629296253483], -[0.4562705402459, -0.3629437509881], -[0.4611548010862, -0.3629582364435], -[0.4660178480427, -0.3629730957683], -[0.4708591790379, -0.3629883440046], -[0.4756782734407, -0.3630039972758], -[0.4804745907158, -0.3630200728899], -[0.4852475689399, -0.3630365894562], -[0.4899966231678, -0.3630535670174], -[0.4947211436299, -0.3630710271985], -[0.4994204937369, -0.3630889933762], -[0.5040940078663, -0.3631074908715], -[0.5087409889014, -0.3631265471719], -[0.5133607054748, -0.3631461921821], -[0.5179523889013, -0.3631664585201], -[0.5225152297116, -0.363187381854], -[0.5270483737548, -0.3632090012968], -[0.5315509177835, -0.3632313598681], -[0.536021904436, -0.363254505037], -[0.5404603165069, -0.3632784893645], -[0.5448650703747, -0.3633033712674], -[0.5492350084246, -0.3633292159349], -[0.5535688902631, -0.3633560964338], -[0.5578653824714, -0.3633840950528], -[0.5621230465812, -0.3634133049517], -[0.5663403248621, -0.3634438322025], -[0.5705155233902, -0.363475798341], -[0.5746467917184, -0.363509343592], -[0.5787320982334, -0.363544630996], -[0.5827691999823, -0.3635818517599], -[0.5867556053077, -0.3636212323007], -[0.5906885269803, -0.3636630436715], -[0.5945648226304, -0.3637076144282], -[0.5983809176941, -0.3637553485574], -[0.6021327040514, -0.3638067511096], -[0.6058154037608, -0.3638624659109], -[0.6094233814073, -0.3639233329736], -[0.612949878227, -0.3639904795325], -[0.616386622556, -0.3640654717297], -[0.6197232358917, -0.3641505834039], -[0.6229462836822, -0.3642493113159], -[0.6260376749537, -0.3643674706112], -[0.6289718289048, -0.3645158804727], -[0.6317108510894, -0.364718429927], -[0.6342042673467, -0.3650430165223], -[-0.6329515681202, -0.3628733380433], -[-0.6301659270239, -0.3624476418594], -[-0.6272271393764, -0.362129757762], -[-0.6241465724011, -0.3618773522893], -[-0.6209404550093, -0.3616677516674], -[-0.6176232459972, -0.3614881463078], -[-0.6142068188799, -0.3613307220946], -[-0.6107008337417, -0.3611903891517], -[-0.6071132201136, -0.3610636525997], -[-0.603450574735, -0.360948009166], -[-0.5997184615322, -0.3608416033649], -[-0.595921633886, -0.3607430205876], -[-0.5920641999799, -0.3606511567187], -[-0.5881497471803, -0.3605651327121], -[-0.5841814370187, -0.3604842367423], -[-0.5801620785486, -0.3604078838801], -[-0.5760941860081, -0.3603355872956], -[-0.5719800245457, -0.3602669372291], -[-0.5678216470082, -0.3602015853456], -[-0.5636209238272, -0.3601392328929], -[-0.5593795675472, -0.3600796216022], -[-0.5550991531412, -0.3600225266], -[-0.5507811349912, -0.3599677508208], -[-0.5464268611289, -0.3599151205429], -[-0.5420375854088, -0.3598644818077], -[-0.5376144777932, -0.3598156974924], -[-0.5331586332459, -0.3597686449187], -[-0.5286710793902, -0.3597232138731], -[-0.5241527831605, -0.3596793049589], -[-0.5196046566047, -0.3596368282144], -[-0.5150275619696, -0.3595957019482], -[-0.5104223161767, -0.3595558517498], -[-0.5057896947783, -0.3595172096462], -[-0.5011304354646, -0.3594797133784], -[-0.4964452411885, -0.3594433057777], -[-0.491734782956, -0.3594079342266], -[-0.486999702326, -0.3593735501893], -[-0.482240613657, -0.3593401088022], -[-0.4774581061333, -0.3593075685153], -[-0.4726527455943, -0.359275890777], -[-0.4678250761942, -0.3592450397553], -[-0.4629756219073, -0.3592149820916], -[-0.4581048878996, -0.3591856866825], -[-0.4532133617801, -0.359157124484], -[-0.4483015147445, -0.3591292683386], -[-0.4433698026229, -0.3591020928189], -[-0.438418666842, -0.359075574088], -[-0.4334485353096, -0.3590496897736], -[-0.4284598232288, -0.3590244188547], -[-0.4234529338507, -0.358999741559], -[-0.4184282591685, -0.3589756392698], -[-0.4133861805609, -0.3589520944416], -[-0.4083270693887, -0.3589290905238], -[-0.4032512875481, -0.3589066118905], -[-0.3981591879854, -0.3588846437764], -[-0.393051115176, -0.358863172219], -[-0.3879274055713, -0.3588421840048], -[-0.3827883880154, -0.3588216666203], -[-0.3776343841345, -0.3588016082066], -[-0.3724657087012, -0.3587819975187], -[-0.3672826699763, -0.3587628238863], -[-0.3620855700283, -0.3587440771792], -[-0.356874705034, -0.3587257477745], -[-0.3516503655606, -0.358707826526], -[-0.3464128368315, -0.3586903047369], -[-0.3411623989761, -0.3586731741334], -[-0.3358993272655, -0.3586564268407], -[-0.3306238923343, -0.3586400553606], -[-0.3253363603914, -0.3586240525506], -[-0.3200369934174, -0.3586084116047], -[-0.3147260493527, -0.3585931260349], -[-0.3094037822751, -0.3585781896545], -[-0.3040704425683, -0.3585635965624], -[-0.2987262770812, -0.3585493411279], -[-0.2933715292793, -0.3585354179772], -[-0.2880064393907, -0.358521821981], -[-0.282631244539, -0.3585085482405], -[-0.2772461788774, -0.358495592078], -[-0.2718514737112, -0.3584829490251], -[-0.266447357616, -0.3584706148132], -[-0.2610340565508, -0.3584585853633], -[-0.2556117939657, -0.3584468567779], -[-0.2501807909047, -0.358435425332], -[-0.2447412661043, -0.3584242874658], -[-0.2392934360872, -0.3584134397765], -[-0.2338375152533, -0.3584028790121], -[-0.2283737159652, -0.3583926020642], -[-0.2229022486319, -0.3583826059619], -[-0.2174233217884, -0.3583728878663], -[-0.2119371421708, -0.3583634450639], -[-0.2064439147924, -0.3583542749629], -[-0.2009438430122, -0.3583453750871], -[-0.1954371286043, -0.3583367430711], -[-0.1899239718231, -0.3583283766568], -[-0.1844045714669, -0.3583202736883], -[-0.1788791249394, -0.3583124321085], -[-0.1733478283084, -0.3583048499552], -[-0.1678108763634, -0.3582975253573], -[-0.1622684626706, -0.358290456532], -[-0.1567207796273, -0.358283641781], -[-0.1511680185133, -0.3582770794881], -[-0.1456103695417, -0.358270768116], -[-0.140048021908, -0.3582647062037], -[-0.1344811638381, -0.3582588923641], -[-0.1289099826343, -0.3582533252816], -[-0.1233346647209, -0.3582480037097], -[-0.1177553956883, -0.3582429264693], -[-0.1121723603363, -0.3582380924463], -[-0.1065857427159, -0.3582335005902], -[-0.1009957261701, -0.3582291499105], -[-0.09540249337582, -0.3582250394794], -[-0.08980622638164, -0.3582211684253], -[-0.08420710664741, -0.3582175359345], -[-0.07860531508223, -0.3582141412487], -[-0.07300103208181, -0.358210983664], -[-0.06739443756528, -0.3582080625301], -[-0.06178571101152, -0.3582053772485], -[-0.05617503149482, -0.3582029272725], -[-0.05056257772024, -0.3582007121053], -[-0.04494852805846, -0.3581987313002], -[-0.03933306058028, -0.3581969844591], -[-0.03371635309076, -0.3581954712323], -[-0.0280985831631, -0.3581941913179], -[-0.02247992817223, -0.3581931444611], -[-0.01686056532817, -0.3581923304541], -[-0.01124067170926, -0.3581917491355], -[-0.00562042429521, -0.3581914003903], -[1.656027942471e-15, -0.3581912841496], -[0.005620424295213, -0.3581914003903], -[0.01124067170927, -0.3581917491355], -[0.01686056532817, -0.3581923304541], -[0.02247992817223, -0.3581931444611], -[0.0280985831631, -0.3581941913179], -[0.03371635309076, -0.3581954712323], -[0.03933306058028, -0.3581969844591], -[0.04494852805846, -0.3581987313002], -[0.05056257772024, -0.3582007121053], -[0.05617503149482, -0.3582029272725], -[0.06178571101152, -0.3582053772485], -[0.06739443756529, -0.3582080625301], -[0.07300103208181, -0.358210983664], -[0.07860531508224, -0.3582141412487], -[0.08420710664742, -0.3582175359345], -[0.08980622638164, -0.3582211684253], -[0.09540249337583, -0.3582250394794], -[0.1009957261701, -0.3582291499105], -[0.1065857427157, -0.3582335005897], -[0.1121723603363, -0.3582380924463], -[0.1177553956883, -0.3582429264693], -[0.1233346647209, -0.3582480037097], -[0.1289099826343, -0.3582533252816], -[0.1344811638381, -0.3582588923641], -[0.140048021908, -0.3582647062037], -[0.1456103695417, -0.358270768116], -[0.1511680185133, -0.3582770794881], -[0.1567207796273, -0.358283641781], -[0.1622684626706, -0.358290456532], -[0.1678108763634, -0.3582975253573], -[0.1733478283085, -0.3583048499552], -[0.1788791249394, -0.3583124321085], -[0.1844045714669, -0.3583202736883], -[0.1899239718231, -0.3583283766568], -[0.1954371286043, -0.3583367430711], -[0.2009438430122, -0.3583453750871], -[0.2064439147924, -0.3583542749629], -[0.2119371421708, -0.3583634450639], -[0.2174233217885, -0.3583728878664], -[0.2229022486319, -0.3583826059619], -[0.2283737159652, -0.3583926020642], -[0.2338375152533, -0.3584028790121], -[0.2392934360872, -0.3584134397765], -[0.2447412661043, -0.3584242874658], -[0.2501807909048, -0.358435425332], -[0.2556117939657, -0.3584468567779], -[0.2610340565508, -0.3584585853633], -[0.266447357616, -0.3584706148132], -[0.2718514737112, -0.3584829490251], -[0.2772461788774, -0.358495592078], -[0.282631244539, -0.3585085482405], -[0.2880064393907, -0.358521821981], -[0.2933715292798, -0.3585354179775], -[0.2987262770812, -0.3585493411279], -[0.3040704425683, -0.3585635965624], -[0.3094037822751, -0.3585781896545], -[0.3147260493527, -0.3585931260349], -[0.3200369934174, -0.3586084116047], -[0.3253363603914, -0.3586240525506], -[0.3306238923344, -0.3586400553606], -[0.3358993272655, -0.3586564268407], -[0.3411623989761, -0.3586731741334], -[0.3464128368315, -0.3586903047369], -[0.3516503655606, -0.358707826526], -[0.356874705034, -0.3587257477745], -[0.3620855700283, -0.3587440771792], -[0.3672826699763, -0.3587628238863], -[0.3724657087012, -0.3587819975187], -[0.3776343841345, -0.3588016082066], -[0.3827883880154, -0.3588216666203], -[0.3879274055713, -0.3588421840048], -[0.393051115176, -0.358863172219], -[0.3981591879854, -0.3588846437764], -[0.4032512875481, -0.3589066118905], -[0.4083270693887, -0.3589290905238], -[0.4133861805609, -0.3589520944416], -[0.4184282591685, -0.3589756392698], -[0.4234529338507, -0.358999741559], -[0.4284598232288, -0.3590244188547], -[0.4334485353096, -0.3590496897736], -[0.438418666842, -0.359075574088], -[0.4433698026229, -0.3591020928189], -[0.4483015147444, -0.3591292683386], -[0.4532133617801, -0.359157124484], -[0.4581048878996, -0.3591856866824], -[0.4629756219073, -0.3592149820916], -[0.4678250761942, -0.3592450397553], -[0.4726527455943, -0.359275890777], -[0.4774581061333, -0.3593075685153], -[0.482240613657, -0.3593401088022], -[0.486999702326, -0.3593735501893], -[0.491734782956, -0.3594079342266], -[0.4964452411884, -0.3594433057777], -[0.5011304354643, -0.3594797133783], -[0.5057896947779, -0.3595172096461], -[0.5104223161774, -0.35955585175], -[0.5150275619698, -0.3595957019483], -[0.5196046566047, -0.3596368282145], -[0.5241527831605, -0.3596793049589], -[0.5286710793902, -0.3597232138731], -[0.5331586332459, -0.3597686449187], -[0.5376144777933, -0.3598156974924], -[0.5420375854091, -0.3598644818077], -[0.5464268611302, -0.3599151205431], -[0.5507811349899, -0.3599677508206], -[0.5550991531431, -0.3600225266003], -[0.5593795675468, -0.3600796216021], -[0.5636209238261, -0.3601392328928], -[0.5678216470074, -0.3602015853455], -[0.5719800245457, -0.3602669372291], -[0.5760941860084, -0.3603355872956], -[0.580162078548, -0.36040788388], -[0.5841814370163, -0.3604842367421], -[0.5881497471852, -0.3605651327125], -[0.5920641999761, -0.3606511567184], -[0.595921633886, -0.3607430205876], -[0.5997184615322, -0.3608416033649], -[0.603450574735, -0.360948009166], -[0.6071132201136, -0.3610636525997], -[0.6107008337416, -0.3611903891517], -[0.6142068188798, -0.3613307220946], -[0.6176232459975, -0.3614881463078], -[0.6209404550127, -0.3616677516667], -[0.6241465724273, -0.361877352282], -[0.6272271393764, -0.362129757762], -[0.6301659270244, -0.3624476418589], -[0.6329515676353, -0.3628733389251], -[-0.6315614046085, -0.3604655564437], -[-0.6285703233388, -0.3599807949305], -[-0.6254682663273, -0.3595881112537], -[-0.6222570400941, -0.3592602696015], -[-0.618943553886, -0.3589792897889], -[-0.615535806408, -0.3587334151169], -[-0.6120413779806, -0.3585147188143], -[-0.6084670271392, -0.3583176627765], -[-0.6048186629225, -0.3581382462167], -[-0.6011014311553, -0.3579734923566], -[-0.5973198240091, -0.3578211290361], -[-0.5934777831448, -0.3576793833312], -[-0.5895787883198, -0.3575468453085], -[-0.5856259310426, -0.357422375043], -[-0.5816219749016, -0.3573050375273], -[-0.5775694049084, -0.3571940560535], -[-0.5734704679308, -0.3570887781429], -[-0.5693272059578, -0.3569886501863], -[-0.5651414836345, -0.3568931982582], -[-0.5609150111917, -0.356802013385], -[-0.5566493636631, -0.3567147400827], -[-0.5523459970824, -0.3566310673286], -[-0.5480062622339, -0.3565507213718], -[-0.5436314163836, -0.3564734599498], -[-0.5392226333444, -0.356399067593], -[-0.5347810121569, -0.3563273517787], -[-0.5303075846197, -0.3562581397579], -[-0.5258033218443, -0.3561912759164], -[-0.5212691399919, -0.3561266195655], -[-0.5167059053124, -0.3560640430817], -[-0.51211443859, -0.3560034303298], -[-0.5074955190786, -0.3559446753195], -[-0.502849888, -0.3558876810546], -[-0.4981782516582, -0.3558323585428], -[-0.493481284231, -0.3557786259397], -[-0.4887596302699, -0.3557264078053], -[-0.4840139069503, -0.3556756344558], -[-0.4792447061012, -0.3556262413967], -[-0.4744525960412, -0.3555781688242], -[-0.469638123243, -0.3555313611864], -[-0.4648018138462, -0.3554857667947], -[-0.4599441750348, -0.3554413374796], -[-0.4550656962948, -0.3553980282841], -[-0.4501668505651, -0.35535579719], -[-0.4452480952911, -0.3553146048739], -[-0.4403098733929, -0.3552744144873], -[-0.4353526141557, -0.3552351914595], -[-0.4303767340498, -0.3551969033198], -[-0.4253826374882, -0.3551595195368], -[-0.4203707175264, -0.3551230113734], -[-0.4153413565103, -0.3550873517543], -[-0.410294926677, -0.3550525151468], -[-0.405231790713, -0.3550184774512], -[-0.4001523022725, -0.3549852159013], -[-0.3950568064608, -0.3549527089735], -[-0.389945640284, -0.3549209363034], -[-0.3848191330697, -0.3548898786093], -[-0.3796776068594, -0.3548595176224], -[-0.3745213767762, -0.3548298360215], -[-0.3693507513686, -0.3548008173745], -[-0.3641660329334, -0.3547724460827], -[-0.3589675178185, -0.3547447073305], -[-0.3537554967078, -0.3547175870386], -[-0.3485302548887, -0.3546910718205], -[-0.3432920725041, -0.3546651489422], -[-0.3380412247904, -0.3546398062849], -[-0.3327779823011, -0.3546150323101], -[-0.3275026111189, -0.3545908160277], -[-0.3222153730556, -0.3545671469654], -[-0.316916525841, -0.3545440151412], -[-0.3116063233027, -0.3545214110367], -[-0.306285015535, -0.3544993255728], -[-0.3009528490607, -0.3544777500872], -[-0.2956100669836, -0.3544566763125], -[-0.2902569091334, -0.3544360963563], -[-0.2848936122044, -0.3544160026827], -[-0.2795204098862, -0.3543963880943], -[-0.2741375329892, -0.354377245716], -[-0.2687452095637, -0.3543585689791], -[-0.2633436650136, -0.3543403516072], -[-0.2579331222051, -0.3543225876019], -[-0.2525138015703, -0.3543052712304], -[-0.2470859212064, -0.3542883970128], -[-0.2416496969707, -0.3542719597112], -[-0.2362053425714, -0.3542559543185], -[-0.2307530696548, -0.3542403760483], -[-0.2252930878887, -0.3542252203254], -[-0.2198256050428, -0.3542104827767], -[-0.2143508270656, -0.3541961592223], -[-0.2088689581587, -0.3541822456681], -[-0.2033802008479, -0.3541687382973], -[-0.1978847560519, -0.354155633464], -[-0.1923828231487, -0.3541429276858], -[-0.1868746000392, -0.3541306176375], -[-0.181360283209, -0.3541187001454], -[-0.1758400677878, -0.3541071721807], -[-0.1703141476073, -0.3540960308549], -[-0.1647827152568, -0.3540852734142], -[-0.159245962137, -0.3540748972346], -[-0.1537040785129, -0.3540648998176], -[-0.1481572535642, -0.3540552787856], -[-0.1426056754348, -0.354046031878], -[-0.137049531281, -0.3540371569469], -[-0.131489007318, -0.354028651954], -[-0.1259242888656, -0.3540205149671], -[-0.1203555603924, -0.3540127441562], -[-0.1147830055591, -0.3540053377914], -[-0.109206807261, -0.3539982942391], -[-0.1036271476693, -0.3539916119603], -[-0.09804420827142, -0.353985289507], -[-0.0924581699108, -0.3539793255209], -[-0.08686921282576, -0.3539737187302], -[-0.08127751668769, -0.3539684679485], -[-0.07568326063852, -0.3539635720719], -[-0.07008662332766, -0.3539590300782], -[-0.06448778294831, -0.3539548410247], -[-0.05888691727327, -0.3539510040466], -[-0.05328420369029, -0.3539475183561], -[-0.04767981923695, -0.3539443832409], -[-0.04207394063517, -0.3539415980629], -[-0.03646674432536, -0.3539391622575], -[-0.0308584065003, -0.3539370753326], -[-0.02524910313863, -0.3539353368677], -[-0.01963901003828, -0.3539339465136], -[-0.0140283028495, -0.3539329039915], -[-0.00841715710793, -0.3539322090925], -[-0.002805748267379, -0.3539318616777], -[0.002805748267383, -0.3539318616777], -[0.008417157107933, -0.3539322090925], -[0.0140283028495, -0.3539329039915], -[0.01963901003828, -0.3539339465136], -[0.02524910313864, -0.3539353368677], -[0.0308584065003, -0.3539370753326], -[0.03646674432537, -0.3539391622575], -[0.04207394063517, -0.3539415980629], -[0.04767981923695, -0.3539443832409], -[0.0532842036903, -0.3539475183561], -[0.05888691727328, -0.3539510040466], -[0.06448778294831, -0.3539548410247], -[0.07008662332767, -0.3539590300782], -[0.07568326063853, -0.3539635720719], -[0.0812775166877, -0.3539684679485], -[0.08686921282577, -0.3539737187302], -[0.0924581699108, -0.3539793255209], -[0.09804420827143, -0.353985289507], -[0.1036271476693, -0.3539916119603], -[0.109206807261, -0.3539982942391], -[0.1147830055591, -0.3540053377914], -[0.1203555603924, -0.3540127441562], -[0.1259242888656, -0.3540205149671], -[0.1314890073181, -0.354028651954], -[0.137049531281, -0.3540371569469], -[0.1426056754348, -0.354046031878], -[0.1481572535642, -0.3540552787856], -[0.1537040785129, -0.3540648998176], -[0.159245962137, -0.3540748972346], -[0.1647827152568, -0.3540852734142], -[0.1703141476073, -0.3540960308549], -[0.1758400677878, -0.3541071721807], -[0.181360283209, -0.3541187001454], -[0.1868746000392, -0.3541306176375], -[0.1923828231487, -0.3541429276858], -[0.1978847560519, -0.354155633464], -[0.2033802008479, -0.3541687382973], -[0.2088689581587, -0.3541822456681], -[0.2143508270656, -0.3541961592223], -[0.2198256050428, -0.3542104827767], -[0.2252930878887, -0.3542252203254], -[0.2307530696548, -0.3542403760483], -[0.2362053425714, -0.3542559543185], -[0.2416496969707, -0.3542719597112], -[0.2470859212064, -0.3542883970128], -[0.2525138015703, -0.3543052712304], -[0.2579331222051, -0.3543225876019], -[0.2633436650136, -0.3543403516072], -[0.2687452095637, -0.3543585689791], -[0.2741375329892, -0.354377245716], -[0.2795204098862, -0.3543963880943], -[0.2848936122044, -0.3544160026827], -[0.2902569091334, -0.3544360963563], -[0.2956100669836, -0.3544566763125], -[0.3009528490607, -0.3544777500872], -[0.306285015535, -0.3544993255728], -[0.3116063233027, -0.3545214110367], -[0.316916525841, -0.3545440151412], -[0.3222153730556, -0.3545671469654], -[0.3275026111189, -0.3545908160277], -[0.3327779823011, -0.3546150323101], -[0.3380412247904, -0.3546398062849], -[0.3432920725041, -0.3546651489422], -[0.3485302548887, -0.3546910718205], -[0.3537554967078, -0.3547175870386], -[0.3589675178185, -0.3547447073305], -[0.3641660329334, -0.3547724460827], -[0.3693507513686, -0.3548008173745], -[0.3745213767762, -0.3548298360215], -[0.3796776068594, -0.3548595176224], -[0.3848191330697, -0.3548898786093], -[0.389945640284, -0.3549209363034], -[0.3950568064608, -0.3549527089735], -[0.4001523022725, -0.3549852159013], -[0.405231790713, -0.3550184774512], -[0.410294926677, -0.3550525151468], -[0.4153413565103, -0.3550873517543], -[0.4203707175264, -0.3551230113734], -[0.4253826374882, -0.3551595195368], -[0.4303767340498, -0.3551969033198], -[0.4353526141557, -0.3552351914595], -[0.4403098733929, -0.3552744144873], -[0.4452480952911, -0.3553146048739], -[0.4501668505651, -0.35535579719], -[0.4550656962947, -0.3553980282841], -[0.4599441750347, -0.3554413374796], -[0.4648018138462, -0.3554857667947], -[0.4696381232431, -0.3555313611864], -[0.4744525960412, -0.3555781688242], -[0.4792447061012, -0.3556262413967], -[0.4840139069503, -0.3556756344558], -[0.4887596302699, -0.3557264078053], -[0.4934812842309, -0.3557786259397], -[0.4981782516581, -0.3558323585428], -[0.502849888, -0.3558876810546], -[0.5074955190793, -0.3559446753196], -[0.5121144385903, -0.3560034303299], -[0.5167059053125, -0.3560640430817], -[0.5212691399919, -0.3561266195655], -[0.5258033218443, -0.3561912759164], -[0.5303075846197, -0.3562581397579], -[0.534781012157, -0.3563273517787], -[0.5392226333445, -0.356399067593], -[0.543631416384, -0.3564734599499], -[0.5480062622334, -0.3565507213718], -[0.5523459970803, -0.3566310673284], -[0.556649363659, -0.3567147400823], -[0.5609150111875, -0.3568020133846], -[0.5651414836319, -0.356893198258], -[0.5693272059573, -0.3569886501863], -[0.5734704679318, -0.3570887781429], -[0.5775694049092, -0.3571940560535], -[0.5816219749015, -0.3573050375273], -[0.5856259310441, -0.3574223750431], -[0.5895787883193, -0.3575468453085], -[0.5934777831395, -0.3576793833313], -[0.5973198240012, -0.3578211290365], -[0.6011014311553, -0.3579734923566], -[0.6048186629225, -0.3581382462167], -[0.6084670271392, -0.3583176627765], -[0.6120413779806, -0.3585147188143], -[0.6155358064082, -0.3587334151168], -[0.6189435538868, -0.3589792897886], -[0.6222570400883, -0.3592602696041], -[0.6254682663294, -0.3595881112524], -[0.6285703233388, -0.3599807949305], -[0.6315614042512, -0.360465557114], -[-0.6300737045703, -0.3578888339366], -[-0.6269222987543, -0.3573626512144], -[-0.623683688177, -0.3569163324449], -[-0.6203569613325, -0.3565311962794], -[-0.6169448906322, -0.3561932986815], -[-0.6134518661962, -0.355892587253], -[-0.6098826836689, -0.3556217532339], -[-0.6062420169276, -0.3553753879217], -[-0.6025342141031, -0.3551494071833], -[-0.5987632390104, -0.3549406652459], -[-0.594932675244, -0.3547466939499], -[-0.591045754895, -0.3545655240932], -[-0.5871053951615, -0.354395560751], -[-0.5831142351014, -0.3542354946498], -[-0.5790746696398, -0.354084238], -[-0.5749888797968, -0.3539408772344], -[-0.5708588590332, -0.3538046376383], -[-0.5666864360283, -0.3536748564873], -[-0.5624732942267, -0.3535509623658], -[-0.5582209886818, -0.3534324590461], -[-0.5539309605543, -0.3533189127775], -[-0.5496045495604, -0.3532099421549], -[-0.5452430048049, -0.3531052099688], -[-0.5408474941452, -0.3530044165864], -[-0.5364191123545, -0.3529072945332], -[-0.5319588882531, -0.352813604022], -[-0.5274677909663, -0.3527231292373], -[-0.522946735427, -0.3526356752271], -[-0.5183965872375, -0.352551065286], -[-0.513818166976, -0.3524691387391], -[-0.5092122540237, -0.3523897490555], -[-0.5045795899788, -0.3523127622335], -[-0.4999208817033, -0.3522380554116], -[-0.4952368040654, -0.3521655156696], -[-0.4905280023946, -0.3520950389869], -[-0.4857950947019, -0.3520265293365], -[-0.4810386736833, -0.3519598978913], -[-0.4762593085365, -0.3518950623286], -[-0.471457546609, -0.3518319462169], -[-0.4666339148987, -0.3517704784742], -[-0.4617889214226, -0.3517105928878], -[-0.4569230564667, -0.3516522276875], -[-0.4520367937312, -0.3515953251649], -[-0.4471305913805, -0.3515398313331], -[-0.4422048930077, -0.3514856956218], -[-0.4372601285237, -0.3514328706031], -[-0.4322967149755, -0.3513813117446], -[-0.4273150573026, -0.351330977187], -[-0.4223155490372, -0.3512818275419], -[-0.4172985729516, -0.3512338257093], -[-0.4122645016594, -0.3511869367119], -[-0.4072136981744, -0.3511411275433], -[-0.4021465164294, -0.3510963670308], -[-0.3970633017605, -0.3510526257093], -[-0.3919643913578, -0.3510098757061], -[-0.3868501146869, -0.3509680906355], -[-0.3817207938827, -0.3509272455018], -[-0.3765767441173, -0.35088731661], -[-0.3714182739462, -0.3508482814842], -[-0.366245685631, -0.3508101187916], -[-0.3610592754444, -0.3507728082728], -[-0.3558593339551, -0.3507363306774], -[-0.3506461462971, -0.3507006677038], -[-0.3454199924225, -0.3506658019441], -[-0.3401811473405, -0.3506317168328], -[-0.334929881342, -0.3505983965988], -[-0.3296664602126, -0.350565826221], -[-0.3243911454334, -0.3505339913869], -[-0.319104194371, -0.3505028784544], -[-0.3138058604579, -0.3504724744154], -[-0.3084963933624, -0.3504427668626], -[-0.3031760391513, -0.3504137439578], -[-0.2978450404425, -0.3503853944026], -[-0.2925036365518, -0.3503577074112], -[-0.2871520636311, -0.3503306726844], -[-0.2817905548009, -0.3503042803853], -[-0.2764193402755, -0.3502785211172], -[-0.2710386474832, -0.3502533859015], -[-0.2656487011808, -0.3502288661585], -[-0.2602497235623, -0.3502049536882], -[-0.2548419343636, -0.3501816406525], -[-0.2494255509619, -0.3501589195587], -[-0.2440007884715, -0.3501367832441], -[-0.2385678598346, -0.3501152248606], -[-0.2331269759096, -0.3500942378612], -[-0.2276783455544, -0.3500738159866], -[-0.2222221757075, -0.3500539532532], -[-0.2167586714654, -0.3500346439409], -[-0.2112880361569, -0.3500158825822], -[-0.2058104714151, -0.3499976639519], -[-0.200326177246, -0.3499799830571], -[-0.1948353520954, -0.3499628351279], -[-0.189338192913, -0.3499462156083], -[-0.1838348952141, -0.3499301201487], -[-0.1783256531398, -0.3499145445968], -[-0.1728106595147, -0.3498994849914], -[-0.167290105903, -0.3498849375543], -[-0.1617641826628, -0.3498708986843], -[-0.1562330789984, -0.3498573649507], -[-0.1506969830121, -0.3498443330875], -[-0.1451560817529, -0.3498317999875], -[-0.1396105612654, -0.3498197626972], -[-0.1340606066363, -0.3498082184117], -[-0.1285064020406, -0.3497971644705], -[-0.1229481307851, -0.349786598352], -[-0.1173859753532, -0.3497765176702], -[-0.1118201174464, -0.3497669201706], -[-0.1062507380258, -0.3497578037264], -[-0.1006780173535, -0.3497491663348], -[-0.09510213503122, -0.3497410061145], -[-0.08952327004025, -0.3497333213016], -[-0.08394160077914, -0.3497261102477], -[-0.07835730510146, -0.3497193714168], -[-0.07277056035275, -0.349713103383], -[-0.06718154340686, -0.3497073048283], -[-0.06159043070178, -0.3497019745401], -[-0.05599739827502, -0.3496971114101], -[-0.05040262179851, -0.3496927144316], -[-0.04480627661304, -0.3496887826987], -[-0.03920853776245, -0.3496853154046], -[-0.03360958002742, -0.3496823118403], -[-0.02800957795895, -0.3496797713934], -[-0.02240870591168, -0.3496776935474], -[-0.01680713807691, -0.3496760778809], -[-0.01120504851547, -0.3496749240666], -[-0.005602611190488, -0.3496742318713], -[1.464947795262e-15, -0.349674001155], -[0.005602611190491, -0.3496742318713], -[0.01120504851547, -0.3496749240666], -[0.01680713807691, -0.3496760778809], -[0.02240870591169, -0.3496776935474], -[0.02800957795895, -0.3496797713934], -[0.03360958002742, -0.3496823118403], -[0.03920853776245, -0.3496853154046], -[0.04480627661304, -0.3496887826987], -[0.05040262179851, -0.3496927144316], -[0.05599739827502, -0.3496971114101], -[0.06159043070178, -0.3497019745401], -[0.06718154340686, -0.3497073048283], -[0.07277056035276, -0.349713103383], -[0.07835730510147, -0.3497193714168], -[0.08394160077914, -0.3497261102477], -[0.08952327004025, -0.3497333213016], -[0.09510213503122, -0.3497410061145], -[0.1006780173535, -0.3497491663348], -[0.1062507380258, -0.3497578037264], -[0.1118201174464, -0.3497669201706], -[0.1173859753532, -0.3497765176702], -[0.1229481307852, -0.349786598352], -[0.1285064020406, -0.3497971644705], -[0.1340606066365, -0.3498082184119], -[0.1396105612654, -0.3498197626972], -[0.1451560817529, -0.3498317999875], -[0.1506969830121, -0.3498443330875], -[0.1562330789984, -0.3498573649507], -[0.1617641826628, -0.3498708986843], -[0.167290105903, -0.3498849375543], -[0.1728106595147, -0.3498994849914], -[0.1783256531398, -0.3499145445968], -[0.1838348952141, -0.3499301201487], -[0.189338192913, -0.3499462156084], -[0.1948353520955, -0.3499628351279], -[0.200326177246, -0.3499799830571], -[0.2058104714151, -0.3499976639519], -[0.2112880361569, -0.3500158825822], -[0.2167586714654, -0.3500346439409], -[0.2222221757075, -0.3500539532532], -[0.2276783455544, -0.3500738159866], -[0.2331269759096, -0.3500942378612], -[0.2385678598346, -0.3501152248606], -[0.2440007884715, -0.3501367832441], -[0.2494255509619, -0.3501589195587], -[0.2548419343636, -0.3501816406525], -[0.2602497235623, -0.3502049536882], -[0.2656487011808, -0.3502288661585], -[0.2710386474832, -0.3502533859015], -[0.2764193402755, -0.3502785211172], -[0.2817905548009, -0.3503042803853], -[0.2871520636311, -0.3503306726844], -[0.2925036365518, -0.3503577074112], -[0.2978450404425, -0.3503853944026], -[0.3031760391513, -0.3504137439578], -[0.3084963933624, -0.3504427668626], -[0.3138058604579, -0.3504724744154], -[0.319104194371, -0.3505028784544], -[0.3243911454334, -0.3505339913869], -[0.3296664602126, -0.350565826221], -[0.334929881342, -0.3505983965988], -[0.3401811473405, -0.3506317168328], -[0.3454199924225, -0.3506658019441], -[0.3506461462971, -0.3507006677038], -[0.3558593339551, -0.3507363306774], -[0.3610592754444, -0.3507728082728], -[0.366245685631, -0.3508101187916], -[0.3714182739462, -0.3508482814842], -[0.3765767441173, -0.35088731661], -[0.3817207938827, -0.3509272455018], -[0.386850114687, -0.3509680906355], -[0.3919643913578, -0.3510098757061], -[0.3970633017605, -0.3510526257093], -[0.4021465164294, -0.3510963670308], -[0.4072136981744, -0.3511411275433], -[0.4122645016594, -0.3511869367119], -[0.4172985729516, -0.3512338257093], -[0.4223155490372, -0.3512818275419], -[0.4273150573025, -0.351330977187], -[0.4322967149755, -0.3513813117446], -[0.4372601285237, -0.3514328706031], -[0.4422048930077, -0.3514856956218], -[0.4471305913805, -0.3515398313331], -[0.4520367937312, -0.3515953251649], -[0.4569230564666, -0.3516522276875], -[0.4617889214225, -0.3517105928878], -[0.4666339148987, -0.3517704784742], -[0.471457546609, -0.3518319462169], -[0.4762593085366, -0.3518950623286], -[0.4810386736833, -0.3519598978913], -[0.4857950947019, -0.3520265293365], -[0.4905280023946, -0.3520950389869], -[0.4952368040654, -0.3521655156696], -[0.4999208817034, -0.3522380554116], -[0.5045795899787, -0.3523127622335], -[0.5092122540237, -0.3523897490555], -[0.5138181669758, -0.3524691387391], -[0.5183965872374, -0.352551065286], -[0.5229467354269, -0.3526356752271], -[0.5274677909663, -0.3527231292373], -[0.5319588882531, -0.352813604022], -[0.5364191123544, -0.3529072945332], -[0.5408474941454, -0.3530044165864], -[0.5452430048048, -0.3531052099688], -[0.5496045495598, -0.3532099421549], -[0.5539309605531, -0.3533189127774], -[0.558220988681, -0.353432459046], -[0.5624732942204, -0.3535509623655], -[0.5666864360261, -0.3536748564872], -[0.5708588590349, -0.3538046376383], -[0.5749888797944, -0.3539408772344], -[0.5790746696387, -0.354084238], -[0.5831142351014, -0.3542354946498], -[0.5871053951615, -0.354395560751], -[0.5910457548942, -0.3545655240933], -[0.5949326752444, -0.3547466939498], -[0.5987632390219, -0.3549406652443], -[0.6025342141031, -0.3551494071833], -[0.6062420169277, -0.3553753879217], -[0.6098826836689, -0.3556217532339], -[0.6134518661963, -0.355892587253], -[0.6169448906318, -0.3561932986817], -[0.6203569613321, -0.3565311962796], -[0.6236836881789, -0.3569163324433], -[0.6269222987637, -0.3573626512024], -[0.6300737042825, -0.357888834489], -[-0.6285090037862, -0.3551787421656], -[-0.6252252739776, -0.3546207738972], -[-0.6218695408679, -0.3541333478479], -[-0.6184401538815, -0.3537029377299], -[-0.6149379546778, -0.3533186064984], -[-0.6113652983287, -0.3529719195633], -[-0.6077252006152, -0.3526563867138], -[-0.6040208770719, -0.352366977871], -[-0.6002555077801, -0.3520997500171], -[-0.596432125371, -0.3518515722888], -[-0.5925535683423, -0.351619926219], -[-0.5886224682531, -0.3514027605422], -[-0.5846412538525, -0.351198384918], -[-0.5806121631516, -0.3510053913331], -[-0.5765372586817, -0.3508225952912], -[-0.5724184434666, -0.3506489912773], -[-0.5682574764735, -0.350483718628], -[-0.564055986972, -0.3503260350762], -[-0.559815487567, -0.3501752960203], -[-0.5555373859672, -0.350030938112], -[-0.5512229953416, -0.3498924661377], -[-0.5468735436338, -0.349759442437], -[-0.5424901817563, -0.3496314782963], -[-0.5380739908621, -0.3495082268929], -[-0.5336259887904, -0.3493893774679], -[-0.5291471357886, -0.3492746504801], -[-0.5246383396002, -0.3491637935503], -[-0.5201004599952, -0.349056578046], -[-0.5155343128166, -0.3489527961886], -[-0.5109406735997, -0.3488522585912], -[-0.5063202808173, -0.3487547921508], -[-0.5016738387966, -0.3486602382366], -[-0.4970020203467, -0.3485684511248], -[-0.4923054691296, -0.3484792966412], -[-0.4875848018059, -0.3483926509793], -[-0.4828406099804, -0.3483083996666], -[-0.478073461969, -0.3482264366581], -[-0.4732839044077, -0.3481466635379], -[-0.4684724637197, -0.3480689888144], -[-0.4636396474564, -0.3479933272956], -[-0.4587859455249, -0.3479195995339], -[-0.453911831314, -0.3478477313311], -[-0.4490177627286, -0.347777653297], -[-0.4441041831414, -0.3477093004526], -[-0.4391715222699, -0.3476426118748], -[-0.4342201969869, -0.3475775303762], -[-0.4292506120687, -0.3475140022159], -[-0.4242631608884, -0.3474519768383], -[-0.419258226059, -0.3473914066363], -[-0.4142361800296, -0.3473322467363], -[-0.4091973856406, -0.3472744548027], -[-0.4041421966396, -0.3472179908595], -[-0.3990709581633, -0.3471628171274], -[-0.3939840071859, -0.3471088978753], -[-0.388881672939, -0.3470561992835], -[-0.3837642773042, -0.3470046893187], -[-0.37863213518, -0.3469543376189], -[-0.3734855548262, -0.3469051153876], -[-0.3683248381877, -0.3468569952963], -[-0.363150281197, -0.346809951394], -[-0.3579621740602, -0.3467639590245], -[-0.3527608015254, -0.346718994749], -[-0.3475464431357, -0.3466750362749], -[-0.3423193734674, -0.3466320623894], -[-0.3370798623556, -0.3465900528983], -[-0.3318281751067, -0.3465489885685], -[-0.326564572699, -0.3465088510751], -[-0.3212893119736, -0.3464696229516], -[-0.3160026458144, -0.3464312875435], -[-0.3107048233185, -0.3463938289658], -[-0.3053960899586, -0.3463572320619], -[-0.3000766877369, -0.3463214823664], -[-0.294746855331, -0.3462865660695], -[-0.2894068282329, -0.3462524699841], -[-0.2840568388818, -0.3462191815149], -[-0.2786971167894, -0.3461866886287], -[-0.2733278886606, -0.3461549798282], -[-0.267949378508, -0.3461240441251], -[-0.262561807761, -0.346093871017], -[-0.2571653953707, -0.346064450464], -[-0.25176035791, -0.3460357728679], -[-0.2463469096688, -0.3460078290515], -[-0.240925262746, -0.3459806102401], -[-0.2354956271371, -0.3459541080437], -[-0.2300582108189, -0.3459283144397], -[-0.2246132198297, -0.3459032217572], -[-0.2191608583478, -0.3458788226623], -[-0.2137013287655, -0.3458551101434], -[-0.2082348317613, -0.3458320774983], -[-0.2027615663694, -0.3458097183211], -[-0.1972817300458, -0.3457880264908], -[-0.1917955187335, -0.3457669961594], -[-0.1863031269239, -0.3457466217417], -[-0.1808047477171, -0.345726897905], -[-0.1753005728804, -0.3457078195596], -[-0.1697907929037, -0.3456893818497], -[-0.1642755970545, -0.345671580145], -[-0.1587551734307, -0.3456544100326], -[-0.1532297090114, -0.3456378673095], -[-0.1476993897068, -0.3456219479749], -[-0.1421644004073, -0.3456066482247], -[-0.1366249250287, -0.345591964443], -[-0.1310811465599, -0.345577893198], -[-0.1255332471067, -0.3455644312355], -[-0.1199814079352, -0.3455515754733], -[-0.1144258095147, -0.3455393229966], -[-0.1088666315591, -0.3455276710533], -[-0.1033040530673, -0.345516617049], -[-0.09773825236351, -0.3455061585433], -[-0.092169407136, -0.3454962932458], -[-0.08659769447533, -0.3454870190123], -[-0.08102329091208, -0.3454783338415], -[-0.07544637245376, -0.345470235872], -[-0.06986711462122, -0.3454627233789], -[-0.06428569248444, -0.3454557947717], -[-0.05870228069791, -0.3454494485915], -[-0.05311705353547, -0.3454436835086], -[-0.04753018492477, -0.3454384983207], -[-0.04194184848139, -0.3454338919509], -[-0.03635221754251, -0.3454298634461], -[-0.03076146520045, -0.3454264119756], -[-0.02516976433575, -0.3454235368295], -[-0.0195772876502, -0.345421237418], -[-0.01398420769956, -0.3454195132704], -[-0.008390696926187, -0.3454183640342], -[-0.00279692769152, -0.3454177894747], -[0.002796927691523, -0.3454177894747], -[0.00839069692619, -0.3454183640342], -[0.01398420769956, -0.3454195132704], -[0.0195772876502, -0.345421237418], -[0.02516976433575, -0.3454235368295], -[0.03076146520045, -0.3454264119756], -[0.03635221754252, -0.3454298634461], -[0.04194184848139, -0.3454338919509], -[0.04753018492478, -0.3454384983207], -[0.05311705353547, -0.3454436835086], -[0.05870228069792, -0.3454494485915], -[0.06428569248445, -0.3454557947717], -[0.06986711462122, -0.3454627233789], -[0.07544637245376, -0.345470235872], -[0.08102329091208, -0.3454783338415], -[0.08659769447533, -0.3454870190123], -[0.092169407136, -0.3454962932458], -[0.09773825236352, -0.3455061585433], -[0.1033040530673, -0.345516617049], -[0.1088666315591, -0.3455276710533], -[0.1144258095148, -0.3455393229966], -[0.1199814079352, -0.3455515754733], -[0.1255332471067, -0.3455644312355], -[0.1310811465599, -0.345577893198], -[0.1366249250287, -0.345591964443], -[0.1421644004073, -0.3456066482247], -[0.1476993897071, -0.3456219479753], -[0.1532297090114, -0.3456378673095], -[0.1587551734307, -0.3456544100326], -[0.1642755970546, -0.345671580145], -[0.1697907929037, -0.3456893818497], -[0.1753005728804, -0.3457078195596], -[0.1808047477171, -0.345726897905], -[0.1863031269239, -0.3457466217417], -[0.1917955187335, -0.3457669961594], -[0.1972817300458, -0.3457880264908], -[0.2027615663694, -0.3458097183211], -[0.2082348317613, -0.3458320774983], -[0.2137013287655, -0.3458551101434], -[0.2191608583478, -0.3458788226623], -[0.2246132198297, -0.3459032217572], -[0.2300582108189, -0.3459283144397], -[0.2354956271371, -0.3459541080437], -[0.240925262746, -0.3459806102401], -[0.2463469096688, -0.3460078290515], -[0.25176035791, -0.3460357728679], -[0.2571653953707, -0.346064450464], -[0.262561807761, -0.346093871017], -[0.267949378508, -0.3461240441251], -[0.2733278886606, -0.3461549798282], -[0.2786971167894, -0.3461866886287], -[0.2840568388818, -0.3462191815149], -[0.2894068282329, -0.3462524699841], -[0.294746855331, -0.3462865660695], -[0.3000766877369, -0.3463214823664], -[0.3053960899586, -0.3463572320619], -[0.3107048233185, -0.3463938289658], -[0.3160026458144, -0.3464312875435], -[0.3212893119736, -0.3464696229516], -[0.326564572699, -0.3465088510751], -[0.3318281751067, -0.3465489885685], -[0.3370798623556, -0.3465900528983], -[0.3423193734674, -0.3466320623894], -[0.3475464431357, -0.3466750362749], -[0.3527608015254, -0.346718994749], -[0.3579621740602, -0.3467639590245], -[0.363150281197, -0.346809951394], -[0.3683248381877, -0.3468569952963], -[0.3734855548262, -0.3469051153876], -[0.37863213518, -0.3469543376189], -[0.3837642773042, -0.3470046893187], -[0.388881672939, -0.3470561992835], -[0.3939840071859, -0.3471088978753], -[0.3990709581633, -0.3471628171274], -[0.4041421966397, -0.3472179908595], -[0.4091973856406, -0.3472744548027], -[0.4142361800296, -0.3473322467363], -[0.419258226059, -0.3473914066363], -[0.4242631608884, -0.3474519768383], -[0.4292506120687, -0.3475140022159], -[0.4342201969869, -0.3475775303762], -[0.4391715222699, -0.3476426118748], -[0.4441041831414, -0.3477093004526], -[0.4490177627286, -0.347777653297], -[0.453911831314, -0.3478477313311], -[0.4587859455249, -0.3479195995339], -[0.4636396474564, -0.3479933272957], -[0.4684724637197, -0.3480689888144], -[0.4732839044077, -0.3481466635379], -[0.478073461969, -0.3482264366581], -[0.4828406099804, -0.3483083996666], -[0.4875848018059, -0.3483926509793], -[0.4923054691296, -0.3484792966412], -[0.4970020203468, -0.3485684511248], -[0.5016738387966, -0.3486602382366], -[0.506320280817, -0.3487547921508], -[0.5109406735991, -0.3488522585911], -[0.5155343128161, -0.3489527961886], -[0.520100459995, -0.349056578046], -[0.5246383396003, -0.3491637935503], -[0.5291471357887, -0.3492746504801], -[0.5336259887903, -0.3493893774679], -[0.5380739908621, -0.3495082268929], -[0.5424901817563, -0.3496314782963], -[0.5468735436337, -0.349759442437], -[0.5512229953415, -0.3498924661377], -[0.5555373859679, -0.350030938112], -[0.5598154875702, -0.3501752960203], -[0.564055986966, -0.3503260350763], -[0.5682574764747, -0.350483718628], -[0.5724184434683, -0.3506489912772], -[0.576537258682, -0.3508225952912], -[0.5806121631516, -0.3510053913331], -[0.5846412538525, -0.351198384918], -[0.5886224682531, -0.3514027605422], -[0.5925535683428, -0.3516199262189], -[0.5964321253753, -0.3518515722879], -[0.6002555077824, -0.3520997500166], -[0.6040208770719, -0.352366977871], -[0.6077252006152, -0.3526563867138], -[0.6113652983287, -0.3529719195633], -[0.6149379546777, -0.3533186064984], -[0.6184401538815, -0.3537029377299], -[0.6218695408684, -0.3541333478474], -[0.6252252739787, -0.3546207738956], -[0.6285090035432, -0.3551787426413], -[-0.6268800485097, -0.3523573941527], -[-0.623483258437, -0.3517737378217], -[-0.6200249939416, -0.3512533472803], -[-0.6165035431141, -0.3507860220913], -[-0.6129188142734, -0.3503630207685], -[-0.6092719900086, -0.3499772688958], -[-0.6055649435687, -0.3496230831812], -[-0.601799877417, -0.3492958929645], -[-0.5979791094939, -0.3489920016579], -[-0.5941049514841, -0.3487083959172], -[-0.5901796426293, -0.3484425975117], -[-0.5862053162538, -0.3481925497323], -[-0.5821839854535, -0.3479565304397], -[-0.5781175396955, -0.3477330853185], -[-0.5740077474916, -0.3475209763322], -[-0.569856262274, -0.3473191416235], -[-0.5656646297886, -0.3471266640613], -[-0.5614342960073, -0.3469427463654], -[-0.557166615053, -0.3467666912652], -[-0.5528628567474, -0.3465978855493], -[-0.5485242137201, -0.3464357871371], -[-0.5441518079511, -0.3462799145249], -[-0.5397466967608, -0.346129838106], -[-0.5353098782577, -0.3459851729854], -[-0.5308422962776, -0.3458455729927], -[-0.5263448448527, -0.3457107256625], -[-0.5218183722508, -0.3455803480029], -[-0.5172636846281, -0.3454541829078], -[-0.5126815493294, -0.3453319961003], -[-0.5080726978812, -0.3452135735157], -[-0.5034378286934, -0.3450987190494], -[-0.4987776095196, -0.3449872526122], -[-0.4940926796866, -0.3448790084427], -[-0.4893836521239, -0.3447738336378], -[-0.4846511152125, -0.3446715868675], -[-0.4798956344724, -0.3445721372479], -[-0.4751177541039, -0.3444753633488], -[-0.470317998399, -0.3443811523169], -[-0.4654968730353, -0.3442893991003], -[-0.4606548662633, -0.3442000057577], -[-0.4557924499988, -0.3441128808443], -[-0.4509100808288, -0.3440279388629], -[-0.4460082009389, -0.3439450997715], -[-0.4410872389697, -0.3438642885422], -[-0.4361476108093, -0.3437854347634], -[-0.4311897203266, -0.3437084722817], -[-0.4262139600518, -0.3436333388773], -[-0.4212207118077, -0.3435599759709], -[-0.4162103472971, -0.3434883283567], -[-0.411183228649, -0.3434183439605], -[-0.4061397089283, -0.3433499736182], -[-0.4010801326104, -0.3432831708751], -[-0.3960048360254, -0.3432178918006], -[-0.3909141477728, -0.34315409482], -[-0.3858083891098, -0.3430917405597], -[-0.3806878743156, -0.3430307917044], -[-0.3755529110327, -0.3429712128665], -[-0.370403800587, -0.3429129704654], -[-0.3652408382896, -0.3428560326165], -[-0.36006431372, -0.3428003690277], -[-0.3548745109929, -0.3427459509048], -[-0.3496717090098, -0.3426927508632], -[-0.3444561816964, -0.3426407428461], -[-0.3392281982265, -0.3425899020489], -[-0.3339880232335, -0.3425402048482], -[-0.3287359170114, -0.3424916287366], -[-0.3234721357036, -0.3424441522612], -[-0.3181969314827, -0.3423977549671], -[-0.3129105527212, -0.3423524173437], -[-0.3076132441526, -0.3423081207752], -[-0.3023052470253, -0.3422648474944], -[-0.2969867992481, -0.3422225805387], -[-0.2916581355296, -0.3421813037098], -[-0.2863194875095, -0.3421410015355], -[-0.2809710838851, -0.3421016592336], -[-0.2756131505313, -0.3420632626787], -[-0.2702459106146, -0.3420257983704], -[-0.2648695847031, -0.3419892534035], -[-0.2594843908707, -0.3419536154406], -[-0.2540905447972, -0.3419188726851], -[-0.2486882598637, -0.3418850138573], -[-0.2432777472446, -0.3418520281704], -[-0.2378592159953, -0.341819905309], -[-0.2324328731366, -0.341788635408], -[-0.2269989237354, -0.3417582090335], -[-0.2215575709827, -0.3417286171641], -[-0.2161090162682, -0.3416998511734], -[-0.2106534592525, -0.3416719028138], -[-0.205191097936, -0.3416447642009], -[-0.1997221287261, -0.3416184277987], -[-0.1942467465016, -0.3415928864057], -[-0.1887651446747, -0.3415681331422], -[-0.1832775152513, -0.3415441614374], -[-0.1777840488889, -0.3415209650179], -[-0.1722849349531, -0.3414985378965], -[-0.1667803615723, -0.3414768743622], -[-0.16127051569, -0.3414559689695], -[-0.1557555831163, -0.3414358165297], -[-0.1502357485779, -0.3414164121018], -[-0.1447111957664, -0.3413977509843], -[-0.1391821073851, -0.341379828707], -[-0.133648665195, -0.3413626410239], -[-0.1281110500598, -0.3413461839061], -[-0.1225694419891, -0.3413304535351], -[-0.1170240201808, -0.3413154462965], -[-0.1114749630633, -0.3413011587746], -[-0.1059224483357, -0.3412875877464], -[-0.1003666530075, -0.3412747301765], -[-0.09480775343825, -0.3412625832126], -[-0.08924592537516, -0.3412511441808], -[-0.08368134399111, -0.3412404105812], -[-0.07811418392144, -0.3412303800843], -[-0.07254461930033, -0.3412210505273], -[-0.06697282379663, -0.3412124199103], -[-0.06139897064908, -0.341204486394], -[-0.0558232327012, -0.3411972482962], -[-0.05024578243567, -0.3411907040894], -[-0.04466679200828, -0.3411848523986], -[-0.03908643328167, -0.3411796919992], -[-0.03350487785862, -0.3411752218147], -[-0.02792229711517, -0.3411714409156], -[-0.02233886223339, -0.3411683485179], -[-0.01675474423407, -0.3411659439815], -[-0.01117011400916, -0.3411642268096], -[-0.005585142354089, -0.3411631966481], -[1.528641177665e-15, -0.3411628532845], -[0.005585142354092, -0.3411631966481], -[0.01117011400916, -0.3411642268096], -[0.01675474423407, -0.3411659439815], -[0.02233886223339, -0.3411683485179], -[0.02792229711517, -0.3411714409156], -[0.03350487785863, -0.3411752218147], -[0.03908643328167, -0.3411796919992], -[0.04466679200828, -0.3411848523986], -[0.05024578243567, -0.3411907040894], -[0.05582323270121, -0.3411972482962], -[0.06139897064908, -0.341204486394], -[0.06697282379663, -0.3412124199103], -[0.07254461930034, -0.3412210505273], -[0.07811418392144, -0.3412303800843], -[0.08368134399112, -0.3412404105812], -[0.08924592537517, -0.3412511441808], -[0.09480775343825, -0.3412625832126], -[0.1003666530075, -0.3412747301765], -[0.1059224483357, -0.3412875877464], -[0.1114749630633, -0.3413011587746], -[0.1170240201808, -0.3413154462965], -[0.1225694419891, -0.3413304535351], -[0.1281110500598, -0.3413461839061], -[0.133648665195, -0.3413626410239], -[0.1391821073851, -0.341379828707], -[0.1447111957664, -0.3413977509843], -[0.1502357485779, -0.3414164121018], -[0.1557555831163, -0.3414358165297], -[0.16127051569, -0.3414559689695], -[0.1667803615723, -0.3414768743622], -[0.1722849349531, -0.3414985378965], -[0.1777840488889, -0.3415209650179], -[0.1832775152513, -0.3415441614374], -[0.1887651446748, -0.3415681331422], -[0.1942467465016, -0.3415928864057], -[0.1997221287261, -0.3416184277987], -[0.205191097936, -0.3416447642009], -[0.2106534592525, -0.3416719028138], -[0.2161090162682, -0.3416998511734], -[0.2215575709827, -0.3417286171641], -[0.2269989237354, -0.3417582090335], -[0.2324328731366, -0.341788635408], -[0.2378592159953, -0.341819905309], -[0.2432777472446, -0.3418520281704], -[0.2486882598637, -0.3418850138573], -[0.2540905447972, -0.3419188726851], -[0.2594843908707, -0.3419536154406], -[0.2648695847031, -0.3419892534035], -[0.2702459106146, -0.3420257983704], -[0.2756131505313, -0.3420632626787], -[0.2809710838851, -0.3421016592336], -[0.2863194875095, -0.3421410015355], -[0.2916581355296, -0.3421813037098], -[0.2969867992481, -0.3422225805387], -[0.3023052470253, -0.3422648474944], -[0.3076132441526, -0.3423081207752], -[0.3129105527212, -0.3423524173437], -[0.3181969314827, -0.3423977549671], -[0.3234721357036, -0.3424441522612], -[0.3287359170114, -0.3424916287366], -[0.3339880232336, -0.3425402048482], -[0.3392281982265, -0.3425899020489], -[0.3444561816964, -0.3426407428461], -[0.3496717090098, -0.3426927508632], -[0.3548745109929, -0.3427459509048], -[0.36006431372, -0.3428003690277], -[0.3652408382896, -0.3428560326165], -[0.370403800587, -0.3429129704654], -[0.3755529110327, -0.3429712128665], -[0.3806878743157, -0.3430307917044], -[0.3858083891098, -0.3430917405597], -[0.3909141477728, -0.34315409482], -[0.3960048360254, -0.3432178918006], -[0.4010801326104, -0.3432831708751], -[0.4061397089283, -0.3433499736182], -[0.411183228649, -0.3434183439605], -[0.4162103472971, -0.3434883283567], -[0.4212207118077, -0.3435599759709], -[0.4262139600518, -0.3436333388773], -[0.4311897203266, -0.3437084722817], -[0.4361476108093, -0.3437854347634], -[0.4410872389697, -0.3438642885422], -[0.4460082009389, -0.3439450997715], -[0.4509100808288, -0.3440279388629], -[0.4557924499988, -0.3441128808443], -[0.4606548662633, -0.3442000057577], -[0.4654968730353, -0.3442893991003], -[0.470317998399, -0.3443811523169], -[0.4751177541039, -0.3444753633488], -[0.4798956344724, -0.3445721372479], -[0.4846511152125, -0.3446715868675], -[0.4893836521239, -0.3447738336378], -[0.4940926796866, -0.3448790084427], -[0.4987776095196, -0.3449872526122], -[0.5034378286933, -0.3450987190494], -[0.508072697881, -0.3452135735157], -[0.5126815493293, -0.3453319961003], -[0.5172636846276, -0.3454541829077], -[0.5218183722508, -0.3455803480029], -[0.5263448448528, -0.3457107256625], -[0.5308422962777, -0.3458455729927], -[0.5353098782577, -0.3459851729854], -[0.5397466967608, -0.346129838106], -[0.5441518079511, -0.3462799145249], -[0.5485242137201, -0.3464357871371], -[0.552862856748, -0.3465978855492], -[0.5571666150551, -0.3467666912651], -[0.5614342960132, -0.346942746365], -[0.5656646297886, -0.3471266640613], -[0.5698562622806, -0.3473191416229], -[0.5740077474942, -0.3475209763319], -[0.5781175396961, -0.3477330853184], -[0.5821839854535, -0.3479565304397], -[0.5862053162538, -0.3481925497323], -[0.5901796426293, -0.3484425975117], -[0.5941049514837, -0.3487083959173], -[0.5979791094929, -0.3489920016582], -[0.601799877417, -0.3492958929645], -[0.6055649435687, -0.3496230831812], -[0.6092719900086, -0.3499772688958], -[0.6129188142734, -0.3503630207685], -[0.6165035431141, -0.3507860220913], -[0.6200249939417, -0.3512533472802], -[0.6234832584372, -0.3517737378214], -[0.6268800482842, -0.3523573946017], -[-0.6251957163272, -0.3494401014623], -[-0.6216999411244, -0.348834926025], -[-0.618150469479, -0.3482872415567], -[-0.6145457121587, -0.3477890714795], -[-0.6108851222837, -0.34733329354], -[-0.607169192827, -0.346913935025], -[-0.6033990554533, -0.3465260353552], -[-0.5995762072122, -0.3461654846336], -[-0.5957023321278, -0.3458288712962], -[-0.591779188183, -0.3455133509393], -[-0.5878085376673, -0.3452165382792], -[-0.5837921055376, -0.3449364201388], -[-0.5797315557389, -0.3446712860447], -[-0.5756284788391, -0.3444196730586], -[-0.5714843867402, -0.3441803218825], -[-0.5673007117417, -0.343952141817], -[-0.5630788082265, -0.3437341826522], -[-0.5588199557924, -0.3435256120024], -[-0.5545253632845, -0.3433256969024], -[-0.5501961730939, -0.3431337887932], -[-0.5458334655643, -0.3429493111838], -[-0.5414382633217, -0.3427717494543], -[-0.5370115354109, -0.3426006423789], -[-0.5325542012004, -0.3424355750385], -[-0.5280671340262, -0.3422761728615], -[-0.5235511645723, -0.3421220965885], -[-0.5190070839911, -0.3419730379939], -[-0.5144356467693, -0.3418287162357], -[-0.5098375733749, -0.3416888747251], -[-0.5052135526662, -0.3415532784301], -[-0.5005642441168, -0.3414217115451], -[-0.4958902798486, -0.3412939754665], -[-0.4911922664982, -0.341169887029], -[-0.48647078693, -0.3410492769627], -[-0.4817264018088, -0.340931988539], -[-0.4769596510465, -0.340817876378], -[-0.4721710551313, -0.3407068053957], -[-0.4673611163538, -0.3405986498702], -[-0.4625303199363, -0.3404932926127], -[-0.4576791350749, -0.3403906242286], -[-0.4528080159036, -0.340290542457], -[-0.4479174023849, -0.3401929515798], -[-0.4430077211353, -0.3400977618907], -[-0.4380793861905, -0.3400048892174], -[-0.4331327997158, -0.3399142544906], -[-0.4281683526665, -0.3398257833547], -[-0.4231864254012, -0.3397394058149], -[-0.4181873882548, -0.3396550559169], -[-0.413171602071, -0.339572671456], -[-0.4081394187003, -0.3394921937114], -[-0.4030911814652, -0.3394135672048], -[-0.3980272255947, -0.3393367394785], -[-0.3929478786321, -0.3392616608928], -[-0.3878534608159, -0.3391882844407], -[-0.3827442854386, -0.3391165655766], -[-0.377620659182, -0.3390464620594], -[-0.3724828824338, -0.3389779338082], -[-0.3673312495841, -0.3389109427681], -[-0.362166049306, -0.3388454527878], -[-0.3569875648184, -0.3387814295049], -[-0.3517960741353, -0.3387188402406], -[-0.3465918503007, -0.3386576539016], -[-0.3413751616097, -0.3385978408895], -[-0.3361462718191, -0.338539373016], -[-0.3309054403453, -0.3384822234249], -[-0.3256529224526, -0.3384263665181], -[-0.3203889694315, -0.338371777888], -[-0.3151138287677, -0.3383184342539], -[-0.3098277443026, -0.3382663134022], -[-0.3045309563859, -0.3382153941309], -[-0.2992237020205, -0.3381656561978], -[-0.2939062150009, -0.3381170802719], -[-0.2885787260442, -0.3380696478874], -[-0.2832414629157, -0.3380233414011], -[-0.2778946505484, -0.3379781439526], -[-0.2725385111567, -0.337934039426], -[-0.267173264346, -0.3378910124147], -[-0.2617991272161, -0.3378490481883], -[-0.2564163144617, -0.3378081326612], -[-0.2510250384664, -0.337768252362], -[-0.2456255093965, -0.337729394408], -[-0.2402179352861, -0.3376915464766], -[-0.2348025221227, -0.3376546967819], -[-0.2293794739275, -0.337618834051], -[-0.223948992833, -0.337583947502], -[-0.2185112791579, -0.3375500268235], -[-0.2130665314787, -0.3375170621546], -[-0.207614946699, -0.3374850440664], -[-0.2021567201162, -0.3374539635449], -[-0.196692045486, -0.3374238119739], -[-0.1912211150844, -0.3373945811197], -[-0.1857441197678, -0.3373662631163], -[-0.1802612490312, -0.3373388504513], -[-0.1747726910642, -0.3373123359526], -[-0.1692786328058, -0.3372867127763], -[-0.1637792599968, -0.3372619743943], -[-0.1582747572314, -0.3372381145836], -[-0.1527653080069, -0.3372151274156], -[-0.1472510947717, -0.337193007246], -[-0.1417322989729, -0.3371717487056], -[-0.1362091011018, -0.3371513466912], -[-0.1306816807386, -0.3371317963574], -[-0.1251502165961, -0.3371130931088], -[-0.1196148865618, -0.337095232592], -[-0.11407586774, -0.3370782106893], -[-0.1085333364921, -0.3370620235116], -[-0.1029874684765, -0.3370466673926], -[-0.09743843868761, -0.3370321388826], -[-0.09188642149395, -0.3370184347435], -[-0.08633159067586, -0.3370055519433], -[-0.0807741194623, -0.3369934876519], -[-0.07521418056717, -0.3369822392362], -[-0.06965194622503, -0.3369718042564], -[-0.06408758822632, -0.3369621804621], -[-0.0585212779521, -0.3369533657888], -[-0.05295318640834, -0.3369453583548], -[-0.04738348425984, -0.3369381564586], -[-0.04181234186377, -0.3369317585759], -[-0.03623992930291, -0.3369261633575], -[-0.03066641641858, -0.3369213696272], -[-0.02509197284335, -0.3369173763802], -[-0.01951676803348, -0.3369141827815], -[-0.01394097130128, -0.3369117881643], -[-0.008364751847192, -0.3369101920298], -[-0.002788278791873, -0.3369093940455], -[0.002788278791876, -0.3369093940455], -[0.008364751847195, -0.3369101920298], -[0.01394097130128, -0.3369117881643], -[0.01951676803348, -0.3369141827815], -[0.02509197284335, -0.3369173763802], -[0.03066641641859, -0.3369213696272], -[0.03623992930291, -0.3369261633575], -[0.04181234186377, -0.3369317585759], -[0.04738348425984, -0.3369381564586], -[0.05295318640834, -0.3369453583548], -[0.0585212779521, -0.3369533657888], -[0.06408758822632, -0.3369621804621], -[0.06965194622503, -0.3369718042564], -[0.07521418056717, -0.3369822392362], -[0.0807741194623, -0.3369934876519], -[0.08633159067586, -0.3370055519433], -[0.09188642149396, -0.3370184347435], -[0.09743843868761, -0.3370321388826], -[0.1029874684765, -0.3370466673926], -[0.1085333364921, -0.3370620235116], -[0.11407586774, -0.3370782106893], -[0.1196148865618, -0.337095232592], -[0.1251502165961, -0.3371130931088], -[0.1306816807386, -0.3371317963574], -[0.1362091011018, -0.3371513466912], -[0.1417322989729, -0.3371717487056], -[0.1472510947717, -0.337193007246], -[0.1527653080069, -0.3372151274156], -[0.1582747572314, -0.3372381145836], -[0.1637792599968, -0.3372619743943], -[0.1692786328058, -0.3372867127763], -[0.1747726910643, -0.3373123359526], -[0.1802612490312, -0.3373388504513], -[0.1857441197678, -0.3373662631163], -[0.1912211150844, -0.3373945811197], -[0.196692045486, -0.3374238119739], -[0.2021567201162, -0.3374539635449], -[0.207614946699, -0.3374850440664], -[0.2130665314787, -0.3375170621546], -[0.2185112791579, -0.3375500268235], -[0.223948992833, -0.337583947502], -[0.2293794739275, -0.337618834051], -[0.2348025221227, -0.3376546967819], -[0.2402179352861, -0.3376915464766], -[0.2456255093965, -0.337729394408], -[0.2510250384664, -0.337768252362], -[0.2564163144615, -0.337808132661], -[0.2617991272161, -0.3378490481883], -[0.267173264346, -0.3378910124147], -[0.2725385111567, -0.337934039426], -[0.2778946505484, -0.3379781439526], -[0.2832414629158, -0.3380233414011], -[0.2885787260442, -0.3380696478874], -[0.2939062150009, -0.3381170802719], -[0.2992237020205, -0.3381656561978], -[0.3045309563859, -0.3382153941309], -[0.3098277443026, -0.3382663134022], -[0.3151138287677, -0.3383184342539], -[0.3203889694315, -0.338371777888], -[0.3256529224526, -0.3384263665181], -[0.3309054403453, -0.3384822234249], -[0.3361462718191, -0.338539373016], -[0.3413751616097, -0.3385978408895], -[0.3465918503007, -0.3386576539016], -[0.3517960741353, -0.3387188402406], -[0.3569875648183, -0.3387814295049], -[0.362166049306, -0.3388454527878], -[0.3673312495841, -0.3389109427681], -[0.3724828824338, -0.3389779338082], -[0.377620659182, -0.3390464620594], -[0.3827442854386, -0.3391165655766], -[0.3878534608159, -0.3391882844407], -[0.3929478786321, -0.3392616608928], -[0.3980272255947, -0.3393367394785], -[0.4030911814652, -0.3394135672048], -[0.4081394187003, -0.3394921937114], -[0.413171602071, -0.3395726714559], -[0.4181873882548, -0.3396550559169], -[0.4231864254012, -0.3397394058149], -[0.4281683526665, -0.3398257833547], -[0.4331327997158, -0.3399142544906], -[0.4380793861905, -0.3400048892174], -[0.4430077211353, -0.3400977618907], -[0.4479174023849, -0.3401929515798], -[0.4528080159036, -0.340290542457], -[0.4576791350749, -0.3403906242286], -[0.4625303199362, -0.3404932926127], -[0.4673611163537, -0.3405986498702], -[0.4721710551312, -0.3407068053957], -[0.4769596510464, -0.340817876378], -[0.4817264018089, -0.340931988539], -[0.48647078693, -0.3410492769627], -[0.4911922664982, -0.341169887029], -[0.4958902798486, -0.3412939754665], -[0.5005642441168, -0.3414217115451], -[0.5052135526662, -0.3415532784301], -[0.509837573375, -0.3416888747251], -[0.5144356467697, -0.3418287162358], -[0.5190070839909, -0.3419730379939], -[0.5235511645729, -0.3421220965885], -[0.5280671340264, -0.3422761728615], -[0.5325542012004, -0.3424355750385], -[0.5370115354109, -0.3426006423789], -[0.5414382633217, -0.3427717494543], -[0.5458334655644, -0.3429493111838], -[0.550196173094, -0.3431337887932], -[0.5545253632851, -0.3433256969024], -[0.5588199557899, -0.3435256120026], -[0.5630788082213, -0.3437341826528], -[0.5673007117481, -0.3439521418161], -[0.5714843867448, -0.3441803218818], -[0.5756284788401, -0.3444196730584], -[0.5797315557386, -0.3446712860448], -[0.5837921055374, -0.3449364201389], -[0.5878085376675, -0.3452165382791], -[0.5917791881825, -0.3455133509395], -[0.5957023321231, -0.3458288712981], -[0.5995762072122, -0.3461654846336], -[0.6033990554533, -0.3465260353552], -[0.607169192827, -0.346913935025], -[0.6108851222837, -0.34733329354], -[0.6145457121587, -0.3477890714795], -[0.618150469479, -0.3482872415567], -[0.6216999411244, -0.3488349260249], -[0.6251957161291, -0.3494401018621], -[-0.6234624632477, -0.3464380780404], -[-0.6198785420887, -0.3458144634721], -[-0.6162469055914, -0.3452436452918], -[-0.6125661507517, -0.3447192036655], -[-0.6088355158113, -0.3442352324709], -[-0.6050550820717, -0.3437866434928], -[-0.6012254939015, -0.3433690989184], -[-0.5973477539714, -0.3429789170639], -[-0.5934230795296, -0.3426129747121], -[-0.5894528042952, -0.3422686171253], -[-0.5854383128533, -0.3419435798437], -[-0.5813809977393, -0.3416359227753], -[-0.5772822319702, -0.3413439756135], -[-0.5731433520487, -0.3410662930127], -[-0.5689656479923, -0.3408016179066], -[-0.5647503580518, -0.3405488514985], -[-0.5604986664634, -0.340307028677], -[-0.556211703287, -0.340075297794], -[-0.5518905454557, -0.3398529039903], -[-0.5475362186331, -0.3396391753737], -[-0.543149699519, -0.339433511513], -[-0.5387319183936, -0.3392353738128], -[-0.5342837617459, -0.3390442774257], -[-0.5298060748965, -0.3388597844227], -[-0.5252996645519, -0.3386814980001], -[-0.5207653012555, -0.3385090575441], -[-0.5162037217138, -0.3383421344064], -[-0.5116156309799, -0.338180428275], -[-0.5070017045144, -0.3380236640422], -[-0.502362590091, -0.3378715890916], -[-0.4976989095812, -0.3377239709404], -[-0.4930112606084, -0.3375805951806], -[-0.4883002180831, -0.337441263678], -[-0.483566335627, -0.3373057929893], -[-0.4788101468922, -0.337174012967], -[-0.4740321667851, -0.337045765527], -[-0.4692328926001, -0.3369209035558], -[-0.4644128050719, -0.3367992899384], -[-0.4595723693517, -0.3366807966932], -[-0.4547120359127, -0.3365653041974], -[-0.449832241393, -0.3364527004941], -[-0.4449334093781, -0.3363428806697], -[-0.4400159511293, -0.3362357462934], -[-0.4350802662624, -0.336131204912], -[-0.43012674338, -0.3360291695927], -[-0.4251557606614, -0.3359295585095], -[-0.4201676864135, -0.3358322945676], -[-0.4151628795855, -0.3357373050614], -[-0.4101416902503, -0.3356445213639], -[-0.4051044600554, -0.3355538786427], -[-0.4000515226455, -0.3354653156002], -[-0.3949832040579, -0.3353787742359], -[-0.3898998230951, -0.3352941996289], -[-0.3848016916736, -0.3352115397375], -[-0.3796891151524, -0.335130745215], -[-0.3745623926423, -0.3350517692402], -[-0.3694218172968, -0.334974567361], -[-0.3642676765864, -0.33489909735], -[-0.3591002525578, -0.3348253190708], -[-0.3539198220778, -0.3347531943541], -[-0.3487266570649, -0.3346826868836], -[-0.3435210247071, -0.3346137620888], -[-0.3383031876688, -0.3345463870467], -[-0.3330734042867, -0.3344805303895], -[-0.3278319287552, -0.3344161622192], -[-0.3225790113023, -0.3343532540273], -[-0.317314898357, -0.334291778621], -[-0.3120398327079, -0.334231710053], -[-0.3067540536541, -0.3341730235569], -[-0.3014577971487, -0.3341156954862], -[-0.2961512959358, -0.3340597032576], -[-0.2908347796804, -0.3340050252972], -[-0.2855084750931, -0.3339516409911], -[-0.280172606048, -0.3338995306379], -[-0.2748273936967, -0.3338486754048], -[-0.2694730565758, -0.3337990572863], -[-0.2641098107105, -0.3337506590653], -[-0.2587378697139, -0.3337034642762], -[-0.2533574448816, -0.3336574571704], -[-0.2479687452826, -0.3336126226842], -[-0.2425719778465, -0.3335689464077], -[-0.2371673474471, -0.3335264145563], -[-0.231755056983, -0.3334850139431], -[-0.2263353074544, -0.3334447319535], -[-0.2209082980382, -0.333405556521], -[-0.2154742261587, -0.3333674761038], -[-0.2100332875572, -0.3333304796637], -[-0.2045856763581, -0.3332945566453], -[-0.1991315851333, -0.333259696957], -[-0.193671204964, -0.3332258909523], -[-0.1882047255008, -0.3331931294129], -[-0.1827323350211, -0.3331614035321], -[-0.177254220486, -0.3331307048996], -[-0.1717705675938, -0.3331010254868], -[-0.1662815608333, -0.3330723576328], -[-0.1607873835345, -0.3330446940317], -[-0.1552882179185, -0.3330180277201], -[-0.1497842451458, -0.3329923520652], -[-0.1442756453629, -0.3329676607542], -[-0.1387625977484, -0.3329439477839], -[-0.1332452805573, -0.3329212074504], -[-0.1277238711648, -0.3328994343405], -[-0.1221985461084, -0.3328786233223], -[-0.1166694811295, -0.3328587695377], -[-0.1111368512138, -0.3328398683942], -[-0.1056008306314, -0.3328219155576], -[-0.1000615929753, -0.3328049069458], -[-0.09451931119973, -0.3327888387216], -[-0.08897415765751, -0.3327737072873], -[-0.08342630413699, -0.3327595092792], -[-0.0778759218981, -0.3327462415619], -[-0.07232318170807, -0.332733901224], -[-0.06676825387647, -0.3327224855734], -[-0.06121130828987, -0.3327119921335], -[-0.05565251444601, -0.3327024186391], -[-0.05009204148758, -0.332693763033], -[-0.04453005823566, -0.3326860234634], -[-0.03896673322274, -0.3326791982805], -[-0.03340223472557, -0.3326732860344], -[-0.0278367307977, -0.332668285473], -[-0.02227038930169, -0.3326641955396], -[-0.01670337794134, -0.332661015372], -[-0.01113586429356, -0.332658744301], -[-0.00556801584026, -0.3326573818493], -[2.765566663926e-13, -0.3326569277304], -[0.005568015840254, -0.3326573818491], -[0.01113586429357, -0.332658744301], -[0.01670337794134, -0.332661015372], -[0.02227038930169, -0.3326641955396], -[0.0278367307977, -0.332668285473], -[0.03340223472555, -0.3326732860342], -[0.03896673322274, -0.3326791982805], -[0.04453005823566, -0.3326860234634], -[0.05009204148759, -0.332693763033], -[0.05565251444601, -0.3327024186391], -[0.06121130828987, -0.3327119921335], -[0.06676825387647, -0.3327224855734], -[0.07232318170807, -0.332733901224], -[0.0778759218981, -0.3327462415619], -[0.08342630413699, -0.3327595092792], -[0.08897415765751, -0.3327737072873], -[0.09451931119973, -0.3327888387216], -[0.1000615929753, -0.3328049069458], -[0.1056008306314, -0.3328219155576], -[0.1111368512138, -0.3328398683942], -[0.1166694811295, -0.3328587695377], -[0.1221985461084, -0.3328786233223], -[0.1277238711648, -0.3328994343405], -[0.1332452805573, -0.3329212074504], -[0.1387625977484, -0.3329439477839], -[0.1442756453629, -0.3329676607542], -[0.1497842451458, -0.3329923520652], -[0.1552882179185, -0.3330180277201], -[0.1607873835345, -0.3330446940317], -[0.1662815608333, -0.3330723576328], -[0.1717705675938, -0.3331010254868], -[0.177254220486, -0.3331307048996], -[0.1827323350211, -0.3331614035321], -[0.1882047255008, -0.3331931294129], -[0.193671204964, -0.3332258909523], -[0.1991315851333, -0.333259696957], -[0.2045856763581, -0.3332945566453], -[0.2100332875572, -0.3333304796637], -[0.2154742261587, -0.3333674761038], -[0.2209082980382, -0.333405556521], -[0.2263353074544, -0.3334447319535], -[0.231755056983, -0.3334850139431], -[0.2371673474471, -0.3335264145563], -[0.2425719778465, -0.3335689464077], -[0.2479687452826, -0.3336126226842], -[0.2533574448816, -0.3336574571704], -[0.2587378697139, -0.3337034642762], -[0.2641098107105, -0.3337506590653], -[0.2694730565758, -0.3337990572863], -[0.2748273936967, -0.3338486754048], -[0.280172606048, -0.3338995306379], -[0.2855084750931, -0.3339516409911], -[0.2908347796804, -0.3340050252972], -[0.2961512959358, -0.3340597032576], -[0.3014577971487, -0.3341156954862], -[0.3067540536541, -0.3341730235569], -[0.3120398327079, -0.334231710053], -[0.317314898357, -0.334291778621], -[0.3225790113023, -0.3343532540273], -[0.3278319287552, -0.3344161622192], -[0.3330734042867, -0.3344805303895], -[0.3383031876688, -0.3345463870467], -[0.3435210247071, -0.3346137620888], -[0.3487266570649, -0.3346826868836], -[0.3539198220778, -0.3347531943541], -[0.3591002525577, -0.3348253190708], -[0.3642676765864, -0.33489909735], -[0.3694218172968, -0.334974567361], -[0.3745623926423, -0.3350517692402], -[0.3796891151524, -0.335130745215], -[0.3848016916736, -0.3352115397375], -[0.3898998230951, -0.3352941996289], -[0.3949832040579, -0.3353787742359], -[0.4000515226455, -0.3354653156002], -[0.4051044600554, -0.3355538786427], -[0.4101416902502, -0.3356445213639], -[0.4151628795855, -0.3357373050614], -[0.4201676864135, -0.3358322945676], -[0.4251557606614, -0.3359295585095], -[0.43012674338, -0.3360291695927], -[0.4350802662624, -0.336131204912], -[0.4400159511293, -0.3362357462934], -[0.4449334093781, -0.3363428806697], -[0.449832241393, -0.3364527004941], -[0.4547120359127, -0.3365653041974], -[0.4595723693516, -0.3366807966932], -[0.4644128050719, -0.3367992899384], -[0.4692328926, -0.3369209035558], -[0.474032166785, -0.337045765527], -[0.4788101468922, -0.337174012967], -[0.483566335627, -0.3373057929893], -[0.4883002180831, -0.337441263678], -[0.4930112606084, -0.3375805951806], -[0.4976989095812, -0.3377239709404], -[0.502362590091, -0.3378715890916], -[0.5070017045144, -0.3380236640422], -[0.5116156309801, -0.338180428275], -[0.5162037217132, -0.3383421344064], -[0.5207653012563, -0.338509057544], -[0.5252996645521, -0.3386814980001], -[0.5298060748965, -0.3388597844227], -[0.5342837617459, -0.3390442774257], -[0.5387319183936, -0.3392353738128], -[0.543149699519, -0.339433511513], -[0.547536218633, -0.3396391753737], -[0.5518905454559, -0.3398529039902], -[0.5562117032862, -0.3400752977941], -[0.5604986664617, -0.3403070286773], -[0.5647503580502, -0.3405488514988], -[0.5689656479977, -0.3408016179055], -[0.573143352049, -0.3410662930126], -[0.5772822319685, -0.3413439756139], -[0.581380997738, -0.3416359227757], -[0.5854383128536, -0.3419435798436], -[0.5894528042968, -0.3422686171247], -[0.593423079535, -0.3426129747097], -[0.5973477539686, -0.3429789170653], -[0.6012254938937, -0.343369098923], -[0.6050550820717, -0.3437866434928], -[0.6088355158113, -0.3442352324709], -[0.6125661507517, -0.3447192036655], -[0.6162469055914, -0.3452436452918], -[0.6198785420887, -0.3458144634721], -[0.6234624630699, -0.3464380784051], -[-0.6216852501577, -0.3433599655999], -[-0.6180218408429, -0.3427202967053], -[-0.6143154327506, -0.3421295230658], -[-0.6105648538399, -0.3415823634534], -[-0.6067692524416, -0.3410738432279], -[-0.6029284626476, -0.3405995860626], -[-0.5990428051196, -0.3401557825393], -[-0.5951129333519, -0.3397391349277], -[-0.5911397194953, -0.339346794291], -[-0.5871241718444, -0.3389762986626], -[-0.5830673763565, -0.3386255165386], -[-0.5789704558737, -0.3382925972543], -[-0.5748345421381, -0.3379759284098], -[-0.5706607569186, -0.3376740998365], -[-0.5664501995786, -0.3373858733265], -[-0.5622039392064, -0.3371101572824], -[-0.5579230098771, -0.3368459855243], -[-0.5536084081483, -0.3365924995437], -[-0.5492610920469, -0.3363489336274], -[-0.544881981088, -0.3361146023491], -[-0.5404719569787, -0.3358888900202], -[-0.5360318647666, -0.3356712417612], -[-0.5315625142617, -0.3354611559185], -[-0.527064681616, -0.3352581775994], -[-0.5225391109756, -0.3350618931392], -[-0.5179865161529, -0.3348719253493], -[-0.5134075822716, -0.33468792942], -[-0.5088029673758, -0.3345095893762], -[-0.5041733039691, -0.3343366149993], -[-0.4995192004856, -0.3341687391459], -[-0.4948412426839, -0.3340057154042], -[-0.4901399949635, -0.3338473160382], -[-0.4854160016032, -0.3336933301801], -[-0.4806697879239, -0.3335435622352], -[-0.4759018613779, -0.33339783047], -[-0.4711127125698, -0.3332559657606], -[-0.466302816209, -0.333117810478], -[-0.4614726320046, -0.3329832174951], -[-0.4566226054966, -0.3328520492974], -[-0.4517531688372, -0.3327241771871], -[-0.446864741519, -0.3325994805675], -[-0.4419577310564, -0.3324778462987], -[-0.4370325336234, -0.3323591681164], -[-0.4320895346503, -0.3322433461064], -[-0.4271291093819, -0.3321302862283], -[-0.4221516234017, -0.3320198998831], -[-0.4171574331218, -0.3319121035206], -[-0.4121468862437, -0.3318068182808], -[-0.4071203221904, -0.3317039696674], -[-0.4020780725117, -0.3316034872485], -[-0.3970204612664, -0.3315053043838], -[-0.3919478053805, -0.3314093579731], -[-0.3868604149852, -0.331315588226], -[-0.3817585937352, -0.33122393845], -[-0.3766426391085, -0.3311343548555], -[-0.3715128426893, -0.3310467863753], -[-0.3663694904349, -0.3309611844985], -[-0.3612128629285, -0.3308775031168], -[-0.3560432356173, -0.3307956983823], -[-0.3508608790383, -0.3307157285748], -[-0.3456660590321, -0.3306375539802], -[-0.3404590369451, -0.3305611367762], -[-0.3352400698218, -0.3304864409264], -[-0.3300094105864, -0.330413432082], -[-0.3247673082161, -0.3303420774901], -[-0.3195140079051, -0.3302723459076], -[-0.3142497512209, -0.3302042075214], -[-0.3089747762531, -0.3301376338739], -[-0.3036893177546, -0.3300725977928], -[-0.2983936072767, -0.3300090733255], -[-0.2930878732971, -0.3299470356782], -[-0.2877723413435, -0.3298864611583], -[-0.2824472341099, -0.3298273271199], -[-0.2771127715687, -0.329769611914], -[-0.271769171078, -0.3297132948402], -[-0.2664166474835, -0.3296583561024], -[-0.2610554132172, -0.3296047767662], -[-0.2556856783904, -0.32955253872], -[-0.2503076508847, -0.3295016246368], -[-0.2449215364378, -0.3294520179398], -[-0.2395275387269, -0.3294037027687], -[-0.2341258594482, -0.3293566639487], -[-0.2287166983934, -0.3293108869609], -[-0.2233002535243, -0.3292663579143], -[-0.2178767210428, -0.3292230635197], -[-0.2124462954604, -0.3291809910649], -[-0.2070091696636, -0.3291401283909], -[-0.201565534978, -0.3291004638697], -[-0.1961155812298, -0.3290619863838], -[-0.1906594968057, -0.329024685306], -[-0.1851974687098, -0.3289885504804], -[-0.1797296826202, -0.3289535722053], -[-0.1742563229425, -0.3289197412158], -[-0.1687775728626, -0.3288870486684], -[-0.1632936143975, -0.3288554861256], -[-0.1578046284447, -0.3288250455422], -[-0.15231079483, -0.3287957192514], -[-0.146812292355, -0.3287674999525], -[-0.141309298842, -0.3287403806988], -[-0.1358019911785, -0.3287143548863], -[-0.1302905453609, -0.328689416243], -[-0.1247751365361, -0.3286655588193], -[-0.1192559390435, -0.3286427769778], -[-0.1137331264552, -0.328621065385], -[-0.1082068716152, -0.3286004190026], -[-0.1026773466787, -0.32858083308], -[-0.09714472314971, -0.3285623031464], -[-0.09160917191865, -0.3285448250045], -[-0.08607086329879, -0.3285283947237], -[-0.08052996706245, -0.3285130086341], -[-0.07498665247641, -0.3284986633211], -[-0.06944108833685, -0.3284853556201], -[-0.06389344300403, -0.3284730826121], -[-0.05834388443595, -0.3284618416185], -[-0.05279258022227, -0.3284516301979], -[-0.04723969761751, -0.3284424461422], -[-0.0416854035739, -0.3284342874733], -[-0.036129864774, -0.3284271524401], -[-0.03057324766308, -0.3284210395159], -[-0.02501571848122, -0.3284159473963], -[-0.0194574432952, -0.3284118749974], -[-0.01389858803025, -0.3284088214537], -[-0.008339318501653, -0.3284067861174], -[-0.002779800446233, -0.328405768557], -[0.002779800446236, -0.328405768557], -[0.008339318501656, -0.3284067861174], -[0.01389858803025, -0.3284088214537], -[0.0194574432952, -0.3284118749974], -[0.02501571848122, -0.3284159473963], -[0.03057324766308, -0.3284210395159], -[0.036129864774, -0.3284271524401], -[0.0416854035739, -0.3284342874733], -[0.04723969761752, -0.3284424461422], -[0.05279258022227, -0.3284516301979], -[0.05834388443604, -0.3284618416188], -[0.06389344300403, -0.3284730826121], -[0.06944108833694, -0.3284853556203], -[0.07498665247641, -0.3284986633211], -[0.08052996706246, -0.3285130086341], -[0.0860708632988, -0.3285283947237], -[0.09160917191865, -0.3285448250045], -[0.09714472314971, -0.3285623031464], -[0.1026773466787, -0.32858083308], -[0.1082068716152, -0.3286004190026], -[0.1137331264552, -0.328621065385], -[0.1192559390435, -0.3286427769778], -[0.1247751365361, -0.3286655588193], -[0.1302905453609, -0.328689416243], -[0.1358019911785, -0.3287143548863], -[0.141309298842, -0.3287403806988], -[0.146812292355, -0.3287674999525], -[0.15231079483, -0.3287957192514], -[0.1578046284447, -0.3288250455422], -[0.1632936143975, -0.3288554861256], -[0.1687775728626, -0.3288870486684], -[0.1742563229425, -0.3289197412158], -[0.1797296826202, -0.3289535722053], -[0.1851974687098, -0.3289885504804], -[0.1906594968057, -0.329024685306], -[0.1961155812298, -0.3290619863838], -[0.201565534978, -0.3291004638697], -[0.2070091696636, -0.3291401283909], -[0.2124462954604, -0.3291809910649], -[0.2178767210428, -0.3292230635197], -[0.2233002535243, -0.3292663579143], -[0.2287166983934, -0.3293108869609], -[0.2341258594482, -0.3293566639487], -[0.2395275387269, -0.3294037027687], -[0.2449215364378, -0.3294520179398], -[0.2503076508847, -0.3295016246368], -[0.2556856783904, -0.32955253872], -[0.2610554132172, -0.3296047767662], -[0.2664166474836, -0.3296583561024], -[0.271769171078, -0.3297132948403], -[0.2771127715687, -0.329769611914], -[0.2824472341099, -0.3298273271199], -[0.2877723413436, -0.3298864611583], -[0.2930878732971, -0.3299470356782], -[0.2983936072767, -0.3300090733255], -[0.3036893177546, -0.3300725977928], -[0.3089747762531, -0.3301376338739], -[0.3142497512209, -0.3302042075214], -[0.3195140079051, -0.3302723459076], -[0.3247673082161, -0.3303420774901], -[0.3300094105864, -0.330413432082], -[0.3352400698218, -0.3304864409264], -[0.3404590369451, -0.3305611367762], -[0.3456660590321, -0.3306375539802], -[0.3508608790383, -0.3307157285748], -[0.3560432356173, -0.3307956983823], -[0.3612128629285, -0.3308775031168], -[0.3663694904349, -0.3309611844985], -[0.3715128426893, -0.3310467863753], -[0.3766426391085, -0.3311343548555], -[0.3817585937352, -0.33122393845], -[0.3868604149852, -0.331315588226], -[0.3919478053805, -0.3314093579731], -[0.3970204612664, -0.3315053043838], -[0.4020780725117, -0.3316034872485], -[0.4071203221904, -0.3317039696674], -[0.4121468862437, -0.3318068182808], -[0.4171574331218, -0.3319121035206], -[0.4221516234017, -0.3320198998831], -[0.4271291093819, -0.3321302862283], -[0.4320895346503, -0.3322433461064], -[0.4370325336234, -0.3323591681164], -[0.4419577310564, -0.3324778462987], -[0.446864741519, -0.3325994805675], -[0.4517531688372, -0.3327241771871], -[0.4566226054966, -0.3328520492974], -[0.4614726320046, -0.3329832174951], -[0.466302816209, -0.333117810478], -[0.4711127125697, -0.3332559657605], -[0.4759018613781, -0.33339783047], -[0.480669787924, -0.3335435622352], -[0.4854160016032, -0.3336933301801], -[0.4901399949635, -0.3338473160382], -[0.4948412426839, -0.3340057154042], -[0.4995192004856, -0.3341687391459], -[0.5041733039691, -0.3343366149993], -[0.5088029673758, -0.3345095893762], -[0.5134075822714, -0.33468792942], -[0.5179865161524, -0.3348719253493], -[0.5225391109757, -0.3350618931392], -[0.5270646816157, -0.3352581775994], -[0.5315625142615, -0.3354611559185], -[0.5360318647665, -0.3356712417612], -[0.5404719569788, -0.3358888900202], -[0.544881981088, -0.3361146023491], -[0.549261092047, -0.3363489336274], -[0.5536084081482, -0.3365924995437], -[0.5579230098767, -0.3368459855244], -[0.5622039392064, -0.3371101572825], -[0.5664501995805, -0.3373858733261], -[0.5706607569186, -0.3376740998365], -[0.574834542133, -0.3379759284114], -[0.5789704558693, -0.3382925972559], -[0.5830673763552, -0.3386255165391], -[0.5871241718429, -0.3389762986633], -[0.5911397194967, -0.3393467942903], -[0.5951129333521, -0.3397391349276], -[0.5990428051181, -0.3401557825403], -[0.602928462648, -0.3405995860622], -[0.6067692524512, -0.341073843219], -[0.6105648538399, -0.3415823634534], -[0.6143154327506, -0.3421295230658], -[0.6180218408429, -0.3427202967053], -[0.6216852499875, -0.3433599659536], -[-0.6198681365521, -0.3402127027929], -[-0.6161322405549, -0.3395588426031], -[-0.6123572260224, -0.338950621123], -[-0.6085420997632, -0.3383835772587], -[-0.6046859864912, -0.3378534633301], -[-0.6007885727534, -0.3373564801784], -[-0.5968499625205, -0.3368892645574], -[-0.5928705607898, -0.3364488570419], -[-0.5888509832321, -0.3360326613577], -[-0.5847919878711, -0.3356384017706], -[-0.5806944243929, -0.3352640822344], -[-0.5765591970708, -0.3349079491055], -[-0.5723872380252, -0.3345684580779], -[-0.5681794881426, -0.3342442454033], -[-0.5639368836485, -0.3339341031111], -[-0.5596603468594, -0.3336369577976], -[-0.5553507799613, -0.3333518525409], -[-0.5510090609793, -0.3330779315035], -[-0.5466360413375, -0.3328144268184], -[-0.5422325445579, -0.3325606474091], -[-0.5377993657702, -0.3323159694409], -[-0.5333372717938, -0.3320798281476], -[-0.5288470016128, -0.3318517108162], -[-0.5243292671216, -0.3316311507493], -[-0.5197847540436, -0.3314177220537], -[-0.5152141229561, -0.3312110351277], -[-0.5106180103739, -0.3310107327431], -[-0.5059970298565, -0.3308164866311], -[-0.5013517731139, -0.3306279945005], -[-0.4966828110926, -0.3304449774239], -[-0.4919906950316, -0.3302671775411], -[-0.4872759574808, -0.3300943560351], -[-0.4825391132755, -0.3299262913429], -[-0.4777806604662, -0.3297627775707], -[-0.4730010812013, -0.3296036230856], -[-0.4682008425623, -0.329448649261], -[-0.4633803973568, -0.3292976893567], -[-0.4585401848619, -0.329150587517], -[-0.4536806315298, -0.3290071978711], -[-0.4488021516492, -0.3288673837251], -[-0.44390514797, -0.3287310168339], -[-0.4389900122904, -0.3285979767434], -[-0.4340571260093, -0.3284681501959], -[-0.429106860647, -0.3283414305916], -[-0.4241395783344, -0.3282177174981], -[-0.4191556322736, -0.3280969162061], -[-0.4141553671725, -0.3279789373232], -[-0.4091391196529, -0.3278636964033], -[-0.4041072186363, -0.3277511136083], -[-0.3990599857062, -0.3276411133976], -[-0.3939977354517, -0.3275336242439], -[-0.3889207757897, -0.3274285783717], -[-0.3838294082709, -0.3273259115169], -[-0.3787239283675, -0.3272255627056], -[-0.3736046257464, -0.3271274740497], -[-0.3684717845264, -0.327031590558], -[-0.3633256835224, -0.3269378599623], -[-0.3581665964766, -0.3268462325556], -[-0.3529947922772, -0.3267566610424], -[-0.3478105351661, -0.3266691003996], -[-0.3426140849358, -0.326583507748], -[-0.3374056971162, -0.3264998422313], -[-0.3321856231526, -0.3264180649054], -[-0.3269541105741, -0.3263381386333], -[-0.3217114031545, -0.3262600279887], -[-0.3164577410649, -0.3261836991648], -[-0.3111933610195, -0.3261091198896], -[-0.3059184964143, -0.3260362593469], -[-0.300633377459, -0.3259650881016], -[-0.2953382313039, -0.3258955780307], -[-0.2900332821602, -0.3258277022578], -[-0.2847187514149, -0.3257614350917], -[-0.2793948577414, -0.3256967519696], -[-0.2740618172047, -0.3256336294025], -[-0.2687198433625, -0.325572044925], -[-0.2633691473614, -0.3255119770471], -[-0.2580099380303, -0.3254534052096], -[-0.2526424219688, -0.3253963097418], -[-0.2472668036329, -0.3253406718213], -[-0.2418832854168, -0.3252864734367], -[-0.2364920677321, -0.3252336973523], -[-0.2310933490835, -0.3251823270743], -[-0.2256873261418, -0.3251323468192], -[-0.2202741938144, -0.3250837414843], -[-0.2148541453132, -0.3250364966194], -[-0.2094273722203, -0.3249905984001], -[-0.2039940645506, -0.3249460336026], -[-0.1985544108138, -0.3249027895802], -[-0.1931085980727, -0.3248608542406], -[-0.1876568120009, -0.3248202160243], -[-0.1821992369381, -0.3247808638855], -[-0.1767360559439, -0.3247427872718], -[-0.1712674508494, -0.3247059761073], -[-0.1657936023085, -0.3246704207749], -[-0.1603146898465, -0.3246361121006], -[-0.1548308919082, -0.3246030413381], -[-0.1493423859042, -0.3245712001545], -[-0.1438493482564, -0.3245405806168], -[-0.1383519544418, -0.3245111751789], -[-0.132850379036, -0.3244829766698], -[-0.1273447957552, -0.3244559782819], -[-0.1218353774969, -0.3244301735603], -[-0.1163222963807, -0.3244055563929], -[-0.1108057237871, -0.3243821210006], -[-0.1052858303965, -0.3243598619286], -[-0.09976278622685, -0.3243387740378], -[-0.09423676067087, -0.3243188524971], -[-0.08870792253235, -0.3243000927758], -[-0.08317644006221, -0.324282490637], -[-0.07764248099371, -0.3242660421314], -[-0.07210621257726, -0.3242507435906], -[-0.06656780161472, -0.3242365916226], -[-0.06102741449322, -0.3242235831061], -[-0.05548521721862, -0.324211715186], -[-0.04994137544857, -0.3242009852694], -[-0.0443960545252, -0.3241913910215], -[-0.03884941950756, -0.3241829303624], -[-0.03330163520374, -0.3241756014639], -[-0.02775286620277, -0.3241694027471], -[-0.02220327690628, -0.3241643328796], -[-0.01665303156005, -0.324160390774], -[-0.01110229428532, -0.3241575755861], -[-0.005551229110033, -0.324155886714], -[1.40125441286e-15, -0.3241553237967], -[0.005551229110035, -0.324155886714], -[0.01110229428532, -0.3241575755861], -[0.01665303156005, -0.3241603907739], -[0.02220327690628, -0.3241643328796], -[0.02775286620277, -0.3241694027471], -[0.03330163520374, -0.3241756014639], -[0.03884941950757, -0.3241829303624], -[0.04439605452521, -0.3241913910215], -[0.04994137544858, -0.3242009852694], -[0.05548521721863, -0.324211715186], -[0.06102741449322, -0.3242235831061], -[0.06656780161472, -0.3242365916226], -[0.07210621257727, -0.3242507435906], -[0.07764248099371, -0.3242660421314], -[0.08317644006221, -0.324282490637], -[0.08870792253235, -0.3243000927758], -[0.09423676067087, -0.3243188524971], -[0.09976278622686, -0.3243387740378], -[0.1052858303965, -0.3243598619286], -[0.1108057237871, -0.3243821210006], -[0.1163222963807, -0.3244055563929], -[0.1218353774969, -0.3244301735603], -[0.1273447957552, -0.3244559782819], -[0.132850379036, -0.3244829766698], -[0.1383519544418, -0.3245111751789], -[0.1438493482564, -0.3245405806168], -[0.1493423859042, -0.3245712001545], -[0.1548308919082, -0.3246030413381], -[0.1603146898465, -0.3246361121006], -[0.1657936023085, -0.3246704207749], -[0.1712674508494, -0.3247059761073], -[0.1767360559439, -0.3247427872718], -[0.1821992369382, -0.3247808638855], -[0.1876568120009, -0.3248202160243], -[0.1931085980727, -0.3248608542406], -[0.1985544108138, -0.3249027895802], -[0.2039940645506, -0.3249460336026], -[0.2094273722203, -0.3249905984001], -[0.2148541453132, -0.3250364966194], -[0.2202741938144, -0.3250837414843], -[0.2256873261418, -0.3251323468192], -[0.2310933490835, -0.3251823270743], -[0.2364920677321, -0.3252336973523], -[0.2418832854168, -0.3252864734367], -[0.2472668036329, -0.3253406718213], -[0.2526424219688, -0.3253963097418], -[0.2580099380303, -0.3254534052096], -[0.2633691473614, -0.3255119770471], -[0.2687198433625, -0.325572044925], -[0.2740618172047, -0.3256336294025], -[0.2793948577414, -0.3256967519696], -[0.2847187514149, -0.3257614350917], -[0.2900332821602, -0.3258277022578], -[0.2953382313039, -0.3258955780307], -[0.300633377459, -0.3259650881016], -[0.3059184964143, -0.3260362593469], -[0.3111933610196, -0.3261091198896], -[0.3164577410649, -0.3261836991648], -[0.3217114031545, -0.3262600279887], -[0.3269541105741, -0.3263381386333], -[0.3321856231526, -0.3264180649054], -[0.3374056971162, -0.3264998422313], -[0.3426140849358, -0.326583507748], -[0.3478105351661, -0.3266691003996], -[0.3529947922772, -0.3267566610424], -[0.3581665964766, -0.3268462325556], -[0.3633256835224, -0.3269378599623], -[0.3684717845264, -0.327031590558], -[0.3736046257464, -0.3271274740497], -[0.3787239283675, -0.3272255627056], -[0.3838294082709, -0.3273259115169], -[0.3889207757897, -0.3274285783717], -[0.3939977354517, -0.3275336242439], -[0.3990599857062, -0.3276411133976], -[0.4041072186363, -0.3277511136083], -[0.4091391196529, -0.3278636964033], -[0.4141553671725, -0.3279789373232], -[0.4191556322736, -0.3280969162061], -[0.4241395783343, -0.3282177174981], -[0.429106860647, -0.3283414305916], -[0.4340571260093, -0.3284681501959], -[0.4389900122904, -0.3285979767434], -[0.44390514797, -0.3287310168339], -[0.4488021516492, -0.3288673837251], -[0.4536806315298, -0.3290071978711], -[0.4585401848619, -0.329150587517], -[0.4633803973568, -0.3292976893567], -[0.4682008425624, -0.329448649261], -[0.4730010812011, -0.3296036230856], -[0.4777806604663, -0.3297627775707], -[0.4825391132755, -0.3299262913429], -[0.4872759574808, -0.3300943560351], -[0.4919906950316, -0.3302671775411], -[0.4966828110926, -0.3304449774239], -[0.5013517731139, -0.3306279945005], -[0.5059970298565, -0.3308164866311], -[0.5106180103738, -0.3310107327431], -[0.515214122956, -0.3312110351277], -[0.5197847540435, -0.3314177220537], -[0.5243292671208, -0.3316311507494], -[0.5288470016122, -0.3318517108163], -[0.5333372717936, -0.3320798281476], -[0.5377993657704, -0.3323159694409], -[0.5422325445578, -0.3325606474091], -[0.5466360413375, -0.3328144268184], -[0.5510090609793, -0.3330779315035], -[0.5553507799612, -0.3333518525409], -[0.5596603468595, -0.3336369577975], -[0.5639368836496, -0.3339341031107], -[0.5681794881463, -0.3342442454021], -[0.5723872380252, -0.3345684580779], -[0.5765591970606, -0.3349079491097], -[0.5806944243846, -0.3352640822381], -[0.5847919878683, -0.335638401772], -[0.5888509832317, -0.3360326613579], -[0.59287056079, -0.3364488570419], -[0.5968499625204, -0.3368892645575], -[0.6007885727536, -0.3373564801783], -[0.6046859864934, -0.3378534633279], -[0.6085420997682, -0.3383835772527], -[0.6123572260224, -0.338950621123], -[0.6161322405549, -0.3395588426031], -[0.6198681363984, -0.3402127031163], -[-0.6180143027224, -0.337001904668], -[-0.6142118314602, -0.3363354015843], -[-0.6103734370165, -0.335711763306], -[-0.6064983239477, -0.3351271451152], -[-0.6025856286185, -0.3345778764909], -[-0.5986349517161, -0.3340606304744], -[-0.5946462516035, -0.3335724208432], -[-0.5906197552996, -0.3331105838548], -[-0.5865558868389, -0.3326727519309], -[-0.5824552110734, -0.3322568241962], -[-0.5783183903957, -0.3318609368876], -[-0.5741461518671, -0.3314834353347], -[-0.5699392625923, -0.3311228483196], -[-0.5656985113347, -0.330777865196], -[-0.5614246950726, -0.3304473156791], -[-0.5571186091829, -0.3301301522181], -[-0.5527810404186, -0.3298254346796], -[-0.5484127619677, -0.3295323170901], -[-0.5440145300738, -0.3292500361785], -[-0.5395870818193, -0.3289779014758], -[-0.5351311337726, -0.3287152867563], -[-0.5306473812711, -0.3284616226303], -[-0.5261364981716, -0.3282163901222], -[-0.5215991369394, -0.3279791150917], -[-0.5170359289818, -0.3277493633769], -[-0.5124474851433, -0.3275267365581], -[-0.5078343963253, -0.3273108682497], -[-0.5031972341765, -0.3271014208504], -[-0.4985365518279, -0.3268980826853], -[-0.4938528846508, -0.3267005654874], -[-0.4891467510211, -0.3265086021728], -[-0.4844186530764, -0.3263219448695], -[-0.4796690774599, -0.3261403631674], -[-0.4748984960435, -0.3259636425613], -[-0.4701073666256, -0.3257915830613], -[-0.4652961336028, -0.3256239979507], -[-0.4604652286132, -0.3254607126732], -[-0.4556150711501, -0.3253015638327], -[-0.4507460691463, -0.3251463982945], -[-0.4458586195304, -0.3249950723739], -[-0.4409531087539, -0.3248474511033], -[-0.4360299132922, -0.3247034075689], -[-0.4310894001183, -0.3245628223092], -[-0.4261319271522, -0.3244255827679], -[-0.4211578436854, -0.324291582797], -[-0.4161674907839, -0.3241607222028], -[-0.4111612016685, -0.3240329063316], -[-0.4061393020751, -0.3239080456912], -[-0.4011021105959, -0.3237860556034], -[-0.3960499390021, -0.323666855886], -[-0.3909830925496, -0.3235503705598], -[-0.3859018702682, -0.3234365275798], -[-0.3808065652361, -0.3233252585869], -[-0.3756974648397, -0.3232164986795], -[-0.3705748510201, -0.3231101862017], -[-0.3654390005067, -0.3230062625482], -[-0.3602901850393, -0.3229046719832], -[-0.3551286715785, -0.3228053614725], -[-0.3499547225058, -0.322708280528], -[-0.3447685958138, -0.322613381063], -[-0.339570545287, -0.3225206172575], -[-0.3343608206739, -0.322429945433], -[-0.3291396678507, -0.3223413239358], -[-0.3239073289774, -0.322254713028], -[-0.3186640426461, -0.322170074786], -[-0.3134100440235, -0.3220873730052], -[-0.3081455649853, -0.3220065731113], -[-0.3028708342461, -0.3219276420772], -[-0.2975860774822, -0.3218505483448], -[-0.29229151745, -0.321775261752], -[-0.2869873740983, -0.3217017534645], -[-0.2816738646767, -0.3216299959108], -[-0.2763512038387, -0.3215599627222], -[-0.2710196037408, -0.3214916286758], -[-0.2656792741376, -0.3214249696409], -[-0.2603304224728, -0.321359962529], -[-0.2549732539668, -0.3212965852458], -[-0.2496079717006, -0.3212348166472], -[-0.2442347766971, -0.3211746364966], -[-0.238853867998, -0.3211160254255], -[-0.2334654427396, -0.3210589648958], -[-0.2280696962243, -0.3210034371647], -[-0.2226668219902, -0.320949425251], -[-0.2172570118783, -0.3208969129036], -[-0.2118404560973, -0.3208458845719], -[-0.2064173432859, -0.3207963253772], -[-0.2009878605733, -0.3207482210862], -[-0.195552193638, -0.3207015580861], -[-0.190110526764, -0.3206563233602], -[-0.1846630428961, -0.3206125044658], -[-0.1792099236929, -0.3205700895129], -[-0.1737513495782, -0.3205290671436], -[-0.1682874997918, -0.3204894265133], -[-0.1628185524374, -0.3204511572728], -[-0.1573446845308, -0.3204142495511], -[-0.1518660720456, -0.320378693939], -[-0.1463828899581, -0.3203444814746], -[-0.1408953122915, -0.3203116036279], -[-0.1354035121583, -0.3202800522882], -[-0.1299076618024, -0.3202498197506], -[-0.1244079326397, -0.3202208987043], -[-0.1189044952982, -0.3201932822209], -[-0.1133975196569, -0.3201669637439], -[-0.1078871748845, -0.3201419370787], -[-0.1023736294765, -0.3201181963828], -[-0.09685705129254, -0.3200957361573], -[-0.09133760759245, -0.3200745512383], -[-0.08581546507192, -0.3200546367895], -[-0.08029078989757, -0.3200359882944], -[-0.07476374774156, -0.3200186015502], -[-0.06923450381563, -0.3200024726614], -[-0.06370322290477, -0.3199875980336], -[-0.05817006940037, -0.3199739743689], -[-0.05263520733312, -0.3199615986608], -[-0.04709880040548, -0.3199504681895], -[-0.04156101202384, -0.3199405805185], -[-0.03602200533046, -0.3199319334907], -[-0.03048194323509, -0.3199245252254], -[-0.02494098844643, -0.3199183541156], -[-0.01939930350336, -0.3199134188255], -[-0.01385705080604, -0.3199097182889], -[-0.008314392646851, -0.3199072517075], -[-0.002771491241284, -0.3199060185495], -[0.002771491241286, -0.3199060185495], -[0.008314392646853, -0.3199072517075], -[0.01385705080604, -0.3199097182889], -[0.01939930350337, -0.3199134188255], -[0.02494098844644, -0.3199183541156], -[0.03048194323509, -0.3199245252254], -[0.03602200533046, -0.3199319334907], -[0.04156101202384, -0.3199405805185], -[0.04709880040548, -0.3199504681895], -[0.05263520733312, -0.3199615986608], -[0.05817006940037, -0.3199739743689], -[0.06370322290477, -0.3199875980336], -[0.06923450381564, -0.3200024726614], -[0.07476374774156, -0.3200186015502], -[0.08029078989757, -0.3200359882944], -[0.08581546507192, -0.3200546367895], -[0.09133760759245, -0.3200745512383], -[0.09685705129254, -0.3200957361573], -[0.1023736294765, -0.3201181963828], -[0.1078871748845, -0.3201419370787], -[0.1133975196569, -0.3201669637439], -[0.1189044952982, -0.3201932822209], -[0.1244079326397, -0.3202208987043], -[0.1299076618024, -0.3202498197506], -[0.1354035121583, -0.3202800522882], -[0.1408953122915, -0.3203116036279], -[0.1463828899581, -0.3203444814746], -[0.1518660720456, -0.320378693939], -[0.1573446845308, -0.3204142495511], -[0.1628185524374, -0.3204511572728], -[0.1682874997918, -0.3204894265133], -[0.1737513495782, -0.3205290671436], -[0.1792099236929, -0.3205700895129], -[0.1846630428961, -0.3206125044658], -[0.190110526764, -0.3206563233602], -[0.195552193638, -0.3207015580861], -[0.2009878605733, -0.3207482210862], -[0.2064173432859, -0.3207963253772], -[0.2118404560973, -0.3208458845719], -[0.2172570118783, -0.3208969129036], -[0.2226668219902, -0.320949425251], -[0.2280696962243, -0.3210034371647], -[0.2334654427396, -0.3210589648958], -[0.238853867998, -0.3211160254255], -[0.2442347766971, -0.3211746364966], -[0.2496079717006, -0.3212348166472], -[0.2549732539668, -0.3212965852458], -[0.2603304224728, -0.321359962529], -[0.2656792741376, -0.3214249696409], -[0.2710196037408, -0.3214916286758], -[0.2763512038387, -0.3215599627222], -[0.281673864677, -0.3216299959109], -[0.2869873740983, -0.3217017534645], -[0.29229151745, -0.321775261752], -[0.2975860774822, -0.3218505483448], -[0.3028708342461, -0.3219276420772], -[0.3081455649853, -0.3220065731113], -[0.3134100440234, -0.3220873730052], -[0.3186640426461, -0.322170074786], -[0.3239073289774, -0.322254713028], -[0.3291396678507, -0.3223413239358], -[0.3343608206739, -0.322429945433], -[0.339570545287, -0.3225206172575], -[0.3447685958138, -0.322613381063], -[0.3499547225058, -0.322708280528], -[0.3551286715785, -0.3228053614725], -[0.3602901850393, -0.3229046719832], -[0.3654390005067, -0.3230062625482], -[0.37057485102, -0.3231101862017], -[0.3756974648397, -0.3232164986795], -[0.3808065652361, -0.3233252585869], -[0.3859018702682, -0.3234365275798], -[0.3909830925496, -0.3235503705598], -[0.3960499390022, -0.323666855886], -[0.4011021105959, -0.3237860556034], -[0.4061393020751, -0.3239080456912], -[0.4111612016685, -0.3240329063316], -[0.4161674907839, -0.3241607222028], -[0.4211578436854, -0.324291582797], -[0.4261319271522, -0.3244255827679], -[0.4310894001184, -0.3245628223092], -[0.4360299132922, -0.3247034075689], -[0.4409531087539, -0.3248474511033], -[0.4458586195304, -0.3249950723739], -[0.4507460691463, -0.3251463982945], -[0.4556150711501, -0.3253015638327], -[0.4604652286132, -0.3254607126732], -[0.4652961336028, -0.3256239979507], -[0.4701073666255, -0.3257915830613], -[0.4748984960434, -0.3259636425613], -[0.4796690774599, -0.3261403631674], -[0.4844186530763, -0.3263219448695], -[0.489146751021, -0.3265086021728], -[0.4938528846508, -0.3267005654874], -[0.4985365518279, -0.3268980826853], -[0.5031972341765, -0.3271014208504], -[0.5078343963253, -0.3273108682497], -[0.5124474851433, -0.3275267365581], -[0.5170359289819, -0.3277493633769], -[0.5215991369397, -0.3279791150916], -[0.5261364981702, -0.3282163901225], -[0.5306473812703, -0.3284616226304], -[0.5351311337727, -0.3287152867563], -[0.5395870818194, -0.3289779014758], -[0.5440145300738, -0.3292500361785], -[0.5484127619677, -0.3295323170901], -[0.5527810404186, -0.3298254346796], -[0.557118609183, -0.3301301522181], -[0.5614246950729, -0.330447315679], -[0.5656985113357, -0.3307778651956], -[0.5699392625947, -0.3311228483186], -[0.5741461518671, -0.3314834353347], -[0.5783183903915, -0.3318609368897], -[0.5824552110715, -0.3322568241973], -[0.5865558868383, -0.3326727519313], -[0.5906197552995, -0.3331105838548], -[0.5946462516036, -0.3335724208432], -[0.5986349517161, -0.3340606304744], -[0.6025856286185, -0.3345778764909], -[0.6064983239469, -0.3351271451162], -[0.6103734370098, -0.3357117633162], -[0.6142118314602, -0.3363354015843], -[0.6180143025728, -0.3370019049876], -[-0.6161265518082, -0.3337323088836], -[-0.6122624449599, -0.3330544333804], -[-0.6083651636108, -0.3324170594866], -[-0.6044340452397, -0.3318167855619], -[-0.6004682561795, -0.3312504065333], -[-0.5964673500333, -0.3307149854776], -[-0.5924311875002, -0.3302078558594], -[-0.5883598675393, -0.3297266116231], -[-0.5842536702957, -0.3292690902326], -[-0.5801130109415, -0.3288333522579], -[-0.5759384030131, -0.3284176598929], -[-0.5717304297136, -0.3280204558586], -[-0.5674897216542, -0.3276403435577], -[-0.5632169397707, -0.3272760688724], -[-0.5589127623405, -0.3269265037551], -[-0.5545778751524, -0.3265906316306], -[-0.5502129641729, -0.3262675344872], -[-0.54581871012, -0.3259563815294], -[-0.541395784512, -0.3256564192296], -[-0.5369448468466, -0.3253669626231], -[-0.5324665426454, -0.3250873876935], -[-0.5279615021585, -0.3248171247117], -[-0.5234303395701, -0.3245556524042], -[-0.5188736525824, -0.3243024928418], -[-0.5142920222841, -0.3240572069534], -[-0.5096860132301, -0.3238193905806], -[-0.5050561736757, -0.3235886710027], -[-0.5004030359241, -0.3233647038692], -[-0.4957271167519, -0.3231471704864], -[-0.491028917889, -0.3229357754132], -[-0.4863089265323, -0.3227302443243], -[-0.4815676158788, -0.3225303221097], -[-0.4768054456674, -0.3223357711784], -[-0.4720228627216, -0.3221463699428], -[-0.4672203014834, -0.3219619114606], -[-0.4623981845394, -0.3217822022164], -[-0.4575569231314, -0.3216070610259], -[-0.452696917651, -0.3214363180481], -[-0.4478185581174, -0.3212698138941], -[-0.442922224635, -0.3211073988206], -[-0.4380082878344, -0.3209489319995], -[-0.4330771092922, -0.3207942808544], -[-0.4281290419332, -0.320643320458], -[-0.4231644304138, -0.3204959329826], -[-0.4181836114874, -0.3203520071994], -[-0.4131869143522, -0.3202114380203], -[-0.4081746609823, -0.3200741260793], -[-0.4031471664428, -0.3199399773483], -[-0.3981047391892, -0.319808902785], -[-0.3930476813524, -0.3196808180089], -[-0.3879762890096, -0.3195556430028], -[-0.3828908524417, -0.3194333018389], -[-0.3777916563785, -0.3193137224244], -[-0.3726789802312, -0.3191968362681], -[-0.3675530983144, -0.3190825782628], -[-0.362414280057, -0.3189708864857], -[-0.3572627902026, -0.3188617020114], -[-0.3520988890008, -0.3187549687397], -[-0.3469228323893, -0.318650633235], -[-0.3417348721672, -0.318548644577], -[-0.3365352561608, -0.3184489542219], -[-0.3313242283805, -0.3183515158725], -[-0.3261020291719, -0.3182562853575], -[-0.3208688953594, -0.3181632205188], -[-0.3156250603832, -0.318072281106], -[-0.3103707544302, -0.3179834286775], -[-0.3051062045596, -0.3178966265086], -[-0.2998316348229, -0.3178118395044], -[-0.2945472663782, -0.3177290341194], -[-0.2892533176003, -0.3176481782807], -[-0.2839500041857, -0.317569241317], -[-0.2786375392541, -0.3174921938914], -[-0.2733161334443, -0.3174170079381], -[-0.2679859950079, -0.3173436566031], -[-0.2626473298979, -0.3172721141885], -[-0.257300341855, -0.3172023560996], -[-0.2519452324893, -0.3171343587954], -[-0.2465822013604, -0.3170680997418], -[-0.2412114460532, -0.3170035573677], -[-0.2358331622516, -0.3169407110229], -[-0.2304475438096, -0.3168795409393], -[-0.2250547828194, -0.3168200281937], -[-0.2196550696776, -0.3167621546725], -[-0.2142485931491, -0.3167059030386], -[-0.2088355404285, -0.3166512567004], -[-0.2034160972, -0.316598199782], -[-0.197990447695, -0.3165467170951], -[-0.1925587747478, -0.3164967941128], -[-0.1871212598504, -0.316448416944], -[-0.1816780832045, -0.3164015723106], -[-0.1762294237728, -0.3163562475241], -[-0.1707754593289, -0.3163124304653], -[-0.1653163665048, -0.3162701095634], -[-0.1598523208386, -0.3162292737779], -[-0.1543834968197, -0.3161899125799], -[-0.1489100679335, -0.3161520159357], -[-0.143432206705, -0.3161155742903], -[-0.1379500847408, -0.3160805785529], -[-0.1324638727709, -0.316047020082], -[-0.126973740689, -0.3160148906723], -[-0.1214798575923, -0.315984182542], -[-0.1159823918198, -0.3159548883207], -[-0.1104815109911, -0.315927001038], -[-0.104977382043, -0.3159005141136], -[-0.09947017126664, -0.3158754213466], -[-0.09396004434301, -0.3158517169065], -[-0.08844716637872, -0.3158293953248], -[-0.08293170194063, -0.3158084514866], -[-0.07741381509018, -0.3157888806229], -[-0.07189366941726, -0.3157706783041], -[-0.06637142807354, -0.315753840433], -[-0.06084725380545, -0.3157383632393], -[-0.05532130898676, -0.3157242432738], -[-0.04979375565082, -0.3157114774035], -[-0.0442647555225, -0.3157000628072], -[-0.0387344700498, -0.3156899969714], -[-0.03320306043526, -0.3156812776865], -[-0.02767068766714, -0.3156739030439], -[-0.02213751255036, -0.3156678714334], -[-0.0166036957373, -0.3156631815404], -[-0.01106939775853, -0.3156598323444], -[-0.005534779053283, -0.3156578231177], -[1.082787500846e-15, -0.3156571534239], -[0.005534779053285, -0.3156578231177], -[0.01106939775853, -0.3156598323444], -[0.01660369573731, -0.3156631815404], -[0.02213751255036, -0.3156678714334], -[0.02767068766714, -0.3156739030439], -[0.03320306043526, -0.3156812776865], -[0.0387344700498, -0.3156899969714], -[0.0442647555225, -0.3157000628072], -[0.04979375565082, -0.3157114774035], -[0.05532130898676, -0.3157242432738], -[0.06084725380545, -0.3157383632393], -[0.06637142807355, -0.315753840433], -[0.07189366941727, -0.3157706783041], -[0.07741381509018, -0.3157888806229], -[0.08293170194063, -0.3158084514866], -[0.08844716637872, -0.3158293953248], -[0.09396004434302, -0.3158517169065], -[0.09947017126664, -0.3158754213466], -[0.104977382043, -0.3159005141136], -[0.1104815109911, -0.315927001038], -[0.1159823918198, -0.3159548883207], -[0.1214798575923, -0.315984182542], -[0.126973740689, -0.3160148906723], -[0.1324638727709, -0.316047020082], -[0.1379500847408, -0.3160805785529], -[0.143432206705, -0.3161155742903], -[0.1489100679335, -0.3161520159357], -[0.1543834968197, -0.3161899125799], -[0.1598523208386, -0.3162292737779], -[0.1653163665048, -0.3162701095634], -[0.1707754593289, -0.3163124304653], -[0.1762294237728, -0.3163562475241], -[0.1816780832045, -0.3164015723106], -[0.1871212598504, -0.316448416944], -[0.1925587747478, -0.3164967941128], -[0.197990447695, -0.3165467170951], -[0.2034160972, -0.316598199782], -[0.2088355404285, -0.3166512567004], -[0.2142485931491, -0.3167059030386], -[0.2196550696776, -0.3167621546725], -[0.2250547828194, -0.3168200281937], -[0.2304475438096, -0.3168795409393], -[0.2358331622516, -0.3169407110229], -[0.2412114460532, -0.3170035573677], -[0.2465822013604, -0.3170680997418], -[0.2519452324893, -0.3171343587954], -[0.257300341855, -0.3172023560996], -[0.2626473298979, -0.3172721141885], -[0.2679859950079, -0.3173436566031], -[0.2733161334443, -0.3174170079381], -[0.2786375392541, -0.3174921938914], -[0.2839500041857, -0.317569241317], -[0.2892533176003, -0.3176481782807], -[0.2945472663782, -0.3177290341194], -[0.2998316348229, -0.3178118395044], -[0.3051062045596, -0.3178966265086], -[0.3103707544302, -0.3179834286775], -[0.3156250603832, -0.318072281106], -[0.3208688953594, -0.3181632205188], -[0.3261020291719, -0.3182562853575], -[0.3313242283805, -0.3183515158725], -[0.3365352561608, -0.3184489542219], -[0.3417348721672, -0.318548644577], -[0.3469228323893, -0.318650633235], -[0.3520988890008, -0.3187549687397], -[0.3572627902026, -0.3188617020114], -[0.362414280057, -0.3189708864857], -[0.3675530983144, -0.3190825782628], -[0.3726789802312, -0.3191968362681], -[0.3777916563785, -0.3193137224244], -[0.3828908524417, -0.3194333018389], -[0.3879762890096, -0.3195556430028], -[0.3930476813524, -0.3196808180089], -[0.3981047391892, -0.319808902785], -[0.4031471664428, -0.3199399773483], -[0.4081746609823, -0.3200741260793], -[0.4131869143522, -0.3202114380203], -[0.4181836114874, -0.3203520071994], -[0.4231644304138, -0.3204959329826], -[0.4281290419332, -0.320643320458], -[0.4330771092922, -0.3207942808544], -[0.4380082878344, -0.3209489319995], -[0.442922224635, -0.3211073988206], -[0.4478185581174, -0.3212698138941], -[0.452696917651, -0.3214363180481], -[0.4575569231314, -0.3216070610259], -[0.4623981845394, -0.3217822022164], -[0.4672203014834, -0.3219619114606], -[0.4720228627216, -0.3221463699428], -[0.4768054456674, -0.3223357711784], -[0.4815676158786, -0.3225303221097], -[0.4863089265322, -0.3227302443243], -[0.4910289178891, -0.3229357754132], -[0.4957271167519, -0.3231471704864], -[0.5004030359241, -0.3233647038692], -[0.5050561736757, -0.3235886710027], -[0.5096860132301, -0.3238193905806], -[0.5142920222842, -0.3240572069534], -[0.5188736525825, -0.3243024928418], -[0.5234303395705, -0.3245556524041], -[0.52796150216, -0.3248171247114], -[0.5324665426462, -0.3250873876934], -[0.5369448468469, -0.325366962623], -[0.5413957845121, -0.3256564192295], -[0.54581871012, -0.3259563815294], -[0.5502129641729, -0.3262675344872], -[0.5545778751524, -0.3265906316306], -[0.5589127623404, -0.3269265037551], -[0.5632169397705, -0.3272760688725], -[0.5674897216509, -0.3276403435592], -[0.5717304297111, -0.3280204558598], -[0.5759384030131, -0.3284176598929], -[0.580113010943, -0.328833352257], -[0.5842536702966, -0.329269090232], -[0.5883598675397, -0.3297266116228], -[0.5924311875003, -0.3302078558593], -[0.5964673500333, -0.3307149854777], -[0.6004682561795, -0.3312504065333], -[0.604434045239, -0.3318167855629], -[0.608365163607, -0.332417059493], -[0.6122624449599, -0.3330544333804], -[0.6161271990569, -0.3337323593608], -[-0.6142074348378, -0.3304072655932], -[-0.6102856977273, -0.3297197482532], -[-0.6063334382371, -0.3290700559342], -[-0.6023498221896, -0.3284557458778], -[-0.5983340548396, -0.3278739935814], -[-0.5942856673355, -0.3273221873688], -[-0.5902044554697, -0.3267979330909], -[-0.5860904258511, -0.326299049289], -[-0.5819437501477, -0.3258235563813], -[-0.5777647271173, -0.3253696625164], -[-0.5735537516576, -0.3249357479419], -[-0.5693112899363, -0.3245203491009], -[-0.5650378595798, -0.3241221432463], -[-0.5607340140786, -0.3237399339719], -[-0.556400330566, -0.3233726379128], -[-0.5520374003214, -0.3230192726786], -[-0.5476458214439, -0.3226789460123], -[-0.5432261932418, -0.3223508461157], -[-0.5387791119784, -0.3220342330531], -[-0.5343051676816, -0.3217284311357], -[-0.52980494179, -0.3214328221852], -[-0.5252790054504, -0.3211468395808], -[-0.5207279183262, -0.3208699629965], -[-0.5161522278028, -0.3206017137496], -[-0.5115524684973, -0.3203416506837], -[-0.5069291620059, -0.3200893665224], -[-0.5022828168325, -0.3198444846343], -[-0.497613928455, -0.3196066561596], -[-0.4929229794949, -0.3193755574531], -[-0.4882104399636, -0.3191508878054], -[-0.483476767565, -0.3189323674079], -[-0.4787224080352, -0.3187197355331], -[-0.4739477955132, -0.3185127489034], -[-0.469153352922, -0.3183111802275], -[-0.4643394923633, -0.3181148168833], -[-0.459506615512, -0.3179234597321], -[-0.4546551140108, -0.3177369220478], -[-0.4497853698577, -0.3175550285489], -[-0.4448977557875, -0.3173776145223], -[-0.4399926356423, -0.3172045250276], -[-0.4350703647316, -0.3170356141744], -[-0.4301312901808, -0.3168707444651], -[-0.4251757512665, -0.3167097861947], -[-0.4202040797399, -0.3165526169039], -[-0.4152166001371, -0.3163991208778], -[-0.4102136300768, -0.3162491886884], -[-0.4051954805449, -0.3161027167735], -[-0.4001624561681, -0.3159596070508], -[-0.3951148554743, -0.3158197665633], -[-0.3900529711421, -0.3156831071519], -[-0.384977090239, -0.3155495451542], -[-0.3798874944494, -0.3154190011266], -[-0.3747844602912, -0.3152913995866], -[-0.3696682593241, -0.3151666687752], -[-0.364539158347, -0.3150447404366], -[-0.3593974195877, -0.3149255496135], -[-0.3542433008833, -0.3148090344571], -[-0.349077055853, -0.3146951360514], -[-0.3438989340627, -0.3145837982483], -[-0.3387091811828, -0.3144749675153], -[-0.3335080391384, -0.3143685927928], -[-0.3282957462537, -0.3142646253611], -[-0.3230725373896, -0.3141630187165], -[-0.3178386440751, -0.3140637284549], -[-0.3125942946341, -0.3139667121637], -[-0.3073397143056, -0.3138719293198], -[-0.3020751253596, -0.3137793411947], -[-0.2968007472083, -0.3136889107649], -[-0.2915167965118, -0.3136006026285], -[-0.2862234872809, -0.3135143829261], -[-0.2809210309745, -0.3134302192674], -[-0.2756096365941, -0.3133480806612], -[-0.2702895107737, -0.3132679374506], -[-0.2649608578671, -0.3131897612509], -[-0.2596238800313, -0.3131135248918], -[-0.2542787773071, -0.3130392023631], -[-0.2489257476965, -0.312966768763], -[-0.2435649872373, -0.3128962002491], -[-0.2381966900755, -0.3128274739934], -[-0.2328210485341, -0.3127605681382], -[-0.2274382531809, -0.312695461756], -[-0.2220484928928, -0.3126321348101], -[-0.2166519549185, -0.3125705681187], -[-0.2112488249395, -0.3125107433202], -[-0.205839287128, -0.3124526428405], -[-0.2004235242046, -0.3123962498623], -[-0.1950017174925, -0.3123415482959], -[-0.1895740469716, -0.3122885227514], -[-0.1841406913299, -0.3122371585129], -[-0.1787018280141, -0.3121874415135], -[-0.1732576332782, -0.3121393583122], -[-0.1678082822318, -0.3120928960714], -[-0.1623539488857, -0.3120480425366], -[-0.1568948061973, -0.3120047860159], -[-0.151431026115, -0.3119631153617], -[-0.1459627796205, -0.3119230199532], -[-0.1404902367712, -0.3118844896792], -[-0.1350135667412, -0.3118475149226], -[-0.129532937861, -0.3118120865456], -[-0.1240485176571, -0.3117781958757], -[-0.1185604728902, -0.311745834692], -[-0.1130689695929, -0.3117149952133], -[-0.1075741731069, -0.3116856700863], -[-0.1020762481188, -0.3116578523743], -[-0.09657535869619, -0.3116315355471], -[-0.0910716683226, -0.3116067134714], -[-0.0855653399319, -0.3115833804017], -[-0.08005653594239, -0.311561530972], -[-0.07454541829034, -0.3115411601877], -[-0.06903214846307, -0.311522263419], -[-0.0635168875316, -0.3115048363933], -[-0.05799979618296, -0.31148887519], -[-0.05248103475219, -0.3114743762343], -[-0.0469607632539, -0.3114613362921], -[-0.04143914141369, -0.3114497524659], -[-0.03591632869922, -0.3114396221901], -[-0.0303924843511, -0.3114309432277], -[-0.02486776741352, -0.3114237136672], -[-0.01934233676483, -0.3114179319196], -[-0.01381635114782, -0.3114135967165], -[-0.00828996919999, -0.3114107071081], -[-0.002763349483711, -0.3114092624619], -[0.002763349483714, -0.3114092624619], -[0.008289969199993, -0.3114107071081], -[0.01381635114782, -0.3114135967165], -[0.01934233676484, -0.3114179319196], -[0.02486776741353, -0.3114237136672], -[0.0303924843511, -0.3114309432277], -[0.03591632869922, -0.3114396221901], -[0.04143914141369, -0.3114497524659], -[0.0469607632539, -0.3114613362921], -[0.05248103475219, -0.3114743762343], -[0.05799979618297, -0.31148887519], -[0.0635168875316, -0.3115048363933], -[0.06903214846307, -0.311522263419], -[0.07454541829035, -0.3115411601877], -[0.08005653594239, -0.311561530972], -[0.0855653399319, -0.3115833804017], -[0.09107166832261, -0.3116067134714], -[0.09657535869619, -0.3116315355471], -[0.1020762481188, -0.3116578523743], -[0.1075741731069, -0.3116856700863], -[0.1130689695929, -0.3117149952133], -[0.1185604728902, -0.311745834692], -[0.1240485176571, -0.3117781958757], -[0.129532937861, -0.3118120865456], -[0.1350135667412, -0.3118475149226], -[0.1404902367712, -0.3118844896792], -[0.1459627796205, -0.3119230199532], -[0.151431026115, -0.3119631153617], -[0.1568948061973, -0.3120047860159], -[0.1623539488857, -0.3120480425366], -[0.1678082822318, -0.3120928960714], -[0.1732576332782, -0.3121393583122], -[0.1787018280141, -0.3121874415135], -[0.1841406913299, -0.3122371585129], -[0.1895740469716, -0.3122885227514], -[0.1950017174925, -0.3123415482959], -[0.2004235242046, -0.3123962498623], -[0.205839287128, -0.3124526428405], -[0.2112488249395, -0.3125107433202], -[0.2166519549185, -0.3125705681187], -[0.2220484928928, -0.3126321348101], -[0.2274382531809, -0.312695461756], -[0.2328210485341, -0.3127605681382], -[0.2381966900755, -0.3128274739934], -[0.2435649872373, -0.3128962002491], -[0.2489257476965, -0.312966768763], -[0.2542787773071, -0.3130392023631], -[0.2596238800313, -0.3131135248918], -[0.2649608578671, -0.3131897612509], -[0.2702895107737, -0.3132679374506], -[0.2756096365941, -0.3133480806612], -[0.2809210309746, -0.3134302192674], -[0.2862234872809, -0.3135143829261], -[0.2915167965118, -0.3136006026285], -[0.2968007472083, -0.3136889107649], -[0.3020751253597, -0.3137793411947], -[0.3073397143056, -0.3138719293198], -[0.3125942946341, -0.3139667121637], -[0.3178386440751, -0.3140637284549], -[0.3230725373896, -0.3141630187165], -[0.3282957462537, -0.3142646253611], -[0.3335080391384, -0.3143685927928], -[0.3387091811828, -0.3144749675153], -[0.3438989340627, -0.3145837982483], -[0.349077055853, -0.3146951360514], -[0.3542433008833, -0.3148090344571], -[0.3593974195877, -0.3149255496135], -[0.364539158347, -0.3150447404366], -[0.3696682593241, -0.3151666687752], -[0.3747844602912, -0.3152913995866], -[0.3798874944494, -0.3154190011266], -[0.384977090239, -0.3155495451542], -[0.3900529711421, -0.3156831071519], -[0.3951148554743, -0.3158197665633], -[0.4001624561681, -0.3159596070508], -[0.4051954805449, -0.3161027167735], -[0.4102136300768, -0.3162491886884], -[0.4152166001371, -0.3163991208778], -[0.4202040797399, -0.3165526169039], -[0.4251757512665, -0.3167097861947], -[0.4301312901808, -0.3168707444651], -[0.4350703647316, -0.3170356141744], -[0.4399926356422, -0.3172045250276], -[0.4448977557875, -0.3173776145223], -[0.4497853698577, -0.3175550285489], -[0.4546551140108, -0.3177369220478], -[0.459506615512, -0.3179234597321], -[0.4643394923633, -0.3181148168833], -[0.469153352922, -0.3183111802275], -[0.4739477955132, -0.3185127489034], -[0.4787224080353, -0.3187197355331], -[0.4834767675648, -0.3189323674079], -[0.4882104399638, -0.3191508878054], -[0.492922979495, -0.3193755574531], -[0.497613928455, -0.3196066561596], -[0.5022828168325, -0.3198444846343], -[0.5069291620059, -0.3200893665224], -[0.5115524684973, -0.3203416506837], -[0.5161522278028, -0.3206017137496], -[0.520727918326, -0.3208699629965], -[0.5252790054499, -0.3211468395809], -[0.5298049417896, -0.3214328221854], -[0.5343051676822, -0.3217284311356], -[0.5387791119786, -0.3220342330531], -[0.5432261932418, -0.3223508461158], -[0.5476458214439, -0.3226789460123], -[0.5520374003215, -0.3230192726786], -[0.5564003305659, -0.3233726379128], -[0.5607340140785, -0.3237399339719], -[0.565037859579, -0.3241221432467], -[0.5693112899356, -0.3245203491012], -[0.5735537516588, -0.3249357479412], -[0.5777647271177, -0.3253696625161], -[0.5819437501514, -0.3258235563786], -[0.5860904258526, -0.3262990492878], -[0.5902044554699, -0.3267979330907], -[0.5942856673353, -0.327322187369], -[0.5983340548397, -0.3278739935813], -[0.60234982219, -0.3284557458771], -[0.606333438237, -0.3290700559345], -[0.6102856977273, -0.3297197482532], -[0.6142074348178, -0.3304072656498], -[-0.6122583492032, -0.327031361614], -[-0.6082830271793, -0.3263346438571], -[-0.6042792251916, -0.3256738465029], -[-0.6002462268502, -0.3250468869015], -[-0.5961832800077, -0.3244512555949], -[-0.5920899090844, -0.3238846146003], -[-0.5879658675968, -0.3233448031324], -[-0.5838110956018, -0.3228298358474], -[-0.5796256827524, -0.3223378960983], -[-0.5754098369673, -0.3218673261538], -[-0.5711638583079, -0.3214166158162], -[-0.5668881175266, -0.3209843904053], -[-0.5625830385927, -0.3205693988085], -[-0.5582490846043, -0.3201705019878], -[-0.5538867465034, -0.3197866621945], -[-0.5494965340932, -0.3194169330114], -[-0.5450789689296, -0.3190604502659], -[-0.5406345787334, -0.3187164238031], -[-0.5361638930237, -0.3183841300826], -[-0.5316674397337, -0.3180629055415], -[-0.5271457426113, -0.3177521406604], -[-0.5225993192469, -0.3174512746672], -[-0.5180286796039, -0.3171597908124], -[-0.5134343249432, -0.3168772121569], -[-0.5088167470646, -0.316603097816], -[-0.5041764277964, -0.3163370396077], -[-0.4995138386819, -0.316078659059], -[-0.4948294408193, -0.3158276047305], -[-0.4901236848219, -0.3155835498214], -[-0.4853970108718, -0.3153461900234], -[-0.4806498488443, -0.3151152415945], -[-0.4758826184857, -0.3148904396278], -[-0.4710957296338, -0.3146715364934], -[-0.4662895824645, -0.3144583004337], -[-0.4614645677615, -0.3142505142947], -[-0.456621067198, -0.3140479743795], -[-0.451759453627, -0.3138504894088], -[-0.4468800913759, -0.3136578795787], -[-0.4419833365402, -0.3134699757046], -[-0.4370695372769, -0.3132866184417], -[-0.4321390340917, -0.3131076575753], -[-0.4271921601223, -0.3129329513725], -[-0.4222292414132, -0.3127623659902], -[-0.4172505971848, -0.3125957749328], -[-0.4122565400924, -0.3124330585558], -[-0.407247376478, -0.3122741036094], -[-0.4022234066129, -0.3121188028197], -[-0.3971849249315, -0.3119670545031], -[-0.3921322202563, -0.3118187622112], -[-0.3870655760141, -0.3116738344029], -[-0.3819852704444, -0.3115321841416], -[-0.3768915767982, -0.3113937288158], -[-0.3717847635301, -0.3112583898796], -[-0.3666650944815, -0.3111260926127], -[-0.3615328290564, -0.3109967658977], -[-0.3563882223908, -0.3108703420132], -[-0.3512315255137, -0.3107467564414], -[-0.3460629855027, -0.3106259476892], -[-0.3408828456319, -0.3105078571212], -[-0.3356913455149, -0.3103924288045], -[-0.3304887212411, -0.3102796093637], -[-0.3252752055064, -0.310169347845], -[-0.3200510277388, -0.3100615955899], -[-0.3148164142191, -0.3099563061164], -[-0.3095715881962, -0.3098534350083], -[-0.3043167699981, -0.3097529398108], -[-0.2990521771382, -0.3096547799336], -[-0.2937780244181, -0.3095589165585], -[-0.2884945240253, -0.3094653125544], -[-0.2832018856284, -0.3093739323958], -[-0.2779003164674, -0.3092847420872], -[-0.2725900214415, -0.3091977090917], -[-0.2672712031934, -0.3091128022635], -[-0.26194406219, -0.3090299917847], -[-0.2566087968011, -0.3089492491055], -[-0.2512656033746, -0.3088705468882], -[-0.2459146763088, -0.3087938589534], -[-0.2405562081233, -0.3087191602306], -[-0.2351903895263, -0.3086464267106], -[-0.2298174094801, -0.3085756354005], -[-0.2244374552648, -0.3085067642821], -[-0.2190507125391, -0.3084397922713], -[-0.2136573654001, -0.3083746991809], -[-0.2082575964406, -0.3083114656846], -[-0.2028515868045, -0.3082500732832], -[-0.1974395162415, -0.3081905042731], -[-0.1920215631588, -0.3081327417156], -[-0.1865979046726, -0.3080767694086], -[-0.1811687166577, -0.3080225718593], -[-0.1757341737949, -0.3079701342589], -[-0.1702944496188, -0.3079194424582], -[-0.1648497165629, -0.3078704829447], -[-0.1594001460043, -0.3078232428209], -[-0.1539459083071, -0.3077777097839], -[-0.1484871728646, -0.3077338721061], -[-0.143024108141, -0.3076917186164], -[-0.1375568817117, -0.3076512386835], -[-0.1320856603028, -0.3076124221993], -[-0.12661060983, -0.3075752595633], -[-0.1211318954365, -0.3075397416685], -[-0.1156496815305, -0.3075058598872], -[-0.1101641318212, -0.3074736060587], -[-0.1046754093552, -0.3074429724765], -[-0.09918367655161, -0.3074139518778], -[-0.09368909523675, -0.3073865374319], -[-0.08819182667827, -0.3073607227311], -[-0.08269203161887, -0.307336501781], -[-0.07718987030952, -0.3073138689916], -[-0.07168550254215, -0.30729281917], -[-0.06617908768206, -0.3072733475124], -[-0.06067078469988, -0.3072554495972], -[-0.05516075220321, -0.3072391213795], -[-0.04964914846794, -0.3072243591842], -[-0.04413613146931, -0.3072111597021], -[-0.03862185891268, -0.3071995199842], -[-0.03310648826409, -0.3071894374382], -[-0.0275901767806, -0.3071809098246], -[-0.0220730815405, -0.3071739352538], -[-0.01655535947329, -0.3071685121833], -[-0.01103716738964, -0.3071646394154], -[-0.005518662011119, -0.307162316096], -[1.210174265652e-15, -0.3071615417131], -[0.005518662011121, -0.307162316096], -[0.01103716738964, -0.3071646394154], -[0.01655535947329, -0.3071685121833], -[0.0220730815405, -0.3071739352538], -[0.0275901767806, -0.3071809098246], -[0.03310648826409, -0.3071894374382], -[0.03862185891269, -0.3071995199842], -[0.04413613146932, -0.3072111597021], -[0.04964914846795, -0.3072243591842], -[0.05516075220321, -0.3072391213795], -[0.06067078469989, -0.3072554495972], -[0.06617908768207, -0.3072733475124], -[0.07168550254215, -0.30729281917], -[0.07718987030952, -0.3073138689916], -[0.08269203161888, -0.307336501781], -[0.08819182667827, -0.3073607227311], -[0.09368909523675, -0.3073865374319], -[0.09918367655162, -0.3074139518778], -[0.1046754093552, -0.3074429724765], -[0.1101641318212, -0.3074736060587], -[0.1156496815305, -0.3075058598872], -[0.1211318954365, -0.3075397416685], -[0.12661060983, -0.3075752595633], -[0.1320856603028, -0.3076124221993], -[0.1375568817117, -0.3076512386835], -[0.143024108141, -0.3076917186164], -[0.1484871728646, -0.3077338721061], -[0.1539459083071, -0.3077777097839], -[0.1594001460043, -0.3078232428209], -[0.1648497165629, -0.3078704829447], -[0.1702944496188, -0.3079194424582], -[0.1757341737949, -0.3079701342589], -[0.1811687166577, -0.3080225718593], -[0.1865979046726, -0.3080767694086], -[0.1920215631588, -0.3081327417156], -[0.1974395162415, -0.3081905042731], -[0.2028515868045, -0.3082500732832], -[0.2082575964406, -0.3083114656846], -[0.2136573654001, -0.3083746991809], -[0.2190507125391, -0.3084397922713], -[0.2244374552648, -0.3085067642821], -[0.2298174094801, -0.3085756354005], -[0.2351903895263, -0.3086464267106], -[0.2405562081233, -0.3087191602306], -[0.2459146763088, -0.3087938589534], -[0.2512656033746, -0.3088705468882], -[0.2566087968011, -0.3089492491055], -[0.26194406219, -0.3090299917847], -[0.2672712031934, -0.3091128022635], -[0.2725900214415, -0.3091977090917], -[0.2779003164674, -0.3092847420872], -[0.2832018856284, -0.3093739323958], -[0.2884945240253, -0.3094653125544], -[0.2937780244181, -0.3095589165585], -[0.2990521771382, -0.3096547799336], -[0.3043167699981, -0.3097529398108], -[0.3095715881962, -0.3098534350083], -[0.3148164142191, -0.3099563061164], -[0.3200510277388, -0.3100615955899], -[0.3252752055064, -0.310169347845], -[0.3304887212411, -0.3102796093637], -[0.335691345515, -0.3103924288045], -[0.3408828456319, -0.3105078571212], -[0.3460629855027, -0.3106259476892], -[0.3512315255137, -0.3107467564414], -[0.3563882223908, -0.3108703420132], -[0.3615328290564, -0.3109967658977], -[0.3666650944815, -0.3111260926127], -[0.3717847635301, -0.3112583898796], -[0.3768915767982, -0.3113937288158], -[0.3819852704443, -0.3115321841416], -[0.3870655760141, -0.3116738344029], -[0.3921322202563, -0.3118187622112], -[0.3971849249315, -0.3119670545031], -[0.4022234066129, -0.3121188028197], -[0.407247376478, -0.3122741036094], -[0.4122565400924, -0.3124330585558], -[0.4172505971848, -0.3125957749328], -[0.4222292414132, -0.3127623659902], -[0.4271921601222, -0.3129329513725], -[0.4321390340917, -0.3131076575753], -[0.4370695372769, -0.3132866184417], -[0.4419833365402, -0.3134699757046], -[0.4468800913759, -0.3136578795787], -[0.451759453627, -0.3138504894088], -[0.456621067198, -0.3140479743795], -[0.4614645677615, -0.3142505142947], -[0.4662895824645, -0.3144583004337], -[0.4710957296338, -0.3146715364934], -[0.4758826184858, -0.3148904396278], -[0.4806498488442, -0.3151152415945], -[0.485397010872, -0.3153461900234], -[0.4901236848219, -0.3155835498214], -[0.4948294408193, -0.3158276047305], -[0.4995138386819, -0.316078659059], -[0.5041764277964, -0.3163370396077], -[0.5088167470646, -0.316603097816], -[0.5134343249432, -0.3168772121569], -[0.5180286796038, -0.3171597908124], -[0.5225993192468, -0.3174512746672], -[0.5271457426112, -0.3177521406604], -[0.531667439734, -0.3180629055414], -[0.5361638930238, -0.3183841300826], -[0.5406345787332, -0.3187164238032], -[0.5450789689295, -0.319060450266], -[0.5494965340933, -0.3194169330114], -[0.5538867465036, -0.3197866621944], -[0.5582490846043, -0.3201705019878], -[0.5625830385925, -0.3205693988086], -[0.5668881175265, -0.3209843904054], -[0.5711638583086, -0.3214166158157], -[0.5754098369699, -0.3218673261519], -[0.5796256827599, -0.3223378960924], -[0.5838110956049, -0.3228298358446], -[0.5879658675971, -0.3233448031321], -[0.5920899090836, -0.3238846146012], -[0.5961832800072, -0.3244512555956], -[0.6002462268509, -0.3250468869004], -[0.6042792251902, -0.3256738465054], -[0.6082830271784, -0.3263346438589], -[0.612258349184, -0.3270313616688], -[-0.6102813392907, -0.3236070989961], -[-0.6062557199699, -0.3229020058473], -[-0.6022034224388, -0.322231156395], -[-0.5981238290777, -0.3215927490742], -[-0.594016231021, -0.3209845381763], -[-0.58988015599, -0.3204044179968], -[-0.5857153310019, -0.3198504288272], -[-0.5815216483729, -0.3193207570508], -[-0.5772991356537, -0.3188137311206], -[-0.5730479296836, -0.3183278148199], -[-0.5687682545237, -0.3178615989725], -[-0.5644604029676, -0.3174137923644], -[-0.5601247212063, -0.3169832124435], -[-0.5557615962123, -0.3165687761782], -[-0.5513714454334, -0.3161694913105], -[-0.5469547084232, -0.3157844481424], -[-0.5425118400798, -0.3154128119267], -[-0.5380433052141, -0.3150538158845], -[-0.5335495742059, -0.3147067548424], -[-0.529031119552, -0.3143709794655], -[-0.5244884131374, -0.3140458910465], -[-0.5199219241009, -0.3137309368098], -[-0.5153321171764, -0.3134256056866], -[-0.5107194514226, -0.3131294245171], -[-0.5060843792652, -0.3128419546376], -[-0.5014273457918, -0.3125627888144], -[-0.4967487882503, -0.3122915484868], -[-0.4920491357096, -0.3120278812879], -[-0.487328808851, -0.311771458813], -[-0.4825882198634, -0.3115219746086], -[-0.47782777242, -0.311279142359], -[-0.4730478617212, -0.3110426942482], -[-0.4682488745872, -0.3108123794797], -[-0.4634311895893, -0.3105879629352], -[-0.4585951772118, -0.3103692239602], -[-0.4537412000354, -0.3101559552608], -[-0.4488696129374, -0.3099479619008], -[-0.4439807633022, -0.3097450603897], -[-0.4390749912399, -0.3095470778508], -[-0.434152629808, -0.3093538512622], -[-0.4292140052357, -0.3091652267633], -[-0.4242594371471, -0.3089810590199], -[-0.4192892387823, -0.3088012106424], -[-0.4143037172156, -0.3086255516527], -[-0.4093031735696, -0.3084539589935], -[-0.404287903224, -0.3082863160775], -[-0.3992581960192, -0.3081225123724], -[-0.3942143364543, -0.3079624430177], -[-0.3891566038791, -0.3078060084715], -[-0.3840852726796, -0.3076531141835], -[-0.3790006124578, -0.3075036702935], -[-0.3739028882048, -0.3073575913506], -[-0.3687923604685, -0.3072147960543], -[-0.3636692855142, -0.3070752070134], -[-0.3585339154804, -0.3069387505221], -[-0.3533864985278, -0.3068053563519], -[-0.3482272789836, -0.3066749575576], -[-0.3430564974795, -0.3065474902971], -[-0.3378743910851, -0.3064228936628], -[-0.3326811934357, -0.306301109524], -[-0.3274771348558, -0.3061820823807], -[-0.3222624424772, -0.3060657592258], -[-0.3170373403531, -0.3059520894165], -[-0.3118020495678, -0.3058410245543], -[-0.3065567883419, -0.3057325183717], -[-0.3013017721341, -0.3056265266269], -[-0.2960372137386, -0.305523007004], -[-0.2907633233795, -0.30542191902], -[-0.285480308801, -0.3053232239369], -[-0.2801883753552, -0.3052268846795], -[-0.2748877260858, -0.3051328657576], -[-0.2695785618095, -0.3050411331931], -[-0.2642610811942, -0.3049516544511], -[-0.2589354808346, -0.3048643983749], -[-0.253601955325, -0.3047793351252], -[-0.24826069733, -0.3046964361219], -[-0.2429118976522, -0.3046156739901], -[-0.2375557452986, -0.3045370225083], -[-0.2321924275438, -0.30446045656], -[-0.2268221299918, -0.3043859520879], -[-0.2214450366359, -0.3043134860501], -[-0.2160613299164, -0.3042430363795], -[-0.2106711907768, -0.3041745819449], -[-0.2052747987182, -0.3041081025139], -[-0.1998723318522, -0.3040435787187], -[-0.1944639669522, -0.303980992023], -[-0.1890498795035, -0.3039203246909], -[-0.1836302437516, -0.3038615597574], -[-0.1782052327496, -0.3038046810006], -[-0.1727750184041, -0.3037496729153], -[-0.1673397715204, -0.3036965206883], -[-0.1618996618458, -0.3036452101744], -[-0.1564548581127, -0.3035957278742], -[-0.1510055280801, -0.3035480609131], -[-0.1455518385743, -0.3035021970213], -[-0.140093955529, -0.3034581245146], -[-0.1346320440242, -0.3034158322773], -[-0.1291662683243, -0.3033753097446], -[-0.1236967919158, -0.3033365468871], -[-0.118223777544, -0.3032995341959], -[-0.112747387249, -0.3032642626684], -[-0.1072677824011, -0.303230723795], -[-0.1017851237358, -0.3031989095468], -[-0.09629957138811, -0.303168812364], -[-0.09081128492614, -0.3031404251447], -[-0.08532042338453, -0.3031137412348], -[-0.07982714529722, -0.3030887544188], -[-0.07433160872983, -0.3030654589106], -[-0.0688339713117, -0.3030438493454], -[-0.06333439026745, -0.3030239207721], -[-0.05783302244835, -0.3030056686466], -[-0.05233002436325, -0.3029890888252], -[-0.04682555220929, -0.3029741775588], -[-0.04131976190234, -0.302960931488], -[-0.03581280910725, -0.302949347638], -[-0.03030484926779, -0.3029394234148], -[-0.02479603763655, -0.3029311566016], -[-0.01928652930459, -0.3029245453556], -[-0.01377647923095, -0.3029195882058], -[-0.008266042272151, -0.3029162840505], -[-0.002755373211517, -0.3029146321561], -[0.002755373211519, -0.3029146321561], -[0.008266042272153, -0.3029162840505], -[0.01377647923095, -0.3029195882058], -[0.01928652930459, -0.3029245453556], -[0.02479603763656, -0.3029311566016], -[0.03030484926779, -0.3029394234148], -[0.03581280910725, -0.302949347638], -[0.04131976190234, -0.302960931488], -[0.04682555220929, -0.3029741775589], -[0.05233002436325, -0.3029890888252], -[0.05783302244835, -0.3030056686466], -[0.06333439026745, -0.3030239207721], -[0.0688339713117, -0.3030438493454], -[0.07433160872983, -0.3030654589106], -[0.07982714529722, -0.3030887544188], -[0.08532042338453, -0.3031137412348], -[0.09081128492614, -0.3031404251447], -[0.09629957138811, -0.303168812364], -[0.1017851237358, -0.3031989095468], -[0.1072677824011, -0.303230723795], -[0.112747387249, -0.3032642626684], -[0.118223777544, -0.3032995341959], -[0.1236967919158, -0.3033365468871], -[0.1291662683243, -0.3033753097446], -[0.1346320440242, -0.3034158322773], -[0.140093955529, -0.3034581245146], -[0.1455518385743, -0.3035021970213], -[0.1510055280801, -0.3035480609131], -[0.1564548581127, -0.3035957278742], -[0.1618996618458, -0.3036452101744], -[0.1673397715204, -0.3036965206883], -[0.1727750184041, -0.3037496729153], -[0.1782052327496, -0.3038046810006], -[0.1836302437516, -0.3038615597574], -[0.1890498795036, -0.3039203246909], -[0.1944639669522, -0.303980992023], -[0.1998723318522, -0.3040435787187], -[0.2052747987182, -0.3041081025139], -[0.2106711907768, -0.3041745819449], -[0.2160613299164, -0.3042430363795], -[0.2214450366359, -0.3043134860501], -[0.2268221299918, -0.3043859520879], -[0.2321924275438, -0.30446045656], -[0.2375557452986, -0.3045370225083], -[0.2429118976522, -0.3046156739901], -[0.24826069733, -0.3046964361219], -[0.253601955325, -0.3047793351252], -[0.2589354808346, -0.3048643983749], -[0.2642610811942, -0.3049516544511], -[0.2695785618095, -0.3050411331931], -[0.2748877260858, -0.3051328657576], -[0.2801883753552, -0.3052268846795], -[0.285480308801, -0.3053232239369], -[0.2907633233795, -0.30542191902], -[0.2960372137386, -0.305523007004], -[0.3013017721341, -0.3056265266269], -[0.3065567883419, -0.3057325183717], -[0.3118020495678, -0.3058410245543], -[0.3170373403531, -0.3059520894165], -[0.3222624424772, -0.3060657592258], -[0.3274771348558, -0.3061820823807], -[0.3326811934357, -0.306301109524], -[0.3378743910851, -0.3064228936628], -[0.3430564974795, -0.3065474902971], -[0.3482272789836, -0.3066749575576], -[0.3533864985278, -0.3068053563519], -[0.3585339154804, -0.3069387505221], -[0.3636692855142, -0.3070752070134], -[0.3687923604685, -0.3072147960543], -[0.3739028882048, -0.3073575913506], -[0.3790006124578, -0.3075036702935], -[0.3840852726796, -0.3076531141835], -[0.3891566038791, -0.3078060084715], -[0.3942143364543, -0.3079624430177], -[0.3992581960192, -0.3081225123724], -[0.404287903224, -0.3082863160775], -[0.4093031735696, -0.3084539589935], -[0.4143037172156, -0.3086255516527], -[0.4192892387823, -0.3088012106424], -[0.4242594371471, -0.3089810590199], -[0.4292140052357, -0.3091652267633], -[0.434152629808, -0.3093538512622], -[0.4390749912399, -0.3095470778508], -[0.4439807633023, -0.3097450603897], -[0.4488696129374, -0.3099479619008], -[0.4537412000354, -0.3101559552608], -[0.4585951772118, -0.3103692239602], -[0.4634311895893, -0.3105879629352], -[0.4682488745872, -0.3108123794797], -[0.4730478617212, -0.3110426942482], -[0.4778277724199, -0.311279142359], -[0.4825882198633, -0.3115219746086], -[0.487328808851, -0.311771458813], -[0.4920491357096, -0.3120278812879], -[0.4967487882502, -0.3122915484868], -[0.5014273457918, -0.3125627888144], -[0.5060843792652, -0.3128419546376], -[0.5107194514226, -0.3131294245171], -[0.5153321171764, -0.3134256056866], -[0.5199219241009, -0.3137309368098], -[0.5244884131374, -0.3140458910465], -[0.5290311195522, -0.3143709794654], -[0.5335495742066, -0.3147067548422], -[0.5380433052135, -0.3150538158847], -[0.5425118400793, -0.315412811927], -[0.5469547084227, -0.3157844481426], -[0.5513714454333, -0.3161694913106], -[0.5557615962123, -0.3165687761782], -[0.5601247212063, -0.3169832124435], -[0.5644604029676, -0.3174137923644], -[0.5687682545239, -0.3178615989724], -[0.5730479296844, -0.3183278148192], -[0.5772991356555, -0.3188137311192], -[0.5815216483729, -0.3193207570508], -[0.5857153310023, -0.3198504288268], -[0.5898801559881, -0.3204044179991], -[0.5940162310188, -0.3209845381793], -[0.5981238290784, -0.3215927490731], -[0.6022034224387, -0.3222311563952], -[0.6062557199697, -0.3229020058479], -[0.6102813392721, -0.3236070990499], -[-0.6082779135742, -0.3201371101297], -[-0.6042049349687, -0.3194243835576], -[-0.6001068654897, -0.3187444064081], -[-0.5959831872434, -0.3180956044776], -[-0.5918332336875, -0.3174759550791], -[-0.5876565421802, -0.3168835511992], -[-0.5834528243023, -0.3163166073886], -[-0.5792219384403, -0.3157734609269], -[-0.5749638651528, -0.3152525696051], -[-0.5706786855655, -0.3147525071471], -[-0.5663665626797, -0.3142719571875], -[-0.5620277254561, -0.3138097063931], -[-0.5576624553825, -0.3133646372216], -[-0.553271075235, -0.3129357206406], -[-0.5488539397381, -0.3125220090286], -[-0.5444114278478, -0.3121226293991], -[-0.5399439364079, -0.3117367770318], -[-0.5354518749569, -0.3113637095513], -[-0.5309356615022, -0.3110027414672], -[-0.526395719085, -0.310653239172], -[-0.5218324730145, -0.310314616376], -[-0.5172463486447, -0.3099863299547], -[-0.5126377696034, -0.3096678761827], -[-0.50800715639, -0.3093587873195], -[-0.5033549252777, -0.3090586285204], -[-0.4986814874652, -0.3087669950411], -[-0.4939872484314, -0.3084835097091], -[-0.4892726074568, -0.3082078206356], -[-0.484537957281, -0.3079395991444], -[-0.4797836838697, -0.3076785378963], -[-0.4750101662711, -0.3074243491889], -[-0.4702177765448, -0.3071767634139], -[-0.4654068797486, -0.3069355276565], -[-0.4605778339715, -0.3067004044224], -[-0.4557309904034, -0.3064711704789], -[-0.4508666934335, -0.3062476157994], -[-0.4459852807719, -0.3060295426006], -[-0.4410870835871, -0.3058167644635], -[-0.4361724266574, -0.3056091055291], -[-0.4312416285306, -0.3054063997634], -[-0.4262950016907, -0.3052084902821], -[-0.4213328527282, -0.305015228733], -[-0.4163554825121, -0.3048264747267], -[-0.4113631863634, -0.3046420953145], -[-0.4063562542268, -0.3044619645066], -[-0.4013349708416, -0.3042859628291], -[-0.3962996159091, -0.3041139769136], -[-0.3912504642582, -0.3039458991198], -[-0.3861877860062, -0.3037816271851], -[-0.3811118467167, -0.3036210639009], -[-0.3760229075526, -0.303464116812], -[-0.3709212254257, -0.3033106979385], -[-0.3658070531412, -0.303160723517], -[-0.3606806395378, -0.3030141137597], -[-0.3555422296237, -0.3028707926312], -[-0.3503920647081, -0.3027306876397], -[-0.3452303825284, -0.3025937296427], -[-0.3400574173727, -0.3024598526662], -[-0.3348734001983, -0.3023289937348], -[-0.3296785587467, -0.3022010927137], -[-0.3244731176538, -0.302076092161], -[-0.3192572985564, -0.301953937189], -[-0.3140313201956, -0.3018345753343], -[-0.3087953985156, -0.3017179564362], -[-0.3035497467601, -0.3016040325227], -[-0.2982945755644, -0.3014927577032], -[-0.2930300930446, -0.3013840880682], -[-0.2877565048845, -0.301277981594], -[-0.2824740144181, -0.3011743980545], -[-0.2771828227101, -0.3010732989367], -[-0.2718831286341, -0.3009746473623], -[-0.266575128947, -0.3008784080135], -[-0.2612590183619, -0.3007845470623], -[-0.2559349896185, -0.3006930321049], -[-0.2506032335503, -0.3006038320995], -[-0.2452639391512, -0.3005169173071], -[-0.2399172936383, -0.3004322592357], -[-0.2345634825142, -0.3003498305887], -[-0.2292026896265, -0.3002696052142], -[-0.2238350972256, -0.3001915580587], -[-0.2184608860212, -0.3001156651228], -[-0.2130802352368, -0.3000419034188], -[-0.2076933226625, -0.2999702509313], -[-0.2023003247068, -0.2999006865795], -[-0.1969014164466, -0.2998331901819], -[-0.1914967716758, -0.2997677424222], -[-0.1860865629531, -0.2997043248178], -[-0.1806709616478, -0.2996429196896], -[-0.175250137985, -0.2995835101331], -[-0.16982426109, -0.299526079992], -[-0.1643934990305, -0.299470613832], -[-0.1589580188589, -0.2994170969169], -[-0.1535179866531, -0.2993655151858], -[-0.1480735675569, -0.2993158552313], -[-0.1426249258185, -0.2992681042789], -[-0.1371722248297, -0.299222250168], -[-0.1317156271628, -0.2991782813334], -[-0.1262552946081, -0.299136186788], -[-0.1207913882094, -0.2990959561068], -[-0.1153240683004, -0.2990575794114], -[-0.1098534945389, -0.2990210473558], -[-0.1043798259417, -0.2989863511124], -[-0.0989032209181, -0.2989534823598], -[-0.09342383730334, -0.2989224332707], -[-0.08794183239148, -0.2988931965005], -[-0.08245736296777, -0.2988657651776], -[-0.07697058534061, -0.2988401328927], -[-0.0714816553732, -0.2988162936908], -[-0.06599072851472, -0.2987942420624], -[-0.0604979598313, -0.2987739729357], -[-0.05500350403661, -0.29875548167], -[-0.04950751552216, -0.2987387640491], -[-0.04401014838741, -0.2987238162753], -[-0.03851155646959, -0.2987106349646], -[-0.03301189337337, -0.2986992171417], -[-0.02751131250026, -0.2986895602363], -[-0.02200996707806, -0.2986816620795], -[-0.01650801018981, -0.2986755209003], -[-0.01100559480306, -0.2986711353241], -[-0.005502873798718, -0.2986685043703], -[-2.050926913367e-14, -0.298667627451], -[0.005502873798721, -0.2986685043703], -[0.01100559480306, -0.2986711353241], -[0.01650801018982, -0.2986755209004], -[0.02200996707806, -0.2986816620795], -[0.02751131250032, -0.2986895602366], -[0.03301189337337, -0.2986992171417], -[0.0385115564696, -0.2987106349646], -[0.04401014838741, -0.2987238162753], -[0.04950751552217, -0.2987387640491], -[0.05500350403661, -0.29875548167], -[0.0604979598313, -0.2987739729357], -[0.06599072851472, -0.2987942420624], -[0.0714816553732, -0.2988162936908], -[0.07697058534062, -0.2988401328927], -[0.08245736296778, -0.2988657651776], -[0.08794183239149, -0.2988931965005], -[0.09342383730334, -0.2989224332707], -[0.0989032209181, -0.2989534823598], -[0.1043798259417, -0.2989863511124], -[0.1098534945389, -0.2990210473558], -[0.1153240683004, -0.2990575794114], -[0.1207913882094, -0.2990959561068], -[0.1262552946081, -0.299136186788], -[0.1317156271628, -0.2991782813334], -[0.1371722248297, -0.299222250168], -[0.1426249258185, -0.2992681042789], -[0.1480735675569, -0.2993158552313], -[0.1535179866531, -0.2993655151858], -[0.1589580188589, -0.2994170969169], -[0.1643934990305, -0.299470613832], -[0.16982426109, -0.299526079992], -[0.175250137985, -0.2995835101331], -[0.1806709616478, -0.2996429196896], -[0.1860865629531, -0.2997043248178], -[0.1914967716759, -0.2997677424222], -[0.1969014164466, -0.2998331901819], -[0.2023003247068, -0.2999006865795], -[0.2076933226625, -0.2999702509313], -[0.2130802352368, -0.3000419034188], -[0.2184608860212, -0.3001156651228], -[0.2238350972256, -0.3001915580587], -[0.2292026896265, -0.3002696052142], -[0.2345634825142, -0.3003498305887], -[0.2399172936383, -0.3004322592357], -[0.2452639391512, -0.3005169173071], -[0.2506032335503, -0.3006038320995], -[0.2559349896185, -0.3006930321049], -[0.2612590183619, -0.3007845470623], -[0.266575128947, -0.3008784080135], -[0.2718831286341, -0.3009746473623], -[0.2771828227101, -0.3010732989367], -[0.2824740144181, -0.3011743980545], -[0.2877565048845, -0.301277981594], -[0.2930300930446, -0.3013840880682], -[0.2982945755644, -0.3014927577032], -[0.3035497467601, -0.3016040325227], -[0.3087953985156, -0.3017179564362], -[0.3140313201956, -0.3018345753343], -[0.3192572985564, -0.301953937189], -[0.3244731176538, -0.302076092161], -[0.3296785587467, -0.3022010927137], -[0.3348734001983, -0.3023289937348], -[0.3400574173727, -0.3024598526662], -[0.3452303825284, -0.3025937296427], -[0.3503920647081, -0.3027306876397], -[0.3555422296237, -0.3028707926312], -[0.3606806395378, -0.3030141137597], -[0.3658070531412, -0.303160723517], -[0.3709212254258, -0.3033106979385], -[0.3760229075526, -0.303464116812], -[0.3811118467167, -0.3036210639009], -[0.3861877860062, -0.3037816271851], -[0.3912504642582, -0.3039458991198], -[0.3962996159091, -0.3041139769136], -[0.4013349708416, -0.3042859628291], -[0.4063562542268, -0.3044619645066], -[0.4113631863634, -0.3046420953145], -[0.4163554825121, -0.3048264747267], -[0.4213328527282, -0.305015228733], -[0.4262950016908, -0.3052084902821], -[0.4312416285306, -0.3054063997634], -[0.4361724266574, -0.3056091055291], -[0.4410870835871, -0.3058167644635], -[0.4459852807719, -0.3060295426006], -[0.4508666934335, -0.3062476157994], -[0.4557309904034, -0.3064711704789], -[0.4605778339715, -0.3067004044224], -[0.4654068797486, -0.3069355276565], -[0.4702177765448, -0.3071767634139], -[0.4750101662711, -0.3074243491889], -[0.4797836838697, -0.3076785378963], -[0.484537957281, -0.3079395991444], -[0.4892726074566, -0.3082078206356], -[0.4939872484312, -0.3084835097092], -[0.4986814874652, -0.3087669950411], -[0.5033549252777, -0.3090586285204], -[0.50800715639, -0.3093587873195], -[0.5126377696034, -0.3096678761827], -[0.5172463486447, -0.3099863299547], -[0.5218324730145, -0.3103146163759], -[0.5263957190851, -0.310653239172], -[0.5309356615025, -0.311002741467], -[0.5354518749576, -0.311363709551], -[0.5399439364076, -0.3117367770319], -[0.5444114278476, -0.3121226293992], -[0.548853939738, -0.3125220090286], -[0.553271075235, -0.3129357206406], -[0.5576624553825, -0.3133646372216], -[0.5620277254561, -0.3138097063931], -[0.5663665626797, -0.3142719571875], -[0.5706786855656, -0.314752507147], -[0.5749638651528, -0.3152525696051], -[0.5792219384396, -0.3157734609276], -[0.5834528243023, -0.3163166073886], -[0.5876565421769, -0.3168835512032], -[0.5918332336868, -0.3174759550801], -[0.5959831872435, -0.3180956044774], -[0.6001068654898, -0.3187444064079], -[0.6042049349686, -0.3194243835577], -[0.6082779135558, -0.3201371101835], -[-0.606249312228, -0.3166237708052], -[-0.6021317219229, -0.3159040480353], -[-0.5979903320568, -0.3152157630991], -[-0.5938248429027, -0.3145574983308], -[-0.5896346284114, -0.313927421333], -[-0.5854192394686, -0.3133237963268], -[-0.5811783800136, -0.3127449897201], -[-0.5769118847412, -0.3121894718537], -[-0.5726196987328, -0.3116558160309], -[-0.5683018594023, -0.3111426954331], -[-0.5639584806117, -0.3106488787717], -[-0.5595897389518, -0.3101732250786], -[-0.5551958619901, -0.3097146780601], -[-0.5507771182886, -0.3092722602907], -[-0.5463338089836, -0.3088450674459], -[-0.5418662607225, -0.3084322627092], -[-0.5373748197662, -0.3080330714411], -[-0.5328598470922, -0.3076467761588], -[-0.5283217143311, -0.3072727118578], -[-0.5237608004265, -0.3069102616756], -[-0.5191774888837, -0.3065588528999], -[-0.5145721655222, -0.3062179533048], -[-0.5099452166458, -0.3058870677993], -[-0.5052970275614, -0.3055657353676], -[-0.5006279813873, -0.3052535262796], -[-0.4959384581027, -0.3049500395504], -[-0.4912288337972, -0.3046549006284], -[-0.4864994800867, -0.3043677592903], -[-0.4817507636646, -0.3040882877262], -[-0.4769830459679, -0.3038161787963], -[-0.4721966829362, -0.3035511444423], -[-0.467392024847, -0.3032929142404], -[-0.4625694162144, -0.303041234082], -[-0.4577291957389, -0.3027958649684], -[-0.4528716962994, -0.302556581911], -[-0.4479972449791, -0.3023231729249], -[-0.4431061631181, -0.3020954381084], -[-0.4381987663887, -0.3018731887991], -[-0.4332753648869, -0.3016562468005], -[-0.4283362632378, -0.3014444436718], -[-0.4233817607115, -0.3012376200749], -[-0.4184121513459, -0.3010356251744], -[-0.4134277240753, -0.300838316084], -[-0.4084287628627, -0.3006455573574], -[-0.4034155468346, -0.3004572205171], -[-0.398388350416, -0.3002731836203], -[-0.3933474434663, -0.3000933308565], -[-0.3882930914138, -0.2999175521755], -[-0.3832255553897, -0.2997457429426], -[-0.3781450923586, -0.2995778036187], -[-0.373051955249, -0.2994136394636], -[-0.3679463930791, -0.2992531602594], -[-0.3628286510808, -0.2990962800544], -[-0.3576989708209, -0.2989429169238], -[-0.3525575903186, -0.298792992747], -[-0.3474047441602, -0.2986464329997], -[-0.3422406636103, -0.2985031665604], -[-0.3370655767204, -0.2983631255289], -[-0.3318797084332, -0.2982262450571], -[-0.3266832806849, -0.2980924631902], -[-0.3214765125036, -0.2979617207188], -[-0.3162596201048, -0.2978339610394], -[-0.3110328169838, -0.2977091300242], -[-0.3057963140058, -0.2975871758985], -[-0.3005503194922, -0.2974680491261], -[-0.2952950393044, -0.2973517023007], -[-0.2900306769259, -0.2972380900452], -[-0.2847574335399, -0.2971271689154], -[-0.2794755081066, -0.2970188973104], -[-0.2741850974362, -0.296913235388], -[-0.2688863962607, -0.2968101449846], -[-0.2635795973031, -0.2967095895399], -[-0.2582648913445, -0.2966115340264], -[-0.2529424672891, -0.2965159448817], -[-0.2476125122273, -0.2964227899457], -[-0.2422752114969, -0.2963320384008], -[-0.2369307487423, -0.2962436607151], -[-0.2315793059723, -0.2961576285896], -[-0.2262210636161, -0.2960739149071], -[-0.2208562005773, -0.2959924936849], -[-0.2154848942871, -0.2959133400295], -[-0.2101073207557, -0.295836430094], -[-0.2047236546221, -0.2957617410372], -[-0.1993340692028, -0.2956892509862], -[-0.1939387365395, -0.295618938999], -[-0.1885378274448, -0.2955507850313], -[-0.1831315115479, -0.2954847699034], -[-0.177719957338, -0.2954208752693], -[-0.1723033322078, -0.2953590835881], -[-0.1668818024946, -0.2952993780961], -[-0.1614555335223, -0.2952417427808], -[-0.1560246896406, -0.295186162356], -[-0.1505894342651, -0.2951326222387], -[-0.1451499299147, -0.2950811085271], -[-0.1397063382504, -0.2950316079793], -[-0.1342588201111, -0.2949841079939], -[-0.1288075355509, -0.2949385965913], -[-0.1233526438739, -0.294895062396], -[-0.1178943036695, -0.2948534946203], -[-0.1124326728468, -0.2948138830483], -[-0.1069679086684, -0.2947762180219], -[-0.1015001677835, -0.2947404904261], -[-0.09602960626116, -0.2947066916768], -[-0.09055637962229, -0.2946748137084], -[-0.08508064287176, -0.2946448489626], -[-0.07960255052991, -0.2946167903777], -[-0.07412225666368, -0.2945906313791], -[-0.06863991491749, -0.2945663658696], -[-0.06315567854373, -0.2945439882219], -[-0.05766970043275, -0.2945234932699], -[-0.05218213314321, -0.2945048763027], -[-0.04669312893148, -0.2944881330575], -[-0.04120283978094, -0.2944732597136], -[-0.03571141743159, -0.2944602528881], -[-0.03021901340889, -0.2944491096306], -[-0.02472577905274, -0.2944398274194], -[-0.01923186554627, -0.2944324041585], -[-0.01373742394447, -0.2944268381743], -[-0.008242605202754, -0.2944231282136], -[-0.00274756020551, -0.2944212734417], -[0.002747560205512, -0.2944212734417], -[0.008242605202756, -0.2944231282136], -[0.01373742394447, -0.2944268381743], -[0.01923186554628, -0.2944324041585], -[0.02472577905275, -0.2944398274194], -[0.03021901340889, -0.2944491096306], -[0.03571141743159, -0.2944602528881], -[0.04120283978095, -0.2944732597136], -[0.04669312893148, -0.2944881330575], -[0.05218213314329, -0.2945048763029], -[0.05766970043275, -0.2945234932699], -[0.06315567854364, -0.2945439882217], -[0.06863991491749, -0.2945663658696], -[0.07412225666368, -0.2945906313791], -[0.07960255052991, -0.2946167903777], -[0.08508064287177, -0.2946448489626], -[0.09055637962229, -0.2946748137084], -[0.09602960626116, -0.2947066916768], -[0.1015001677835, -0.2947404904261], -[0.1069679086684, -0.2947762180219], -[0.1124326728468, -0.2948138830483], -[0.1178943036695, -0.2948534946203], -[0.1233526438739, -0.294895062396], -[0.1288075355509, -0.2949385965913], -[0.1342588201111, -0.2949841079939], -[0.1397063382504, -0.2950316079793], -[0.1451499299147, -0.2950811085271], -[0.1505894342651, -0.2951326222387], -[0.1560246896406, -0.295186162356], -[0.1614555335223, -0.2952417427808], -[0.1668818024946, -0.2952993780961], -[0.1723033322078, -0.2953590835881], -[0.177719957338, -0.2954208752693], -[0.1831315115479, -0.2954847699034], -[0.1885378274448, -0.2955507850313], -[0.1939387365395, -0.295618938999], -[0.1993340692028, -0.2956892509862], -[0.2047236546221, -0.2957617410372], -[0.2101073207557, -0.295836430094], -[0.2154848942871, -0.2959133400295], -[0.2208562005773, -0.2959924936849], -[0.2262210636161, -0.2960739149071], -[0.2315793059723, -0.2961576285896], -[0.2369307487423, -0.2962436607151], -[0.2422752114969, -0.2963320384008], -[0.2476125122273, -0.2964227899457], -[0.2529424672891, -0.2965159448817], -[0.2582648913445, -0.2966115340264], -[0.2635795973031, -0.2967095895399], -[0.2688863962607, -0.2968101449846], -[0.2741850974362, -0.296913235388], -[0.2794755081066, -0.2970188973104], -[0.2847574335399, -0.2971271689154], -[0.2900306769259, -0.2972380900452], -[0.2952950393044, -0.2973517023007], -[0.3005503194922, -0.2974680491261], -[0.3057963140058, -0.2975871758985], -[0.3110328169838, -0.2977091300242], -[0.3162596201048, -0.2978339610394], -[0.3214765125036, -0.2979617207188], -[0.326683280685, -0.2980924631902], -[0.3318797084332, -0.2982262450571], -[0.3370655767204, -0.2983631255289], -[0.3422406636103, -0.2985031665604], -[0.3474047441602, -0.2986464329997], -[0.3525575903186, -0.298792992747], -[0.3576989708209, -0.2989429169238], -[0.3628286510808, -0.2990962800544], -[0.3679463930791, -0.2992531602594], -[0.373051955249, -0.2994136394636], -[0.3781450923586, -0.2995778036187], -[0.3832255553896, -0.2997457429426], -[0.3882930914138, -0.2999175521755], -[0.3933474434663, -0.3000933308565], -[0.398388350416, -0.3002731836203], -[0.4034155468346, -0.3004572205171], -[0.4084287628627, -0.3006455573574], -[0.4134277240753, -0.300838316084], -[0.4184121513459, -0.3010356251744], -[0.4233817607115, -0.3012376200749], -[0.4283362632378, -0.3014444436718], -[0.4332753648869, -0.3016562468006], -[0.4381987663887, -0.3018731887991], -[0.4431061631181, -0.3020954381084], -[0.4479972449791, -0.3023231729249], -[0.4528716962994, -0.302556581911], -[0.4577291957389, -0.3027958649684], -[0.4625694162144, -0.303041234082], -[0.467392024847, -0.3032929142404], -[0.4721966829362, -0.3035511444423], -[0.4769830459679, -0.3038161787963], -[0.4817507636646, -0.3040882877262], -[0.4864994800868, -0.3043677592902], -[0.4912288337975, -0.3046549006283], -[0.4959384581028, -0.3049500395504], -[0.5006279813873, -0.3052535262796], -[0.5052970275614, -0.3055657353676], -[0.5099452166458, -0.3058870677993], -[0.5145721655222, -0.3062179533048], -[0.5191774888837, -0.3065588528999], -[0.5237608004265, -0.3069102616756], -[0.5283217143311, -0.3072727118578], -[0.5328598470916, -0.307646776159], -[0.5373748197659, -0.3080330714413], -[0.5418662607227, -0.308432262709], -[0.5463338089837, -0.3088450674458], -[0.5507771182886, -0.3092722602907], -[0.5551958619901, -0.3097146780601], -[0.5595897389518, -0.3101732250786], -[0.5639584806117, -0.3106488787717], -[0.5683018594022, -0.3111426954332], -[0.5726196987323, -0.3116558160313], -[0.5769118847398, -0.3121894718552], -[0.5811783800148, -0.3127449897187], -[0.5854192394637, -0.3133237963331], -[0.5896346284095, -0.3139274213358], -[0.5938248429022, -0.3145574983317], -[0.5979903320568, -0.3152157630992], -[0.6021317219229, -0.3159040480353], -[0.6062493122029, -0.3166237708797], -[-0.6041975495571, -0.3130696003107], -[-0.6000370367193, -0.3123430373388], -[-0.5958545468968, -0.3116471784544], -[-0.5916493179466, -0.3109802824283], -[-0.5874207620545, -0.3103406805613], -[-0.5831684459149, -0.3097267856594], -[-0.5788920713481, -0.3091370971457], -[-0.5745914569315, -0.3085702031959], -[-0.5702665211333, -0.3080247804779], -[-0.5659172670805, -0.3074995922094], -[-0.5615437690395, -0.3069934850132], -[-0.5571461605644, -0.3065053849825], -[-0.5527246242143, -0.3060342932745], -[-0.5482793827014, -0.3055792814754], -[-0.5438106913251, -0.3051394869097], -[-0.5393188315387, -0.3047141080201], -[-0.5348041055081, -0.3043023999025], -[-0.5302668315242, -0.3039036700526], -[-0.5257073401551, -0.3035172743534], -[-0.5211259710261, -0.3031426133233], -[-0.516523070135, -0.3027791286277], -[-0.511898987622, -0.3024262998508], -[-0.5072540759237, -0.302083641519], -[-0.5025886882522, -0.3017507003629], -[-0.4979031773465, -0.3014270528048], -[-0.4931978944543, -0.3011123026552], -[-0.4884731885066, -0.3008060790041], -[-0.4837294054541, -0.30050803429], -[-0.4789668877404, -0.3002178425346], -[-0.4741859738872, -0.2999351977264], -[-0.4693869981754, -0.2996598123421], -[-0.4645702904055, -0.2993914159936], -[-0.459736175723, -0.2991297541882], -[-0.4548849744999, -0.2988745871928], -[-0.4500170022606, -0.2986256889926], -[-0.4451325696456, -0.2983828463357], -[-0.4402319824066, -0.2981458578553], -[-0.4353155414262, -0.2979145332634], -[-0.4303835427587, -0.297688692609], -[-0.4254362776873, -0.2974681655947], -[-0.4204740327952, -0.2972527909477], -[-0.4154970900464, -0.2970424158391], -[-0.4105057268755, -0.2968368953475], -[-0.405500216284, -0.2966360919643], -[-0.40048082694, -0.2964398751347], -[-0.3954478232832, -0.2962481208344], -[-0.39040146563, -0.2960607111756], -[-0.3853420102818, -0.295877534043], -[-0.3802697096323, -0.2956984827548], -[-0.3751848122754, -0.2955234557483], -[-0.3700875631126, -0.2953523562874], -[-0.3649782034583, -0.2951850921901], -[-0.3598569711454, -0.2950215755747], -[-0.3547241006271, -0.2948617226233], -[-0.3495798230786, -0.2947054533609], -[-0.3444243664961, -0.2945526914491], -[-0.3392579557928, -0.2944033639935], -[-0.3340808128943, -0.2942574013633], -[-0.32889315683, -0.2941147370223], -[-0.3236952038234, -0.2939753073712], -[-0.3184871673791, -0.2938390515986], -[-0.3132692583682, -0.2937059115427], -[-0.308041685111, -0.2935758315604], -[-0.3028046534571, -0.2934487584044], -[-0.2975583668638, -0.2933246411083], -[-0.2923030264719, -0.2932034308779], -[-0.2870388311794, -0.2930850809894], -[-0.281765977713, -0.2929695466931], -[-0.2764846606977, -0.2928567851228], -[-0.2711950727245, -0.2927467552108], -[-0.2658974044155, -0.2926394176073], -[-0.2605918444879, -0.292534734604], -[-0.2552785798159, -0.2924326700633], -[-0.2499577954907, -0.29233318935], -[-0.244629674879, -0.2922362592672], -[-0.2392943996796, -0.2921418479965], -[-0.2339521499789, -0.2920499250406], -[-0.2286031043046, -0.2919604611687], -[-0.2232474396779, -0.2918734283665], -[-0.2178853316644, -0.2917887997867], -[-0.212516954424, -0.2917065497041], -[-0.2071424807586, -0.2916266534717], -[-0.20176208216, -0.2915490874799], -[-0.1963759288551, -0.2914738291178], -[-0.1909841898513, -0.291400856736], -[-0.18558703298, -0.2913301496122], -[-0.1801846249392, -0.2912616879179], -[-0.1747771313358, -0.2911954526872], -[-0.1693647167259, -0.2911314257875], -[-0.1639475446552, -0.291069589891], -[-0.1585257776978, -0.2910099284485], -[-0.1530995774947, -0.2909524256644], -[-0.1476691047917, -0.2908970664727], -[-0.1422345194755, -0.2908438365146], -[-0.1367959806106, -0.2907927221175], -[-0.1313536464744, -0.2907437102746], -[-0.1259076745924, -0.2906967886263], -[-0.1204582217722, -0.2906519454423], -[-0.1150054441373, -0.2906091696045], -[-0.1095494971608, -0.2905684505918], -[-0.1040905356976, -0.2905297784644], -[-0.09862871401663, -0.2904931438505], -[-0.09316418583336, -0.2904585379329], -[-0.08769710434057, -0.2904259524367], -[-0.0822276222397, -0.2903953796183], -[-0.07675589177147, -0.2903668122542], -[-0.07128206474622, -0.2903402436313], -[-0.06580629257402, -0.290315667538], -[-0.06032872629437, -0.2902930782557], -[-0.0548495166057, -0.2902724705507], -[-0.04936881389466, -0.2902538396676], -[-0.04388676826509, -0.2902371813227], -[-0.03840352956695, -0.2902224916986], -[-0.03291924742485, -0.2902097674384], -[-0.02743407126669, -0.2901990056421], -[-0.02194815035189, -0.2901902038622], -[-0.01646163379974, -0.2901833601005], -[-0.01097467061749, -0.2901784728056], -[-0.005487409728453, -0.290175540871], -[1.210174265652e-15, -0.2901745636331], -[0.005487409728455, -0.2901755408709], -[0.01097467061749, -0.2901784728056], -[0.01646163379974, -0.2901833601005], -[0.02194815035189, -0.2901902038622], -[0.02743407126669, -0.2901990056421], -[0.03291924742486, -0.2902097674384], -[0.03840352956695, -0.2902224916986], -[0.0438867682651, -0.2902371813227], -[0.04936881389466, -0.2902538396676], -[0.0548495166057, -0.2902724705507], -[0.06032872629437, -0.2902930782557], -[0.06580629257403, -0.290315667538], -[0.07128206474622, -0.2903402436313], -[0.07675589177147, -0.2903668122542], -[0.08222762223971, -0.2903953796183], -[0.08769710434058, -0.2904259524367], -[0.09316418583336, -0.2904585379329], -[0.09862871401663, -0.2904931438505], -[0.1040905356976, -0.2905297784644], -[0.1095494971608, -0.2905684505918], -[0.1150054441373, -0.2906091696045], -[0.1204582217722, -0.2906519454423], -[0.1259076745924, -0.2906967886263], -[0.1313536464744, -0.2907437102746], -[0.1367959806106, -0.2907927221175], -[0.1422345194755, -0.2908438365146], -[0.1476691047917, -0.2908970664727], -[0.1530995774947, -0.2909524256644], -[0.1585257776978, -0.2910099284485], -[0.1639475446552, -0.291069589891], -[0.1693647167259, -0.2911314257875], -[0.1747771313358, -0.2911954526872], -[0.1801846249392, -0.2912616879179], -[0.18558703298, -0.2913301496122], -[0.1909841898513, -0.291400856736], -[0.1963759288551, -0.2914738291178], -[0.20176208216, -0.2915490874799], -[0.2071424807586, -0.2916266534717], -[0.212516954424, -0.2917065497041], -[0.2178853316644, -0.2917887997867], -[0.2232474396779, -0.2918734283665], -[0.2286031043046, -0.2919604611687], -[0.2339521499789, -0.2920499250406], -[0.2392943996796, -0.2921418479965], -[0.244629674879, -0.2922362592672], -[0.2499577954907, -0.29233318935], -[0.2552785798159, -0.2924326700633], -[0.2605918444879, -0.292534734604], -[0.2658974044155, -0.2926394176073], -[0.2711950727245, -0.2927467552108], -[0.2764846606977, -0.2928567851228], -[0.281765977713, -0.2929695466931], -[0.2870388311794, -0.2930850809894], -[0.2923030264719, -0.2932034308779], -[0.2975583668638, -0.2933246411083], -[0.3028046534571, -0.2934487584044], -[0.308041685111, -0.2935758315604], -[0.3132692583682, -0.2937059115427], -[0.3184871673791, -0.2938390515986], -[0.3236952038234, -0.2939753073712], -[0.32889315683, -0.2941147370223], -[0.3340808128943, -0.2942574013633], -[0.3392579557928, -0.2944033639935], -[0.3444243664961, -0.2945526914491], -[0.3495798230786, -0.2947054533609], -[0.3547241006271, -0.2948617226233], -[0.3598569711454, -0.2950215755747], -[0.3649782034583, -0.2951850921901], -[0.3700875631126, -0.2953523562874], -[0.3751848122754, -0.2955234557483], -[0.3802697096323, -0.2956984827548], -[0.3853420102818, -0.295877534043], -[0.39040146563, -0.2960607111756], -[0.3954478232832, -0.2962481208344], -[0.40048082694, -0.2964398751347], -[0.405500216284, -0.2966360919643], -[0.4105057268755, -0.2968368953475], -[0.4154970900464, -0.2970424158391], -[0.4204740327952, -0.2972527909477], -[0.4254362776873, -0.2974681655947], -[0.4303835427587, -0.297688692609], -[0.4353155414262, -0.2979145332634], -[0.4402319824066, -0.2981458578553], -[0.4451325696456, -0.2983828463357], -[0.4500170022606, -0.2986256889926], -[0.4548849744999, -0.2988745871928], -[0.459736175723, -0.2991297541882], -[0.4645702904055, -0.2993914159936], -[0.4693869981754, -0.2996598123421], -[0.4741859738872, -0.2999351977264], -[0.4789668877404, -0.3002178425346], -[0.4837294054541, -0.30050803429], -[0.4884731885065, -0.3008060790041], -[0.4931978944542, -0.3011123026553], -[0.4979031773466, -0.3014270528047], -[0.5025886882522, -0.3017507003629], -[0.5072540759237, -0.302083641519], -[0.511898987622, -0.3024262998509], -[0.516523070135, -0.3027791286277], -[0.5211259710261, -0.3031426133233], -[0.525707340155, -0.3035172743535], -[0.530266831524, -0.3039036700527], -[0.5348041055081, -0.3043023999025], -[0.5393188315391, -0.3047141080199], -[0.5438106913257, -0.3051394869093], -[0.5482793827016, -0.3055792814753], -[0.5527246242143, -0.3060342932745], -[0.5571461605644, -0.3065053849825], -[0.5615437690395, -0.3069934850132], -[0.5659172670805, -0.3074995922094], -[0.5702665211331, -0.3080247804781], -[0.5745914569312, -0.3085702031963], -[0.5788920713486, -0.3091370971451], -[0.5831684459171, -0.3097267856564], -[0.5874207620526, -0.3103406805642], -[0.5916493179461, -0.3109802824293], -[0.5958545468967, -0.3116471784545], -[0.6000370367193, -0.3123430373387], -[0.6041975495571, -0.3130696003107], -[-0.6021225195859, -0.3094755429736], -[-0.5979217539672, -0.3087431924172], -[-0.5937001864986, -0.3080404216922], -[-0.589457113309, -0.3073656423613], -[-0.5851919823974, -0.3067173276026], -[-0.5809043774992, -0.306094019945], -[-0.5765940021573, -0.305494335978], -[-0.5722606645386, -0.3049169685676], -[-0.5679042633106, -0.3043606871414], -[-0.5635247747613, -0.3038243365121], -[-0.5591222412343, -0.3033068346412], -[-0.5546967608714, -0.3028071696715], -[-0.550248478607, -0.3023243964889], -[-0.5457775783238, -0.3018576330183], -[-0.5412842760671, -0.3014060564044], -[-0.5367688142056, -0.3009688991921], -[-0.5322314564334, -0.3005454455851], -[-0.5276724835065, -0.300135027838], -[-0.5230921896207, -0.2997370228188], -[-0.5184908793432, -0.2993508487612], -[-0.5138688650224, -0.2989759622193], -[-0.5092264646068, -0.2986118552254], -[-0.5045639998148, -0.2982580526493], -[-0.4998817946042, -0.2979141097527], -[-0.495180173896, -0.297579609929], -[-0.4904594625149, -0.297254162619], -[-0.4857199843145, -0.2969374013913], -[-0.4809620614578, -0.2966289821755], -[-0.4761860138313, -0.2963285816373], -[-0.4713921585693, -0.2960358956848], -[-0.4665808096742, -0.2957506380956], -[-0.4617522777164, -0.2954725392542], -[-0.4569068696009, -0.2952013449912], -[-0.4520448883918, -0.2949368155154], -[-0.4471666331835, -0.2946787244315], -[-0.4422723990122, -0.2944268578349], -[-0.4373624768015, -0.2941810134779], -[-0.4324371533351, -0.2939410000015], -[-0.4274967112531, -0.293706636226], -[-0.4225414290676, -0.2934777504962], -[-0.4175715811942, -0.2932541800762], -[-0.4125874379965, -0.2930357705905], -[-0.407589265841, -0.2928223755052], -[-0.4025773271606, -0.292613855649], -[-0.397551880525, -0.2924100787684], -[-0.392513180716, -0.2922109191146], -[-0.3874614788074, -0.2920162570612], -[-0.3823970222475, -0.2918259787471], -[-0.3773200549436, -0.291639975746], -[-0.3722308173484, -0.2914581447576], -[-0.3671295465463, -0.2912803873208], -[-0.3620164763409, -0.2911066095453], -[-0.3568918373418, -0.2909367218618], -[-0.3517558570506, -0.2907706387887], -[-0.3466087599466, -0.2906082787141], -[-0.3414507675712, -0.290449563691], -[-0.3362820986107, -0.2902944192473], -[-0.3311029689786, -0.2901427742063], -[-0.3259135918953, -0.2899945605191], -[-0.320714177967, -0.2898497131075], -[-0.3155049352625, -0.2897081697164], -[-0.3102860693884, -0.289569870775], -[-0.3050577835628, -0.289434759267], -[-0.2998202786865, -0.2893027806074], -[-0.2945737534138, -0.2891738825279], -[-0.2893184042201, -0.2890480149681], -[-0.2840544254684, -0.2889251299735], -[-0.2787820094747, -0.288805181599], -[-0.2735013465707, -0.2886881258183], -[-0.2682126251652, -0.288573920438], -[-0.2629160318047, -0.288462525017], -[-0.2576117512309, -0.2883539007902], -[-0.2522999664385, -0.2882480105961], -[-0.2469808587299, -0.2881448188091], -[-0.2416546077695, -0.2880442912746], -[-0.2363213916364, -0.2879463952485], -[-0.2309813868757, -0.2878510993396], -[-0.2256347685481, -0.2877583734549], -[-0.2202817102795, -0.2876681887479], -[-0.2149223843078, -0.2875805175701], -[-0.2095569615298, -0.2874953334248], -[-0.2041856115467, -0.2874126109228], -[-0.198808502708, -0.2873323257414], -[-0.193425802155, -0.2872544545851], -[-0.1880376758633, -0.2871789751481], -[-0.1826442886841, -0.2871058660794], -[-0.1772458043845, -0.287035106949], -[-0.1718423856876, -0.2869666782167], -[-0.1664341943109, -0.2869005612019], -[-0.1610213910049, -0.2868367380554], -[-0.15560413559, -0.2867751917324], -[-0.1501825869933, -0.286715905967], -[-0.1447569032847, -0.2866588652487], -[-0.139327241712, -0.2866040547989], -[-0.1338937587357, -0.28655146055], -[-0.1284566100635, -0.2865010691251], -[-0.1230159506831, -0.2864528678185], -[-0.1175719348961, -0.2864068445779], -[-0.1121247163502, -0.2863629879874], -[-0.1066744480712, -0.2863212872515], -[-0.101221282495, -0.28628173218], -[-0.0957653714986, -0.2862443131739], -[-0.09030686643121, -0.2862090212124], -[-0.08484591814455, -0.2861758478403], -[-0.07938267702316, -0.2861447851566], -[-0.07391729301419, -0.2861158258038], -[-0.06844991565702, -0.2860889629582], -[-0.06298069411249, -0.2860641903204], -[-0.05750977719194, -0.286041502107], -[-0.05203731338605, -0.286020893043], -[-0.04656345089337, -0.2860023583547], -[-0.04108833764874, -0.2859858937636], -[-0.03561212135152, -0.2859714954805], -[-0.03013494949362, -0.2859591602006], -[-0.02465696938746, -0.2859488850991], -[-0.01917832819377, -0.2859406678279], -[-0.01369917294931, -0.2859345065118], -[-0.008219650594481, -0.2859303997469], -[-0.002739908000935, -0.2859283465981], -[0.002739908000937, -0.2859283465981], -[0.008219650594484, -0.2859303997469], -[0.01369917294931, -0.2859345065118], -[0.01917832819377, -0.2859406678279], -[0.02465696938746, -0.2859488850991], -[0.03013494949362, -0.2859591602006], -[0.03561212135152, -0.2859714954805], -[0.04108833764875, -0.2859858937636], -[0.04656345089337, -0.2860023583547], -[0.05203731338605, -0.286020893043], -[0.05750977719194, -0.286041502107], -[0.06298069411249, -0.2860641903204], -[0.06844991565702, -0.2860889629582], -[0.07391729301419, -0.2861158258038], -[0.07938267702316, -0.2861447851566], -[0.08484591814455, -0.2861758478403], -[0.09030686643121, -0.2862090212124], -[0.09576537149863, -0.286244313174], -[0.101221282495, -0.28628173218], -[0.1066744480712, -0.2863212872515], -[0.1121247163502, -0.2863629879874], -[0.1175719348961, -0.2864068445779], -[0.1230159506831, -0.2864528678185], -[0.1284566100635, -0.2865010691251], -[0.1338937587357, -0.28655146055], -[0.139327241712, -0.2866040547989], -[0.1447569032847, -0.2866588652487], -[0.1501825869933, -0.286715905967], -[0.15560413559, -0.2867751917324], -[0.1610213910049, -0.2868367380554], -[0.1664341943109, -0.2869005612019], -[0.1718423856876, -0.2869666782167], -[0.1772458043845, -0.287035106949], -[0.1826442886841, -0.2871058660794], -[0.1880376758633, -0.2871789751481], -[0.193425802155, -0.2872544545851], -[0.198808502708, -0.2873323257414], -[0.2041856115467, -0.2874126109228], -[0.2095569615298, -0.2874953334248], -[0.2149223843078, -0.2875805175701], -[0.2202817102795, -0.2876681887479], -[0.2256347685481, -0.2877583734549], -[0.2309813868757, -0.2878510993396], -[0.2363213916364, -0.2879463952485], -[0.2416546077695, -0.2880442912746], -[0.2469808587299, -0.2881448188091], -[0.2522999664385, -0.2882480105961], -[0.2576117512309, -0.2883539007902], -[0.2629160318047, -0.288462525017], -[0.2682126251652, -0.288573920438], -[0.2735013465707, -0.2886881258183], -[0.2787820094748, -0.288805181599], -[0.2840544254684, -0.2889251299735], -[0.2893184042201, -0.2890480149681], -[0.2945737534138, -0.2891738825279], -[0.2998202786865, -0.2893027806074], -[0.3050577835628, -0.289434759267], -[0.3102860693884, -0.289569870775], -[0.3155049352625, -0.2897081697164], -[0.320714177967, -0.2898497131075], -[0.3259135918953, -0.2899945605191], -[0.3311029689786, -0.2901427742063], -[0.3362820986107, -0.2902944192473], -[0.3414507675712, -0.290449563691], -[0.3466087599466, -0.2906082787141], -[0.3517558570506, -0.2907706387887], -[0.3568918373418, -0.2909367218618], -[0.3620164763409, -0.2911066095453], -[0.3671295465463, -0.2912803873208], -[0.3722308173484, -0.2914581447576], -[0.3773200549436, -0.291639975746], -[0.3823970222475, -0.2918259787471], -[0.3874614788074, -0.2920162570612], -[0.392513180716, -0.2922109191146], -[0.397551880525, -0.2924100787684], -[0.4025773271606, -0.292613855649], -[0.407589265841, -0.2928223755052], -[0.4125874379965, -0.2930357705905], -[0.4175715811942, -0.2932541800762], -[0.4225414290676, -0.2934777504962], -[0.4274967112531, -0.293706636226], -[0.4324371533351, -0.2939410000015], -[0.4373624768015, -0.2941810134779], -[0.4422723990122, -0.2944268578349], -[0.4471666331834, -0.2946787244315], -[0.4520448883918, -0.2949368155154], -[0.4569068696009, -0.2952013449912], -[0.4617522777164, -0.2954725392542], -[0.4665808096742, -0.2957506380956], -[0.4713921585693, -0.2960358956848], -[0.4761860138313, -0.2963285816373], -[0.4809620614578, -0.2966289821755], -[0.4857199843144, -0.2969374013913], -[0.4904594625149, -0.297254162619], -[0.495180173896, -0.297579609929], -[0.4998817946043, -0.2979141097527], -[0.5045639998148, -0.2982580526493], -[0.5092264646068, -0.2986118552254], -[0.5138688650224, -0.2989759622193], -[0.5184908793432, -0.2993508487612], -[0.5230921896207, -0.2997370228188], -[0.5276724835065, -0.300135027838], -[0.5322314564334, -0.300545445585], -[0.5367688142058, -0.3009688991919], -[0.5412842760677, -0.301406056404], -[0.5457775783242, -0.3018576330181], -[0.550248478607, -0.3023243964889], -[0.5546967608713, -0.3028071696716], -[0.5591222412342, -0.3033068346412], -[0.5635247747613, -0.303824336512], -[0.5679042633105, -0.3043606871415], -[0.5722606645385, -0.3049169685677], -[0.5765940021575, -0.3054943359778], -[0.5809043775, -0.3060940199438], -[0.585191982399, -0.3067173276002], -[0.5894571133093, -0.3073656423609], -[0.5937001864989, -0.3080404216914], -[0.5979217539674, -0.3087431924167], -[0.6021225195859, -0.3094755429736], -[-0.6000257423714, -0.3058438183067], -[-0.5957866774518, -0.3051061859173], -[-0.5915278834671, -0.3043971050547], -[-0.5872487086478, -0.3037151198887], -[-0.5829486343802, -0.3030588273936], -[-0.5786272619388, -0.3024268840473], -[-0.5742842993008, -0.301818010104], -[-0.5699195484777, -0.3012309918225], -[-0.5655328936255, -0.3006646820849], -[-0.5611242900958, -0.3001179997666], -[-0.5566937545041, -0.2995899281758], -[-0.5522413558295, -0.2990795128246], -[-0.547767207515, -0.2985858587498], -[-0.5432714605177, -0.2981081275482], -[-0.5387542972244, -0.2976455342681], -[-0.5342159261691, -0.2971973442444], -[-0.5296565774544, -0.2967628699622], -[-0.5250764988082, -0.2963414679964], -[-0.5204759521948, -0.2959325360638], -[-0.515855210914, -0.2955355102137], -[-0.5112145571231, -0.2951498621687], -[-0.5065542797274, -0.2947750968247], -[-0.5018746725889, -0.2944107499104], -[-0.4971760330084, -0.2940563858038], -[-0.4924586604449, -0.293711595503], -[-0.487722855436, -0.2933759947424], -[-0.4829689186932, -0.293049222248], -[-0.4781971503464, -0.2927309381233], -[-0.4734078493148, -0.2924208223576], -[-0.4686013127872, -0.2921185734478], -[-0.4637778357949, -0.2918239071261], -[-0.4589377108646, -0.2915365551851], -[-0.4540812277384, -0.2912562643933], -[-0.4492086731509, -0.2909827954934], -[-0.4443203306564, -0.2907159222779], -[-0.4394164804962, -0.2904554307338], -[-0.4344973995024, -0.2902011182532], -[-0.4295633610309, -0.2899527929022], -[-0.4246146349193, -0.2897102727455], -[-0.4196514874667, -0.2894733852198], -[-0.4146741814306, -0.2892419665546], -[-0.4096829760392, -0.2890158612336], -[-0.4046781270162, -0.2887949214966], -[-0.3996598866148, -0.2885790068759], -[-0.394628503662, -0.2883679837663], -[-0.3895842236078, -0.2881617250246], -[-0.3845272885818, -0.2879601095974], -[-0.3794579374525, -0.2877630221745], -[-0.374376405892, -0.2875703528657], -[-0.3692829264412, -0.2873819968995], -[-0.3641777285792, -0.2871978543417], -[-0.3590610387921, -0.2870178298333], -[-0.3539330806443, -0.2868418323445], -[-0.3487940748489, -0.2866697749451], -[-0.3436442393391, -0.2865015745902], -[-0.3384837893394, -0.2863371519184], -[-0.3333129374356, -0.2861764310634], -[-0.3281318936452, -0.2860193394772], -[-0.3229408654863, -0.2858658077639], -[-0.3177400580453, -0.2857157695241], -[-0.3125296740449, -0.2855691612082], -[-0.3073099139097, -0.2854259219787], -[-0.3020809758305, -0.2852859935811], -[-0.296843055829, -0.2851493202214], -[-0.2915963478189, -0.2850158484515], -[-0.2863410436681, -0.2848855270613], -[-0.2810773332575, -0.2847583069762], -[-0.2758054045401, -0.2846341411614], -[-0.2705254435975, -0.2845129845308], -[-0.2652376346967, -0.2843947938612], -[-0.2599421603437, -0.284279527712], -[-0.2546392013377, -0.2841671463478], -[-0.2493289368225, -0.284057611667], -[-0.2440115443381, -0.2839508871328], -[-0.2386871998701, -0.2838469377089], -[-0.2333560778985, -0.2837457297984], -[-0.2280183514451, -0.2836472311855], -[-0.2226741921203, -0.2835514109811], -[-0.217323770168, -0.2834582395708], -[-0.2119672545106, -0.2833676885657], -[-0.2066048127922, -0.2832797307559], -[-0.2012366114211, -0.2831943400664], -[-0.1958628156115, -0.2831114915154], -[-0.1904835894244, -0.2830311611743], -[-0.1850990958075, -0.282953326131], -[-0.179709496634, -0.2828779644535], -[-0.1743149527414, -0.2828050551567], -[-0.1689156239691, -0.2827345781706], -[-0.163511669195, -0.2826665143097], -[-0.1581032463721, -0.2826008452446], -[-0.152690512564, -0.282537553475], -[-0.1472736239799, -0.2824766223039], -[-0.1418527360089, -0.2824180358136], -[-0.1364280032541, -0.2823617788423], -[-0.1309995795656, -0.282307836963], -[-0.1255676180737, -0.2822561964627], -[-0.1201322712209, -0.2822068443232], -[-0.1146936907937, -0.2821597682029], -[-0.1092520279545, -0.2821149564198], -[-0.1038074332723, -0.2820723979351], -[-0.09836005675334, -0.2820320823385], -[-0.09291004787136, -0.2819939998336], -[-0.08745755559774, -0.2819581412249], -[-0.08200272843096, -0.2819244979055], -[-0.07654571442593, -0.2818930618452], -[-0.07108666122308, -0.2818638255802], -[-0.06562571607707, -0.281836782203], -[-0.06016302588537, -0.2818119253533], -[-0.05469873721657, -0.2817892492096], -[-0.04923299633846, -0.2817687484817], -[-0.04376594924601, -0.2817504184036], -[-0.03829774168906, -0.2817342547274], -[-0.03282851919996, -0.2817202537178], -[-0.02735842712108, -0.2817084121473], -[-0.02188761063208, -0.2816987272917], -[-0.01641621477726, -0.2816911969272], -[-0.01094438449267, -0.281685819327], -[-0.005472264633283, -0.2816825932591], -[9.554007360407e-16, -0.2816815179852], -[0.005472264633286, -0.2816825932591], -[0.01094438449267, -0.281685819327], -[0.01641621477726, -0.2816911969272], -[0.02188761063208, -0.2816987272917], -[0.02735842712108, -0.2817084121473], -[0.03282851919997, -0.2817202537178], -[0.03829774168906, -0.2817342547274], -[0.04376594924601, -0.2817504184036], -[0.04923299633846, -0.2817687484817], -[0.05469873721657, -0.2817892492096], -[0.06016302588537, -0.2818119253533], -[0.06562571607707, -0.281836782203], -[0.07108666122308, -0.2818638255802], -[0.07654571442594, -0.2818930618452], -[0.08200272843096, -0.2819244979055], -[0.08745755559774, -0.2819581412249], -[0.09291004787136, -0.2819939998336], -[0.09836005675334, -0.2820320823385], -[0.1038074332723, -0.2820723979351], -[0.1092520279545, -0.2821149564198], -[0.1146936907937, -0.2821597682029], -[0.1201322712209, -0.2822068443232], -[0.1255676180737, -0.2822561964627], -[0.1309995795656, -0.282307836963], -[0.1364280032541, -0.2823617788423], -[0.1418527360089, -0.2824180358136], -[0.1472736239799, -0.2824766223039], -[0.152690512564, -0.282537553475], -[0.1581032463721, -0.2826008452446], -[0.163511669195, -0.2826665143097], -[0.1689156239691, -0.2827345781706], -[0.1743149527414, -0.2828050551567], -[0.179709496634, -0.2828779644535], -[0.1850990958075, -0.282953326131], -[0.1904835894245, -0.2830311611743], -[0.1958628156115, -0.2831114915154], -[0.2012366114211, -0.2831943400664], -[0.2066048127922, -0.2832797307559], -[0.2119672545106, -0.2833676885657], -[0.217323770168, -0.2834582395708], -[0.2226741921203, -0.2835514109811], -[0.2280183514451, -0.2836472311855], -[0.2333560778985, -0.2837457297984], -[0.2386871998701, -0.2838469377089], -[0.2440115443381, -0.2839508871328], -[0.2493289368225, -0.284057611667], -[0.2546392013377, -0.2841671463478], -[0.2599421603437, -0.284279527712], -[0.2652376346967, -0.2843947938612], -[0.2705254435975, -0.2845129845308], -[0.2758054045401, -0.2846341411614], -[0.2810773332575, -0.2847583069762], -[0.2863410436681, -0.2848855270613], -[0.2915963478189, -0.2850158484515], -[0.296843055829, -0.2851493202214], -[0.3020809758305, -0.2852859935811], -[0.3073099139097, -0.2854259219787], -[0.3125296740449, -0.2855691612082], -[0.3177400580453, -0.2857157695241], -[0.3229408654861, -0.2858658077639], -[0.3281318936453, -0.2860193394772], -[0.3333129374356, -0.2861764310634], -[0.3384837893394, -0.2863371519184], -[0.3436442393391, -0.2865015745902], -[0.3487940748489, -0.2866697749451], -[0.3539330806443, -0.2868418323445], -[0.3590610387921, -0.2870178298334], -[0.3641777285792, -0.2871978543417], -[0.3692829264412, -0.2873819968995], -[0.374376405892, -0.2875703528657], -[0.3794579374525, -0.2877630221745], -[0.3845272885818, -0.2879601095974], -[0.3895842236078, -0.2881617250246], -[0.394628503662, -0.2883679837663], -[0.3996598866148, -0.2885790068759], -[0.4046781270162, -0.2887949214966], -[0.4096829760392, -0.2890158612336], -[0.4146741814306, -0.2892419665546], -[0.4196514874667, -0.2894733852198], -[0.4246146349193, -0.2897102727455], -[0.4295633610309, -0.2899527929022], -[0.4344973995024, -0.2902011182532], -[0.4394164804962, -0.2904554307338], -[0.4443203306564, -0.2907159222779], -[0.4492086731509, -0.2909827954935], -[0.4540812277384, -0.2912562643933], -[0.4589377108646, -0.2915365551851], -[0.4637778357949, -0.2918239071261], -[0.4686013127872, -0.2921185734478], -[0.4734078493149, -0.2924208223576], -[0.4781971503464, -0.2927309381233], -[0.4829689186932, -0.293049222248], -[0.4877228554359, -0.2933759947424], -[0.492458660445, -0.293711595503], -[0.4971760330086, -0.2940563858037], -[0.5018746725888, -0.2944107499104], -[0.5065542797274, -0.2947750968248], -[0.5112145571231, -0.2951498621687], -[0.515855210914, -0.2955355102137], -[0.5204759521948, -0.2959325360638], -[0.5250764988082, -0.2963414679964], -[0.5296565774544, -0.2967628699622], -[0.5342159261692, -0.2971973442443], -[0.5387542972246, -0.297645534268], -[0.5432714605181, -0.2981081275479], -[0.5477672075149, -0.2985858587498], -[0.5522413558291, -0.2990795128249], -[0.5566937545041, -0.2995899281758], -[0.5611242900958, -0.3001179997666], -[0.5655328936255, -0.3006646820849], -[0.5699195484777, -0.3012309918225], -[0.5742842993009, -0.3018180101039], -[0.578627261939, -0.302426884047], -[0.5829486343804, -0.3030588273932], -[0.5872487086478, -0.3037151198887], -[0.5915278834684, -0.3043971050518], -[0.5957866774524, -0.3051061859156], -[0.6000257423714, -0.3058438183067], -[-0.5979081226519, -0.3021759933632], -[-0.5936325488816, -0.3014335455882], -[-0.5893382305429, -0.3007187049458], -[-0.5850245626264, -0.3000301314856], -[-0.5806910575556, -0.2993665308768], -[-0.5763373341808, -0.2987266602259], -[-0.5719631067744, -0.2981093319384], -[-0.5675681743879, -0.2975134158904], -[-0.563152410781, -0.296937840252], -[-0.5587157550683, -0.2963815912451], -[-0.5542582031571, -0.2958437120844], -[-0.5497798000018, -0.2953233013163], -[-0.5452806326633, -0.2948195107342], -[-0.5407608241474, -0.294331543004], -[-0.5362205279491, -0.2938586491346], -[-0.5316599232808, -0.2934001258509], -[-0.5270792108891, -0.2929553129637], -[-0.5224786094179, -0.2925235907702], -[-0.5178583522544, -0.2921043775267], -[-0.5132186847998, -0.2916971270161], -[-0.508559862117, -0.2913013262273], -[-0.503882146906, -0.2909164931559], -[-0.4991858077674, -0.2905421747311], -[-0.4944711177158, -0.2901779448678], -[-0.4897383529094, -0.2898234026465], -[-0.4849877915694, -0.2894781706117], -[-0.4802197130605, -0.2891418931895], -[-0.4754343971136, -0.2888142352142], -[-0.4706321231693, -0.2884948805613], -[-0.465813169826, -0.2881835308778], -[-0.4609778143788, -0.2878799044057], -[-0.4561263324354, -0.2875837348901], -[-0.4512589975997, -0.2872947705687], -[-0.4463760812119, -0.2870127732339], -[-0.4414778521384, -0.2867375173642], -[-0.4365645766039, -0.2864687893189], -[-0.4316365180598, -0.2862063865913], -[-0.4266939370832, -0.285950117116], -[-0.4217370913029, -0.2856997986256], -[-0.4167662353479, -0.2854552580543], -[-0.4117816208147, -0.285216330983], -[-0.4067834962513, -0.2849828611242], -[-0.4017721071555, -0.2847546998425], -[-0.3967476959834, -0.2845317057085], -[-0.3917105021698, -0.2843137440835], -[-0.386660762155, -0.2841006867325], -[-0.3815987094194, -0.2838924114637], -[-0.3765245745238, -0.283688801791], -[-0.3714385851538, -0.2834897466205], -[-0.3663409661685, -0.2832951399566], -[-0.3612319396518, -0.2831048806273], -[-0.3561117249665, -0.2829188720276], -[-0.3509805388099, -0.2827370218793], -[-0.3458385952707, -0.2825592420055], -[-0.3406861058871, -0.2823854481196], -[-0.3355232797055, -0.2822155596277], -[-0.3303503233389, -0.2820494994426], -[-0.3251674410265, -0.2818871938095], -[-0.3199748346917, -0.281728572142], -[-0.3147727040013, -0.2815735668682], -[-0.309561246423, -0.2814221132858], -[-0.3043406572829, -0.2812741494255], -[-0.2991111298225, -0.2811296159228], -[-0.2938728552542, -0.2809884558967], -[-0.2886260228169, -0.2808506148361], -[-0.2833708198298, -0.2807160404919], -[-0.2781074317462, -0.2805846827753], -[-0.2728360422056, -0.2804564936624], -[-0.2675568330856, -0.2803314271037], -[-0.2622699845517, -0.2802094389381], -[-0.2569756751077, -0.2800904868127], -[-0.2516740816437, -0.2799745301062], -[-0.2463653794838, -0.2798615298563], -[-0.2410497424332, -0.2797514486919], -[-0.2357273428235, -0.2796442507681], -[-0.2303983515579, -0.2795399017049], -[-0.2250629381549, -0.2794383685293], -[-0.2197212707915, -0.2793396196204], -[-0.2143735163456, -0.2792436246573], -[-0.2090198404372, -0.2791503545699], -[-0.2036604074686, -0.2790597814917], -[-0.1982953806655, -0.2789718787165], -[-0.1929249221149, -0.2788866206555], -[-0.1875491928036, -0.2788039827979], -[-0.1821683526563, -0.2787239416733], -[-0.1767825605721, -0.2786464748158], -[-0.1713919744614, -0.2785715607301], -[-0.1659967512806, -0.2784991788597], -[-0.1605970470683, -0.2784293095563], -[-0.155193016979, -0.2783619340511], -[-0.1497848153173, -0.2782970344274], -[-0.1443725955714, -0.2782345935953], -[-0.1389565104458, -0.2781745952665], -[-0.1335367118939, -0.2781170239321], -[-0.12811335115, -0.2780618648403], -[-0.1226865787606, -0.278009103976], -[-0.1172565446154, -0.2779587280415], -[-0.1118233979786, -0.2779107244379], -[-0.1063872875187, -0.2778650812485], -[-0.1009483613384, -0.2778217872219], -[-0.09550676700468, -0.2777808317576], -[-0.09006265157777, -0.2777422048912], -[-0.08461616164029, -0.2777058972814], -[-0.07916744332599, -0.2776719001978], -[-0.07371664234817, -0.2776402055088], -[-0.06826390402798, -0.2776108056717], -[-0.06280937332239, -0.2775836937222], -[-0.05735319485199, -0.2775588632657], -[-0.0518955129286, -0.277536308469], -[-0.04643647158272, -0.2775160240525], -[-0.04097621459076, -0.2774980052838], -[-0.03551488550218, -0.2774822479712], -[-0.03005262766653, -0.2774687484588], -[-0.02458958426026, -0.2774575036213], -[-0.01912589831358, -0.2774485108605], -[-0.0136617127371, -0.2774417681018], -[-0.008197170348527, -0.2774372737914], -[-0.002732413899227, -0.2774350268948], -[0.002732413899229, -0.2774350268948], -[0.00819717034853, -0.2774372737914], -[0.0136617127371, -0.2774417681018], -[0.01912589831358, -0.2774485108605], -[0.02458958426027, -0.2774575036213], -[0.03005262766653, -0.2774687484588], -[0.03551488550219, -0.2774822479712], -[0.04097621459076, -0.2774980052838], -[0.04643647158272, -0.2775160240525], -[0.0518955129286, -0.277536308469], -[0.05735319485199, -0.2775588632657], -[0.06280937332239, -0.2775836937222], -[0.06826390402798, -0.2776108056717], -[0.07371664234817, -0.2776402055088], -[0.07916744332599, -0.2776719001978], -[0.0846161616403, -0.2777058972814], -[0.09006265157777, -0.2777422048912], -[0.09550676700468, -0.2777808317576], -[0.1009483613384, -0.2778217872219], -[0.1063872875187, -0.2778650812485], -[0.1118233979786, -0.2779107244379], -[0.1172565446154, -0.2779587280415], -[0.1226865787606, -0.278009103976], -[0.12811335115, -0.2780618648403], -[0.1335367118939, -0.2781170239321], -[0.1389565104458, -0.2781745952665], -[0.1443725955714, -0.2782345935953], -[0.1497848153173, -0.2782970344274], -[0.155193016979, -0.2783619340511], -[0.1605970470683, -0.2784293095563], -[0.1659967512806, -0.2784991788597], -[0.1713919744614, -0.2785715607301], -[0.1767825605721, -0.2786464748158], -[0.1821683526563, -0.2787239416733], -[0.1875491928036, -0.2788039827979], -[0.1929249221149, -0.2788866206555], -[0.1982953806655, -0.2789718787165], -[0.2036604074686, -0.2790597814917], -[0.2090198404368, -0.2791503545697], -[0.2143735163456, -0.2792436246573], -[0.2197212707915, -0.2793396196204], -[0.2250629381549, -0.2794383685293], -[0.2303983515579, -0.2795399017049], -[0.2357273428235, -0.2796442507681], -[0.2410497424332, -0.2797514486919], -[0.2463653794838, -0.2798615298563], -[0.2516740816437, -0.2799745301062], -[0.2569756751077, -0.2800904868127], -[0.2622699845517, -0.2802094389381], -[0.2675568330856, -0.2803314271037], -[0.2728360422056, -0.2804564936624], -[0.2781074317462, -0.2805846827753], -[0.2833708198298, -0.2807160404919], -[0.2886260228169, -0.2808506148361], -[0.2938728552542, -0.2809884558967], -[0.2991111298225, -0.2811296159228], -[0.3043406572829, -0.2812741494255], -[0.309561246423, -0.2814221132858], -[0.3147727040013, -0.2815735668682], -[0.3199748346917, -0.281728572142], -[0.3251674410265, -0.2818871938095], -[0.3303503233389, -0.2820494994426], -[0.3355232797055, -0.2822155596277], -[0.3406861058871, -0.2823854481196], -[0.3458385952707, -0.2825592420055], -[0.3509805388099, -0.2827370218793], -[0.3561117249665, -0.2829188720276], -[0.3612319396518, -0.2831048806273], -[0.3663409661685, -0.2832951399566], -[0.3714385851538, -0.2834897466205], -[0.3765245745238, -0.283688801791], -[0.3815987094194, -0.2838924114637], -[0.386660762155, -0.2841006867325], -[0.3917105021698, -0.2843137440835], -[0.3967476959834, -0.2845317057085], -[0.4017721071555, -0.2847546998425], -[0.4067834962513, -0.2849828611242], -[0.4117816208147, -0.285216330983], -[0.4167662353479, -0.2854552580543], -[0.4217370913029, -0.2856997986256], -[0.4266939370832, -0.285950117116], -[0.4316365180598, -0.2862063865913], -[0.4365645766039, -0.2864687893189], -[0.4414778521384, -0.2867375173642], -[0.4463760812119, -0.2870127732339], -[0.4512589975997, -0.2872947705687], -[0.4561263324354, -0.2875837348901], -[0.4609778143787, -0.2878799044057], -[0.465813169826, -0.2881835308778], -[0.4706321231693, -0.2884948805613], -[0.4754343971136, -0.2888142352142], -[0.4802197130605, -0.2891418931895], -[0.4849877915694, -0.2894781706117], -[0.4897383529095, -0.2898234026465], -[0.4944711177158, -0.2901779448678], -[0.4991858077676, -0.290542174731], -[0.503882146906, -0.2909164931559], -[0.508559862117, -0.2913013262273], -[0.5132186847998, -0.2916971270161], -[0.5178583522544, -0.2921043775267], -[0.5224786094179, -0.2925235907702], -[0.5270792108891, -0.2929553129637], -[0.5316599232809, -0.2934001258509], -[0.5362205279491, -0.2938586491346], -[0.5407608241473, -0.294331543004], -[0.5452806326631, -0.2948195107344], -[0.5497798000013, -0.2953233013168], -[0.5542582031569, -0.2958437120846], -[0.5587157550683, -0.2963815912452], -[0.563152410781, -0.296937840252], -[0.5675681743879, -0.2975134158904], -[0.5719631067744, -0.2981093319384], -[0.5763373341808, -0.2987266602259], -[0.5806910575555, -0.2993665308769], -[0.5850245626259, -0.3000301314865], -[0.5893382305458, -0.3007187049392], -[0.5936325488831, -0.3014335455842], -[0.597908122652, -0.302175993363], -[-0.5957704894989, -0.2984735041314], -[-0.5914600552612, -0.2977266735011], -[-0.5871317842488, -0.2970065794146], -[-0.5827851135624, -0.2963119838408], -[-0.578419584444, -0.2956416884122], -[-0.5740348330454, -0.2949945395565], -[-0.569630581188, -0.2943694319506], -[-0.5652066273585, -0.2937653106017], -[-0.5607628381314, -0.2931811717886], -[-0.5562991401392, -0.2926160630908], -[-0.5518155126627, -0.2920690827033], -[-0.5473119808704, -0.2915393782125], -[-0.5427886097087, -0.2910261449773], -[-0.5382454984295, -0.2905286242318], -[-0.5336827757044, -0.2900461010196], -[-0.5291005953093, -0.2895779020175], -[-0.5244991323119, -0.2891233933246], -[-0.5198785797262, -0.288681978254], -[-0.515239145585, -0.2882530951636], -[-0.510581050385, -0.2878362153501], -[-0.505904524864, -0.2874308410228], -[-0.5012098080715, -0.2870365033697], -[-0.4964971456978, -0.2866527607205], -[-0.4917667886293, -0.2862791968113], -[-0.4870189917043, -0.285915419151], -[-0.4822540126409, -0.2855610574878], -[-0.4774721111176, -0.2852157623733], -[-0.4726735479856, -0.2848792038206], -[-0.4678585845963, -0.2845510700521], -[-0.4630274822286, -0.2842310663321], -[-0.458180501603, -0.2839189138794], -[-0.4533179024712, -0.2836143488561], -[-0.4484399432711, -0.2833171214252], -[-0.4435468808376, -0.2830269948758], -[-0.4386389701636, -0.2827437448078], -[-0.4337164642026, -0.282467158375], -[-0.4287796137078, -0.2821970335805], -[-0.4238286671036, -0.2819331786205], -[-0.4188638703837, -0.2816754112747], -[-0.4138854670331, -0.2814235583382], -[-0.4088936979703, -0.2811774550924], -[-0.4038888015066, -0.2809369448119], -[-0.3988710133209, -0.2807018783053], -[-0.3938405664467, -0.2804721134863], -[-0.3887976912707, -0.2802475149742], -[-0.3837426155393, -0.28002795372], -[-0.3786755643768, -0.2798133066575], -[-0.3735967603024, -0.2796034563778], -[-0.3685064232629, -0.2793982908236], -[-0.3634047706626, -0.2791977030042], -[-0.3582920173998, -0.2790015907279], -[-0.3531683759069, -0.2788098563518], -[-0.348034056192, -0.2786224065467], -[-0.3428892658834, -0.2784391520773], -[-0.3377342102753, -0.278260007595], -[-0.3325690923752, -0.2780848914439], -[-0.327394112952, -0.2779137254787], -[-0.3222094705845, -0.2777464348926], -[-0.3170153617112, -0.2775829480562], -[-0.3118119806791, -0.2774231963658], -[-0.3065995197936, -0.2772671141002], -[-0.3013781693679, -0.2771146382859], -[-0.2961481177721, -0.2769657085702], -[-0.2909095514818, -0.2768202671014], -[-0.2856626551268, -0.2766782584157], -[-0.280407611539, -0.2765396293307], -[-0.2751446017996, -0.2764043288444], -[-0.269873805286, -0.2762723080401], -[-0.2645953997179, -0.2761435199965], -[-0.2593095612026, -0.2760179197026], -[-0.2540164642803, -0.2758954639774], -[-0.2487162819674, -0.2757761113935], -[-0.2434091858005, -0.2756598222052], -[-0.2380953458791, -0.2755465582804], -[-0.2327749309071, -0.2754362830359], -[-0.2274481082342, -0.2753289613762], -[-0.2221150438967, -0.2752245596358], -[-0.2167759026573, -0.275123045524], -[-0.211430848044, -0.2750243880728], -[-0.206080042389, -0.2749285575879], -[-0.2007236468661, -0.2748355256018], -[-0.1953618215286, -0.2747452648294], -[-0.1899947253453, -0.2746577491258], -[-0.1846225162368, -0.2745729534469], -[-0.1792453511107, -0.2744908538112], -[-0.173863385897, -0.2744114272643], -[-0.1684767755817, -0.2743346518448], -[-0.1630856742412, -0.2742605065522], -[-0.1576902350753, -0.2741889713161], -[-0.1522906104399, -0.2741200269681], -[-0.1468869518796, -0.2740536552136], -[-0.1414794101595, -0.2739898386068], -[-0.1360681352965, -0.2739285605255], -[-0.1306532765905, -0.2738698051485], -[-0.1252349826548, -0.2738135574333], -[-0.1198134014467, -0.2737598030963], -[-0.1143886802973, -0.2737085285923], -[-0.108960965941, -0.2736597210972], -[-0.1035304045445, -0.2736133684901], -[-0.09809714173641, -0.2735694593377], -[-0.09266132263511, -0.2735279828786], -[-0.08722309187772, -0.2734889290095], -[-0.08178259364793, -0.2734522882718], -[-0.07633997170397, -0.2734180518396], -[-0.07089536940624, -0.2733862115075], -[-0.06544892974475, -0.2733567596809], -[-0.06000079536641, -0.2733296893656], -[-0.05455110860206, -0.2733049941592], -[-0.04910001149337, -0.2732826682425], -[-0.04364764581966, -0.2732627063729], -[-0.03819415312447, -0.2732451038768], -[-0.03273967474206, -0.2732298566444], -[-0.02728435182381, -0.273216961124], -[-0.02182832536456, -0.2732064143182], -[-0.01637173622875, -0.2731982137793], -[-0.01091472517663, -0.273192357607], -[-0.005457432890351, -0.2731888444454], -[7.961672800339e-16, -0.2731876734818], -[0.005457432890353, -0.2731888444454], -[0.01091472517663, -0.273192357607], -[0.01637173622875, -0.2731982137793], -[0.02182832536456, -0.2732064143182], -[0.02728435182382, -0.273216961124], -[0.03273967474206, -0.2732298566444], -[0.03819415312447, -0.2732451038768], -[0.04364764581967, -0.2732627063729], -[0.04910001149337, -0.2732826682425], -[0.05455110860206, -0.2733049941592], -[0.06000079536642, -0.2733296893656], -[0.06544892974476, -0.2733567596809], -[0.07089536940624, -0.2733862115075], -[0.07633997170397, -0.2734180518396], -[0.08178259364793, -0.2734522882718], -[0.08722309187772, -0.2734889290095], -[0.09266132263512, -0.2735279828786], -[0.09809714173641, -0.2735694593377], -[0.1035304045446, -0.2736133684901], -[0.108960965941, -0.2736597210972], -[0.1143886802973, -0.2737085285923], -[0.1198134014467, -0.2737598030963], -[0.1252349826548, -0.2738135574333], -[0.1306532765905, -0.2738698051485], -[0.1360681352965, -0.2739285605255], -[0.1414794101595, -0.2739898386068], -[0.1468869518796, -0.2740536552136], -[0.1522906104399, -0.2741200269681], -[0.1576902350753, -0.2741889713161], -[0.1630856742412, -0.2742605065522], -[0.1684767755817, -0.2743346518448], -[0.173863385897, -0.2744114272643], -[0.1792453511107, -0.2744908538112], -[0.1846225162368, -0.2745729534469], -[0.1899947253453, -0.2746577491258], -[0.1953618215286, -0.2747452648294], -[0.2007236468661, -0.2748355256018], -[0.206080042389, -0.2749285575879], -[0.211430848044, -0.2750243880728], -[0.2167759026573, -0.275123045524], -[0.2221150438967, -0.2752245596358], -[0.2274481082342, -0.2753289613762], -[0.2327749309071, -0.2754362830359], -[0.2380953458791, -0.2755465582804], -[0.2434091858005, -0.2756598222052], -[0.2487162819674, -0.2757761113935], -[0.2540164642803, -0.2758954639774], -[0.2593095612026, -0.2760179197026], -[0.2645953997179, -0.2761435199965], -[0.269873805286, -0.2762723080401], -[0.2751446017996, -0.2764043288444], -[0.280407611539, -0.2765396293307], -[0.2856626551268, -0.2766782584157], -[0.2909095514818, -0.2768202671014], -[0.2961481177721, -0.2769657085702], -[0.3013781693679, -0.2771146382859], -[0.3065995197936, -0.2772671141002], -[0.3118119806791, -0.2774231963658], -[0.3170153617112, -0.2775829480562], -[0.3222094705845, -0.2777464348926], -[0.327394112952, -0.2779137254787], -[0.3325690923752, -0.2780848914439], -[0.3377342102753, -0.278260007595], -[0.3428892658834, -0.2784391520773], -[0.348034056192, -0.2786224065467], -[0.3531683759069, -0.2788098563518], -[0.3582920173998, -0.2790015907279], -[0.3634047706625, -0.2791977030042], -[0.3685064232629, -0.2793982908236], -[0.3735967603024, -0.2796034563778], -[0.3786755643768, -0.2798133066575], -[0.3837426155393, -0.28002795372], -[0.3887976912707, -0.2802475149742], -[0.3938405664467, -0.2804721134863], -[0.3988710133209, -0.2807018783053], -[0.4038888015066, -0.2809369448119], -[0.4088936979703, -0.2811774550924], -[0.4138854670331, -0.2814235583383], -[0.4188638703837, -0.2816754112747], -[0.4238286671036, -0.2819331786205], -[0.4287796137078, -0.2821970335805], -[0.4337164642026, -0.282467158375], -[0.4386389701636, -0.2827437448078], -[0.4435468808376, -0.2830269948758], -[0.4484399432711, -0.2833171214252], -[0.4533179024713, -0.2836143488561], -[0.458180501603, -0.2839189138794], -[0.4630274822286, -0.284231066332], -[0.4678585845964, -0.2845510700521], -[0.4726735479856, -0.2848792038206], -[0.4774721111176, -0.2852157623733], -[0.4822540126409, -0.2855610574878], -[0.4870189917043, -0.285915419151], -[0.4917667886293, -0.2862791968113], -[0.4964971456977, -0.2866527607205], -[0.5012098080715, -0.2870365033698], -[0.5059045248641, -0.2874308410228], -[0.510581050385, -0.28783621535], -[0.515239145585, -0.2882530951636], -[0.5198785797262, -0.288681978254], -[0.5244991323119, -0.2891233933246], -[0.5291005953093, -0.2895779020175], -[0.5336827757044, -0.2900461010196], -[0.5382454984294, -0.2905286242319], -[0.5427886097088, -0.2910261449773], -[0.5473119808701, -0.2915393782128], -[0.5518155126626, -0.2920690827034], -[0.5562991401392, -0.2926160630908], -[0.5607628381314, -0.2931811717886], -[0.5652066273585, -0.2937653106017], -[0.569630581188, -0.2943694319506], -[0.5740348330454, -0.2949945395565], -[0.5784195844439, -0.2956416884123], -[0.582785113562, -0.2963119838414], -[0.5871317842478, -0.2970065794168], -[0.591460055264, -0.2977266734936], -[0.5957704894989, -0.2984735041314], -[-0.5936130648007, -0.2947371868428], -[-0.5892698351488, -0.2939868619774], -[-0.5849090681609, -0.2932619827777], -[-0.5805307802832, -0.2925618869088], -[-0.5761345394845, -0.2918854612098], -[-0.571719998752, -0.2912316317558], -[-0.567286888267, -0.2905993669752], -[-0.562835007743, -0.2899876796124], -[-0.5583642190792, -0.2893956277284], -[-0.5538744394356, -0.2888223149173], -[-0.5493656347961, -0.2882668899001], -[-0.5448378140497, -0.2877285456361], -[-0.5402910236028, -0.2872065180699], -[-0.5357253425053, -0.2867000846223], -[-0.5311408780798, -0.2862085624972], -[-0.5265377620155, -0.2857313068803], -[-0.5219161468976, -0.2852677090783], -[-0.5172762031351, -0.2848171946412], -[-0.5126181162501, -0.2843792214997], -[-0.5079420844938, -0.2839532781403], -[-0.5032483167552, -0.2835388818363], -[-0.4985370307314, -0.2831355769456], -[-0.4938084513282, -0.2827429332848], -[-0.4890628092687, -0.2823605445819], -[-0.4843003398812, -0.2819880270121], -[-0.4795212820478, -0.2816250178153], -[-0.4747258772937, -0.2812711739952], -[-0.4699143689993, -0.2809261710972], -[-0.4650870017209, -0.2805897020632], -[-0.4602440206062, -0.2802614761589], -[-0.4553856708921, -0.2799412179709], -[-0.4505121974756, -0.2796286664696], -[-0.4456238445476, -0.2793235741341], -[-0.440720855282, -0.279025706135], -[-0.4358034715731, -0.278734839572], -[-0.4308719338148, -0.2784507627632], -[-0.4259264807163, -0.2781732745804], -[-0.4209673491502, -0.2779021838308], -[-0.4159947740277, -0.2776373086782], -[-0.411008988198, -0.277378476104], -[-0.406010222369, -0.2771255214031], -[-0.4009987050457, -0.2768782877138], -[-0.3959746624845, -0.2766366255778], -[-0.3909383186613, -0.2764003925292], -[-0.3858898952506, -0.2761694527103], -[-0.3808296116163, -0.2759436765123], -[-0.3757576848091, -0.2757229402382], -[-0.3706743295734, -0.2755071257879], -[-0.3655797583594, -0.2752961203628], -[-0.3604741813408, -0.2750898161888], -[-0.3553578064378, -0.2748881102568], -[-0.3502308393435, -0.2746909040789], -[-0.3450934835533, -0.2744981034594], -[-0.3399459403982, -0.2743096182801], -[-0.3347884090791, -0.2741253622979], -[-0.3296210867037, -0.2739452529553], -[-0.3244441683249, -0.2737692112008], -[-0.3192578469801, -0.2735971613215], -[-0.3140623137319, -0.2734290307839], -[-0.3088577577088, -0.273264750085], -[-0.3036443661473, -0.2731042526111], -[-0.2984223244334, -0.2729474745052], -[-0.293191816145, -0.2727943545419], -[-0.2879530230941, -0.2726448340085], -[-0.2827061253686, -0.2724988565939], -[-0.2774513013749, -0.2723563682827], -[-0.272188727879, -0.2722173172555], -[-0.2669185800482, -0.2720816537948], -[-0.2616410314924, -0.2719493301954], -[-0.2563562543045, -0.27182030068], -[-0.2510644191009, -0.27169452132], -[-0.2457656950612, -0.2715719499587], -[-0.2404602499677, -0.2714525461407], -[-0.2351482502441, -0.2713362710436], -[-0.229829860994, -0.2712230874135], -[-0.2245052460387, -0.2711129595044], -[-0.2191745679544, -0.2710058530204], -[-0.2138379881087, -0.2709017350608], -[-0.2084956666981, -0.2708005740682], -[-0.2031477627822, -0.2707023397794], -[-0.1977944343201, -0.2706070031787], -[-0.1924358382045, -0.2705145364533], -[-0.1870721302963, -0.2704249129518], -[-0.1817034654582, -0.2703381071441], -[-0.1763299975882, -0.2702540945836], -[-0.1709518796524, -0.2701728518715], -[-0.1655692637174, -0.2700943566229], -[-0.160182300982, -0.2700185874346], -[-0.1547911418095, -0.2699455238545], -[-0.1493959357579, -0.2698751463531], -[-0.1439968316117, -0.2698074362956], -[-0.1385939774115, -0.2697423759168], -[-0.1331875204842, -0.2696799482958], -[-0.1277776074732, -0.2696201373336], -[-0.1223643843672, -0.269562927731], -[-0.1169479965295, -0.269508304968], -[-0.1115285887267, -0.2694562552844], -[-0.1061063051572, -0.2694067656615], -[-0.1006812894792, -0.2693598238053], -[-0.09525368483927, -0.2693154181296], -[-0.08982363389911, -0.269273537742], -[-0.0843912788637, -0.2692341724287], -[-0.07895676150832, -0.2691973126422], -[-0.07352022320555, -0.2691629494883], -[-0.06808180495222, -0.2691310747155], -[-0.062641647396, -0.269101680704], -[-0.05719989086195, -0.2690747604563], -[-0.05175667537887, -0.2690503075882], -[-0.04631214070554, -0.2690283163209], -[-0.04086642635676, -0.2690087814739], -[-0.03541967162941, -0.2689916984581], -[-0.02997201562824, -0.2689770632706], -[-0.02452359729173, -0.2689648724896], -[-0.01907455541779, -0.2689551232697], -[-0.01362502868938, -0.2689478133391], -[-0.008175155700111, -0.2689429409963], -[-0.002725074979842, -0.2689405051079], -[0.002725074979844, -0.2689405051079], -[0.008175155700112, -0.2689429409963], -[0.01362502868938, -0.2689478133391], -[0.01907455541779, -0.2689551232697], -[0.02452359729173, -0.2689648724896], -[0.02997201562824, -0.2689770632706], -[0.03541967162941, -0.2689916984581], -[0.04086642635676, -0.2690087814739], -[0.04631214070554, -0.2690283163209], -[0.05175667537887, -0.2690503075882], -[0.05719989086195, -0.2690747604563], -[0.062641647396, -0.269101680704], -[0.06808180495222, -0.2691310747155], -[0.07352022320556, -0.2691629494883], -[0.07895676150832, -0.2691973126422], -[0.08439127886371, -0.2692341724287], -[0.08982363389911, -0.269273537742], -[0.09525368483928, -0.2693154181296], -[0.1006812894793, -0.2693598238053], -[0.1061063051572, -0.2694067656615], -[0.1115285887267, -0.2694562552844], -[0.1169479965295, -0.269508304968], -[0.1223643843672, -0.269562927731], -[0.1277776074732, -0.2696201373336], -[0.1331875204842, -0.2696799482958], -[0.1385939774115, -0.2697423759168], -[0.1439968316117, -0.2698074362956], -[0.1493959357579, -0.2698751463531], -[0.1547911418095, -0.2699455238545], -[0.160182300982, -0.2700185874346], -[0.1655692637174, -0.2700943566229], -[0.1709518796524, -0.2701728518715], -[0.1763299975882, -0.2702540945836], -[0.1817034654582, -0.2703381071441], -[0.1870721302963, -0.2704249129518], -[0.1924358382045, -0.2705145364533], -[0.1977944343201, -0.2706070031787], -[0.2031477627822, -0.2707023397794], -[0.2084956666981, -0.2708005740682], -[0.2138379881087, -0.2709017350608], -[0.2191745679543, -0.2710058530204], -[0.2245052460387, -0.2711129595044], -[0.229829860994, -0.2712230874135], -[0.2351482502441, -0.2713362710436], -[0.2404602499677, -0.2714525461407], -[0.2457656950612, -0.2715719499587], -[0.2510644191009, -0.27169452132], -[0.2563562543045, -0.27182030068], -[0.2616410314924, -0.2719493301954], -[0.2669185800482, -0.2720816537948], -[0.272188727879, -0.2722173172555], -[0.2774513013749, -0.2723563682827], -[0.2827061253686, -0.2724988565939], -[0.2879530230941, -0.2726448340085], -[0.293191816145, -0.2727943545419], -[0.2984223244334, -0.2729474745052], -[0.3036443661473, -0.2731042526111], -[0.3088577577088, -0.273264750085], -[0.3140623137319, -0.2734290307839], -[0.3192578469801, -0.2735971613215], -[0.3244441683249, -0.2737692112008], -[0.3296210867037, -0.2739452529553], -[0.3347884090791, -0.2741253622979], -[0.3399459403982, -0.2743096182801], -[0.3450934835533, -0.2744981034594], -[0.3502308393435, -0.2746909040789], -[0.3553578064378, -0.2748881102568], -[0.3604741813408, -0.2750898161888], -[0.3655797583594, -0.2752961203628], -[0.3706743295734, -0.2755071257879], -[0.3757576848091, -0.2757229402382], -[0.3808296116163, -0.2759436765123], -[0.3858898952506, -0.2761694527103], -[0.3909383186613, -0.2764003925292], -[0.3959746624845, -0.2766366255778], -[0.4009987050457, -0.2768782877138], -[0.406010222369, -0.2771255214031], -[0.411008988198, -0.277378476104], -[0.4159947740277, -0.2776373086782], -[0.4209673491502, -0.2779021838308], -[0.4259264807163, -0.2781732745804], -[0.4308719338148, -0.2784507627632], -[0.4358034715731, -0.278734839572], -[0.440720855282, -0.279025706135], -[0.4456238445476, -0.2793235741341], -[0.4505121974756, -0.2796286664696], -[0.4553856708921, -0.2799412179709], -[0.4602440206062, -0.2802614761588], -[0.4650870017209, -0.2805897020632], -[0.4699143689993, -0.2809261710972], -[0.4747258772937, -0.2812711739952], -[0.4795212820478, -0.2816250178153], -[0.4843003398812, -0.2819880270121], -[0.4890628092687, -0.2823605445819], -[0.4938084513282, -0.2827429332848], -[0.4985370307314, -0.2831355769456], -[0.5032483167553, -0.2835388818363], -[0.5079420844939, -0.2839532781403], -[0.5126181162501, -0.2843792214997], -[0.5172762031351, -0.2848171946412], -[0.5219161468976, -0.2852677090783], -[0.5265377620155, -0.2857313068803], -[0.5311408780798, -0.2862085624973], -[0.5357253425053, -0.2867000846224], -[0.5402910236028, -0.2872065180699], -[0.54483781405, -0.2877285456359], -[0.5493656347964, -0.2882668898998], -[0.5538744394357, -0.2888223149171], -[0.5583642190792, -0.2893956277283], -[0.5628350077431, -0.2899876796124], -[0.567286888267, -0.2905993669752], -[0.571719998752, -0.2912316317558], -[0.5761345394846, -0.2918854612098], -[0.5805307802832, -0.2925618869089], -[0.5849090681612, -0.293261982777], -[0.5892698351496, -0.2939868619752], -[0.5936130647717, -0.2947371869348], -[-0.5914375967561, -0.2909692668711], -[-0.5870624839855, -0.2902153069461], -[-0.5826705758696, -0.2894860778665], -[-0.5782619630928, -0.2887809649753], -[-0.5738362384238, -0.2880989311077], -[-0.5693930710948, -0.2874389736781], -[-0.5649322001369, -0.2868001274833], -[-0.5604534278213, -0.2861814665397], -[-0.5559566133358, -0.2855821051017], -[-0.5514416667865, -0.2850011980067], -[-0.5469085435847, -0.2844379404749], -[-0.5423572392495, -0.2838915674792], -[-0.5377877846431, -0.2833613527851], -[-0.5332002416309, -0.2828466077454], -[-0.5285946991578, -0.2823466799209], -[-0.5239712697183, -0.2818609515833], -[-0.5193300861963, -0.2813888381503], -[-0.5146712990465, -0.2809297865869], -[-0.50999507379, -0.2804832738048], -[-0.5053015887947, -0.28004880508], -[-0.5005910333141, -0.2796259125075], -[-0.4958636057578, -0.2792141535039], -[-0.4911195121706, -0.2788131093659], -[-0.4863589648961, -0.2784223838925], -[-0.4815821814064, -0.2780416020719], -[-0.4767893832772, -0.2776704088362], -[-0.4719807952931, -0.2773084678828], -[-0.4671566446682, -0.2769554605624], -[-0.4623171603668, -0.2766110848326], -[-0.457462572514, -0.2762750542726], -[-0.4525931118851, -0.2759470971594], -[-0.4477090094636, -0.2756269556007], -[-0.4428104960606, -0.2753143847222], -[-0.4378978019878, -0.2750091519061], -[-0.4329711567764, -0.2747110360792], -[-0.4280307889385, -0.2744198270451], -[-0.423076925764, -0.2741353248604], -[-0.4181097931492, -0.2738573392504], -[-0.4131296154531, -0.2735856890625], -[-0.4081366153787, -0.2733202017544], -[-0.4031310138743, -0.2730607129158], -[-0.3981130300549, -0.2728070658191], -[-0.3930828811388, -0.2725591110003], -[-0.3880407823983, -0.2723167058654], -[-0.3829869471242, -0.2720797143215], -[-0.377921586599, -0.2718480064317], -[-0.3728449100814, -0.2716214580904], -[-0.3677571247975, -0.27139995072], -[-0.3626584359401, -0.2711833709844], -[-0.3575490466733, -0.2709716105221], -[-0.3524291581432, -0.2707645656935], -[-0.3472989694922, -0.2705621373446], -[-0.3421586778781, -0.2703642305844], -[-0.3370084784957, -0.2701707545753], -[-0.331848564602, -0.2699816223366], -[-0.3266791275433, -0.2697967505579], -[-0.3215003567845, -0.2696160594252], -[-0.3163124399397, -0.2694394724557], -[-0.3111155628049, -0.2692669163424], -[-0.3059099093914, -0.2690983208076], -[-0.30069566196, -0.2689336184645], -[-0.2954730010558, -0.2687727446867], -[-0.2902421055446, -0.2686156374846], -[-0.285003152648, -0.2684622373892], -[-0.2797563179803, -0.2683124873416], -[-0.2745017755845, -0.2681663325888], -[-0.2692396979692, -0.2680237205855], -[-0.2639702561448, -0.2678846009003], -[-0.2586936196598, -0.2677489251278], -[-0.2534099566374, -0.2676166468051], -[-0.2481194338114, -0.267487721332], -[-0.242822216562, -0.2673621058968], -[-0.2375184689512, -0.2672397594045], -[-0.2322083537583, -0.2671206424102], -[-0.2268920325148, -0.2670047170543], -[-0.221569665539, -0.2668919470028], -[-0.2162414119701, -0.2667822973892], -[-0.2109074298023, -0.2666757347606], -[-0.2055678759181, -0.2665722270256], -[-0.2002229061217, -0.2664717434053], -[-0.1948726751715, -0.2663742543872], -[-0.1895173368129, -0.2662797316805], -[-0.1841570438097, -0.2661881481749], -[-0.1787919479765, -0.2660994779003], -[-0.1734222002093, -0.2660136959896], -[-0.1680479505171, -0.2659307786426], -[-0.162669348052, -0.2658507030925], -[-0.1572865411395, -0.2657734475738], -[-0.1518996773089, -0.2656989912915], -[-0.1465089033222, -0.2656273143929], -[-0.1411143652039, -0.2655583979398], -[-0.1357162082699, -0.2654922238831], -[-0.1303145771559, -0.2654287750382], -[-0.1249096158462, -0.265368035062], -[-0.1195014677016, -0.2653099884312], -[-0.1140902754875, -0.2652546204219], -[-0.1086761814011, -0.2652019170899], -[-0.1032593270995, -0.265151865253], -[-0.09783985372611, -0.2651044524735], -[-0.09241790193817, -0.2650596670425], -[-0.08699361193328, -0.2650174979647], -[-0.081567123476, -0.2649779349445], -[-0.07613857592425, -0.2649409683728], -[-0.07070810825554, -0.2649065893153], -[-0.06527585909303, -0.2648747895008], -[-0.05984196673141, -0.264845561311], -[-0.05440656916276, -0.2648188977713], -[-0.04896980410213, -0.2647947925419], -[-0.04353180901311, -0.2647732399097], -[-0.03809272113329, -0.264754234782], -[-0.03265267749956, -0.2647377726795], -[-0.02721181497344, -0.2647238497312], -[-0.0217702702662, -0.2647124626697], -[-0.01632817996404, -0.264703608827], -[-0.01088568055313, -0.2646972861313], -[-0.005442908444706, -0.2646934931047], -[-4.789742356684e-14, -0.2646922288608], -[0.005442908444705, -0.2646934931046], -[0.01088568055313, -0.2646972861313], -[0.01632817996404, -0.264703608827], -[0.0217702702662, -0.2647124626697], -[0.02721181497344, -0.2647238497312], -[0.03265267749957, -0.2647377726795], -[0.03809272113329, -0.264754234782], -[0.04353180901311, -0.2647732399097], -[0.04896980410213, -0.2647947925419], -[0.05440656916277, -0.2648188977713], -[0.05984196673142, -0.264845561311], -[0.06527585909303, -0.2648747895008], -[0.07070810825554, -0.2649065893153], -[0.07613857592425, -0.2649409683728], -[0.081567123476, -0.2649779349445], -[0.08699361193328, -0.2650174979647], -[0.09241790193818, -0.2650596670425], -[0.09783985372611, -0.2651044524735], -[0.1032593270995, -0.265151865253], -[0.1086761814011, -0.2652019170899], -[0.1140902754875, -0.2652546204219], -[0.1195014677016, -0.2653099884312], -[0.1249096158462, -0.265368035062], -[0.1303145771559, -0.2654287750382], -[0.1357162082699, -0.2654922238831], -[0.1411143652039, -0.2655583979398], -[0.1465089033222, -0.2656273143929], -[0.1518996773089, -0.2656989912915], -[0.1572865411395, -0.2657734475738], -[0.162669348052, -0.2658507030925], -[0.1680479505171, -0.2659307786426], -[0.1734222002093, -0.2660136959896], -[0.1787919479765, -0.2660994779003], -[0.1841570438097, -0.2661881481749], -[0.1895173368129, -0.2662797316805], -[0.1948726751715, -0.2663742543872], -[0.2002229061217, -0.2664717434053], -[0.2055678759181, -0.2665722270256], -[0.2109074298023, -0.2666757347606], -[0.2162414119701, -0.2667822973892], -[0.221569665539, -0.2668919470028], -[0.2268920325148, -0.2670047170543], -[0.2322083537583, -0.2671206424102], -[0.2375184689512, -0.2672397594045], -[0.242822216562, -0.2673621058968], -[0.2481194338115, -0.267487721332], -[0.2534099566374, -0.2676166468051], -[0.2586936196598, -0.2677489251278], -[0.2639702561448, -0.2678846009003], -[0.2692396979692, -0.2680237205855], -[0.2745017755845, -0.2681663325888], -[0.2797563179803, -0.2683124873416], -[0.285003152648, -0.2684622373892], -[0.2902421055446, -0.2686156374846], -[0.2954730010558, -0.2687727446867], -[0.30069566196, -0.2689336184645], -[0.3059099093914, -0.2690983208076], -[0.3111155628049, -0.2692669163424], -[0.3163124399397, -0.2694394724557], -[0.3215003567845, -0.2696160594252], -[0.3266791275433, -0.2697967505579], -[0.331848564602, -0.2699816223366], -[0.3370084784957, -0.2701707545753], -[0.3421586778781, -0.2703642305844], -[0.3472989694922, -0.2705621373446], -[0.3524291581432, -0.2707645656935], -[0.3575490466734, -0.2709716105221], -[0.3626584359401, -0.2711833709844], -[0.3677571247975, -0.27139995072], -[0.3728449100814, -0.2716214580904], -[0.377921586599, -0.2718480064317], -[0.3829869471242, -0.2720797143215], -[0.3880407823983, -0.2723167058654], -[0.3930828811388, -0.2725591110003], -[0.3981130300549, -0.2728070658191], -[0.4031310138743, -0.2730607129158], -[0.4081366153787, -0.2733202017544], -[0.4131296154531, -0.2735856890625], -[0.4181097931492, -0.2738573392504], -[0.423076925764, -0.2741353248604], -[0.4280307889385, -0.2744198270451], -[0.4329711567764, -0.2747110360792], -[0.4378978019878, -0.2750091519061], -[0.4428104960606, -0.2753143847222], -[0.4477090094636, -0.2756269556007], -[0.4525931118851, -0.2759470971594], -[0.457462572514, -0.2762750542726], -[0.4623171603669, -0.2766110848326], -[0.4671566446682, -0.2769554605624], -[0.4719807952931, -0.2773084678828], -[0.4767893832771, -0.2776704088362], -[0.4815821814064, -0.2780416020719], -[0.4863589648961, -0.2784223838925], -[0.4911195121706, -0.2788131093659], -[0.4958636057578, -0.2792141535039], -[0.5005910333141, -0.2796259125075], -[0.5053015887949, -0.2800488050799], -[0.50999507379, -0.2804832738047], -[0.5146712990465, -0.2809297865869], -[0.5193300861963, -0.2813888381503], -[0.5239712697183, -0.2818609515833], -[0.5285946991578, -0.2823466799209], -[0.5332002416309, -0.2828466077454], -[0.5377877846431, -0.2833613527851], -[0.5423572392496, -0.2838915674791], -[0.5469085435848, -0.2844379404747], -[0.551441666787, -0.2850011980062], -[0.555956613336, -0.2855821051014], -[0.5604534278213, -0.2861814665397], -[0.5649322001368, -0.2868001274834], -[0.5693930710948, -0.2874389736781], -[0.5738362384238, -0.2880989311078], -[0.5782619630928, -0.2887809649754], -[0.5826705758697, -0.2894860778663], -[0.5870624839858, -0.2902153069454], -[0.5914375967262, -0.2909692669678], -[-0.5892442478605, -0.2871703987508], -[-0.5848385586916, -0.2864131191502], -[-0.5804167736054, -0.2856799464651], -[-0.575979044782, -0.2849702661001], -[-0.5715249880104, -0.2842831089852], -[-0.567054288108, -0.2836175366928], -[-0.5625666932107, -0.2829726439621], -[-0.5580620091277, -0.2823475604068], -[-0.553540093872, -0.2817414515257], -[-0.5490008524432, -0.2811535191312], -[-0.5444442319124, -0.2805830013046], -[-0.5398702168496, -0.2800291719605], -[-0.5352788250958, -0.2794913401206], -[-0.5306701038926, -0.278968848955], -[-0.5260441263565, -0.2784610746571], -[-0.5214009882869, -0.2779674252007], -[-0.5167408052884, -0.2774873390212], -[-0.512063710187, -0.2770202836554], -[-0.5073698507187, -0.2765657543628], -[-0.5026593874662, -0.2761232727549], -[-0.4979324920254, -0.2756923854426], -[-0.4931893453755, -0.2752726627185], -[-0.4884301364364, -0.2748636972801], -[-0.4836550607932, -0.274465103001], -[-0.47886431957, -0.2740765137546], -[-0.4740581184377, -0.2736975822915], -[-0.4692366667418, -0.273327979173], -[-0.4644001767351, -0.2729673917592], -[-0.4595488629063, -0.2726155232532], -[-0.4546829413911, -0.2722720917974], -[-0.4498026294582, -0.2719368296226], -[-0.4449081450608, -0.2716094822462], -[-0.4399997064468, -0.271289807719], -[-0.4350775318191, -0.2709775759159], -[-0.4301418390431, -0.2706725678711], -[-0.4251928453929, -0.270374575153], -[-0.4202307673338, -0.270083399278], -[-0.4152558203355, -0.26979885116], -[-0.4102682187132, -0.2695207505945], -[-0.4052681754928, -0.2692489257736], -[-0.4002559022978, -0.2689832128318], -[-0.3952316092544, -0.2687234554194], -[-0.390195504914, -0.2684695043019], -[-0.3851477961896, -0.2682212169842], -[-0.3800886883053, -0.2679784573577], -[-0.3750183847573, -0.2677410953685], -[-0.3699370872841, -0.2675090067058], -[-0.3648449958461, -0.2672820725095], -[-0.3597423086122, -0.2670601790941], -[-0.3546292219533, -0.2668432176903], -[-0.3495059304417, -0.266631084201], -[-0.3443726268551, -0.2664236789719], -[-0.3392295021854, -0.2662209065752], -[-0.3340767456509, -0.2660226756066], -[-0.3289145447124, -0.2658288984926], -[-0.3237430850917, -0.2656394913103], -[-0.3185625507922, -0.2654543736164], -[-0.3133731241225, -0.2652734682861], -[-0.3081749857208, -0.2650967013615], -[-0.3029683145819, -0.2649240019075], -[-0.297753288084, -0.2647553018764], -[-0.2925300820181, -0.2645905359797], -[-0.2872988706172, -0.264429641567], -[-0.2820598265867, -0.2642725585111], -[-0.2768131211351, -0.2641192290999], -[-0.2715589240056, -0.2639695979334], -[-0.266297403507, -0.2638236118267], -[-0.2610287265464, -0.263681219718], -[-0.2557530586604, -0.2635423725813], -[-0.2504705640479, -0.263407023344], -[-0.2451814056016, -0.2632751268083], -[-0.2398857449403, -0.2631466395773], -[-0.2345837424408, -0.2630215199844], -[-0.22927555727, -0.2628997280265], -[-0.2239613474163, -0.2627812253012], -[-0.2186412697215, -0.262665974946], -[-0.2133154799118, -0.2625539415818], -[-0.207984132629, -0.2624450912587], -[-0.2026473814616, -0.2623393914047], -[-0.1973053789755, -0.262236810777], -[-0.1919582767441, -0.2621373194157], -[-0.1866062253786, -0.2620408886], -[-0.1812493745581, -0.2619474908067], -[-0.1758878730588, -0.2618570996706], -[-0.170521868784, -0.2617696899471], -[-0.1651515087925, -0.2616852374765], -[-0.1597769393282, -0.2616037191506], -[-0.1543983058478, -0.2615251128806], -[-0.149015752975, -0.2614493974258], -[-0.1436294245091, -0.2613765526431], -[-0.1382394629107, -0.2613065590338], -[-0.1328460149527, -0.2612394006126], -[-0.1274492176836, -0.2611750569393], -[-0.1220492141903, -0.261113512611], -[-0.1166461452032, -0.2610547519125], -[-0.1112401508863, -0.2609987599472], -[-0.1058313708636, -0.2609455226182], -[-0.1004199442456, -0.2608950266094], -[-0.09500600965531, -0.2608472593694], -[-0.08958970525465, -0.260802209095], -[-0.08417116876986, -0.2607598647169], -[-0.07875053751747, -0.2607202158853], -[-0.07332794842979, -0.2606832529574], -[-0.06790353808034, -0.2606489669853], -[-0.06247744270911, -0.2606173497049], -[-0.05704979824781, -0.260588393526], -[-0.05162074034485, -0.2605620915226], -[-0.04619040439033, -0.2605384374248], -[-0.04075892554112, -0.2605174256113], -[-0.03532643874516, -0.2604990511018], -[-0.02989307876671, -0.2604833095521], -[-0.0244589802107, -0.2604701972478], -[-0.01902427754742, -0.2604597111007], -[-0.01358910513703, -0.2604518486444], -[-0.008153597254121, -0.2604466080319], -[-0.002717888112135, -0.2604439880331], -[0.002717888112136, -0.2604439880331], -[0.008153597254122, -0.2604466080319], -[0.01358910513703, -0.2604518486444], -[0.01902427754742, -0.2604597111007], -[0.02445898021071, -0.2604701972478], -[0.02989307876671, -0.2604833095521], -[0.03532643874517, -0.2604990511018], -[0.04075892554112, -0.2605174256113], -[0.04619040439038, -0.2605384374249], -[0.05162074034485, -0.2605620915226], -[0.05704979824781, -0.260588393526], -[0.06247744270912, -0.2606173497049], -[0.06790353808034, -0.2606489669853], -[0.07332794842979, -0.2606832529574], -[0.07875053751747, -0.2607202158853], -[0.08417116876986, -0.2607598647169], -[0.08958970525465, -0.260802209095], -[0.09500600965531, -0.2608472593694], -[0.1004199442456, -0.2608950266094], -[0.1058313708636, -0.2609455226182], -[0.1112401508863, -0.2609987599472], -[0.1166461452032, -0.2610547519125], -[0.1220492141903, -0.261113512611], -[0.1274492176836, -0.2611750569393], -[0.1328460149527, -0.2612394006126], -[0.1382394629107, -0.2613065590338], -[0.1436294245091, -0.2613765526431], -[0.149015752975, -0.2614493974258], -[0.1543983058478, -0.2615251128806], -[0.1597769393282, -0.2616037191506], -[0.1651515087925, -0.2616852374765], -[0.170521868784, -0.2617696899471], -[0.1758878730588, -0.2618570996706], -[0.1812493745581, -0.2619474908067], -[0.1866062253786, -0.2620408886], -[0.1919582767441, -0.2621373194157], -[0.1973053789755, -0.262236810777], -[0.2026473814616, -0.2623393914047], -[0.207984132629, -0.2624450912587], -[0.2133154799118, -0.2625539415818], -[0.2186412697215, -0.262665974946], -[0.2239613474163, -0.2627812253012], -[0.22927555727, -0.2628997280265], -[0.2345837424408, -0.2630215199844], -[0.2398857449403, -0.2631466395773], -[0.2451814056016, -0.2632751268083], -[0.2504705640479, -0.263407023344], -[0.2557530586604, -0.2635423725813], -[0.2610287265464, -0.263681219718], -[0.266297403507, -0.2638236118267], -[0.2715589240056, -0.2639695979334], -[0.2768131211351, -0.2641192290999], -[0.2820598265867, -0.2642725585111], -[0.2872988706172, -0.264429641567], -[0.2925300820181, -0.2645905359797], -[0.297753288084, -0.2647553018764], -[0.3029683145819, -0.2649240019075], -[0.3081749857208, -0.2650967013615], -[0.3133731241225, -0.2652734682861], -[0.3185625507922, -0.2654543736164], -[0.3237430850917, -0.2656394913103], -[0.3289145447124, -0.2658288984926], -[0.3340767456509, -0.2660226756066], -[0.3392295021854, -0.2662209065752], -[0.3443726268551, -0.2664236789719], -[0.3495059304417, -0.266631084201], -[0.3546292219533, -0.2668432176903], -[0.3597423086122, -0.2670601790941], -[0.3648449958461, -0.2672820725095], -[0.3699370872841, -0.2675090067058], -[0.3750183847573, -0.2677410953685], -[0.3800886883053, -0.2679784573577], -[0.3851477961896, -0.2682212169842], -[0.390195504914, -0.2684695043019], -[0.3952316092544, -0.2687234554194], -[0.4002559022978, -0.2689832128318], -[0.4052681754928, -0.2692489257736], -[0.4102682187132, -0.2695207505945], -[0.4152558203355, -0.26979885116], -[0.4202307673338, -0.270083399278], -[0.4251928453929, -0.270374575153], -[0.4301418390431, -0.2706725678711], -[0.4350775318191, -0.2709775759159], -[0.4399997064468, -0.271289807719], -[0.4449081450608, -0.2716094822462], -[0.4498026294582, -0.2719368296226], -[0.4546829413911, -0.2722720917974], -[0.4595488629063, -0.2726155232532], -[0.4644001767351, -0.2729673917592], -[0.4692366667417, -0.273327979173], -[0.4740581184377, -0.2736975822915], -[0.47886431957, -0.2740765137546], -[0.4836550607932, -0.274465103001], -[0.4884301364364, -0.2748636972801], -[0.4931893453755, -0.2752726627185], -[0.4979324920254, -0.2756923854426], -[0.5026593874662, -0.2761232727549], -[0.5073698507187, -0.2765657543628], -[0.512063710187, -0.2770202836554], -[0.5167408052884, -0.2774873390213], -[0.5214009882869, -0.2779674252007], -[0.5260441263565, -0.2784610746571], -[0.5306701038926, -0.278968848955], -[0.5352788250958, -0.2794913401206], -[0.5398702168496, -0.2800291719605], -[0.5444442319124, -0.2805830013046], -[0.5490008524432, -0.2811535191313], -[0.5535400938724, -0.2817414515251], -[0.5580620091278, -0.2823475604067], -[0.5625666932106, -0.2829726439622], -[0.567054288108, -0.2836175366928], -[0.5715249880104, -0.2842831089852], -[0.575979044782, -0.2849702661001], -[0.5804167736054, -0.2856799464651], -[0.5848385586916, -0.28641311915], -[0.5892442478305, -0.2871703988499], -[-0.5870335919044, -0.2833416364112], -[-0.5825985816192, -0.282581333708], -[-0.5781481026076, -0.2818445981786], -[-0.5736823916452, -0.2811307702212], -[-0.569201085905, -0.2804389420362], -[-0.5647038850964, -0.2797682331179], -[-0.5601905465445, -0.279117792529], -[-0.5556608803074, -0.2784868004827], -[-0.5511147444235, -0.2778744693283], -[-0.5465520403536, -0.2772800440325], -[-0.5419727086677, -0.276702802242], -[-0.5373767250017, -0.2761420540084], -[-0.532764096303, -0.27559714124], -[-0.5281348573699, -0.2750674369442], -[-0.5234890676802, -0.2745523443109], -[-0.5188268085019, -0.2740512956805], -[-0.5141481802724, -0.2735637514324], -[-0.5094533002301, -0.2730891988258], -[-0.5047423002836, -0.2726271508122], -[-0.5000153250959, -0.2721771448464], -[-0.4952725303726, -0.2717387417026], -[-0.4905140813306, -0.2713115243137], -[-0.4857401513338, -0.2708950966398], -[-0.480950920679, -0.2704890825726], -[-0.4761465755176, -0.2700931248808], -[-0.4713273068997, -0.269706884199], -[-0.4664933099273, -0.2693300380617], -[-0.4616447830052, -0.2689622799837], -[-0.456781927181, -0.268603318587], -[-0.4519049455617, -0.2682528767721], -[-0.447014042801, -0.2679106909349], -[-0.4421094246491, -0.2675765102266], -[-0.4371912975568, -0.2672500958543], -[-0.4322598683295, -0.2669312204227], -[-0.4273153438253, -0.2666196673131], -[-0.4223579306903, -0.2663152300989], -[-0.4173878351308, -0.2660177119952], -[-0.4124052627137, -0.2657269253412], -[-0.4074104181956, -0.265442691113], -[-0.4024035053754, -0.2651648384655], -[-0.397384726968, -0.2648932043015], -[-0.3923542844975, -0.2646276328662], -[-0.3873123782064, -0.2643679753661], -[-0.3822592069802, -0.2641140896102], -[-0.3771949682844, -0.2638658396723], -[-0.372119858114, -0.2636230955734], -[-0.3670340709524, -0.263385732983], -[-0.3619377997397, -0.2631536329367], -[-0.3568312358489, -0.2629266815718], -[-0.3517145690691, -0.262704769877], -[-0.3465879875949, -0.2624877934566], -[-0.3414516780215, -0.2622756523091], -[-0.3363058253436, -0.2620682506172], -[-0.3311506129603, -0.2618654965506], -[-0.3259862226815, -0.261667302079], -[-0.3208128347395, -0.2614735827966], -[-0.3156306278018, -0.2612842577558], -[-0.3104397789875, -0.2610992493096], -[-0.3052404638852, -0.2609184829637], -[-0.3000328565728, -0.2607418872356], -[-0.2948171296392, -0.2605693935225], -[-0.2895934542069, -0.260400935975], -[-0.284361999956, -0.2602364513787], -[-0.2791229351493, -0.2600758790417], -[-0.2738764266579, -0.2599191606877], -[-0.268622639988, -0.2597662403555], -[-0.2633617393074, -0.2596170643029], -[-0.2580938874735, -0.2594715809165], -[-0.2528192460608, -0.2593297406255], -[-0.2475379753895, -0.2591914958204], -[-0.2422502345535, -0.2590568007757], -[-0.236956181449, -0.2589256115764], -[-0.2316559728027, -0.2587978860487], -[-0.2263497642019, -0.2586735836941], -[-0.2210377101217, -0.2585526656263], -[-0.2157199639542, -0.2584350945122], -[-0.2103966780372, -0.2583208345155], -[-0.2050680036826, -0.2582098512426], -[-0.1997340912049, -0.2581021116925], -[-0.1943950899495, -0.2579975842078], -[-0.1890511483209, -0.2578962384294], -[-0.1837024138107, -0.2577980452527], -[-0.1783490330255, -0.2577029767863], -[-0.1729911517146, -0.2576110063132], -[-0.1676289147974, -0.2575221082531], -[-0.162262466391, -0.2574362581274], -[-0.1568919498374, -0.2573534325256], -[-0.1515175077304, -0.257273609074], -[-0.1461392821359, -0.2571967660997], -[-0.1407574139984, -0.2571228829071], -[-0.1353720432973, -0.2570519382601], -[-0.1299833109525, -0.2569839239301], -[-0.1245913556657, -0.2569188098824], -[-0.1191963161665, -0.2568565839331], -[-0.1137983305529, -0.256797230207], -[-0.1083975363849, -0.2567407336661], -[-0.1029940707096, -0.2566870800903], -[-0.0975880700868, -0.2566362560599], -[-0.09217967061414, -0.2565882489383], -[-0.08676900795227, -0.256543046857], -[-0.08135621734977, -0.2565006387002], -[-0.07594143366806, -0.2564610140917], -[-0.07052479140609, -0.2564241633818], -[-0.06510642472506, -0.256390077636], -[-0.0596864674729, -0.2563587486237], -[-0.05426505320875, -0.2563301688083], -[-0.04884231522731, -0.2563043313385], -[-0.04341838658316, -0.2562812300399], -[-0.03799340011493, -0.2562608594074], -[-0.0325674884695, -0.2562432145989], -[-0.02714078412607, -0.2562282914293], -[-0.0217134194202, -0.2562160863661], -[-0.01628552656784, -0.2562065965242], -[-0.01085723768928, -0.2561998196637], -[-0.005428684833074, -0.2561957541861], -[-6.717741042014e-13, -0.2561943991333], -[0.005428684833076, -0.2561957541861], -[0.01085723768928, -0.2561998196637], -[0.01628552656785, -0.2562065965242], -[0.02171341942021, -0.2562160863661], -[0.02714078412607, -0.2562282914293], -[0.0325674884695, -0.2562432145989], -[0.03799340011493, -0.2562608594074], -[0.04341838658316, -0.2562812300399], -[0.04884231522731, -0.2563043313385], -[0.05426505320875, -0.2563301688083], -[0.0596864674729, -0.2563587486237], -[0.06510642472513, -0.2563900776362], -[0.07052479140609, -0.2564241633818], -[0.07594143366806, -0.2564610140917], -[0.08135621734978, -0.2565006387002], -[0.08676900795227, -0.256543046857], -[0.09217967061415, -0.2565882489383], -[0.0975880700868, -0.2566362560599], -[0.1029940707096, -0.2566870800903], -[0.1083975363849, -0.2567407336661], -[0.1137983305529, -0.256797230207], -[0.1191963161665, -0.2568565839331], -[0.1245913556657, -0.2569188098824], -[0.1299833109525, -0.2569839239301], -[0.1353720432973, -0.2570519382601], -[0.1407574139984, -0.2571228829071], -[0.1461392821359, -0.2571967660997], -[0.1515175077304, -0.257273609074], -[0.1568919498374, -0.2573534325256], -[0.162262466391, -0.2574362581274], -[0.1676289147974, -0.2575221082531], -[0.1729911517146, -0.2576110063132], -[0.1783490330255, -0.2577029767863], -[0.1837024138107, -0.2577980452527], -[0.1890511483209, -0.2578962384294], -[0.1943950899495, -0.2579975842078], -[0.1997340912049, -0.2581021116925], -[0.2050680036826, -0.2582098512426], -[0.2103966780372, -0.2583208345155], -[0.2157199639543, -0.2584350945122], -[0.2210377101217, -0.2585526656263], -[0.2263497642019, -0.2586735836941], -[0.2316559728027, -0.2587978860487], -[0.236956181449, -0.2589256115765], -[0.2422502345535, -0.2590568007757], -[0.2475379753895, -0.2591914958204], -[0.2528192460608, -0.2593297406255], -[0.2580938874735, -0.2594715809165], -[0.2633617393074, -0.2596170643029], -[0.268622639988, -0.2597662403555], -[0.2738764266579, -0.2599191606877], -[0.2791229351493, -0.2600758790417], -[0.284361999956, -0.2602364513787], -[0.2895934542069, -0.260400935975], -[0.2948171296392, -0.2605693935225], -[0.3000328565728, -0.2607418872356], -[0.3052404638852, -0.2609184829637], -[0.3104397789875, -0.2610992493096], -[0.3156306278018, -0.2612842577558], -[0.3208128347395, -0.2614735827966], -[0.3259862226815, -0.261667302079], -[0.3311506129603, -0.2618654965506], -[0.3363058253436, -0.2620682506172], -[0.3414516780215, -0.2622756523091], -[0.3465879875949, -0.2624877934566], -[0.3517145690691, -0.262704769877], -[0.3568312358489, -0.2629266815718], -[0.3619377997397, -0.2631536329367], -[0.3670340709524, -0.263385732983], -[0.372119858114, -0.2636230955734], -[0.3771949682844, -0.2638658396723], -[0.3822592069802, -0.2641140896102], -[0.3873123782064, -0.2643679753661], -[0.3923542844975, -0.2646276328662], -[0.397384726968, -0.2648932043015], -[0.4024035053754, -0.2651648384655], -[0.4074104181956, -0.265442691113], -[0.4124052627137, -0.2657269253412], -[0.4173878351308, -0.2660177119952], -[0.4223579306903, -0.2663152300989], -[0.4273153438252, -0.2666196673131], -[0.4322598683295, -0.2669312204227], -[0.4371912975568, -0.2672500958543], -[0.4421094246491, -0.2675765102266], -[0.447014042801, -0.2679106909349], -[0.4519049455617, -0.2682528767721], -[0.456781927181, -0.268603318587], -[0.4616447830053, -0.2689622799837], -[0.4664933099273, -0.2693300380616], -[0.4713273068997, -0.269706884199], -[0.4761465755176, -0.2700931248808], -[0.480950920679, -0.2704890825726], -[0.4857401513338, -0.2708950966398], -[0.4905140813306, -0.2713115243137], -[0.4952725303726, -0.2717387417026], -[0.5000153250959, -0.2721771448464], -[0.5047423002836, -0.2726271508122], -[0.5094533002302, -0.2730891988257], -[0.5141481802724, -0.2735637514325], -[0.5188268085019, -0.2740512956805], -[0.5234890676802, -0.2745523443109], -[0.5281348573699, -0.2750674369442], -[0.532764096303, -0.27559714124], -[0.5373767250017, -0.2761420540084], -[0.5419727086677, -0.2767028022421], -[0.5465520403535, -0.2772800440326], -[0.5511147444232, -0.2778744693287], -[0.555660880307, -0.2784868004833], -[0.5601905465443, -0.2791177925292], -[0.5647038850964, -0.2797682331179], -[0.569201085905, -0.2804389420362], -[0.5736823916452, -0.2811307702212], -[0.5781481026077, -0.2818445981786], -[0.5825985816192, -0.282581333708], -[0.5870335918729, -0.2833416365174], -[-0.5848062467008, -0.27948402981], -[-0.5803430439887, -0.2787209182714], -[-0.5758649812402, -0.2779809780615], -[-0.5713723544721, -0.2772633961532], -[-0.5668648207408, -0.2765673200923], -[-0.5623420939435, -0.2758919218526], -[-0.5578039405557, -0.2752363998885], -[-0.5532501753879, -0.2745999805972], -[-0.5486806574388, -0.2739819192645], -[-0.5440952858972, -0.2733815005802], -[-0.5394939963415, -0.2727980387796], -[-0.5348767571587, -0.2722308774857], -[-0.5302435662, -0.2716793893065], -[-0.5255944476803, -0.2711429752392], -[-0.5209294493226, -0.2706210639247], -[-0.5162486397392, -0.2701131107908], -[-0.5115521060439, -0.2696185971156], -[-0.5068399516817, -0.269137029038], -[-0.5021122944635, -0.2686679365358], -[-0.4973692647916, -0.2682108723913], -[-0.4926110040616, -0.2677654111557], -[-0.4878376632269, -0.2673311481262], -[-0.4830494015114, -0.2669076983422], -[-0.4782463852577, -0.2664946956081], -[-0.473428786898, -0.2660917915482], -[-0.4685967840358, -0.265698654695], -[-0.4637505586283, -0.2653149696152], -[-0.4588902962591, -0.2649404360737], -[-0.4540161854919, -0.2645747682356], -[-0.4491284172976, -0.2642176939077], -[-0.4442271845462, -0.2638689538175], -[-0.4393126815577, -0.2635283009297], -[-0.4343851037054, -0.263195499799], -[-0.4294446470658, -0.2628703259576], -[-0.4244915081106, -0.2625525653367], -[-0.4195258834357, -0.2622420137202], -[-0.4145479695243, -0.2619384762281], -[-0.4095579625388, -0.2616417668307], -[-0.40455605814, -0.2613517078888], -[-0.3995424513291, -0.2610681297215], -[-0.3945173363121, -0.2607908701976], -[-0.3894809063814, -0.2605197743511], -[-0.3844333538151, -0.2602546940187], -[-0.379374869791, -0.2599954874976], -[-0.3743056443133, -0.2597420192234], -[-0.3692258661521, -0.259494159466], -[-0.3641357227923, -0.2592517840431], -[-0.3590354003921, -0.2590147740494], -[-0.3539250837504, -0.2587830156021], -[-0.3488049562804, -0.2585563995996], -[-0.3436751999908, -0.2583348214946], -[-0.3385359954718, -0.258118181079], -[-0.3333875218872, -0.2579063822821], -[-0.3282299569699, -0.2576993329783], -[-0.3230634770224, -0.2574969448065], -[-0.3178882569201, -0.257299132999], -[-0.3127044701183, -0.2571058162198], -[-0.3075122886613, -0.2569169164118], -[-0.3023118831946, -0.2567323586514], -[-0.2971034229785, -0.2565520710123], -[-0.2918870759042, -0.2563759844353], -[-0.2866630085112, -0.2562040326054], -[-0.2814313860059, -0.2560361518358], -[-0.2761923722819, -0.2558722809575], -[-0.2709461299412, -0.2557123612145], -[-0.2656928203157, -0.2555563361654], -[-0.2604326034906, -0.2554041515887], -[-0.2551656383278, -0.2552557553943], -[-0.2498920824895, -0.2551110975385], -[-0.2446120924631, -0.2549701299443], -[-0.239325823586, -0.2548328064248], -[-0.2340334300709, -0.2546990826113], -[-0.2287350650312, -0.2545689158844], -[-0.2234308805065, -0.2544422653093], -[-0.2181210274889, -0.2543190915733], -[-0.2128056559486, -0.254199356928], -[-0.20748491486, -0.2540830251326], -[-0.2021589522278, -0.2539700614016], -[-0.1968279151133, -0.253860432354], -[-0.19149194966, -0.2537541059661], -[-0.1861512011202, -0.2536510515255], -[-0.1808058138806, -0.2535512395884], -[-0.1754559314887, -0.2534546419388], -[-0.1701016966783, -0.2533612315496], -[-0.1647432513951, -0.2532709825452], -[-0.1593807368232, -0.2531838701676], -[-0.1540142934099, -0.2530998707424], -[-0.1486440611532, -0.2530189616991], -[-0.1432701792546, -0.2529411212487], -[-0.1378927872202, -0.2528663281498], -[-0.1325120257147, -0.2527945595271], -[-0.1271280110351, -0.2527258113498], -[-0.1217409059274, -0.2526600494187], -[-0.1163508366179, -0.2525972626285], -[-0.1109579385711, -0.2525374349747], -[-0.1055623467408, -0.252480551308], -[-0.1001641955944, -0.2524265973151], -[-0.09476361913719, -0.2523755595015], -[-0.08936075093698, -0.2523274251743], -[-0.08395572414809, -0.2522821824273], -[-0.07854867153546, -0.2522398201261], -[-0.07313972549889, -0.252200327895], -[-0.06772901809684, -0.2521636961044], -[-0.06231668107034, -0.252129915859], -[-0.05690284586684, -0.2520989789879], -[-0.05148764366391, -0.252070878034], -[-0.04607120539295, -0.252045606246], -[-0.04065366176279, -0.2520231575698], -[-0.03523514328327, -0.2520035266418], -[-0.02981578028877, -0.2519867087825], -[-0.02439570296166, -0.2519726999908], -[-0.01897504135579, -0.2519614969398], -[-0.01355392541985, -0.2519530969723], -[-0.00813248502081, -0.2519474980984], -[-0.002710849967252, -0.2519446989926], -[0.002710849967254, -0.2519446989926], -[0.008132485020812, -0.2519474980984], -[0.01355392541985, -0.2519530969723], -[0.01897504135579, -0.2519614969398], -[0.02439570296167, -0.2519726999908], -[0.02981578028877, -0.2519867087825], -[0.03523514328327, -0.2520035266418], -[0.04065366176279, -0.2520231575698], -[0.04607120539295, -0.252045606246], -[0.05148764366391, -0.252070878034], -[0.05690284586684, -0.2520989789879], -[0.06231668107034, -0.252129915859], -[0.06772901809684, -0.2521636961044], -[0.0731397254989, -0.252200327895], -[0.07854867153546, -0.2522398201261], -[0.08395572414811, -0.2522821824274], -[0.08936075093699, -0.2523274251743], -[0.09476361913719, -0.2523755595015], -[0.1001641955944, -0.2524265973151], -[0.1055623467408, -0.252480551308], -[0.1109579385711, -0.2525374349747], -[0.1163508366179, -0.2525972626285], -[0.1217409059274, -0.2526600494187], -[0.1271280110351, -0.2527258113498], -[0.1325120257147, -0.2527945595271], -[0.1378927872202, -0.2528663281498], -[0.1432701792546, -0.2529411212487], -[0.1486440611532, -0.2530189616991], -[0.1540142934099, -0.2530998707424], -[0.1593807368232, -0.2531838701676], -[0.1647432513951, -0.2532709825452], -[0.1701016966783, -0.2533612315496], -[0.1754559314886, -0.2534546419388], -[0.1808058138806, -0.2535512395884], -[0.1861512011202, -0.2536510515255], -[0.19149194966, -0.2537541059661], -[0.1968279151133, -0.253860432354], -[0.2021589522278, -0.2539700614016], -[0.20748491486, -0.2540830251326], -[0.2128056559486, -0.254199356928], -[0.2181210274889, -0.2543190915733], -[0.2234308805065, -0.2544422653093], -[0.2287350650312, -0.2545689158844], -[0.2340334300709, -0.2546990826113], -[0.239325823586, -0.2548328064248], -[0.2446120924631, -0.2549701299443], -[0.2498920824895, -0.2551110975385], -[0.2551656383278, -0.2552557553943], -[0.2604326034906, -0.2554041515887], -[0.2656928203157, -0.2555563361654], -[0.2709461299412, -0.2557123612145], -[0.2761923722819, -0.2558722809575], -[0.2814313860059, -0.2560361518358], -[0.2866630085112, -0.2562040326054], -[0.2918870759042, -0.2563759844353], -[0.2971034229785, -0.2565520710123], -[0.3023118831946, -0.2567323586514], -[0.3075122886613, -0.2569169164118], -[0.3127044701183, -0.2571058162198], -[0.3178882569201, -0.257299132999], -[0.3230634770224, -0.2574969448065], -[0.3282299569699, -0.2576993329783], -[0.3333875218872, -0.2579063822821], -[0.3385359954718, -0.258118181079], -[0.3436751999908, -0.2583348214946], -[0.3488049562804, -0.2585563995996], -[0.3539250837504, -0.2587830156021], -[0.3590354003921, -0.2590147740494], -[0.3641357227923, -0.2592517840431], -[0.3692258661521, -0.259494159466], -[0.3743056443133, -0.2597420192234], -[0.379374869791, -0.2599954874976], -[0.3844333538151, -0.2602546940187], -[0.3894809063814, -0.2605197743511], -[0.3945173363121, -0.2607908701976], -[0.3995424513291, -0.2610681297215], -[0.40455605814, -0.2613517078888], -[0.4095579625388, -0.2616417668307], -[0.4145479695243, -0.2619384762281], -[0.4195258834357, -0.2622420137202], -[0.4244915081106, -0.2625525653367], -[0.4294446470659, -0.2628703259576], -[0.4343851037054, -0.263195499799], -[0.4393126815577, -0.2635283009297], -[0.4442271845462, -0.2638689538175], -[0.4491284172976, -0.2642176939077], -[0.4540161854919, -0.2645747682356], -[0.4588902962591, -0.2649404360737], -[0.4637505586283, -0.2653149696152], -[0.4685967840358, -0.265698654695], -[0.473428786898, -0.2660917915482], -[0.4782463852577, -0.2664946956081], -[0.4830494015114, -0.2669076983422], -[0.4878376632269, -0.2673311481262], -[0.4926110040616, -0.2677654111557], -[0.4973692647916, -0.2682108723913], -[0.5021122944635, -0.2686679365358], -[0.5068399516817, -0.2691370290379], -[0.511552106044, -0.2696185971155], -[0.5162486397392, -0.2701131107907], -[0.5209294493226, -0.2706210639247], -[0.5255944476803, -0.2711429752392], -[0.5302435662, -0.2716793893065], -[0.5348767571587, -0.2722308774857], -[0.5394939963415, -0.2727980387796], -[0.5440952858971, -0.2733815005802], -[0.5486806574388, -0.2739819192644], -[0.5532501753881, -0.2745999805968], -[0.5578039405554, -0.2752363998889], -[0.5623420939434, -0.2758919218527], -[0.5668648207408, -0.2765673200923], -[0.5713723544721, -0.2772633961532], -[0.5758649812402, -0.2779809780615], -[0.5803430439887, -0.2787209182714], -[0.5848069466846, -0.2794840909462], -[-0.5825629825116, -0.2755977062625], -[-0.5780724088836, -0.2748327800465], -[-0.5735678068902, -0.2740899732019], -[-0.5690492695035, -0.2733690076591], -[-0.5645164722877, -0.2726690811398], -[-0.5599691426292, -0.2719894133271], -[-0.5554070560273, -0.2713292477208], -[-0.5508300323899, -0.2706878529841], -[-0.546237932398, -0.2700645238504], -[-0.5416306539892, -0.2694585816475], -[-0.5370081289967, -0.2688693744988], -[-0.5323703199678, -0.2682962772554], -[-0.5277172171783, -0.2677386912087], -[-0.5230488358497, -0.2671960436252], -[-0.5183652135727, -0.2666677871416], -[-0.5136664079325, -0.2661533990546], -[-0.5089524943308, -0.265652380531], -[-0.5042235639965, -0.265164255763], -[-0.4994797221745, -0.2646885710874], -[-0.4947210864809, -0.2642248940861], -[-0.4899477854146, -0.2637728126788], -[-0.4851599570125, -0.263331934221], -[-0.4803577476373, -0.262901884613], -[-0.4755413108875, -0.2624823074287], -[-0.4707108066168, -0.2620728630669], -[-0.4658664000564, -0.2616732279305], -[-0.4610082610276, -0.2612830936349], -[-0.4561365632384, -0.2609021662475], -[-0.4512514836543, -0.26053016556], -[-0.4463532019381, -0.2601668243927], -[-0.4414418999495, -0.2598118879316], -[-0.4365177613007, -0.2594651130975], -[-0.431580970961, -0.2591262679469], -[-0.4266317149059, -0.2587951311032], -[-0.4216701798061, -0.2584714912175], -[-0.4166965527525, -0.2581551464582], -[-0.4117110210131, -0.2578459040276], -[-0.4067137718184, -0.2575435797046], -[-0.4017049921734, -0.2572479974129], -[-0.3966848686921, -0.2569589888123], -[-0.3916535874524, -0.2566763929124], -[-0.3866113338704, -0.2564000557081], -[-0.3815582925902, -0.2561298298351], -[-0.3764946473896, -0.2558655742443], -[-0.371420581098, -0.2556071538941], -[-0.3663362755272, -0.2553544394604], -[-0.3612419114115, -0.2551073070618], -[-0.3561376683586, -0.2548656380005], -[-0.3510237248082, -0.2546293185171], -[-0.3459002579981, -0.2543982395587], -[-0.3407674439372, -0.2541722965607], -[-0.335625457385, -0.2539513892388], -[-0.3304744718352, -0.2537354213937], -[-0.3253146595054, -0.2535243007257], -[-0.3201461913307, -0.2533179386594], -[-0.3149692369601, -0.2531162501777], -[-0.3097839647578, -0.2529191536645], -[-0.3045905418064, -0.2527265707565], -[-0.2993891339132, -0.2525384262015], -[-0.2941799056187, -0.2523546477257], -[-0.2889630202074, -0.2521751659063], -[-0.28373863972, -0.2519999140524], -[-0.2785069249678, -0.2518288280906], -[-0.2732680355482, -0.2516618464576], -[-0.2680221298612, -0.2514989099975], -[-0.2627693651278, -0.2513399618651], -[-0.2575098974086, -0.2511849474336], -[-0.2522438816236, -0.2510338142068], -[-0.2469714715727, -0.2508865117369], -[-0.2416928199568, -0.2507429915448], -[-0.2364080783993, -0.2506032070459], -[-0.2311173974687, -0.2504671134786], -[-0.2258209267006, -0.250334667837], -[-0.220518814621, -0.2502058288065], -[-0.2152112087691, -0.2500805567032], -[-0.2098982557212, -0.2499588134156], -[-0.2045801011138, -0.24984056235], -[-0.1992568896678, -0.2497257683777], -[-0.1939287652119, -0.2496143977859], -[-0.1885958707073, -0.2495064182301], -[-0.1832583482711, -0.2494017986895], -[-0.1779163392006, -0.2493005094243], -[-0.1725699839977, -0.2492025219354], -[-0.1672194223927, -0.2491078089259], -[-0.1618647933686, -0.2490163442649], -[-0.1565062351853, -0.2489281029526], -[-0.1511438854035, -0.2488430610877], -[-0.145777881175, -0.2487611963587], -[-0.1404083593521, -0.2486824870075], -[-0.1350354585083, -0.2486069134597], -[-0.1296593248708, -0.2485344572032], -[-0.1242800312386, -0.2484650800464], -[-0.1188977845208, -0.2483987907408], -[-0.1135126915714, -0.2483355619188], -[-0.1081248852209, -0.2482753774772], -[-0.1027344978151, -0.2482182221851], -[-0.09734166123934, -0.2481640816651], -[-0.09194650694131, -0.2481129423763], -[-0.08654916595495, -0.2480647915976], -[-0.08114976892359, -0.2480196174126], -[-0.07574844612331, -0.2479774086955], -[-0.07034532748619, -0.2479381550978], -[-0.0649405426235, -0.247901847036], -[-0.05953422084884, -0.2478684756805], -[-0.05412649120122, -0.2478380329452], -[-0.04871748246815, -0.2478105114782], -[-0.04330732320857, -0.2477859046529], -[-0.03789614177591, -0.2477642065607], -[-0.03248406634094, -0.2477454120039], -[-0.0270712249147, -0.24772951649], -[-0.02165774537139, -0.2477165162261], -[-0.01624375547119, -0.247706408115], -[-0.01082938288307, -0.2476991897513], -[-0.005414755207661, -0.247694859419], -[8.280139712353e-16, -0.2476934160892], -[0.005414755207662, -0.247694859419], -[0.01082938288307, -0.2476991897513], -[0.01624375547119, -0.247706408115], -[0.0216577453714, -0.2477165162261], -[0.02707122491471, -0.24772951649], -[0.03248406634094, -0.2477454120039], -[0.03789614177591, -0.2477642065607], -[0.04330732320857, -0.2477859046529], -[0.04871748246815, -0.2478105114782], -[0.05412649120123, -0.2478380329452], -[0.05953422084884, -0.2478684756805], -[0.06494054262351, -0.247901847036], -[0.0703453274862, -0.2479381550978], -[0.07574844612331, -0.2479774086955], -[0.08114976892359, -0.2480196174126], -[0.08654916595495, -0.2480647915976], -[0.09194650694131, -0.2481129423763], -[0.09734166123934, -0.2481640816651], -[0.1027344978151, -0.248218222185], -[0.1081248852209, -0.2482753774772], -[0.1135126915714, -0.2483355619188], -[0.1188977845208, -0.2483987907408], -[0.1242800312386, -0.2484650800464], -[0.1296593248708, -0.2485344572032], -[0.1350354585083, -0.2486069134597], -[0.1404083593521, -0.2486824870075], -[0.145777881175, -0.2487611963587], -[0.1511438854035, -0.2488430610877], -[0.1565062351853, -0.2489281029526], -[0.1618647933686, -0.2490163442649], -[0.1672194223927, -0.2491078089259], -[0.1725699839977, -0.2492025219354], -[0.1779163392006, -0.2493005094243], -[0.1832583482711, -0.2494017986895], -[0.1885958707073, -0.2495064182301], -[0.1939287652119, -0.2496143977859], -[0.1992568896678, -0.2497257683777], -[0.2045801011138, -0.24984056235], -[0.2098982557212, -0.2499588134156], -[0.2152112087691, -0.2500805567032], -[0.220518814621, -0.2502058288065], -[0.2258209267006, -0.250334667837], -[0.2311173974687, -0.2504671134786], -[0.2364080783993, -0.2506032070459], -[0.2416928199568, -0.2507429915448], -[0.2469714715727, -0.2508865117369], -[0.2522438816236, -0.2510338142068], -[0.2575098974086, -0.2511849474336], -[0.2627693651278, -0.2513399618651], -[0.2680221298612, -0.2514989099975], -[0.2732680355482, -0.2516618464576], -[0.2785069249678, -0.2518288280906], -[0.28373863972, -0.2519999140524], -[0.2889630202074, -0.2521751659063], -[0.2941799056187, -0.2523546477257], -[0.2993891339132, -0.2525384262015], -[0.3045905418064, -0.2527265707565], -[0.3097839647578, -0.2529191536645], -[0.3149692369601, -0.2531162501777], -[0.3201461913307, -0.2533179386594], -[0.3253146595054, -0.2535243007257], -[0.3304744718352, -0.2537354213937], -[0.335625457385, -0.2539513892388], -[0.3407674439372, -0.2541722965607], -[0.3459002579981, -0.2543982395587], -[0.3510237248082, -0.2546293185171], -[0.3561376683586, -0.2548656380005], -[0.3612419114115, -0.2551073070618], -[0.3663362755272, -0.2553544394604], -[0.371420581098, -0.2556071538941], -[0.3764946473896, -0.2558655742443], -[0.3815582925902, -0.2561298298351], -[0.3866113338704, -0.2564000557081], -[0.3916535874524, -0.2566763929124], -[0.3966848686921, -0.2569589888123], -[0.4017049921734, -0.2572479974129], -[0.4067137718184, -0.2575435797046], -[0.4117110210131, -0.2578459040276], -[0.4166965527525, -0.2581551464582], -[0.4216701798061, -0.2584714912175], -[0.4266317149059, -0.2587951311032], -[0.431580970961, -0.2591262679469], -[0.4365177613007, -0.2594651130975], -[0.4414418999495, -0.2598118879316], -[0.4463532019381, -0.2601668243927], -[0.4512514836543, -0.26053016556], -[0.4561365632384, -0.2609021662475], -[0.4610082610276, -0.2612830936349], -[0.4658664000564, -0.2616732279305], -[0.4707108066168, -0.2620728630669], -[0.4755413108875, -0.2624823074287], -[0.4803577476373, -0.262901884613], -[0.4851599570125, -0.263331934221], -[0.4899477854146, -0.2637728126788], -[0.4947210864809, -0.2642248940861], -[0.4994797221745, -0.2646885710875], -[0.5042235639965, -0.265164255763], -[0.5089524943308, -0.265652380531], -[0.5136664079326, -0.2661533990545], -[0.5183652135728, -0.2666677871415], -[0.5230488358497, -0.2671960436252], -[0.5277172171783, -0.2677386912088], -[0.5323703199678, -0.2682962772554], -[0.5370081289967, -0.2688693744988], -[0.5416306539892, -0.2694585816476], -[0.546237932398, -0.2700645238504], -[0.55083003239, -0.2706878529839], -[0.5554070560274, -0.2713292477205], -[0.5599691426292, -0.2719894133271], -[0.5645164722877, -0.2726690811397], -[0.5690492695035, -0.2733690076591], -[0.5735678068902, -0.2740899732019], -[0.5780724088836, -0.2748327800465], -[0.5825629815896, -0.2755977086486], -[-0.5803036172164, -0.2716852073599], -[-0.5757871138753, -0.2709177718675], -[-0.5712569576725, -0.2701724184372], -[-0.5667134593392, -0.2694484187453], -[-0.5621563116861, -0.2687450161577], -[-0.5575852549074, -0.268061473868], -[-0.5530000733364, -0.2673970765765], -[-0.5484005921994, -0.2667511317301], -[-0.5437866744159, -0.2661229703839], -[-0.5391582174938, -0.2655119477257], -[-0.5345151505484, -0.2649174433173], -[-0.5298574314683, -0.2643388610961], -[-0.5251850442431, -0.2637756291781], -[-0.5204979964616, -0.2632271994987], -[-0.5157963169828, -0.2626930473245], -[-0.5110800537798, -0.2621726706645], -[-0.5063492719524, -0.2616655896043], -[-0.5016040519023, -0.2611713455845], -[-0.4968444876637, -0.2606895006414], -[-0.4920706853798, -0.2602196366234], -[-0.4872827619166, -0.2597613543965], -[-0.4824808436055, -0.2593142730478], -[-0.4776650651026, -0.2588780290943], -[-0.4728355683588, -0.2584522757055], -[-0.467992501689, -0.2580366819415], -[-0.4631360189336, -0.2576309320134], -[-0.4582662787037, -0.2572347245662], -[-0.4533834437022, -0.2568477719874], -[-0.4484876801151, -0.2564697997426], -[-0.4435791570643, -0.256100545738], -[-0.4386580461188, -0.255739759711], -[-0.4337245208564, -0.2553872026482], -[-0.4287787564727, -0.2550426462305], -[-0.4238209294311, -0.2547058723052], -[-0.4188512171521, -0.2543766723841], -[-0.4138697977354, -0.2540548471666], -[-0.4088768497139, -0.2537402060876], -[-0.4038725518344, -0.2534325668879], -[-0.3988570828645, -0.2531317552081], -[-0.3938306214203, -0.2528376042028], -[-0.3887933458162, -0.2525499541763], -[-0.383745433931, -0.2522686522364], -[-0.3786870630918, -0.251993551968], -[-0.3736184099714, -0.2517245131232], -[-0.3685396505, -0.2514614013282], -[-0.3634509597875, -0.2512040878063], -[-0.3583525120575, -0.2509524491153], -[-0.3532444805906, -0.250706366899], -[-0.3481270376753, -0.2504657276524], -[-0.3430003545683, -0.2502304224985], -[-0.3378646014601, -0.2500003469783], -[-0.3327199474478, -0.2497754008505], -[-0.327566560513, -0.2495554879029], -[-0.3224046075049, -0.2493405157735], -[-0.3172342541276, -0.2491303957801], -[-0.3120556649316, -0.2489250427603], -[-0.3068690033089, -0.2487243749189], -[-0.3016744314912, -0.2485283136831], -[-0.2964721105508, -0.2483367835659], -[-0.2912622004045, -0.248149712036], -[-0.2860448598197, -0.2479670293944], -[-0.2808202464216, -0.2477886686577], -[-0.275588516704, -0.247614565447], -[-0.2703498260399, -0.2474446578825], -[-0.2651043286948, -0.2472788864835], -[-0.2598521778408, -0.2471171940734], -[-0.2545935255716, -0.2469595256894], -[-0.2493285229192, -0.2468058284971], -[-0.2440573198707, -0.2466560517088], -[-0.2387800653864, -0.2465101465062], -[-0.2334969074186, -0.246368065967], -[-0.2282079929306, -0.2462297649951], -[-0.2229134679167, -0.2460952002539], -[-0.2176134774224, -0.2459643301037], -[-0.2123081655652, -0.2458371145412], -[-0.2069976755553, -0.2457135151428], -[-0.2016821497172, -0.2455934950103], -[-0.1963617295115, -0.2454770187197], -[-0.1910365555561, -0.2453640522717], -[-0.1857067676489, -0.2452545630455], -[-0.1803725047895, -0.2451485197547], -[-0.1750339052016, -0.2450458924051], -[-0.1696911063557, -0.2449466522549], -[-0.1643442449913, -0.2448507717768], -[-0.1589934571396, -0.2447582246221], -[-0.1536388781459, -0.2446689855865], -[-0.1482806426929, -0.2445830305779], -[-0.1429188840875, -0.2445003376899], -[-0.1375537365251, -0.244420886104], -[-0.1321853343391, -0.2443446616705], -[-0.1268138080009, -0.2442716062201], -[-0.1214392888712, -0.2442017468283], -[-0.1160619087252, -0.2441350486557], -[-0.1106817982402, -0.2440714946217], -[-0.105299087612, -0.2440110685539], -[-0.09991390657782, -0.2439537551688], -[-0.09452638443878, -0.2438995400537], -[-0.08913665008242, -0.243848409649], -[-0.08374483200535, -0.2438003512331], -[-0.07835105833577, -0.2437553529064], -[-0.07295545685598, -0.2437134035783], -[-0.06755815502484, -0.2436744929537], -[-0.06215928000024, -0.2436386115213], -[-0.05675895866148, -0.2436057505426], -[-0.05135731763172, -0.2435759020419], -[-0.04595448330028, -0.243549058797], -[-0.04055058184504, -0.2435252143311], -[-0.03514573925473, -0.2435043629053], -[-0.02974008135124, -0.2434864995123], -[-0.02433373381192, -0.2434716198705], -[-0.0189268221918, -0.2434597204192], -[-0.01351947194589, -0.2434507983148], -[-0.008111808451407, -0.2434448514273], -[-0.002703957030003, -0.243441878338], -[0.002703957030005, -0.243441878338], -[0.008111808451409, -0.2434448514273], -[0.01351947194589, -0.2434507983148], -[0.0189268221918, -0.2434597204192], -[0.02433373381192, -0.2434716198705], -[0.02974008135125, -0.2434864995123], -[0.03514573925473, -0.2435043629053], -[0.04055058184504, -0.2435252143311], -[0.04595448330028, -0.243549058797], -[0.05135731763172, -0.2435759020419], -[0.05675895866148, -0.2436057505426], -[0.06215928000024, -0.2436386115213], -[0.06755815502484, -0.2436744929537], -[0.07295545685598, -0.2437134035783], -[0.07835105833577, -0.2437553529064], -[0.08374483200535, -0.2438003512331], -[0.08913665008242, -0.243848409649], -[0.09452638443879, -0.2438995400537], -[0.09991390657783, -0.2439537551688], -[0.105299087612, -0.2440110685539], -[0.1106817982401, -0.2440714946217], -[0.1160619087252, -0.2441350486557], -[0.1214392888712, -0.2442017468283], -[0.1268138080009, -0.2442716062201], -[0.1321853343391, -0.2443446616705], -[0.1375537365251, -0.244420886104], -[0.1429188840875, -0.2445003376899], -[0.1482806426929, -0.2445830305779], -[0.1536388781459, -0.2446689855865], -[0.1589934571396, -0.2447582246221], -[0.1643442449913, -0.2448507717768], -[0.1696911063557, -0.2449466522549], -[0.1750339052016, -0.2450458924051], -[0.1803725047895, -0.2451485197547], -[0.1857067676489, -0.2452545630455], -[0.1910365555561, -0.2453640522717], -[0.1963617295115, -0.2454770187197], -[0.2016821497172, -0.2455934950103], -[0.2069976755553, -0.2457135151428], -[0.2123081655652, -0.2458371145412], -[0.2176134774224, -0.2459643301037], -[0.2229134679167, -0.2460952002539], -[0.2282079929306, -0.2462297649951], -[0.2334969074186, -0.246368065967], -[0.2387800653864, -0.2465101465062], -[0.2440573198707, -0.2466560517088], -[0.2493285229192, -0.2468058284971], -[0.2545935255716, -0.2469595256894], -[0.2598521778408, -0.2471171940734], -[0.2651043286948, -0.2472788864835], -[0.2703498260399, -0.2474446578825], -[0.275588516704, -0.247614565447], -[0.2808202464216, -0.2477886686577], -[0.2860448598197, -0.2479670293944], -[0.2912622004045, -0.248149712036], -[0.2964721105508, -0.2483367835659], -[0.3016744314912, -0.2485283136831], -[0.3068690033089, -0.2487243749189], -[0.3120556649316, -0.2489250427603], -[0.3172342541276, -0.2491303957801], -[0.3224046075049, -0.2493405157735], -[0.327566560513, -0.2495554879029], -[0.3327199474478, -0.2497754008505], -[0.3378646014601, -0.2500003469783], -[0.3430003545683, -0.2502304224985], -[0.3481270376753, -0.2504657276524], -[0.3532444805906, -0.250706366899], -[0.3583525120575, -0.2509524491153], -[0.3634509597875, -0.2512040878063], -[0.3685396505, -0.2514614013282], -[0.3736184099714, -0.2517245131232], -[0.3786870630918, -0.251993551968], -[0.3837454339311, -0.2522686522364], -[0.3887933458162, -0.2525499541763], -[0.3938306214203, -0.2528376042028], -[0.3988570828645, -0.2531317552081], -[0.4038725518344, -0.2534325668879], -[0.4088768497139, -0.2537402060876], -[0.4138697977354, -0.2540548471666], -[0.4188512171521, -0.2543766723841], -[0.4238209294311, -0.2547058723052], -[0.4287787564727, -0.2550426462305], -[0.4337245208564, -0.2553872026482], -[0.4386580461188, -0.255739759711], -[0.4435791570643, -0.256100545738], -[0.4484876801151, -0.2564697997426], -[0.4533834437023, -0.2568477719874], -[0.4582662787037, -0.2572347245662], -[0.4631360189336, -0.2576309320134], -[0.467992501689, -0.2580366819415], -[0.4728355683588, -0.2584522757054], -[0.4776650651026, -0.2588780290943], -[0.4824808436055, -0.2593142730478], -[0.4872827619166, -0.2597613543965], -[0.4920706853798, -0.2602196366234], -[0.4968444876637, -0.2606895006414], -[0.5016040519023, -0.2611713455845], -[0.5063492719524, -0.2616655896043], -[0.5110800537798, -0.2621726706644], -[0.5157963169829, -0.2626930473244], -[0.5204979964617, -0.2632271994986], -[0.5251850442431, -0.2637756291781], -[0.5298574314683, -0.2643388610961], -[0.5345151505484, -0.2649174433173], -[0.5391582174938, -0.2655119477257], -[0.5437866744159, -0.2661229703839], -[0.5484005921994, -0.2667511317301], -[0.5530000733365, -0.2673970765764], -[0.5575852549074, -0.2680614738681], -[0.5621563116862, -0.2687450161574], -[0.5667134593392, -0.2694484187451], -[0.5712569576725, -0.2701724184371], -[0.5757871138753, -0.2709177718675], -[0.5803042856902, -0.2716852533346], -[-0.5780299032455, -0.2677459134397], -[-0.5734875733314, -0.2669766974792], -[-0.5689327939637, -0.2662291013409], -[-0.5643652337951, -0.2655023982993], -[-0.5597846017273, -0.2647958733756], -[-0.5551906501028, -0.2641088295633], -[-0.550583171857, -0.2634405893498], -[-0.54596199766, -0.2627904958588], -[-0.5413269930919, -0.2621579136629], -[-0.5366780558911, -0.2615422293024], -[-0.5320151133026, -0.2609428515523], -[-0.5273381195464, -0.2603592114764], -[-0.5226470534205, -0.2597907623019], -[-0.5179419160468, -0.2592369791466], -[-0.5132227287627, -0.258697358627], -[-0.5084895311611, -0.2581714183699], -[-0.503742379275, -0.2576586964522], -[-0.498981343903, -0.2571587507844], -[-0.4942065090692, -0.256671158455], -[-0.4894179706134, -0.2561955150484], -[-0.4846158349003, -0.2557314339475], -[-0.4798002176437, -0.2552785456302], -[-0.474971242836, -0.2548364969672], -[-0.4701290417752, -0.2544049505265], -[-0.4652737521832, -0.2539835838906], -[-0.4604055174068, -0.2535720889885], -[-0.4555244856956, -0.2531701714466], -[-0.4506308095491, -0.2527775499599], -[-0.4457246451287, -0.2523939556854], -[-0.4408061517268, -0.2520191316578], -[-0.43587549129, -0.2516528322295], -[-0.4309328279894, -0.2512948225332], -[-0.4259783278354, -0.250944877969], -[-0.4210121583317, -0.2506027837141], -[-0.4160344881652, -0.2502683342557], -[-0.4110454869291, -0.2499413329461], -[-0.406045324874, -0.2496215915793], -[-0.4010341726873, -0.2493089299884], -[-0.3960122012952, -0.2490031756635], -[-0.3909795816873, -0.2487041633885], -[-0.3859364847606, -0.248411734896], -[-0.3808830811809, -0.2481257385413], -[-0.3758195412606, -0.2478460289912], -[-0.3707460348508, -0.2475724669303], -[-0.3656627312463, -0.2473049187823], -[-0.3605697991026, -0.2470432564448], -[-0.3554674063631, -0.2467873570394], -[-0.3503557201962, -0.2465371026736], -[-0.3452349069413, -0.2462923802152], -[-0.3401051320615, -0.246053081079], -[-0.3349665601044, -0.2458191010241], -[-0.3298193546691, -0.2455903399616], -[-0.3246636783779, -0.2453667017726], -[-0.3194996928544, -0.2451480941353], -[-0.3143275587055, -0.2449344283607], -[-0.3091474355075, -0.2447256192376], -[-0.3039594817965, -0.2445215848846], -[-0.2987638550618, -0.24432224661], -[-0.293560711742, -0.2441275287789], -[-0.2883502072246, -0.2439373586868], -[-0.2831324958476, -0.2437516664399], -[-0.2779077309031, -0.2435703848409], -[-0.2726760646435, -0.2433934492811], -[-0.2674376482888, -0.2432207976375], -[-0.2621926320361, -0.2430523701752], -[-0.2569411650702, -0.2428881094545], -[-0.2516833955753, -0.2427279602425], -[-0.2464194707484, -0.2425718694301], -[-0.2411495368132, -0.242419785951], -[-0.2358737390354, -0.2422716607071], -[-0.2305922217383, -0.2421274464958], -[-0.2253051283196, -0.2419870979415], -[-0.2200126012683, -0.2418505714308], -[-0.2147147821831, -0.2417178250501], -[-0.2094118117902, -0.2415888185271], -[-0.2041038299624, -0.2414635131743], -[-0.1987909757383, -0.2413418718362], -[-0.1934733873415, -0.2412238588382], -[-0.1881512022012, -0.2411094399389], -[-0.1828245569716, -0.2409985822837], -[-0.1774935875527, -0.2408912543619], -[-0.172158429111, -0.240787425965], -[-0.1668192160999, -0.2406870681474], -[-0.1614760822809, -0.2405901531893], -[-0.156129160745, -0.2404966545611], -[-0.1507785839331, -0.2404065468897], -[-0.1454244836582, -0.2403198059271], -[-0.1400669877356, -0.2402364085632], -[-0.1347062254088, -0.2401563353965], -[-0.1293423140054, -0.2400795761128], -[-0.1239754633956, -0.2400060619161], -[-0.11860570251, -0.239935828111], -[-0.1132331970471, -0.2398688375601], -[-0.1078580750244, -0.2398050731266], -[-0.1024804640035, -0.2397445185981], -[-0.09710049111219, -0.2396871586671], -[-0.09171828306603, -0.2396329789131], -[-0.08633396619012, -0.2395819657858], -[-0.08094766644083, -0.2395341065897], -[-0.07555950942753, -0.2394893894688], -[-0.07016962043432, -0.2394478033939], -[-0.06477812444176, -0.239409338149], -[-0.0593851461486, -0.2393739843206], -[-0.05399080999348, -0.2393417332864], -[-0.04859524017663, -0.2393125772058], -[-0.04319856068161, -0.2392865090112], -[-0.03780089529697, -0.2392635223998], -[-0.03240236763795, -0.2392436118268], -[-0.02700310116816, -0.239226772499], -[-0.02160321922123, -0.2392130003696], -[-0.01620284502253, -0.2392022921338], -[-0.0108021017108, -0.2391946452248], -[-0.005401112359804, -0.2391900578114], -[1.050972656336e-12, -0.2391885287956], -[0.005401112359805, -0.2391900578114], -[0.0108021017108, -0.2391946452248], -[0.01620284502253, -0.2392022921338], -[0.02160321922123, -0.2392130003696], -[0.02700310116816, -0.239226772499], -[0.03240236763795, -0.2392436118268], -[0.03780089529698, -0.2392635223998], -[0.04319856068161, -0.2392865090112], -[0.04859524017663, -0.2393125772058], -[0.05399080999348, -0.2393417332864], -[0.0593851461486, -0.2393739843206], -[0.06477812444176, -0.239409338149], -[0.07016962043432, -0.2394478033939], -[0.07555950942753, -0.2394893894688], -[0.08094766644083, -0.2395341065897], -[0.08633396619012, -0.2395819657858], -[0.09171828306603, -0.2396329789131], -[0.09710049111219, -0.2396871586671], -[0.1024804640035, -0.2397445185981], -[0.1078580750244, -0.2398050731266], -[0.1132331970471, -0.2398688375601], -[0.11860570251, -0.239935828111], -[0.1239754633956, -0.2400060619161], -[0.1293423140054, -0.2400795761128], -[0.1347062254088, -0.2401563353965], -[0.1400669877356, -0.2402364085632], -[0.1454244836583, -0.2403198059271], -[0.1507785839331, -0.2404065468897], -[0.156129160745, -0.2404966545611], -[0.1614760822809, -0.2405901531893], -[0.1668192160999, -0.2406870681474], -[0.172158429111, -0.240787425965], -[0.1774935875527, -0.2408912543619], -[0.1828245569716, -0.2409985822837], -[0.1881512022012, -0.2411094399389], -[0.1934733873415, -0.2412238588382], -[0.1987909757383, -0.2413418718362], -[0.2041038299624, -0.2414635131743], -[0.2094118117902, -0.2415888185271], -[0.2147147821831, -0.2417178250501], -[0.2200126012683, -0.2418505714308], -[0.2253051283196, -0.2419870979415], -[0.2305922217383, -0.2421274464958], -[0.2358737390354, -0.2422716607071], -[0.2411495368132, -0.242419785951], -[0.2464194707484, -0.2425718694301], -[0.2516833955753, -0.2427279602425], -[0.2569411650702, -0.2428881094544], -[0.2621926320361, -0.2430523701752], -[0.2674376482888, -0.2432207976375], -[0.2726760646435, -0.2433934492811], -[0.2779077309031, -0.2435703848409], -[0.2831324958476, -0.2437516664399], -[0.2883502072246, -0.2439373586868], -[0.293560711742, -0.2441275287789], -[0.2987638550618, -0.24432224661], -[0.3039594817965, -0.2445215848846], -[0.3091474355075, -0.2447256192376], -[0.3143275587055, -0.2449344283607], -[0.3194996928544, -0.2451480941353], -[0.3246636783779, -0.2453667017726], -[0.3298193546691, -0.2455903399616], -[0.3349665601044, -0.2458191010241], -[0.3401051320615, -0.246053081079], -[0.3452349069413, -0.2462923802152], -[0.3503557201962, -0.2465371026736], -[0.3554674063631, -0.2467873570394], -[0.3605697991026, -0.2470432564448], -[0.3656627312463, -0.2473049187823], -[0.3707460348508, -0.2475724669303], -[0.3758195412606, -0.2478460289912], -[0.3808830811809, -0.2481257385413], -[0.3859364847606, -0.248411734896], -[0.3909795816873, -0.2487041633885], -[0.3960122012952, -0.2490031756635], -[0.4010341726873, -0.2493089299884], -[0.406045324874, -0.2496215915793], -[0.4110454869291, -0.2499413329461], -[0.4160344881652, -0.2502683342557], -[0.4210121583317, -0.2506027837141], -[0.4259783278354, -0.250944877969], -[0.4309328279894, -0.2512948225332], -[0.43587549129, -0.2516528322295], -[0.4408061517268, -0.2520191316578], -[0.4457246451287, -0.2523939556854], -[0.4506308095491, -0.2527775499599], -[0.4555244856956, -0.2531701714466], -[0.4604055174068, -0.2535720889885], -[0.4652737521832, -0.2539835838906], -[0.4701290417752, -0.2544049505265], -[0.474971242836, -0.2548364969672], -[0.4798002176437, -0.2552785456302], -[0.4846158349003, -0.2557314339475], -[0.4894179706134, -0.2561955150484], -[0.4942065090692, -0.256671158455], -[0.498981343903, -0.2571587507844], -[0.5037423792751, -0.2576586964522], -[0.5084895311611, -0.2581714183699], -[0.5132227287626, -0.258697358627], -[0.5179419160467, -0.2592369791468], -[0.5226470534205, -0.2597907623019], -[0.5273381195463, -0.2603592114764], -[0.5320151133026, -0.2609428515523], -[0.5366780558911, -0.2615422293024], -[0.5413269930919, -0.2621579136629], -[0.54596199766, -0.2627904958588], -[0.5505831718569, -0.2634405893498], -[0.5551906501027, -0.2641088295635], -[0.5597846017276, -0.2647958733749], -[0.5643652337953, -0.2655023982989], -[0.5689327939637, -0.2662291013408], -[0.5734875733314, -0.2669766974793], -[0.5780299027814, -0.2677459152454], -[-0.57574075408, -0.2637810155721], -[-0.5711741804543, -0.2630103161547], -[-0.5665956597831, -0.2622607665932], -[-0.562004890708, -0.2615316741701], -[-0.557401597161, -0.2608223620357], -[-0.5527855430007, -0.2601321696936], -[-0.5481565295037, -0.2594604543768], -[-0.5435143928369, -0.2588065921054], -[-0.5388590015552, -0.2581699784483], -[-0.5341902541561, -0.2575500290301], -[-0.5295080767126, -0.2569461798142], -[-0.5248124206075, -0.2563578871964], -[-0.5201032603772, -0.2557846279359], -[-0.5153805916767, -0.2552258989529], -[-0.5106444293694, -0.2546812170143], -[-0.5058948057411, -0.2541501183324], -[-0.5011317688411, -0.2536321580919], -[-0.4963553809436, -0.2531269099236], -[-0.4915657171282, -0.2526339653378], -[-0.4867628639731, -0.2521529331306], -[-0.4819469183544, -0.2516834387709], -[-0.4771179863478, -0.251225123779], -[-0.4722761822228, -0.2507776451024], -[-0.4674216275269, -0.2503406744938], -[-0.4625544502498, -0.2499138978982], -[-0.4576747840644, -0.2494970148502], -[-0.4527827676367, -0.2490897378853], -[-0.4478785440002, -0.2486917919688], -[-0.4429622599886, -0.2483029139408], -[-0.438034065723, -0.2479228519818], -[-0.433094114148, -0.2475513650969], -[-0.4281425606122, -0.247188222621], -[-0.4231795624906, -0.2468332037433], -[-0.4182052788437, -0.2464860970531], -[-0.4132198701105, -0.246146700105], -[-0.4082234978325, -0.2458148190034], -[-0.4032163244058, -0.2454902680072], -[-0.3981985128586, -0.2451728691519], -[-0.3931702266517, -0.2448624518903], -[-0.3881316294997, -0.2445588527508], -[-0.3830828852118, -0.244261915012], -[-0.3780241575496, -0.2439714883932], -[-0.3729556100997, -0.2436874287606], -[-0.3678774061621, -0.243409597848], -[-0.3627897086495, -0.2431378629915], -[-0.3576926799996, -0.2428720968774], -[-0.3525864820977, -0.2426121773028], -[-0.3474712762077, -0.2423579869486], -[-0.3423472229135, -0.2421094131634], -[-0.3372144820665, -0.2418663477588], -[-0.3320732127414, -0.2416286868147], -[-0.3269235731976, -0.2413963304948], -[-0.3217657208471, -0.2411691828704], -[-0.3165998122266, -0.2409471517548], -[-0.3114260029756, -0.240730148544], -[-0.3062444478178, -0.2405180880671], -[-0.3010553005468, -0.2403108884428], -[-0.2958587140152, -0.2401084709444], -[-0.2906548401271, -0.2399107598701], -[-0.2854438298331, -0.2397176824208], -[-0.280225833128, -0.2395291685837], -[-0.2750009990515, -0.2393451510213], -[-0.2697694756895, -0.239165564966], -[-0.2645314101793, -0.2389903481204], -[-0.2592869487147, -0.2388194405618], -[-0.2540362365539, -0.2386527846516], -[-0.2487794180284, -0.2384903249493], -[-0.2435166365528, -0.2383320081306], -[-0.2382480346365, -0.2381777829093], -[-0.2329737538957, -0.2380275999633], -[-0.2276939350671, -0.2378814118642], -[-0.2224087180216, -0.2377391730096], -[-0.2171182417794, -0.2376008395599], -[-0.2118226445254, -0.2374663693774], -[-0.2065220636257, -0.237335721968], -[-0.201216635644, -0.2372088584269], -[-0.1959064963587, -0.2370857413859], -[-0.190591780781, -0.2369663349636], -[-0.1852726231728, -0.2368506047183], -[-0.1799491570648, -0.2367385176029], -[-0.1746215152756, -0.2366300419219], -[-0.1692898299305, -0.2365251472913], -[-0.1639542324809, -0.2364238045992], -[-0.1586148537239, -0.2363259859698], -[-0.1532718238214, -0.2362316647282], -[-0.1479252723208, -0.2361408153674], -[-0.1425753272634, -0.2360534116251], -[-0.1372221149306, -0.2359694300111], -[-0.1318657529563, -0.2358888432736], -[-0.1265063291396, -0.23581162158], -[-0.1211441844906, -0.235737831965], -[-0.1157791919985, -0.2356673398922], -[-0.1104115692197, -0.2356001714153], -[-0.1050414415132, -0.2355363093708], -[-0.09966893380707, -0.2354757375342], -[-0.09429417061949, -0.2354184406019], -[-0.0889172760795, -0.2353644041731], -[-0.08353837394796, -0.2353136147336], -[-0.07815758763846, -0.2352660596405], -[-0.07277504023824, -0.2352217271076], -[-0.06739085452925, -0.2351806061925], -[-0.06200515300909, -0.2351426867842], -[-0.05661805791203, -0.2351079595916], -[-0.05122969123008, -0.2350764161335], -[-0.04584017473397, -0.2350480487292], -[-0.04044962999425, -0.2350228504895], -[-0.03505817840233, -0.2350008153099], -[-0.02966594119154, -0.2349819378633], -[-0.0242730394582, -0.2349662135944], -[-0.01887959418271, -0.2349536387146], -[-0.01348572625057, -0.2349442101981], -[-0.008091556473544, -0.2349379257784], -[-0.00269720561066, -0.2349347839457], -[0.002697205610662, -0.2349347839457], -[0.008091556473545, -0.2349379257784], -[0.01348572625057, -0.2349442101981], -[0.01887959418271, -0.2349536387146], -[0.02427303945821, -0.2349662135944], -[0.02966594119154, -0.2349819378633], -[0.03505817840233, -0.2350008153099], -[0.04044962999425, -0.2350228504895], -[0.04584017473397, -0.2350480487292], -[0.05122969123008, -0.2350764161335], -[0.05661805791204, -0.2351079595916], -[0.06200515300909, -0.2351426867842], -[0.06739085452925, -0.2351806061925], -[0.07277504023824, -0.2352217271076], -[0.07815758763846, -0.2352660596405], -[0.08353837394796, -0.2353136147336], -[0.0889172760795, -0.2353644041731], -[0.09429417061949, -0.2354184406019], -[0.09966893380707, -0.2354757375342], -[0.1050414415132, -0.2355363093708], -[0.1104115692197, -0.2356001714153], -[0.1157791919985, -0.2356673398922], -[0.1211441844906, -0.235737831965], -[0.1265063291396, -0.23581162158], -[0.1318657529563, -0.2358888432736], -[0.1372221149306, -0.2359694300111], -[0.1425753272634, -0.2360534116251], -[0.1479252723208, -0.2361408153674], -[0.1532718238214, -0.2362316647282], -[0.1586148537239, -0.2363259859698], -[0.1639542324809, -0.2364238045992], -[0.1692898299305, -0.2365251472913], -[0.1746215152756, -0.2366300419219], -[0.1799491570648, -0.2367385176029], -[0.1852726231728, -0.2368506047183], -[0.190591780781, -0.2369663349636], -[0.1959064963587, -0.2370857413859], -[0.201216635644, -0.2372088584269], -[0.2065220636257, -0.237335721968], -[0.2118226445254, -0.2374663693774], -[0.2171182417794, -0.2376008395599], -[0.2224087180216, -0.2377391730096], -[0.2276939350671, -0.2378814118642], -[0.2329737538957, -0.2380275999633], -[0.2382480346365, -0.2381777829093], -[0.2435166365528, -0.2383320081306], -[0.2487794180284, -0.2384903249493], -[0.2540362365539, -0.2386527846516], -[0.2592869487147, -0.2388194405618], -[0.2645314101793, -0.2389903481204], -[0.2697694756895, -0.239165564966], -[0.2750009990515, -0.2393451510213], -[0.280225833128, -0.2395291685837], -[0.2854438298331, -0.2397176824208], -[0.2906548401271, -0.2399107598701], -[0.2958587140152, -0.2401084709444], -[0.3010553005468, -0.2403108884428], -[0.3062444478178, -0.2405180880671], -[0.3114260029756, -0.240730148544], -[0.3165998122266, -0.2409471517548], -[0.3217657208471, -0.2411691828704], -[0.3269235731976, -0.2413963304948], -[0.3320732127414, -0.2416286868147], -[0.3372144820665, -0.2418663477588], -[0.3423472229135, -0.2421094131634], -[0.3474712762077, -0.2423579869486], -[0.3525864820977, -0.2426121773028], -[0.3576926799997, -0.2428720968774], -[0.3627897086495, -0.2431378629915], -[0.3678774061621, -0.243409597848], -[0.3729556100997, -0.2436874287606], -[0.3780241575496, -0.2439714883932], -[0.3830828852118, -0.244261915012], -[0.3881316294997, -0.2445588527508], -[0.3931702266517, -0.2448624518903], -[0.3981985128586, -0.2451728691519], -[0.4032163244058, -0.2454902680072], -[0.4082234978325, -0.2458148190034], -[0.4132198701105, -0.246146700105], -[0.4182052788437, -0.2464860970531], -[0.4231795624906, -0.2468332037433], -[0.4281425606122, -0.247188222621], -[0.433094114148, -0.2475513650969], -[0.438034065723, -0.2479228519818], -[0.4429622599886, -0.2483029139408], -[0.4478785440002, -0.2486917919688], -[0.4527827676367, -0.2490897378853], -[0.4576747840644, -0.2494970148502], -[0.4625544502498, -0.2499138978982], -[0.4674216275268, -0.2503406744938], -[0.4722761822228, -0.2507776451023], -[0.4771179863478, -0.251225123779], -[0.4819469183544, -0.2516834387709], -[0.4867628639731, -0.2521529331306], -[0.4915657171282, -0.2526339653378], -[0.4963553809436, -0.2531269099236], -[0.5011317688411, -0.2536321580919], -[0.5058948057411, -0.2541501183324], -[0.5106444293694, -0.2546812170143], -[0.5153805916767, -0.2552258989528], -[0.5201032603771, -0.255784627936], -[0.5248124206075, -0.2563578871964], -[0.5295080767126, -0.2569461798142], -[0.5341902541561, -0.2575500290301], -[0.5388590015552, -0.2581699784483], -[0.5435143928369, -0.2588065921054], -[0.5481565295037, -0.2594604543768], -[0.5527855430007, -0.2601321696936], -[0.5574015971608, -0.260822362036], -[0.5620048907083, -0.2615316741693], -[0.5665956597832, -0.262260766593], -[0.5711741804543, -0.2630103161549], -[0.5757407536141, -0.2637810174559], -[-0.5734372627692, -0.2597912918227], -[-0.5688473090893, -0.2590193467489], -[-0.5642458840406, -0.2582681198273], -[-0.5596327166873, -0.2575369367711], -[-0.5550075450177, -0.2568251557317], -[-0.5503701438052, -0.2561321497901], -[-0.5457203223867, -0.2554573082112], -[-0.5410579224225, -0.2548000374154], -[-0.5363828156719, -0.2541597616944], -[-0.5316949018111, -0.2535359237018], -[-0.5269941063171, -0.2529279847448], -[-0.5222803784324, -0.2523354249064], -[-0.5175536892227, -0.2517577430216], -[-0.5128140297361, -0.2511944565304], -[-0.5080614092681, -0.2506451012305], -[-0.5032958537337, -0.2501092309462], -[-0.4985174041488, -0.2495864171301], -[-0.4937261152164, -0.2490762484144], -[-0.4889220540163, -0.2485783301207], -[-0.4841052987942, -0.2480922837424], -[-0.4792759378451, -0.2476177464064], -[-0.4744340684868, -0.2471543703233], -[-0.4695797961169, -0.2467018222318], -[-0.4647132333498, -0.2462597828432], -[-0.459834499227, -0.2458279462898], -[-0.4549437184958, -0.2454060195811], -[-0.450041020952, -0.2449937220705], -[-0.4451265408404, -0.244590784935], -[-0.4402004163104, -0.2441969506688], -[-0.4352627889203, -0.2438119725932], -[-0.4303138031884, -0.2434356143826], -[-0.4253536061845, -0.2430676496076], -[-0.4203823471608, -0.2427078612958], -[-0.4154001772176, -0.2423560415098], -[-0.4104072490007, -0.2420119909429], -[-0.4054037164283, -0.2416755185318], -[-0.4003897344441, -0.2413464410866], -[-0.3953654587955, -0.2410245829368], -[-0.3903310458326, -0.2407097755943], -[-0.3852866523288, -0.2404018574306], -[-0.3802324353187, -0.240100673371], -[-0.3751685519529, -0.2398060746012], -[-0.3700951593682, -0.2395179182896], -[-0.3650124145713, -0.2392360673219], -[-0.3599204743355, -0.2389603900491], -[-0.3548194951078, -0.2386907600474], -[-0.3497096329279, -0.2384270558901], -[-0.3445910433549, -0.2381691609304], -[-0.339463881404, -0.237916963095], -[-0.33432830149, -0.2376703546874], -[-0.3291844573787, -0.2374292322021], -[-0.3240325021437, -0.237193496146], -[-0.3188725881301, -0.2369630508703], -[-0.3137048669229, -0.2367378044099], -[-0.30852948932, -0.2365176683304], -[-0.3033466053104, -0.2363025575833], -[-0.2981563640557, -0.2360923903676], -[-0.2929589138754, -0.2358870879989], -[-0.2877544022353, -0.2356865747839], -[-0.2825429757395, -0.235490777902], -[-0.2773247801245, -0.2352996272922], -[-0.2720999602558, -0.2351130555453], -[-0.2668686601272, -0.2349309978016], -[-0.2616310228616, -0.2347533916536], -[-0.2563871907139, -0.2345801770533], -[-0.2511373050757, -0.2344112962236], -[-0.2458815064813, -0.234246693575], -[-0.240619934615, -0.2340863156248], -[-0.2353527283201, -0.2339301109217], -[-0.2300800256087, -0.233778029973], -[-0.2248019636723, -0.2336300251758], -[-0.2195186788939, -0.2334860507511], -[-0.2142303068608, -0.2333460626817], -[-0.2089369823775, -0.2332100186521], -[-0.2036388394806, -0.2330778779927], -[-0.1983360114528, -0.2329496016252], -[-0.193028630839, -0.2328251520117], -[-0.1877168294617, -0.2327044931055], -[-0.1824007384373, -0.2325875903054], -[-0.1770804881934, -0.2324744104106], -[-0.1717562084853, -0.2323649215796], -[-0.166428028414, -0.2322590932896], -[-0.1610960764439, -0.2321568962991], -[-0.1557604804206, -0.2320583026113], -[-0.1504213675898, -0.2319632854406], -[-0.1450788646155, -0.2318718191793], -[-0.13973310029, -0.2317838755239], -[-0.1343841978975, -0.231699427253], -[-0.1290322798185, -0.2316184282008], -[-0.1236774383996, -0.231540776254], -[-0.11831989251, -0.2314669339867], -[-0.1129596784449, -0.231396297727], -[-0.1075969462027, -0.2313290637245], -[-0.1022318184857, -0.2312652148169], -[-0.09686441758971, -0.2312047347957], -[-0.09149486542338, -0.2311476083882], -[-0.08612328352869, -0.2310938212403], -[-0.08074979310085, -0.2310433599], -[-0.07537451500851, -0.2309962118032], -[-0.06999756981396, -0.2309523652589], -[-0.06461907779337, -0.2309118094371], -[-0.05923915895714, -0.2308745343562], -[-0.05385793307014, -0.2308405308725], -[-0.04847551967217, -0.2308097906704], -[-0.04309203809825, -0.2307823062526], -[-0.03770760749913, -0.2307580709328], -[-0.03232234686163, -0.2307370788282], -[-0.02693637502915, -0.2307193248527], -[-0.02154981072213, -0.2307048047123], -[-0.01616277255848, -0.2306935148998], -[-0.01077537907414, -0.2306854526911], -[-0.005387748743516, -0.2306806161428], -[-2.054111582487e-14, -0.2306790040894], -[0.005387748743518, -0.2306806161428], -[0.01077537907414, -0.2306854526911], -[0.01616277255848, -0.2306935148998], -[0.02154981072213, -0.2307048047123], -[0.02693637502915, -0.2307193248527], -[0.03232234686163, -0.2307370788282], -[0.03770760749913, -0.2307580709328], -[0.04309203809826, -0.2307823062526], -[0.04847551967217, -0.2308097906704], -[0.05385793307014, -0.2308405308725], -[0.05923915895714, -0.2308745343562], -[0.06461907779338, -0.2309118094371], -[0.06999756981396, -0.2309523652589], -[0.07537451500851, -0.2309962118032], -[0.08074979310085, -0.2310433599], -[0.08612328352869, -0.2310938212403], -[0.09149486542338, -0.2311476083882], -[0.09686441758971, -0.2312047347957], -[0.1022318184857, -0.2312652148169], -[0.1075969462027, -0.2313290637245], -[0.1129596784449, -0.231396297727], -[0.11831989251, -0.2314669339867], -[0.1236774383996, -0.231540776254], -[0.1290322798185, -0.2316184282008], -[0.1343841978975, -0.231699427253], -[0.13973310029, -0.2317838755239], -[0.1450788646155, -0.2318718191793], -[0.1504213675898, -0.2319632854406], -[0.1557604804206, -0.2320583026113], -[0.1610960764439, -0.2321568962991], -[0.166428028414, -0.2322590932896], -[0.1717562084853, -0.2323649215796], -[0.1770804881934, -0.2324744104106], -[0.1824007384373, -0.2325875903054], -[0.1877168294617, -0.2327044931055], -[0.193028630839, -0.2328251520117], -[0.1983360114528, -0.2329496016252], -[0.2036388394806, -0.2330778779927], -[0.2089369823775, -0.2332100186521], -[0.2142303068608, -0.2333460626817], -[0.2195186788939, -0.2334860507511], -[0.2248019636723, -0.2336300251758], -[0.2300800256087, -0.233778029973], -[0.2353527283201, -0.2339301109217], -[0.240619934615, -0.2340863156248], -[0.2458815064813, -0.234246693575], -[0.2511373050757, -0.2344112962236], -[0.2563871907139, -0.2345801770533], -[0.2616310228616, -0.2347533916536], -[0.2668686601272, -0.2349309978016], -[0.2720999602558, -0.2351130555453], -[0.2773247801245, -0.2352996272922], -[0.2825429757395, -0.235490777902], -[0.2877544022353, -0.2356865747839], -[0.2929589138754, -0.2358870879989], -[0.2981563640557, -0.2360923903676], -[0.3033466053104, -0.2363025575833], -[0.30852948932, -0.2365176683304], -[0.3137048669229, -0.2367378044099], -[0.3188725881301, -0.2369630508703], -[0.3240325021437, -0.237193496146], -[0.3291844573787, -0.2374292322021], -[0.33432830149, -0.2376703546874], -[0.3394638814039, -0.237916963095], -[0.3445910433549, -0.2381691609304], -[0.3497096329279, -0.2384270558901], -[0.3548194951078, -0.2386907600474], -[0.3599204743355, -0.2389603900491], -[0.3650124145713, -0.2392360673219], -[0.3700951593682, -0.2395179182896], -[0.3751685519529, -0.2398060746012], -[0.3802324353187, -0.240100673371], -[0.3852866523288, -0.2404018574306], -[0.3903310458326, -0.2407097755943], -[0.3953654587955, -0.2410245829368], -[0.4003897344441, -0.2413464410866], -[0.4054037164283, -0.2416755185318], -[0.4104072490007, -0.2420119909429], -[0.4154001772176, -0.2423560415098], -[0.4203823471608, -0.2427078612958], -[0.4253536061845, -0.2430676496076], -[0.4303138031884, -0.2434356143826], -[0.4352627889204, -0.2438119725932], -[0.4402004163104, -0.2441969506688], -[0.4451265408404, -0.244590784935], -[0.450041020952, -0.2449937220705], -[0.4549437184958, -0.2454060195811], -[0.459834499227, -0.2458279462898], -[0.4647132333498, -0.2462597828432], -[0.4695797961169, -0.2467018222318], -[0.4744340684868, -0.2471543703233], -[0.4792759378451, -0.2476177464064], -[0.4841052987942, -0.2480922837424], -[0.4889220540163, -0.2485783301207], -[0.4937261152164, -0.2490762484144], -[0.4985174041488, -0.2495864171301], -[0.5032958537337, -0.2501092309462], -[0.5080614092681, -0.2506451012305], -[0.5128140297362, -0.2511944565304], -[0.5175536892227, -0.2517577430215], -[0.5222803784324, -0.2523354249064], -[0.5269941063171, -0.2529279847448], -[0.5316949018111, -0.2535359237018], -[0.5363828156719, -0.2541597616944], -[0.5410579224225, -0.2548000374154], -[0.5457203223867, -0.2554573082112], -[0.5503701438052, -0.2561321497901], -[0.5550075450178, -0.2568251557316], -[0.5596327166874, -0.2575369367708], -[0.5642458840407, -0.2582681198269], -[0.5688473090893, -0.259019346749], -[0.5734372623718, -0.259791293512], -[-0.5711198735596, -0.2557773848871], -[-0.5665073153328, -0.2550044712719], -[-0.5618837816631, -0.2542518310326], -[-0.5572489878157, -0.2535188422775], -[-0.5526026849394, -0.2528048953749], -[-0.547944658149, -0.2521093943676], -[-0.5432747245524, -0.2514317581172], -[-0.538592731257, -0.250771421199], -[-0.5338985533859, -0.2501278345733], -[-0.5291920921264, -0.2495004660562], -[-0.5244732728319, -0.2488888006154], -[-0.5197420431899, -0.248292340512], -[-0.5149983714682, -0.2477106053126], -[-0.5102422448466, -0.2471431317874], -[-0.5054736678387, -0.2465894737175], -[-0.5006926608062, -0.2460492016228], -[-0.4958992585665, -0.2455219024282], -[-0.4910935090929, -0.2450071790795], -[-0.4862754723045, -0.2445046501204], -[-0.4814452189435, -0.2440139492405], -[-0.476602829537, -0.2435347248023], -[-0.4717483934371, -0.2430666393543], -[-0.466882007938, -0.2426093691368], -[-0.4620037774628, -0.2421626035843], -[-0.4571138128178, -0.2417260448297], -[-0.4522122305086, -0.2412994072132], -[-0.447299152114, -0.2408824167986], -[-0.4423747037133, -0.2404748108995], -[-0.437439015364, -0.2400763376171], -[-0.4324922206249, -0.2396867553903], -[-0.4275344561213, -0.2393058325603], -[-0.4225658611495, -0.2389333469489], -[-0.4175865773169, -0.238569085452], -[-0.4125967482151, -0.2382128436487], -[-0.4075965191226, -0.2378644254246], -[-0.4025860367359, -0.2375236426109], -[-0.3975654489251, -0.2371903146387], -[-0.392534904513, -0.2368642682072], -[-0.3874945530749, -0.236545336967], -[-0.3824445447585, -0.236233361217], -[-0.3773850301206, -0.2359281876152], -[-0.3723161599801, -0.2356296689022], -[-0.3672380852853, -0.2353376636385], -[-0.3621509569986, -0.2350520359512], -[-0.3570549259825, -0.2347726552974], -[-0.3519501429118, -0.2344993962333], -[-0.3468367581842, -0.2342321381978], -[-0.3417149218457, -0.2339707653052], -[-0.3365847835225, -0.2337151661476], -[-0.3314464923614, -0.2334652336072], -[-0.3263001969772, -0.2332208646772], -[-0.3211460454062, -0.2329819602914], -[-0.3159841850658, -0.2327484251618], -[-0.3108147627192, -0.2325201676246], -[-0.3056379244455, -0.2322970994924], -[-0.3004538156132, -0.2320791359151], -[-0.2952625808594, -0.2318661952455], -[-0.2900643640707, -0.2316581989133], -[-0.2848593083691, -0.2314550713036], -[-0.2796475561004, -0.2312567396424], -[-0.2744292488248, -0.2310631338861], -[-0.2692045273113, -0.230874186618], -[-0.2639735315333, -0.2306898329486], -[-0.2587364006668, -0.2305100104205], -[-0.2534932730911, -0.2303346589191], -[-0.2482442863897, -0.2301637205858], -[-0.2429895773547, -0.2299971397368], -[-0.2377292819915, -0.2298348627849], -[-0.2324635355248, -0.2296768381654], -[-0.2271924724069, -0.2295230162655], -[-0.2219162263256, -0.2293733493566], -[-0.2166349302144, -0.2292277915305], -[-0.2113487162631, -0.2290862986383], -[-0.2060577159291, -0.228948828232], -[-0.2007620599498, -0.2288153395092], -[-0.1954618783556, -0.2286857932607], -[-0.1901573004835, -0.2285601518197], -[-0.1848484549912, -0.2284383790145], -[-0.1795354698723, -0.2283204401225], -[-0.1742184724708, -0.2282063018278], -[-0.1688975894974, -0.2280959321789], -[-0.1635729470456, -0.2279893005506], -[-0.1582446706077, -0.2278863776063], -[-0.1529128850921, -0.2277871352626], -[-0.14757771484, -0.227691546656], -[-0.1422392836434, -0.2275995861111], -[-0.1368977264501, -0.2275112292467], -[-0.1315531710038, -0.2274264445483], -[-0.1262057870075, -0.2273451785157], -[-0.1208558304184, -0.2272672651243], -[-0.115502509979, -0.2271933851511], -[-0.11014708422, -0.2271227167049], -[-0.1047892501817, -0.2270555275095], -[-0.09942912791236, -0.226991800431], -[-0.09406683707656, -0.2269315193042], -[-0.08870249697423, -0.2268746689138], -[-0.08333622655996, -0.2268212349784], -[-0.07796814446231, -0.2267712041345], -[-0.07259836900322, -0.2267245639217], -[-0.06722701821751, -0.2266813027698], -[-0.06185420987241, -0.2266414099855], -[-0.05648006148719, -0.2266048757415], -[-0.0511046903528, -0.2265716910657], -[-0.04572821355163, -0.2265418478314], -[-0.04035074797718, -0.2265153387493], -[-0.03497241035392, -0.2264921573589], -[-0.02959331725706, -0.2264722980224], -[-0.0242135851324, -0.226455755918], -[-0.01883333031626, -0.2264425270357], -[-0.01345266905529, -0.2264326081723], -[-0.008071717526389, -0.2264259969285], -[-0.002690591856669, -0.2264226917059], -[0.00269059185667, -0.2264226917059], -[0.008071717526389, -0.2264259969285], -[0.01345266905529, -0.2264326081723], -[0.01883333031626, -0.2264425270357], -[0.0242135851324, -0.226455755918], -[0.02959331725705, -0.2264722980223], -[0.03497241035392, -0.2264921573589], -[0.04035074797718, -0.2265153387493], -[0.04572821355163, -0.2265418478314], -[0.05110469035281, -0.2265716910657], -[0.05648006148719, -0.2266048757415], -[0.06185420987241, -0.2266414099855], -[0.06722701821751, -0.2266813027698], -[0.07259836900323, -0.2267245639217], -[0.07796814446231, -0.2267712041345], -[0.08333622655996, -0.2268212349784], -[0.08870249697423, -0.2268746689138], -[0.09406683707656, -0.2269315193042], -[0.09942912791236, -0.226991800431], -[0.1047892501817, -0.2270555275095], -[0.11014708422, -0.2271227167049], -[0.115502509979, -0.2271933851511], -[0.1208558304184, -0.2272672651243], -[0.1262057870075, -0.2273451785157], -[0.1315531710038, -0.2274264445483], -[0.1368977264501, -0.2275112292467], -[0.1422392836434, -0.2275995861111], -[0.14757771484, -0.227691546656], -[0.1529128850921, -0.2277871352626], -[0.1582446706077, -0.2278863776063], -[0.1635729470456, -0.2279893005506], -[0.1688975894974, -0.2280959321789], -[0.1742184724708, -0.2282063018278], -[0.1795354698723, -0.2283204401225], -[0.1848484549912, -0.2284383790145], -[0.1901573004835, -0.2285601518197], -[0.1954618783556, -0.2286857932607], -[0.2007620599498, -0.2288153395092], -[0.2060577159291, -0.228948828232], -[0.2113487162631, -0.2290862986383], -[0.2166349302144, -0.2292277915305], -[0.2219162263256, -0.2293733493566], -[0.2271924724069, -0.2295230162655], -[0.2324635355248, -0.2296768381654], -[0.2377292819915, -0.2298348627849], -[0.2429895773547, -0.2299971397368], -[0.2482442863897, -0.2301637205858], -[0.2534932730911, -0.2303346589191], -[0.2587364006668, -0.2305100104205], -[0.2639735315333, -0.2306898329486], -[0.2692045273113, -0.230874186618], -[0.2744292488248, -0.2310631338861], -[0.2796475561004, -0.2312567396424], -[0.2848593083691, -0.2314550713036], -[0.2900643640707, -0.2316581989133], -[0.2952625808594, -0.2318661952455], -[0.3004538156132, -0.2320791359151], -[0.3056379244455, -0.2322970994924], -[0.3108147627192, -0.2325201676246], -[0.3159841850658, -0.2327484251618], -[0.3211460454062, -0.2329819602914], -[0.3263001969772, -0.2332208646772], -[0.3314464923614, -0.2334652336072], -[0.3365847835225, -0.2337151661476], -[0.3417149218457, -0.2339707653052], -[0.3468367581842, -0.2342321381978], -[0.3519501429118, -0.2344993962333], -[0.3570549259825, -0.2347726552974], -[0.3621509569986, -0.2350520359512], -[0.3672380852859, -0.2353376636383], -[0.3723161599801, -0.2356296689022], -[0.3773850301206, -0.2359281876152], -[0.3824445447585, -0.236233361217], -[0.3874945530749, -0.236545336967], -[0.392534904513, -0.2368642682072], -[0.3975654489251, -0.2371903146387], -[0.4025860367359, -0.2375236426109], -[0.4075965191226, -0.2378644254246], -[0.4125967482151, -0.2382128436487], -[0.4175865773169, -0.238569085452], -[0.4225658611495, -0.2389333469489], -[0.4275344561213, -0.2393058325603], -[0.4324922206249, -0.2396867553903], -[0.437439015364, -0.2400763376171], -[0.4423747037133, -0.2404748108995], -[0.447299152114, -0.2408824167986], -[0.4522122305087, -0.2412994072132], -[0.4571138128178, -0.2417260448297], -[0.4620037774628, -0.2421626035843], -[0.466882007938, -0.2426093691368], -[0.4717483934371, -0.2430666393543], -[0.476602829537, -0.2435347248023], -[0.4814452189436, -0.2440139492405], -[0.4862754723045, -0.2445046501204], -[0.4910935090929, -0.2450071790795], -[0.4958992585665, -0.2455219024282], -[0.5006926608062, -0.2460492016228], -[0.5054736678387, -0.2465894737175], -[0.5102422448466, -0.2471431317874], -[0.5149983714682, -0.2477106053125], -[0.5197420431899, -0.248292340512], -[0.524473272832, -0.2488888006153], -[0.5291920921264, -0.2495004660562], -[0.5338985533859, -0.2501278345733], -[0.538592731257, -0.250771421199], -[0.5432747245524, -0.2514317581172], -[0.547944658149, -0.2521093943676], -[0.5526026849394, -0.2528048953749], -[0.5572489878158, -0.2535188422774], -[0.5618837816631, -0.2542518310325], -[0.5665073153328, -0.255004471272], -[0.5711198735596, -0.2557773848871], -[-0.5687882113906, -0.251739771224], -[-0.5641545389669, -0.2509663380585], -[-0.559509654618, -0.2502125375682], -[-0.5548539703028, -0.2494780154663], -[-0.5501872495065, -0.2487621918479], -[-0.5455092871429, -0.2480644993734], -[-0.5408199077962, -0.2473843843127], -[-0.5361189639419, -0.2467213073707], -[-0.5314063341714, -0.2460747443149], -[-0.5266819214426, -0.2454441864267], -[-0.5219456513722, -0.2448291407948], -[-0.517197470583, -0.2442291304733], -[-0.5124373451176, -0.2436436945181], -[-0.5076652589228, -0.2430723879253], -[-0.5028812124123, -0.2425147814805], -[-0.4980852211083, -0.2419704615383], -[-0.493277314364, -0.2414390297417], -[-0.4884575341668, -0.2409201026947], -[-0.4836259340205, -0.2404133115963], -[-0.4787825779042, -0.2399183018458], -[-0.4739275393055, -0.2394347326273], -[-0.4690609003247, -0.238962276478], -[-0.4641827508465, -0.2385006188477], -[-0.4592931877757, -0.2380494576537], -[-0.4543923143327, -0.2376085028347], -[-0.4494802394055, -0.2371774759063], -[-0.4445570769543, -0.236756109523], -[-0.4396229454657, -0.2363441470462], -[-0.4346779674515, -0.2359413421217], -[-0.4297222689908, -0.2355474582677], -[-0.4247559793109, -0.2351622684737], -[-0.4197792304038, -0.2347855548117], -[-0.4147921566774, -0.2344171080604], -[-0.4097948946356, -0.234056727342], -[-0.4047875825887, -0.2337042197722], -[-0.3997703603882, -0.2333594001239], -[-0.3947433691861, -0.2330220905035], -[-0.3897067512167, -0.2326921200408], -[-0.3846606495973, -0.2323693245912], -[-0.3796052081482, -0.232053546451], -[-0.3745405712296, -0.2317446340843], -[-0.3694668835939, -0.2314424418626], -[-0.3643842902514, -0.2311468298152], -[-0.3592929363504, -0.2308576633911], -[-0.3541929670681, -0.2305748132314], -[-0.3490845275129, -0.2302981549526], -[-0.3439677626363, -0.230027568939], -[-0.3388428171542, -0.229762940145], -[-0.3337098354763, -0.2295041579072], -[-0.3285689616435, -0.2292511157636], -[-0.323420339272, -0.2290037112832], -[-0.3182641115036, -0.2287618459018], -[-0.3131004209622, -0.2285254247667], -[-0.3079294097155, -0.2282943565876], -[-0.3027512192417, -0.2280685534957], -[-0.2975659904002, -0.2278479309083], -[-0.2923738634074, -0.2276324074005], -[-0.2871749778149, -0.2274219045822], -[-0.2819694724923, -0.2272163469816], -[-0.2767574856128, -0.2270156619339], -[-0.2715391546411, -0.2268197794747], -[-0.2663146163244, -0.2266286322395], -[-0.2610840066866, -0.2264421553666], -[-0.255847461023, -0.2262602864059], -[-0.2506051138984, -0.2260829652304], -[-0.2453570991464, -0.2259101339537], -[-0.2401035498707, -0.2257417368496], -[-0.2348445984477, -0.2255777202768], -[-0.2295803765311, -0.2254180326063], -[-0.2243110150566, -0.2252626241524], -[-0.2190366442496, -0.2251114471076], -[-0.2137573936313, -0.2249644554791], -[-0.2084733920299, -0.2248216050303], -[-0.203184767588, -0.224682853223], -[-0.1978916477744, -0.2245481591637], -[-0.1925941593951, -0.2244174835523], -[-0.1872924286052, -0.2242907886324], -[-0.1819865809218, -0.2241680381452], -[-0.176676741237, -0.2240491972846], -[-0.171363033832, -0.2239342326548], -[-0.1660455823913, -0.2238231122306], -[-0.1607245100174, -0.2237158053183], -[-0.1553999392462, -0.22361228252], -[-0.1500719920625, -0.2235125156986], -[-0.1447407899157, -0.223416477945], -[-0.1394064537366, -0.2233241435471], -[-0.1340691194617, -0.2232355082207], -[-0.1287289293617, -0.2231505484333], -[-0.1233861279449, -0.2230692920305], -[-0.1180413043489, -0.2229918079571], -[-0.1126919607195, -0.2229172021544], -[-0.1073413329547, -0.2228466114276], -[-0.1019884045679, -0.2227795752895], -[-0.09663329295585, -0.222716076662], -[-0.09127611515364, -0.222656099449], -[-0.08591698785334, -0.2225996285191], -[-0.08055602742229, -0.2225466496893], -[-0.07519334992169, -0.2224971497094], -[-0.06982907112536, -0.2224511162482], -[-0.06446330653851, -0.2224085378803], -[-0.05909617141655, -0.2223694040739], -[-0.05372778078414, -0.2223337051798], -[-0.0483582494541, -0.2223014324211], -[-0.04298769204655, -0.222272577884], -[-0.03761622300803, -0.2222471345099], -[-0.03224395663063, -0.2222250960875], -[-0.02687100707126, -0.2222064572468], -[-0.02149748837086, -0.2221912134532], -[-0.01612351447372, -0.2221793610029], -[-0.01074919924673, -0.2221708970193], -[-0.005374656498771, -0.2221658194495], -[-1.901565931633e-13, -0.222164127063], -[0.005374656498772, -0.2221658194495], -[0.01074919924673, -0.2221708970193], -[0.01612351447372, -0.2221793610029], -[0.02149748837087, -0.2221912134532], -[0.02687100707126, -0.2222064572468], -[0.03224395663063, -0.2222250960875], -[0.03761622300803, -0.2222471345099], -[0.04298769204656, -0.222272577884], -[0.0483582494541, -0.2223014324211], -[0.05372778078414, -0.2223337051798], -[0.05909617141655, -0.2223694040739], -[0.06446330653848, -0.2224085378803], -[0.06982907112537, -0.2224511162482], -[0.07519334992169, -0.2224971497094], -[0.08055602742229, -0.2225466496893], -[0.08591698785335, -0.2225996285191], -[0.09127611515364, -0.222656099449], -[0.09663329295585, -0.222716076662], -[0.1019884045679, -0.2227795752895], -[0.1073413329547, -0.2228466114276], -[0.1126919607195, -0.2229172021544], -[0.1180413043489, -0.2229918079571], -[0.1233861279449, -0.2230692920305], -[0.1287289293617, -0.2231505484333], -[0.1340691194617, -0.2232355082207], -[0.1394064537366, -0.2233241435471], -[0.1447407899157, -0.223416477945], -[0.1500719920625, -0.2235125156986], -[0.1553999392463, -0.22361228252], -[0.1607245100174, -0.2237158053183], -[0.1660455823913, -0.2238231122306], -[0.171363033832, -0.2239342326548], -[0.176676741237, -0.2240491972846], -[0.1819865809218, -0.2241680381452], -[0.1872924286052, -0.2242907886324], -[0.1925941593951, -0.2244174835523], -[0.1978916477744, -0.2245481591637], -[0.203184767588, -0.224682853223], -[0.2084733920299, -0.2248216050303], -[0.2137573936313, -0.2249644554791], -[0.2190366442494, -0.2251114471075], -[0.2243110150566, -0.2252626241524], -[0.2295803765311, -0.2254180326063], -[0.2348445984477, -0.2255777202768], -[0.2401035498707, -0.2257417368496], -[0.2453570991464, -0.2259101339537], -[0.2506051138984, -0.2260829652304], -[0.255847461023, -0.2262602864059], -[0.2610840066866, -0.2264421553666], -[0.2663146163244, -0.2266286322395], -[0.2715391546409, -0.2268197794747], -[0.2767574856128, -0.2270156619339], -[0.2819694724923, -0.2272163469816], -[0.2871749778149, -0.2274219045822], -[0.2923738634074, -0.2276324074005], -[0.2975659904002, -0.2278479309083], -[0.3027512192417, -0.2280685534957], -[0.3079294097156, -0.2282943565876], -[0.3131004209622, -0.2285254247667], -[0.3182641115036, -0.2287618459018], -[0.323420339272, -0.2290037112832], -[0.3285689616435, -0.2292511157636], -[0.3337098354763, -0.2295041579072], -[0.3388428171542, -0.229762940145], -[0.3439677626363, -0.230027568939], -[0.3490845275129, -0.2302981549526], -[0.3541929670681, -0.2305748132314], -[0.3592929363504, -0.2308576633911], -[0.3643842902514, -0.2311468298152], -[0.3694668835939, -0.2314424418626], -[0.3745405712296, -0.2317446340843], -[0.3796052081482, -0.232053546451], -[0.3846606495973, -0.2323693245912], -[0.3897067512167, -0.2326921200408], -[0.3947433691861, -0.2330220905035], -[0.3997703603882, -0.2333594001239], -[0.4047875825887, -0.2337042197722], -[0.4097948946356, -0.234056727342], -[0.4147921566774, -0.2344171080604], -[0.4197792304038, -0.2347855548117], -[0.4247559793109, -0.2351622684737], -[0.4297222689908, -0.2355474582677], -[0.4346779674515, -0.2359413421217], -[0.4396229454657, -0.2363441470462], -[0.4445570769543, -0.236756109523], -[0.4494802394055, -0.2371774759063], -[0.4543923143327, -0.2376085028347], -[0.4592931877757, -0.2380494576537], -[0.4641827508465, -0.2385006188477], -[0.4690609003247, -0.238962276478], -[0.4739275393055, -0.2394347326273], -[0.4787825779042, -0.2399183018458], -[0.4836259340205, -0.2404133115963], -[0.4884575341668, -0.2409201026947], -[0.493277314364, -0.2414390297417], -[0.4980852211083, -0.2419704615383], -[0.5028812124123, -0.2425147814805], -[0.5076652589228, -0.2430723879253], -[0.5124373451176, -0.2436436945182], -[0.517197470583, -0.2442291304733], -[0.5219456513721, -0.2448291407949], -[0.5266819214426, -0.2454441864266], -[0.5314063341714, -0.2460747443149], -[0.5361189639419, -0.2467213073707], -[0.5408199077962, -0.2473843843127], -[0.5455092871429, -0.2480644993734], -[0.5501872495065, -0.2487621918479], -[0.5548539703028, -0.2494780154663], -[0.559509654618, -0.2502125375682], -[0.5641545389668, -0.2509663380587], -[0.5687882113692, -0.251739771311], -[-0.56644401003, -0.2476796311941], -[-0.561789304747, -0.2469055645734], -[-0.5571237928399, -0.246150846851], -[-0.5524479210913, -0.2454150522554], -[-0.5477614645624, -0.2446976283774], -[-0.543064227453, -0.2439980343885], -[-0.5383560415292, -0.2433157419944], -[-0.5336367645304, -0.2426502361974], -[-0.5289062785769, -0.2420010158832], -[-0.5241644885962, -0.2413675942508], -[-0.5194113207836, -0.2407494991019], -[-0.5146467211086, -0.2401462730073], -[-0.5098706538748, -0.2395574733667], -[-0.5050831003431, -0.2389826723744], -[-0.5002840574187, -0.2384214569069], -[-0.4954735364085, -0.2378734283439], -[-0.4906515618474, -0.237338202334], -[-0.4858181703952, -0.2368154085149], -[-0.480973409803, -0.2363046901971], -[-0.4761173379475, -0.2358057040198], -[-0.4712500219307, -0.2353181195843], -[-0.4663715372435, -0.234841619072], -[-0.4614819669889, -0.2343758968515], -[-0.4565814011634, -0.2339206590797], -[-0.4516699359924, -0.2334756233001], -[-0.4467476733164, -0.2330405180411], -[-0.4418147200255, -0.2326150824182], -[-0.4368711875391, -0.2321990657404], -[-0.4319171913268, -0.231792227124], -[-0.4269528504686, -0.2313943351147], -[-0.4219782872516, -0.2310051673184], -[-0.4169936267999, -0.2306245100429], -[-0.4119989967355, -0.2302521579496], -[-0.4069945268685, -0.2298879137167], -[-0.4019803489133, -0.2295315877143], -[-0.3969565962296, -0.2291829976897], -[-0.3919234035858, -0.2288419684663], -[-0.3868809069433, -0.228508331652], -[-0.3818292432599, -0.2281819253603], -[-0.3767685503109, -0.2278625939428], -[-0.3716989665262, -0.2275501877312], -[-0.3666206308421, -0.2272445627922], -[-0.3615336825677, -0.2269455806909], -[-0.3564382612624, -0.2266531082656], -[-0.3513345066262, -0.2263670174118], -[-0.3462225584001, -0.226087184876], -[-0.3411025562756, -0.2258134920583], -[-0.3359746398145, -0.2255458248243], -[-0.3308389483755, -0.2252840733246], -[-0.325695621049, -0.2250281318236], -[-0.3205447965988, -0.2247778985347], -[-0.3153866134098, -0.2245332754644], -[-0.310221209442, -0.2242941682621], -[-0.3050487221892, -0.2240604860778], -[-0.2998692886429, -0.223832141426], -[-0.2946830452608, -0.2236090500555], -[-0.2894901279394, -0.2233911308256], -[-0.2842906719902, -0.223178305588], -[-0.2790848121192, -0.2229704990736], -[-0.2738726824103, -0.2227676387853], -[-0.2686544163109, -0.2225696548948], -[-0.2634301466203, -0.2223764801451], -[-0.2582000054813, -0.222188049757], -[-0.2529641243728, -0.2220043013396], -[-0.2477226341056, -0.2218251748059], -[-0.2424756648197, -0.2216506122912], -[-0.2372233459833, -0.2214805580758], -[-0.2319658063936, -0.2213149585116], -[-0.2267031741786, -0.2211537619515], -[-0.2214355768012, -0.2209969186822], -[-0.2161631410636, -0.2208443808607], -[-0.2108859931134, -0.2206961024528], -[-0.205604258451, -0.2205520391751], -[-0.2003180619369, -0.22041214844], -[-0.1950275278012, -0.2202763893022], -[-0.1897327796533, -0.2201447224091], -[-0.1844339404923, -0.2200171099522], -[-0.1791311327181, -0.2198935156222], -[-0.1738244781438, -0.2197739045646], -[-0.1685140980075, -0.2196582433393], -[-0.1632001129861, -0.2195464998806], -[-0.1578826432082, -0.2194386434599], -[-0.1525618082684, -0.2193346446503], -[-0.1472377272419, -0.2192344752925], -[-0.141910518699, -0.219138108463], -[-0.1365802917963, -0.2190455311332], -[-0.1312471702611, -0.2189567301305], -[-0.1259112708826, -0.2188717570591], -[-0.1205727656562, -0.2187908472442], -[-0.1152321220883, -0.2187148998838], -[-0.1098881698465, -0.2186384011974], -[-0.1045423495384, -0.2185679959871], -[-0.0991943339977, -0.2185012190603], -[-0.09384423797244, -0.2184380534208], -[-0.0884921758705, -0.2183784830678], -[-0.08313826177715, -0.2183224929789], -[-0.07778260947289, -0.2182700690945], -[-0.07242533245125, -0.2182211983028], -[-0.06706654393673, -0.2181758684257], -[-0.06170635690317, -0.2181340682071], -[-0.05634488409167, -0.2180957873004], -[-0.05098223802902, -0.2180610162579], -[-0.04561853104609, -0.2180297465213], -[-0.04025387529626, -0.218001970413], -[-0.03488838277392, -0.2179776811278], -[-0.02952216533311, -0.2179568727263], -[-0.02415533470604, -0.2179395401287], -[-0.01878800252186, -0.2179256791097], -[-0.01342028032529, -0.2179152862942], -[-0.008052279595368, -0.2179083591538], -[-0.002684111764216, -0.2179048960045], -[0.002684111764217, -0.2179048960045], -[0.00805227959537, -0.2179083591538], -[0.01342028032529, -0.2179152862942], -[0.01878800252186, -0.2179256791097], -[0.02415533470604, -0.2179395401287], -[0.02952216533311, -0.2179568727263], -[0.03488838277393, -0.2179776811278], -[0.04025387529626, -0.218001970413], -[0.04561853104609, -0.2180297465213], -[0.05098223802902, -0.2180610162579], -[0.05634488409167, -0.2180957873004], -[0.06170635690317, -0.2181340682071], -[0.06706654393673, -0.2181758684257], -[0.07242533245128, -0.2182211983028], -[0.07778260947289, -0.2182700690945], -[0.08313826177716, -0.2183224929789], -[0.0884921758705, -0.2183784830678], -[0.09384423797244, -0.2184380534208], -[0.0991943339977, -0.2185012190603], -[0.1045423495384, -0.2185679959871], -[0.1098881698465, -0.2186384011974], -[0.1152321220883, -0.2187148998838], -[0.1205727656562, -0.2187908472442], -[0.1259112708826, -0.2188717570591], -[0.1312471702611, -0.2189567301305], -[0.1365802917963, -0.2190455311332], -[0.141910518699, -0.219138108463], -[0.1472377272419, -0.2192344752925], -[0.1525618082684, -0.2193346446503], -[0.1578826432082, -0.2194386434599], -[0.1632001129861, -0.2195464998806], -[0.1685140980075, -0.2196582433393], -[0.1738244781438, -0.2197739045646], -[0.1791311327181, -0.2198935156222], -[0.1844339404923, -0.2200171099522], -[0.1897327796533, -0.2201447224091], -[0.1950275278012, -0.2202763893022], -[0.2003180619369, -0.22041214844], -[0.205604258451, -0.2205520391751], -[0.2108859931134, -0.2206961024528], -[0.2161631410636, -0.2208443808607], -[0.2214355768012, -0.2209969186823], -[0.2267031741786, -0.2211537619515], -[0.2319658063936, -0.2213149585116], -[0.2372233459833, -0.2214805580758], -[0.2424756648197, -0.2216506122912], -[0.2477226341056, -0.2218251748059], -[0.2529641243728, -0.2220043013396], -[0.2582000054813, -0.222188049757], -[0.2634301466203, -0.2223764801451], -[0.2686544163109, -0.2225696548948], -[0.2738726824103, -0.2227676387853], -[0.2790848121192, -0.2229704990736], -[0.2842906719902, -0.223178305588], -[0.2894901279394, -0.2233911308256], -[0.2946830452608, -0.2236090500555], -[0.2998692886429, -0.223832141426], -[0.3050487221892, -0.2240604860778], -[0.310221209442, -0.2242941682621], -[0.3153866134098, -0.2245332754644], -[0.3205447965988, -0.2247778985347], -[0.325695621049, -0.2250281318236], -[0.3308389483755, -0.2252840733246], -[0.3359746398145, -0.2255458248243], -[0.3411025562756, -0.2258134920583], -[0.3462225584001, -0.226087184876], -[0.3513345066262, -0.2263670174118], -[0.3564382612624, -0.2266531082656], -[0.3615336825677, -0.2269455806909], -[0.3666206308421, -0.2272445627922], -[0.3716989665262, -0.2275501877312], -[0.3767685503109, -0.2278625939428], -[0.3818292432599, -0.2281819253603], -[0.3868809069433, -0.228508331652], -[0.3919234035858, -0.2288419684663], -[0.3969565962296, -0.2291829976897], -[0.4019803489133, -0.2295315877143], -[0.4069945268685, -0.2298879137167], -[0.4119989967355, -0.2302521579496], -[0.4169936267999, -0.2306245100429], -[0.4219782872516, -0.2310051673184], -[0.4269528504686, -0.2313943351147], -[0.4319171913268, -0.231792227124], -[0.4368711875391, -0.2321990657404], -[0.4418147200255, -0.2326150824182], -[0.4467476733164, -0.2330405180411], -[0.4516699359924, -0.2334756233001], -[0.4565814011634, -0.2339206590797], -[0.4614819669889, -0.2343758968515], -[0.4663715372435, -0.234841619072], -[0.4712500219307, -0.2353181195843], -[0.4761173379475, -0.2358057040198], -[0.480973409803, -0.2363046901971], -[0.4858181703952, -0.2368154085149], -[0.4906515618474, -0.237338202334], -[0.4954735364086, -0.2378734283439], -[0.5002840574187, -0.2384214569069], -[0.5050831003431, -0.2389826723744], -[0.5098706538748, -0.2395574733667], -[0.5146467211085, -0.2401462730073], -[0.5194113207836, -0.2407494991018], -[0.5241644885961, -0.2413675942509], -[0.5289062785769, -0.2420010158833], -[0.5336367645304, -0.2426502361974], -[0.5383560415292, -0.2433157419944], -[0.543064227453, -0.2439980343885], -[0.5477614645624, -0.2446976283774], -[0.5524479210913, -0.2454150522554], -[0.5571237928399, -0.246150846851], -[0.561789304747, -0.2469055645736], -[0.5664440100089, -0.2476796312823], -[-0.5640870062091, -0.2435972588034], -[-0.5594119235555, -0.2428227399232], -[-0.5547264750751, -0.2420673387551], -[-0.550031088421, -0.241330521976], -[-0.5453255495289, -0.2406117626669], -[-0.5406096713997, -0.2399105446113], -[-0.5358832926898, -0.2392263631686], -[-0.5311462762805, -0.2385587259775], -[-0.5263985078454, -0.2379071535049], -[-0.5216398944315, -0.2372711794543], -[-0.5168703630688, -0.2366503510484], -[-0.5120898594154, -0.2360442292019], -[-0.5072983464506, -0.2354523885963], -[-0.502495803219, -0.2348744176699], -[-0.4976822236317, -0.2343099185364], -[-0.492857615326, -0.2337585068403], -[-0.4880219985866, -0.2332198115621], -[-0.4831754053283, -0.2326934747796], -[-0.4783178781391, -0.2321791513948], -[-0.4734494693836, -0.2316765088333], -[-0.4685702403651, -0.2311852267208], -[-0.4636802605433, -0.2307049965452], -[-0.4587796068072, -0.2302355213056], -[-0.4538683627987, -0.2297765151546], -[-0.4489466182858, -0.2293277030365], -[-0.4440144685821, -0.2288888203239], -[-0.4390720140099, -0.2284596124563], -[-0.4341193594043, -0.2280398345813], -[-0.4291566136562, -0.2276292512016], -[-0.4241838892903, -0.2272276358278], -[-0.4192013020778, -0.2268347706391], -[-0.414208970679, -0.2264504461524], -[-0.409207016316, -0.2260744608998], -[-0.4041955624713, -0.2257066211168], -[-0.3991747346121, -0.2253467404389], -[-0.3941446599367, -0.2249946396098], -[-0.3891054671436, -0.2246501461985], -[-0.3840572862184, -0.2243130943274], -[-0.3790002482408, -0.2239833244104], -[-0.3739344852069, -0.2236606829005], -[-0.3688601298683, -0.2233450220483], -[-0.3637773155832, -0.2230361996694], -[-0.3586861761837, -0.2227340789215], -[-0.3535868458527, -0.222438528091], -[-0.3484794590132, -0.2221494203878], -[-0.3433641502276, -0.22186663375], -[-0.3382410541058, -0.2215900506555], -[-0.3331103052232, -0.2213195579433], -[-0.3279720380457, -0.2210550466412], -[-0.3228263868624, -0.2207964118017], -[-0.3176734857254, -0.2205435523456], -[-0.3125134683951, -0.220296370911], -[-0.3073464682917, -0.2200547737109], -[-0.3021726184525, -0.2198186703956], -[-0.2969920514926, -0.2195879739222], -[-0.2918048995718, -0.2193626004295], -[-0.2866112943644, -0.2191424691184], -[-0.2814113670331, -0.2189275021385], -[-0.2762052482069, -0.2187176244787], -[-0.2709930679612, -0.2185127638632], -[-0.2657749558022, -0.218312850653], -[-0.2605510406525, -0.2181178177501], -[-0.2553214508408, -0.2179276005081], -[-0.2500863140925, -0.217742136645], -[-0.2448457575235, -0.2175613661612], -[-0.2395999076352, -0.217385231261], -[-0.234348890312, -0.217213676277], -[-0.2290928308199, -0.2170466475989], -[-0.2238318538069, -0.216884093605], -[-0.2185660833051, -0.2167259645969], -[-0.2132956427333, -0.2165722127375], -[-0.2080206549017, -0.2164227919913], -[-0.2027412420175, -0.216277658068], -[-0.197457525691, -0.2161367683687], -[-0.1921696269433, -0.216000081934], -[-0.1868776662147, -0.2158675593952], -[-0.1815817633736, -0.2157391629277], -[-0.1762820377267, -0.2156148562063], -[-0.1709786080294, -0.2154946043627], -[-0.1656715924972, -0.2153783739452], -[-0.1603611088175, -0.2152661328806], -[-0.155047274162, -0.2151578504371], -[-0.1497302051995, -0.2150534971901], -[-0.1444100181094, -0.2149530449888], -[-0.1390868285957, -0.214856466925], -[-0.1337607147242, -0.2147637368531], -[-0.1284317770871, -0.2146748517697], -[-0.123099977579, -0.2145898655683], -[-0.1177649669255, -0.2145091056082], -[-0.1124298628365, -0.2144308302458], -[-0.1070910637643, -0.2143569979642], -[-0.1017500601164, -0.2142868839454], -[-0.09640696433183, -0.2142204702742], -[-0.09106188851304, -0.2141577400619], -[-0.08571494444287, -0.2140986774279], -[-0.08036624360138, -0.2140432674839], -[-0.07501589718287, -0.213991496318], -[-0.06966401611309, -0.2139433509808], -[-0.06431071106658, -0.2138988194717], -[-0.05895609248414, -0.2138578907272], -[-0.05360027059037, -0.2138205546091], -[-0.04824335541137, -0.2137868018946], -[-0.04288545679248, -0.2137566242669], -[-0.03752668441617, -0.2137300143068], -[-0.03216714781993, -0.2137069654853], -[-0.02680695641427, -0.2136874721569], -[-0.02144621950074, -0.2136715295543], -[-0.01608504629004, -0.2136591337833], -[-0.01072354592016, -0.2136502818191], -[-0.005361827474478, -0.2136449715034], -[4.45853676819e-16, -0.2136432015419], -[0.005361827474479, -0.2136449715034], -[0.01072354592016, -0.2136502818191], -[0.01608504629004, -0.2136591337833], -[0.02144621950074, -0.2136715295543], -[0.02680695641427, -0.2136874721569], -[0.03216714781993, -0.2137069654853], -[0.03752668441617, -0.2137300143068], -[0.04288545679248, -0.2137566242669], -[0.04824335541137, -0.2137868018946], -[0.05360027059037, -0.2138205546091], -[0.05895609248415, -0.2138578907272], -[0.06431071106659, -0.2138988194717], -[0.06966401611309, -0.2139433509808], -[0.07501589718287, -0.213991496318], -[0.08036624360138, -0.2140432674839], -[0.08571494444288, -0.2140986774279], -[0.09106188851304, -0.2141577400619], -[0.09640696433183, -0.2142204702742], -[0.1017500601164, -0.2142868839454], -[0.1070910637643, -0.2143569979642], -[0.1124298628366, -0.2144308302458], -[0.1177649669255, -0.2145091056082], -[0.123099977579, -0.2145898655683], -[0.1284317770871, -0.2146748517697], -[0.1337607147242, -0.2147637368531], -[0.1390868285957, -0.214856466925], -[0.1444100181094, -0.2149530449888], -[0.1497302051995, -0.2150534971901], -[0.155047274162, -0.2151578504371], -[0.1603611088175, -0.2152661328806], -[0.1656715924972, -0.2153783739452], -[0.1709786080292, -0.2154946043626], -[0.1762820377267, -0.2156148562063], -[0.1815817633736, -0.2157391629277], -[0.1868776662147, -0.2158675593952], -[0.1921696269433, -0.216000081934], -[0.197457525691, -0.2161367683687], -[0.2027412420175, -0.216277658068], -[0.2080206549017, -0.2164227919913], -[0.2132956427333, -0.2165722127375], -[0.2185660833051, -0.2167259645969], -[0.2238318538069, -0.216884093605], -[0.2290928308199, -0.2170466475989], -[0.234348890312, -0.217213676277], -[0.2395999076352, -0.217385231261], -[0.2448457575235, -0.2175613661612], -[0.2500863140925, -0.217742136645], -[0.2553214508408, -0.2179276005081], -[0.2605510406525, -0.2181178177501], -[0.2657749558022, -0.218312850653], -[0.2709930679612, -0.2185127638632], -[0.2762052482069, -0.2187176244787], -[0.2814113670331, -0.2189275021385], -[0.2866112943644, -0.2191424691184], -[0.2918048995718, -0.2193626004295], -[0.2969920514926, -0.2195879739222], -[0.3021726184525, -0.2198186703956], -[0.3073464682917, -0.2200547737109], -[0.3125134683951, -0.220296370911], -[0.3176734857254, -0.2205435523456], -[0.3228263868624, -0.2207964118017], -[0.3279720380457, -0.2210550466412], -[0.3331103052232, -0.2213195579433], -[0.3382410541058, -0.2215900506555], -[0.3433641502276, -0.22186663375], -[0.3484794590132, -0.2221494203878], -[0.3535868458527, -0.222438528091], -[0.3586861761837, -0.2227340789215], -[0.3637773155832, -0.2230361996694], -[0.3688601298683, -0.2233450220483], -[0.3739344852071, -0.2236606829005], -[0.3790002482408, -0.2239833244104], -[0.3840572862184, -0.2243130943274], -[0.3891054671436, -0.2246501461985], -[0.3941446599367, -0.2249946396098], -[0.3991747346121, -0.2253467404389], -[0.4041955624713, -0.2257066211168], -[0.409207016316, -0.2260744608998], -[0.414208970679, -0.2264504461524], -[0.4192013020778, -0.2268347706391], -[0.4241838892903, -0.2272276358278], -[0.4291566136562, -0.2276292512016], -[0.4341193594043, -0.2280398345813], -[0.4390720140099, -0.2284596124563], -[0.4440144685821, -0.2288888203239], -[0.4489466182858, -0.2293277030365], -[0.4538683627987, -0.2297765151546], -[0.4587796068072, -0.2302355213056], -[0.4636802605433, -0.2307049965452], -[0.4685702403651, -0.2311852267208], -[0.4734494693836, -0.2316765088333], -[0.4783178781391, -0.2321791513948], -[0.4831754053283, -0.2326934747795], -[0.4880219985866, -0.2332198115621], -[0.492857615326, -0.2337585068403], -[0.4976822236317, -0.2343099185364], -[0.502495803219, -0.2348744176699], -[0.5072983464506, -0.2354523885963], -[0.5120898594154, -0.2360442292019], -[0.5168703630688, -0.2366503510483], -[0.5216398944316, -0.2372711794542], -[0.5263985078453, -0.237907153505], -[0.5311462762805, -0.2385587259775], -[0.5358832926898, -0.2392263631686], -[0.5406096713997, -0.2399105446113], -[0.5453255495289, -0.2406117626669], -[0.550031088421, -0.241330521976], -[0.5547264750751, -0.2420673387551], -[0.5594119235555, -0.2428227399232], -[0.5640876763578, -0.2435972620443], -[-0.5617176574492, -0.2394925305913], -[-0.5570226934422, -0.2387184270985], -[-0.5523179696499, -0.2379625677625], -[-0.5476037123525, -0.2372249694145], -[-0.5428797177112, -0.2365051288172], -[-0.5381458070704, -0.2358025526505], -[-0.5334018256905, -0.2351167583121], -[-0.5286476414592, -0.2344472745683], -[-0.5238831435992, -0.2337936420658], -[-0.5191082413869, -0.2331554137197], -[-0.5143228628912, -0.232532154988], -[-0.509526953745, -0.2319234440467], -[-0.5047204759541, -0.2313288718767], -[-0.4999034067517, -0.2307480422729], -[-0.4950757375003, -0.2301805717876], -[-0.4902374726453, -0.2296260896165], -[-0.4853886287221, -0.2290842374359], -[-0.4805292334158, -0.2285546692001], -[-0.4756593246758, -0.2280370509055], -[-0.4707789498826, -0.2275310603277], -[-0.465888165067, -0.2270363867367], -[-0.4609870341791, -0.2265527305968], -[-0.4560756284068, -0.2260798032535], -[-0.4511540255397, -0.2256173266125], -[-0.4462223093782, -0.2251650328131], -[-0.4412805691842, -0.2247226638999], -[-0.4363288991718, -0.2242899714939], -[-0.4313673980358, -0.2238667164655], -[-0.4263961685149, -0.2234526686114], -[-0.4214153169884, -0.2230476063359], -[-0.4164249531039, -0.2226513163386], -[-0.4114251894336, -0.2222635933088], -[-0.4064161411576, -0.2218842396274], -[-0.4013979257728, -0.2215130650767], -[-0.3963706628242, -0.2211498865596], -[-0.3913344736586, -0.2207945278261], -[-0.3862894811982, -0.2204468192099], -[-0.3812358097324, -0.2201065973737], -[-0.3761735847274, -0.2197737050632], -[-0.3711029326512, -0.2194479908701], -[-0.3660239808141, -0.2191293090047], -[-0.3609368572221, -0.2188175190763], -[-0.355841690443, -0.2185124858829], -[-0.3507386094846, -0.2182140792085], -[-0.3456277436833, -0.2179221736297], -[-0.3405092226026, -0.2176366483291], -[-0.3353831759407, -0.217357386917], -[-0.330249733447, -0.2170842772608], -[-0.3251090248462, -0.2168172113207], -[-0.3199611797687, -0.2165560849936], -[-0.3148063276896, -0.2163007979625], -[-0.3096445978716, -0.2160512535534], -[-0.3044761193154, -0.2158073585975], -[-0.2993010207141, -0.2155690233001], -[-0.294119430413, -0.2153361611151], -[-0.288931476374, -0.2151086886241], -[-0.2837372861433, -0.2148865254227], -[-0.2785369868238, -0.2146695940098], -[-0.2733307050505, -0.2144578196827], -[-0.2681185669692, -0.2142511304376], -[-0.2629006982184, -0.2140494568729], -[-0.2576772239135, -0.213852732098], -[-0.2524482686342, -0.2136608916459], -[-0.2472139564136, -0.2134738733894], -[-0.2419744107299, -0.2132916174615], -[-0.2367297545, -0.2131140661791], -[-0.2314801100747, -0.2129411639701], -[-0.2262255992364, -0.2127728573041], -[-0.2209663431972, -0.2126090946257], -[-0.2157024625996, -0.2124498262914], -[-0.2104340775179, -0.2122950045091], -[-0.2051613074611, -0.2121445832804], -[-0.1998842713768, -0.2119985183454], -[-0.1946030876565, -0.2118567671303], -[-0.1893178741416, -0.2117192886972], -[-0.1840287481304, -0.2115860436965], -[-0.1787358263861, -0.2114569943214], -[-0.1734392251451, -0.2113321042641], -[-0.1681390601271, -0.2112113386752], -[-0.1628354465447, -0.2110946641235], -[-0.1575284991142, -0.2109820485595], -[-0.1522183320672, -0.2108734612789], -[-0.146905059162, -0.2107688728893], -[-0.1415887936965, -0.2106682552778], -[-0.1362696485208, -0.2105715815806], -[-0.1309476884315, -0.2104787641705], -[-0.1256229699766, -0.210389777575], -[-0.1202952705176, -0.2103044178899], -[-0.1149665127994, -0.2102238307911], -[-0.1096346471026, -0.2101465154765], -[-0.1043005701629, -0.2100730076016], -[-0.0989643920884, -0.2100032883149], -[-0.09362622265542, -0.2099373398214], -[-0.08828617132431, -0.2098751453644], -[-0.08294434725539, -0.2098166892085], -[-0.07760085932519, -0.2097619566234], -[-0.0722558161428, -0.209710933869], -[-0.06690932606641, -0.209663608182], -[-0.06156149721999, -0.2096199677625], -[-0.05621243751014, -0.2095800017627], -[-0.05086225464304, -0.2095437002759], -[-0.04551105614149, -0.2095110543266], -[-0.0401589493621, -0.2094820558618], -[-0.03480604151257, -0.2094566977432], -[-0.02945243966897, -0.2094349737398], -[-0.02409825079322, -0.2094168785219], -[-0.01874358175049, -0.2094024076564], -[-0.01338853932676, -0.2093915576015], -[-0.008033230246377, -0.2093843257042], -[-0.002677761189631, -0.2093807101972], -[0.002677761189632, -0.2093807101972], -[0.008033230246378, -0.2093843257042], -[0.01338853932676, -0.2093915576015], -[0.01874358175049, -0.2094024076564], -[0.02409825079322, -0.2094168785219], -[0.02945243966898, -0.2094349737398], -[0.03480604151257, -0.2094566977432], -[0.04015894936211, -0.2094820558618], -[0.04551105614149, -0.2095110543266], -[0.05086225464304, -0.2095437002759], -[0.05621243751015, -0.2095800017627], -[0.06156149721999, -0.2096199677625], -[0.06690932606641, -0.209663608182], -[0.07225581614281, -0.209710933869], -[0.0776008593252, -0.2097619566234], -[0.08294434725539, -0.2098166892085], -[0.08828617132431, -0.2098751453644], -[0.09362622265542, -0.2099373398214], -[0.0989643920884, -0.2100032883149], -[0.1043005701628, -0.2100730076016], -[0.1096346471026, -0.2101465154765], -[0.1149665127994, -0.2102238307911], -[0.1202952732557, -0.2103044198231], -[0.1256229699766, -0.210389777575], -[0.1309476884315, -0.2104787641705], -[0.1362696485208, -0.2105715815806], -[0.1415887936965, -0.2106682552778], -[0.146905059162, -0.2107688728893], -[0.1522183320672, -0.2108734612789], -[0.1575284991142, -0.2109820485595], -[0.1628354465447, -0.2110946641235], -[0.1681390601271, -0.2112113386752], -[0.1734392251451, -0.2113321042641], -[0.1787358263861, -0.2114569943214], -[0.1840287481304, -0.2115860436965], -[0.1893178741416, -0.2117192886972], -[0.1946030876565, -0.2118567671303], -[0.1998842713768, -0.2119985183454], -[0.2051613074611, -0.2121445832804], -[0.2104340775179, -0.2122950045091], -[0.2157024625996, -0.2124498262914], -[0.2209663431972, -0.2126090946257], -[0.2262255992364, -0.2127728573041], -[0.2314801100747, -0.2129411639701], -[0.2367297545, -0.2131140661791], -[0.2419744107299, -0.2132916174615], -[0.2472139564136, -0.2134738733894], -[0.2524482686342, -0.2136608916459], -[0.2576772239135, -0.213852732098], -[0.2629006982184, -0.2140494568729], -[0.2681185669692, -0.2142511304376], -[0.2733307050505, -0.2144578196827], -[0.2785369868238, -0.2146695940098], -[0.2837372861433, -0.2148865254227], -[0.288931476374, -0.2151086886241], -[0.294119430413, -0.2153361611151], -[0.2993010207141, -0.2155690233001], -[0.3044761193154, -0.2158073585975], -[0.3096445978716, -0.2160512535534], -[0.3148063276896, -0.2163007979625], -[0.3199611797687, -0.2165560849936], -[0.3251090248462, -0.2168172113207], -[0.330249733447, -0.2170842772608], -[0.3353831759407, -0.217357386917], -[0.3405092226026, -0.2176366483291], -[0.3456277436833, -0.2179221736297], -[0.3507386094846, -0.2182140792085], -[0.355841690443, -0.2185124858829], -[0.3609368572221, -0.2188175190763], -[0.3660239808141, -0.2191293090047], -[0.3711029326512, -0.2194479908701], -[0.3761735847274, -0.2197737050632], -[0.3812358097324, -0.2201065973737], -[0.3862894811982, -0.2204468192099], -[0.3913344736586, -0.2207945278261], -[0.3963706628242, -0.2211498865596], -[0.4013979257728, -0.2215130650767], -[0.4064161411576, -0.2218842396274], -[0.4114251894336, -0.2222635933088], -[0.4164249531039, -0.2226513163386], -[0.4214153169884, -0.2230476063359], -[0.4263961685149, -0.2234526686114], -[0.4313673980358, -0.2238667164655], -[0.4363288991718, -0.2242899714939], -[0.4412805691842, -0.2247226638999], -[0.4462223093782, -0.2251650328131], -[0.4511540255397, -0.2256173266125], -[0.4560756284068, -0.2260798032535], -[0.4609870341791, -0.2265527305968], -[0.465888165067, -0.2270363867367], -[0.4707789498826, -0.2275310603277], -[0.4756593246758, -0.2280370509055], -[0.4805292334158, -0.2285546692001], -[0.4853886287221, -0.2290842374359], -[0.4902374726453, -0.2296260896165], -[0.4950757375003, -0.2301805717877], -[0.4999034067517, -0.2307480422729], -[0.5047204759541, -0.2313288718767], -[0.509526953745, -0.2319234440467], -[0.5143228628912, -0.232532154988], -[0.5191082413869, -0.2331554137197], -[0.5238831435992, -0.2337936420658], -[0.5286476414592, -0.2344472745683], -[0.5334018256906, -0.2351167583121], -[0.5381458070704, -0.2358025526504], -[0.5428797177112, -0.2365051288172], -[0.5476037123525, -0.2372249694145], -[0.5523179696499, -0.2379625677625], -[0.5570226934422, -0.2387184270985], -[0.5617176574419, -0.2394925306281], -[-0.559335846508, -0.23536721457], -[-0.5546219005642, -0.2345931649879], -[-0.5498985351729, -0.2338370648965], -[-0.5451660252535, -0.233098916651], -[-0.5404241765912, -0.2323782390608], -[-0.5356728184427, -0.2316745601476], -[-0.5309118023922, -0.2309874178807], -[-0.526141001189, -0.2303163607789], -[-0.5213603075786, -0.2296609483893], -[-0.5165696331415, -0.2290207516536], -[-0.5117689071492, -0.2283953531742], -[-0.5069580754453, -0.2277843473894], -[-0.5021370993601, -0.2271873406687], -[-0.4973059546626, -0.2266039513375], -[-0.492464630554, -0.2260338096409], -[-0.487613128706, -0.2254765576548], -[-0.4827514623448, -0.224931849151], -[-0.477879655383, -0.2243993494257], -[-0.4729977415981, -0.2238787350953], -[-0.4681057638583, -0.2233696938665], -[-0.4632037733945, -0.2228719242861], -[-0.4582918291173, -0.2223851354737], -[-0.4533699969772, -0.2219090468424], -[-0.4484383493675, -0.2214433878104], -[-0.4434969645665, -0.2209878975069], -[-0.4385459262185, -0.2205423244738], -[-0.4335853228505, -0.2201064263673], -[-0.4286152474242, -0.2196799696597], -[-0.423635796919, -0.2192627293427], -[-0.418647071947, -0.2188544886359], -[-0.4136491763952, -0.2184550386984], -[-0.4086422170958, -0.2180641783469], -[-0.4036263035202, -0.2176817137796], -[-0.3986015474976, -0.2173074583075], -[-0.3935680629549, -0.2169412320918], -[-0.3885259656765, -0.2165828618907], -[-0.3834753730839, -0.216232180812], -[-0.3784164040322, -0.215889028075], -[-0.3733491786232, -0.2155532487798], -[-0.3682738180335, -0.2152246936851], -[-0.3631904443568, -0.2149032189931], -[-0.3580991804589, -0.2145886861431], -[-0.3530001498454, -0.2142809616124], -[-0.3478934765399, -0.2139799167252], -[-0.3427792849729, -0.2136854274684], -[-0.3376576998802, -0.2133973743151], -[-0.3325288462101, -0.2131156420552], -[-0.3273928490393, -0.2128401196326], -[-0.3222498334952, -0.212570699989], -[-0.3170999246868, -0.2123072799149], -[-0.3119432476408, -0.2120497599055], -[-0.3067799272443, -0.2117980440239], -[-0.3016100881932, -0.2115520397694], -[-0.296433854945, -0.2113116579518], -[-0.2912513516776, -0.2110768125703], -[-0.2860627022512, -0.2108474206985], -[-0.2808680301748, -0.2106234023741], -[-0.2756674585774, -0.2104046804927], -[-0.2704611101805, -0.2101911807073], -[-0.2652491072764, -0.2099828313313], -[-0.2600315717073, -0.2097795632459], -[-0.2548086248487, -0.2095813098124], -[-0.2495803875946, -0.2093880067866], -[-0.2443469803451, -0.2091995922391], -[-0.2391085229968, -0.2090160064772], -[-0.2338651349341, -0.2088371919715], -[-0.228616935024, -0.2086630932855], -[-0.223364041611, -0.2084936570078], -[-0.2181065725147, -0.208328831688], -[-0.2128446450287, -0.2081685677755], -[-0.2075783759206, -0.2080128175599], -[-0.2023078814334, -0.2078615351161], -[-0.1970332772886, -0.2077146762499], -[-0.1917546786896, -0.2075721984475], -[-0.1864722003267, -0.2074340608263], -[-0.1811859563833, -0.207300224089], -[-0.1758960605419, -0.2071706504789], -[-0.1706026259921, -0.2070453037381], -[-0.165305765439, -0.2069241490667], -[-0.1600055911121, -0.206807153085], -[-0.154702214775, -0.206694283797], -[-0.1493957477356, -0.2065855105555], -[-0.1440863008573, -0.2064808040291], -[-0.1387739845705, -0.2063801361715], -[-0.133458908884, -0.2062834801907], -[-0.1281411833982, -0.206190810522], -[-0.122820917317, -0.2061021028001], -[-0.1174982194619, -0.2060173338348], -[-0.1121731982852, -0.2059364815863], -[-0.1068459618841, -0.2058595251431], -[-0.1015166180145, -0.2057864447003], -[-0.09618527410621, -0.2057172215398], -[-0.09085203727745, -0.2056518380113], -[-0.08551701434994, -0.2055902775147], -[-0.08018031186425, -0.2055325244834], -[-0.07484203609535, -0.2054785643688], -[-0.06950229306831, -0.2054283836262], -[-0.06416118857419, -0.2053819697012], -[-0.05881882818614, -0.2053393110177], -[-0.05347531727561, -0.205300396966], -[-0.0481307610287, -0.2052652178933], -[-0.04278526446264, -0.2052337650937], -[-0.03743893244235, -0.2052060307999], -[-0.03209186969718, -0.2051820081762], -[-0.02674418083762, -0.2051616913111], -[-0.02139597037218, -0.2051450752123], -[-0.01604734272428, -0.2051321558017], -[-0.0106984022492, -0.2051229299115], -[-0.00534925325109, -0.205117395281], -[4.512676143232e-13, -0.2051155505547], -[0.005349253251091, -0.205117395281], -[0.0106984022492, -0.2051229299115], -[0.01604734272428, -0.2051321558017], -[0.02139597037218, -0.2051450752123], -[0.02674418083762, -0.2051616913111], -[0.03209186969718, -0.2051820081762], -[0.03743893244235, -0.2052060307999], -[0.04278526446264, -0.2052337650936], -[0.0481307610287, -0.2052652178933], -[0.05347531727561, -0.205300396966], -[0.05881882818614, -0.2053393110177], -[0.06416118857419, -0.2053819697012], -[0.06950229306831, -0.2054283836262], -[0.07484203609535, -0.2054785643688], -[0.08018031186425, -0.2055325244834], -[0.08551701434994, -0.2055902775147], -[0.09085203727745, -0.2056518380113], -[0.09618527410621, -0.2057172215398], -[0.1015166180145, -0.2057864447003], -[0.1068459618841, -0.2058595251431], -[0.1121731982853, -0.2059364815863], -[0.1174982194619, -0.2060173338348], -[0.122820917317, -0.2061021028001], -[0.1281411833982, -0.206190810522], -[0.1334589088841, -0.2062834801907], -[0.1387739845705, -0.2063801361715], -[0.1440863008573, -0.2064808040292], -[0.1493957477356, -0.2065855105555], -[0.154702214775, -0.206694283797], -[0.1600055911121, -0.206807153085], -[0.165305765439, -0.2069241490667], -[0.1706026259921, -0.2070453037381], -[0.1758960605419, -0.2071706504789], -[0.1811859563833, -0.207300224089], -[0.1864722003267, -0.2074340608263], -[0.1917546786896, -0.2075721984475], -[0.1970332772886, -0.2077146762499], -[0.2023078814334, -0.2078615351161], -[0.2075783759206, -0.2080128175599], -[0.2128446450287, -0.2081685677755], -[0.2181065725147, -0.208328831688], -[0.223364041611, -0.2084936570078], -[0.228616935024, -0.2086630932855], -[0.2338651349341, -0.2088371919715], -[0.2391085229968, -0.2090160064772], -[0.2443469803451, -0.2091995922391], -[0.2495803875946, -0.2093880067866], -[0.2548086248487, -0.2095813098124], -[0.2600315717073, -0.2097795632459], -[0.2652491072764, -0.2099828313313], -[0.2704611101805, -0.2101911807073], -[0.2756674585774, -0.2104046804927], -[0.2808680301748, -0.2106234023741], -[0.2860627022511, -0.2108474206985], -[0.2912513516776, -0.2110768125703], -[0.296433854945, -0.2113116579518], -[0.3016100881932, -0.2115520397694], -[0.3067799272443, -0.2117980440239], -[0.3119432476408, -0.2120497599055], -[0.3170999246868, -0.2123072799149], -[0.3222498334952, -0.212570699989], -[0.3273928490393, -0.2128401196326], -[0.3325288462101, -0.2131156420552], -[0.3376576998802, -0.2133973743151], -[0.3427792849729, -0.2136854274684], -[0.3478934765399, -0.2139799167252], -[0.3530001498454, -0.2142809616124], -[0.3580991804589, -0.2145886861431], -[0.3631904443568, -0.2149032189931], -[0.3682738180335, -0.2152246936851], -[0.3733491786232, -0.2155532487798], -[0.3784164040322, -0.215889028075], -[0.3834753730839, -0.216232180812], -[0.3885259656765, -0.2165828618907], -[0.3935680629549, -0.2169412320918], -[0.3986015474976, -0.2173074583075], -[0.4036263035202, -0.2176817137797], -[0.4086422170958, -0.2180641783469], -[0.4136491763952, -0.2184550386984], -[0.418647071947, -0.2188544886359], -[0.423635796919, -0.2192627293427], -[0.4286152474242, -0.2196799696597], -[0.4335853228505, -0.2201064263673], -[0.4385459262185, -0.2205423244738], -[0.4434969645665, -0.2209878975069], -[0.4484383493675, -0.2214433878104], -[0.4533699969772, -0.2219090468424], -[0.4582918291173, -0.2223851354737], -[0.4632037733945, -0.2228719242861], -[0.4681057638583, -0.2233696938665], -[0.4729977415981, -0.2238787350953], -[0.477879655383, -0.2243993494257], -[0.4827514623448, -0.224931849151], -[0.4876131287059, -0.2254765576548], -[0.492464630554, -0.2260338096409], -[0.4973059546626, -0.2266039513375], -[0.5021370993601, -0.2271873406687], -[0.5069580754453, -0.2277843473894], -[0.5117689071492, -0.2283953531742], -[0.5165696331415, -0.2290207516536], -[0.5213603075785, -0.2296609483893], -[0.5261410011889, -0.2303163607789], -[0.5309118023922, -0.2309874178806], -[0.5356728184427, -0.2316745601475], -[0.5404241765912, -0.2323782390608], -[0.5451660252535, -0.233098916651], -[0.5498985351729, -0.2338370648965], -[0.5546219005642, -0.2345931649879], -[0.5593358465004, -0.2353672146094], -[-0.556942061102, -0.2312213051335], -[-0.5522098200365, -0.23044747019], -[-0.5474684211774, -0.2296913394647], -[-0.542718252251, -0.2289528647209], -[-0.5379591281094, -0.2282315853326], -[-0.5331908855137, -0.227527049251], -[-0.5284133821005, -0.226838813682], -[-0.5236264953295, -0.2261664456426], -[-0.5188301214238, -0.2255095224082], -[-0.5140241743159, -0.2248676318596], -[-0.5092085846067, -0.2242403727388], -[-0.5043832985458, -0.2236273548226], -[-0.4995482770393, -0.2230281990243], -[-0.4947034946904, -0.2224425374305], -[-0.4898489388747, -0.2218700132812], -[-0.4849846088556, -0.2213102809024], -[-0.4801105149387, -0.2207630055952], -[-0.4752266776684, -0.2202278634901], -[-0.4703331270658, -0.2197045413714], -[-0.465429901909, -0.2191927364758], -[-0.4605170490532, -0.2186921562722], -[-0.4555946227928, -0.2182025182237], -[-0.4506626842609, -0.2177235495388], -[-0.445721300868, -0.2172549869112], -[-0.4407705457762, -0.2167965762553], -[-0.435810497408, -0.2163480724354], -[-0.4308412389892, -0.2159092389942], -[-0.4258628581219, -0.2154798478806], -[-0.4208754463883, -0.2150596791781], -[-0.4158790989818, -0.2146485208368], -[-0.410873914365, -0.214246168408], -[-0.4058599939524, -0.2138524247836], -[-0.4008374418163, -0.2134670999405], -[-0.3958063644146, -0.2130900106912], -[-0.3907668703389, -0.2127209804397], -[-0.3857190700821, -0.2123598389449], -[-0.380663075823, -0.2120064220902], -[-0.3755990012285, -0.2116605716598], -[-0.3705269612698, -0.2113221351232], -[-0.3654470720547, -0.2109909654253], -[-0.3603594506718, -0.2106669207852], -[-0.3552642150482, -0.2103498645006], -[-0.3501614838177, -0.2100396647603], -[-0.3450513762007, -0.2097361944629], -[-0.3399340118935, -0.209439331043], -[-0.3348095109667, -0.2091489563035], -[-0.329677993773, -0.2088649562542], -[-0.3245395808616, -0.2085872209574], -[-0.3193943929012, -0.2083156443795], -[-0.3142425506095, -0.2080501242476], -[-0.3090841746885, -0.2077905619136], -[-0.3039193857663, -0.2075368622219], -[-0.2987483043441, -0.2072889333846], -[-0.2935710507483, -0.20704668686], -[-0.2883877450874, -0.2068100372375], -[-0.2831985072128, -0.2065789021264], -[-0.2780034566843, -0.2063532020502], -[-0.272802712739, -0.2061328603448], -[-0.2675963942633, -0.2059178030614], -[-0.2623846197691, -0.2057079588729], -[-0.2571675073718, -0.2055032589854], -[-0.2519451747719, -0.2053036370525], -[-0.246717739239, -0.2051090290939], -[-0.2414853175983, -0.2049193734171], -[-0.2362480262186, -0.2047346105429], -[-0.2310059810035, -0.2045546831343], -[-0.2257592973834, -0.2043795359277], -[-0.2205080903103, -0.2042091156678], -[-0.2152524742535, -0.2040433710455], -[-0.2099925631972, -0.2038822526382], -[-0.2047284706393, -0.2037257128527], -[-0.1994603095918, -0.203573705871], -[-0.1941881925821, -0.2034261875983], -[-0.1889122316562, -0.2032831156133], -[-0.1836325383815, -0.2031444491214], -[-0.1783492238529, -0.203010148909], -[-0.1730623986965, -0.2028801773008], -[-0.1677721730781, -0.2027544981188], -[-0.1624786567092, -0.2026330766428], -[-0.1571819588557, -0.2025158795738], -[-0.1518821883465, -0.2024028749981], -[-0.1465794535826, -0.2022940323539], -[-0.1412738625478, -0.2021893223989], -[-0.1359655228186, -0.2020887171801], -[-0.1306545415756, -0.201992190005], -[-0.1253410256152, -0.2018997154138], -[-0.1200250813612, -0.2018112691539], -[-0.1147068148782, -0.2017268281549], -[-0.109386331883, -0.2016463705054], -[-0.1040637377592, -0.2015698754316], -[-0.09873913756999, -0.2014973232759], -[-0.09341263607222, -0.2014286954778], -[-0.08808433773056, -0.2013639745557], -[-0.08275434673189, -0.2013031440895], -[-0.07742276699999, -0.2012461887047], -[-0.07208970221042, -0.2011930940579], -[-0.06675525580563, -0.2011438468222], -[-0.06141953101026, -0.201098434675], -[-0.05608263084661, -0.2010568462858], -[-0.05074465815027, -0.2010190713057], -[-0.04540571558588, -0.2009851003573], -[-0.04006590566306, -0.2009549250261], -[-0.03472533075239, -0.2009285378521], -[-0.02938409310159, -0.2009059323232], -[-0.02404229485165, -0.200887102869], -[-0.0187000380532, -0.2008720448551], -[-0.0133574246828, -0.2008607545796], -[-0.008014556659352, -0.2008532292688], -[-0.002671535860571, -0.200849467075], -[0.002671535860572, -0.200849467075], -[0.008014556659353, -0.2008532292688], -[0.0133574246828, -0.2008607545796], -[0.0187000380532, -0.2008720448551], -[0.02404229485165, -0.200887102869], -[0.02938409310159, -0.2009059323232], -[0.03472533075239, -0.2009285378521], -[0.04006590566306, -0.2009549250261], -[0.04540571558588, -0.2009851003573], -[0.05074465815027, -0.2010190713057], -[0.05608263084661, -0.2010568462858], -[0.06141953101026, -0.201098434675], -[0.06675525580563, -0.2011438468222], -[0.07208970221042, -0.2011930940579], -[0.07742276699999, -0.2012461887047], -[0.08275434673189, -0.2013031440895], -[0.08808433773056, -0.2013639745557], -[0.09341263607222, -0.2014286954778], -[0.09873913756999, -0.2014973232759], -[0.1040637377592, -0.2015698754316], -[0.109386331883, -0.2016463705054], -[0.1147068148782, -0.2017268281549], -[0.1200250813613, -0.2018112691539], -[0.1253410256152, -0.2018997154138], -[0.1306545415756, -0.201992190005], -[0.1359655228186, -0.2020887171801], -[0.1412738625478, -0.2021893223989], -[0.1465794535826, -0.2022940323539], -[0.1518821883465, -0.2024028749981], -[0.1571819588557, -0.2025158795738], -[0.1624786567092, -0.2026330766428], -[0.1677721730781, -0.2027544981188], -[0.1730623986965, -0.2028801773008], -[0.1783492238529, -0.203010148909], -[0.1836325383817, -0.2031444491214], -[0.1889122316562, -0.2032831156133], -[0.1941881925821, -0.2034261875983], -[0.1994603095918, -0.203573705871], -[0.2047284706393, -0.2037257128527], -[0.2099925631972, -0.2038822526382], -[0.2152524742535, -0.2040433710455], -[0.2205080903103, -0.2042091156678], -[0.2257592973834, -0.2043795359277], -[0.2310059810035, -0.2045546831343], -[0.2362480262186, -0.2047346105429], -[0.2414853175983, -0.2049193734171], -[0.246717739239, -0.2051090290939], -[0.2519451747719, -0.2053036370525], -[0.2571675073718, -0.2055032589854], -[0.2623846197691, -0.2057079588729], -[0.2675963942633, -0.2059178030614], -[0.272802712739, -0.2061328603448], -[0.2780034566843, -0.2063532020502], -[0.2831985072128, -0.2065789021264], -[0.2883877450874, -0.2068100372375], -[0.2935710507483, -0.20704668686], -[0.2987483043441, -0.2072889333846], -[0.3039193857663, -0.2075368622219], -[0.3090841746885, -0.2077905619135], -[0.3142425506096, -0.2080501242476], -[0.3193943929012, -0.2083156443795], -[0.3245395808616, -0.2085872209574], -[0.329677993773, -0.2088649562542], -[0.3348095109667, -0.2091489563035], -[0.3399340118935, -0.209439331043], -[0.3450513762007, -0.2097361944629], -[0.3501614838177, -0.2100396647603], -[0.3552642150482, -0.2103498645006], -[0.3603594506718, -0.2106669207852], -[0.3654470720547, -0.2109909654253], -[0.3705269612698, -0.2113221351232], -[0.3755990012285, -0.2116605716598], -[0.3806630758232, -0.2120064220901], -[0.3857190700821, -0.2123598389449], -[0.3907668703389, -0.2127209804397], -[0.3958063644146, -0.2130900106912], -[0.4008374418163, -0.2134670999405], -[0.4058599939524, -0.2138524247836], -[0.410873914365, -0.214246168408], -[0.4158790989818, -0.2146485208368], -[0.4208754463883, -0.2150596791781], -[0.4258628581219, -0.2154798478806], -[0.4308412389892, -0.2159092389942], -[0.435810497408, -0.2163480724354], -[0.4407705457762, -0.2167965762553], -[0.445721300868, -0.2172549869112], -[0.4506626842609, -0.2177235495388], -[0.4555946227928, -0.2182025182237], -[0.4605170490532, -0.2186921562722], -[0.465429901909, -0.2191927364758], -[0.4703331270658, -0.2197045413714], -[0.4752266776684, -0.2202278634901], -[0.4801105149387, -0.2207630055952], -[0.4849846088556, -0.2213102809024], -[0.4898489388747, -0.2218700132812], -[0.4947034946904, -0.2224425374305], -[0.4995482770393, -0.2230281990243], -[0.5043832985458, -0.2236273548226], -[0.5092085846067, -0.2242403727388], -[0.5140241743159, -0.2248676318596], -[0.5188301214238, -0.2255095224082], -[0.5236264953294, -0.2261664456427], -[0.5284133821005, -0.2268388136821], -[0.5331908855137, -0.2275270492511], -[0.5379591281094, -0.2282315853326], -[0.542718252251, -0.2289528647209], -[0.5474684211774, -0.2296913394647], -[0.5522098200365, -0.23044747019], -[0.5569420610931, -0.2312213051811], -[-0.5545366638724, -0.2270555951148], -[-0.5497867167046, -0.2262818386496], -[-0.5450278687087, -0.225525880634], -[-0.5402606116511, -0.2247872951186], -[-0.5354847689322, -0.2240656406942], -[-0.5307001844333, -0.2233604839568], -[-0.52590672158, -0.2226714001299], -[-0.5211042623872, -0.2219979735813], -[-0.5162927064963, -0.2213397982406], -[-0.5114719702164, -0.2206964779273], -[-0.5066419855751, -0.2200676265958], -[-0.501802699387, -0.2194528685069], -[-0.4969540723462, -0.218851838333], -[-0.4920960781452, -0.2182641812041], -[-0.4872287026255, -0.2176895527027], -[-0.4823519429617, -0.2171276188125], -[-0.4774658068804, -0.2165780558295], -[-0.4725703119162, -0.2160405502377], -[-0.4676654847042, -0.2155147985585], -[-0.4627513603091, -0.2150005071745], -[-0.4578279815921, -0.2144973921351], -[-0.4528953986128, -0.2140051789455], -[-0.4479536680666, -0.2135236023434], -[-0.4430028527566, -0.2130524060662], -[-0.4380430210977, -0.2125913426106], -[-0.4330742466528, -0.2121401729887], -[-0.4280966076989, -0.2116986664795], -[-0.4231101868222, -0.2112666003809], -[-0.4181150705401, -0.2108437597609], -[-0.4131113489493, -0.2104299372111], -[-0.4080991153984, -0.2100249326019], -[-0.4030784661834, -0.2096285528425], -[-0.3980495002644, -0.2092406116433], -[-0.3930123190039, -0.2088609292848], -[-0.3879670259226, -0.2084893323907], -[-0.3829137264742, -0.2081256537065], -[-0.3778525278368, -0.207769731885], -[-0.3727835387188, -0.207421411277], -[-0.3677068691815, -0.2070805417282], -[-0.362622630473, -0.206746978383], -[-0.3575309348765, -0.2064205814946], -[-0.3524318955697, -0.2061012162407], -[-0.3473256264952, -0.2057887525468], -[-0.3422122422417, -0.2054830649142], -[-0.3370918579337, -0.205184032256], -[-0.3319645891312, -0.2048915377372], -[-0.3268305517374, -0.2046054686226], -[-0.3216898619132, -0.2043257161291], -[-0.3165426360002, -0.2040521752845], -[-0.311388990449, -0.2037847447914], -[-0.3062290417552, -0.2035233268966], -[-0.3010629063993, -0.2032678272659], -[-0.2958907007937, -0.2030181548633], -[-0.2907125412333, -0.2027742218359], -[-0.2855285438519, -0.2025359434031], -[-0.2803388245813, -0.2023032377498], -[-0.2751434991163, -0.2020760259253], -[-0.2699426828818, -0.2018542317451], -[-0.2647364910044, -0.2016377816976], -[-0.2595250382862, -0.2014266048545], -[-0.2543084391828, -0.2012206327846], -[-0.2490868077828, -0.2010197994723], -[-0.2438602577911, -0.200824041238], -[-0.2386289025134, -0.2006332966634], -[-0.2333928548439, -0.2004475065194], -[-0.2281522272544, -0.2002666136965], -[-0.2229071317859, -0.2000905631394], -[-0.2176576800416, -0.1999193017839], -[-0.2124039831814, -0.1997527784959], -[-0.207146151919, -0.1995909440145], -[-0.2018842965186, -0.1994337508962], -[-0.1966185267952, -0.1992811534627], -[-0.1913489521142, -0.19913310775], -[-0.1860756813934, -0.1989895714612], -[-0.1807988231056, -0.1988505039196], -[-0.1755184852821, -0.1987158660256], -[-0.1702347755179, -0.1985856202149], -[-0.1649478009766, -0.1984597304184], -[-0.1596576683973, -0.1983381620244], -[-0.1543644841017, -0.1982208818425], -[-0.1490683540015, -0.1981078580691], -[-0.1437693836076, -0.1979990602548], -[-0.1384676780389, -0.1978944592731], -[-0.1331633420323, -0.197794027291], -[-0.1278564799528, -0.197697737741], -[-0.1225471958042, -0.1976055652942], -[-0.117235593241, -0.1975174858353], -[-0.1119217755794, -0.197433476439], -[-0.1066058458099, -0.1973535153469], -[-0.1012879066098, -0.1972775819467], -[-0.09596806035587, -0.1972056567521], -[-0.09064640913762, -0.1971377213838], -[-0.08532305477094, -0.197073758552], -[-0.07999809881181, -0.1970137520398], -[-0.07467164257031, -0.1969576866878], -[-0.06934378712497, -0.1969055483798], -[-0.06401463333724, -0.1968573240291], -[-0.05868428186624, -0.196813001567], -[-0.05335283318363, -0.1967725699305], -[-0.04802038758864, -0.196736019053], -[-0.04268704522335, -0.196703339854], -[-0.03735290608799, -0.1966745242315], -[-0.0320180700564, -0.1966495650538], -[-0.02668263689163, -0.1966284561535], -[-0.02134670626159, -0.1966111923215], -[-0.01601037775478, -0.1965977693023], -[-0.01067375089612, -0.1965881837902], -[-0.005336925162749, -0.1965824334259], -[-3.05728235533e-15, -0.196580516795], -[0.00533692516275, -0.1965824334259], -[0.01067375089612, -0.1965881837902], -[0.01601037775478, -0.1965977693023], -[0.02134670626159, -0.1966111923215], -[0.02668263689163, -0.1966284561535], -[0.0320180700564, -0.1966495650538], -[0.03735290608799, -0.1966745242315], -[0.04268704522335, -0.196703339854], -[0.04802038758864, -0.196736019053], -[0.05335283318363, -0.1967725699305], -[0.05868428186625, -0.196813001567], -[0.06401463333724, -0.1968573240291], -[0.06934378712497, -0.1969055483798], -[0.07467164257031, -0.1969576866878], -[0.07999809881181, -0.1970137520398], -[0.08532305477094, -0.197073758552], -[0.09064640913762, -0.1971377213838], -[0.09596806035587, -0.1972056567521], -[0.1012879066098, -0.1972775819467], -[0.1066058458099, -0.1973535153469], -[0.1119217755794, -0.197433476439], -[0.117235593241, -0.1975174858353], -[0.1225471958042, -0.1976055652942], -[0.1278564799528, -0.197697737741], -[0.1331633420323, -0.197794027291], -[0.1384676780389, -0.1978944592731], -[0.1437693836076, -0.1979990602548], -[0.1490683540015, -0.1981078580691], -[0.1543644841017, -0.1982208818425], -[0.1596576683973, -0.1983381620244], -[0.1649478009766, -0.1984597304184], -[0.1702347755179, -0.1985856202149], -[0.1755184852821, -0.1987158660256], -[0.1807988231056, -0.1988505039196], -[0.1860756813934, -0.1989895714612], -[0.1913489521142, -0.19913310775], -[0.1966185267952, -0.1992811534627], -[0.2018842965186, -0.1994337508962], -[0.207146151919, -0.1995909440145], -[0.2124039831814, -0.1997527784959], -[0.2176576800416, -0.1999193017839], -[0.2229071317859, -0.2000905631394], -[0.2281522272544, -0.2002666136965], -[0.2333928548439, -0.2004475065194], -[0.2386289025134, -0.2006332966634], -[0.2438602577911, -0.200824041238], -[0.2490868077828, -0.2010197994723], -[0.2543084391828, -0.2012206327846], -[0.2595250382862, -0.2014266048545], -[0.2647364910044, -0.2016377816976], -[0.2699426828818, -0.2018542317451], -[0.2751434991163, -0.2020760259253], -[0.2803388245813, -0.2023032377498], -[0.2855285438519, -0.2025359434031], -[0.2907125412333, -0.2027742218359], -[0.2958907007937, -0.2030181548633], -[0.3010629063993, -0.2032678272659], -[0.3062290417552, -0.2035233268966], -[0.311388990449, -0.2037847447914], -[0.3165426360002, -0.2040521752845], -[0.3216898619132, -0.2043257161291], -[0.3268305517374, -0.2046054686226], -[0.3319645891312, -0.2048915377372], -[0.3370918579337, -0.205184032256], -[0.3422122422417, -0.2054830649142], -[0.3473256264952, -0.2057887525468], -[0.3524318955697, -0.2061012162407], -[0.3575309348765, -0.2064205814946], -[0.362622630473, -0.206746978383], -[0.3677068691815, -0.2070805417282], -[0.3727835387188, -0.207421411277], -[0.3778525278368, -0.207769731885], -[0.3829137264742, -0.2081256537065], -[0.3879670259226, -0.2084893323907], -[0.3930123190039, -0.2088609292848], -[0.3980495002644, -0.2092406116433], -[0.4030784661834, -0.2096285528425], -[0.4080991153985, -0.2100249326019], -[0.4131113489493, -0.2104299372111], -[0.4181150705401, -0.2108437597609], -[0.4231101868222, -0.2112666003809], -[0.4280966076989, -0.2116986664795], -[0.4330742466528, -0.2121401729887], -[0.4380430210977, -0.2125913426106], -[0.4430028527566, -0.2130524060662], -[0.4479536680666, -0.2135236023434], -[0.4528953986128, -0.2140051789455], -[0.4578279815921, -0.2144973921351], -[0.4627513603091, -0.2150005071745], -[0.4676654847042, -0.2155147985585], -[0.4725703119162, -0.2160405502377], -[0.4774658068804, -0.2165780558295], -[0.4823519429617, -0.2171276188125], -[0.4872287026256, -0.2176895527026], -[0.4920960781452, -0.2182641812041], -[0.4969540723463, -0.218851838333], -[0.501802699387, -0.2194528685069], -[0.5066419855751, -0.2200676265958], -[0.5114719702164, -0.2206964779273], -[0.5162927064963, -0.2213397982406], -[0.5211042623872, -0.2219979735813], -[0.5259067215801, -0.2226714001299], -[0.5307001844333, -0.2233604839569], -[0.5354847689322, -0.2240656406942], -[0.5402606116511, -0.2247872951186], -[0.5450278687087, -0.225525880634], -[0.5497867167046, -0.2262818386496], -[0.5545373536252, -0.2270556178428], -[-0.5521207088042, -0.222869866229], -[-0.5473528458469, -0.2220967471378], -[-0.542577110865, -0.2213411588588], -[-0.5377933153299, -0.2206026711629], -[-0.5330012907081, -0.2198808606311], -[-0.5282008876386, -0.2191753113306], -[-0.5233919750813, -0.2184856153888], -[-0.518574439449, -0.2178113734726], -[-0.513748183731, -0.217152195179], -[-0.5089131266184, -0.2165076993444], -[-0.5040692016371, -0.2158775142794], -[-0.4992163562962, -0.2152612779365], -[-0.4943545512547, -0.2146586380174], -[-0.4894837595133, -0.2140692520266], -[-0.484603965631, -0.2134927872772], -[-0.479715164973, -0.2129289208547], -[-0.474817362988, -0.2123773395451], -[-0.4699105745181, -0.2118377397305], -[-0.4649948231413, -0.2113098272591], -[-0.4600701405472, -0.2107933172921], -[-0.4551365659445, -0.2102879341312], -[-0.4501941455024, -0.2097934110318], -[-0.445242931822, -0.2093094900028], -[-0.4402829834394, -0.2088359215973], -[-0.4353143643587, -0.2083724646956], -[-0.4303371436131, -0.2079188862833], -[-0.4253513948542, -0.2074749612254], -[-0.420357195967, -0.2070404720397], -[-0.4153546287102, -0.2066152086687], -[-0.4103437783807, -0.2061989682524], -[-0.4053247335, -0.2057915549037], -[-0.4002975855224, -0.2053927794855], -[-0.3952624285629, -0.2050024593916], -[-0.3902193591447, -0.2046204183312], -[-0.3851684759639, -0.204246486118], -[-0.380109879671, -0.2038804984647], -[-0.3750436726688, -0.2035222967809], -[-0.3699699589242, -0.2031717279783], -[-0.3648888437941, -0.2028286442802], -[-0.3598004338643, -0.202492903037], -[-0.3547048368002, -0.2021643665469], -[-0.3496021612092, -0.2018429018834], -[-0.3444925165131, -0.2015283807273], -[-0.3393760128307, -0.2012206792052], -[-0.3342527608691, -0.2009196777331], -[-0.3291228718242, -0.2006252608658], -[-0.3239864572886, -0.2003373171519], -[-0.3188436291672, -0.2000557389937], -[-0.3136944995993, -0.1997804225126], -[-0.308539180888, -0.1995112674199], -[-0.3033777854344, -0.1992481768916], -[-0.2982104256788, -0.1989910574493], -[-0.2930372140454, -0.1987398188447], -[-0.2878582628937, -0.1984943739491], -[-0.282673684473, -0.1982546386477], -[-0.2774835908816, -0.1980205317373], -[-0.2722880940301, -0.1977919748287], -[-0.2670873056081, -0.1975688922532], -[-0.2618813370544, -0.1973512109721], -[-0.25667029953, -0.1971388604913], -[-0.2514543038952, -0.196931772778], -[-0.2462334606878, -0.1967298821818], -[-0.2410078801052, -0.1965331253589], -[-0.235777671988, -0.1963414411993], -[-0.2305429458067, -0.1961547707573], -[-0.2253038106499, -0.1959730571848], -[-0.220060375214, -0.1957962456678], -[-0.2148127477961, -0.1956242833649], -[-0.209561036287, -0.1954571193495], -[-0.2043053481672, -0.1952947045536], -[-0.199045790503, -0.1951369917146], -[-0.1937824699451, -0.1949839353241], -[-0.1885154927281, -0.1948354915794], -[-0.1832449646707, -0.1946916183369], -[-0.1779709911781, -0.1945522750674], -[-0.1726936772441, -0.1944174228139], -[-0.1674131274553, -0.194287024151], -[-0.162129445996, -0.1941610431464], -[-0.1568427366529, -0.1940394453242], -[-0.1515531028225, -0.1939221976294], -[-0.1462606475173, -0.1938092683952], -[-0.1409654733742, -0.1937006273105], -[-0.1356676826622, -0.1935962453905], -[-0.1303673772924, -0.1934960949476], -[-0.1250646588265, -0.193400149564], -[-0.1197596284878, -0.1933083840667], -[-0.1144523871713, -0.1932207745022], -[-0.1091430354548, -0.1931372981138], -[-0.1038316736105, -0.1930579333202], -[-0.09851840161703, -0.192982659694], -[-0.09320331917118, -0.1929114579433], -[-0.08788652570098, -0.192844309893], -[-0.08256812037838, -0.1927811984677], -[-0.07724820213248, -0.1927221076761], -[-0.07192686966297, -0.1926670225959], -[-0.06660422145389, -0.1926159293601], -[-0.0612803557875, -0.1925688151443], -[-0.05595537075849, -0.1925256681547], -[-0.05062936428828, -0.1924864776175], -[-0.04530243413953, -0.1924512337691], -[-0.03997467793088, -0.1924199278472], -[-0.03464619315154, -0.1923925520827], -[-0.02931707717656, -0.192369099693], -[-0.02398742728155, -0.1923495648758], -[-0.01865734065796, -0.1923339428035], -[-0.01332691442824, -0.1923222296194], -[-0.007996245661139, -0.192314422434], -[-0.002665431386976, -0.1923105193223], -[0.002665431386977, -0.1923105193223], -[0.007996245661139, -0.192314422434], -[0.01332691442824, -0.1923222296194], -[0.01865734065797, -0.1923339428035], -[0.02398742728154, -0.1923495648757], -[0.02931707717656, -0.192369099693], -[0.03464619315154, -0.1923925520827], -[0.03997467793084, -0.1924199278471], -[0.04530243413954, -0.1924512337691], -[0.05062936428828, -0.1924864776175], -[0.05595537075849, -0.1925256681547], -[0.0612803557875, -0.1925688151443], -[0.06660422145389, -0.1926159293601], -[0.07192686966297, -0.1926670225959], -[0.07724820213248, -0.1927221076761], -[0.08256812037838, -0.1927811984677], -[0.08788652570098, -0.192844309893], -[0.09320331917118, -0.1929114579433], -[0.09851840161703, -0.192982659694], -[0.1038316736105, -0.1930579333202], -[0.1091430354548, -0.1931372981138], -[0.1144523871713, -0.1932207745022], -[0.1197596284878, -0.1933083840667], -[0.1250646588265, -0.193400149564], -[0.1303673772924, -0.1934960949476], -[0.1356676826622, -0.1935962453905], -[0.1409654733742, -0.1937006273105], -[0.1462606475173, -0.1938092683952], -[0.1515531028225, -0.1939221976294], -[0.1568427366529, -0.1940394453242], -[0.162129445996, -0.1941610431464], -[0.1674131274553, -0.194287024151], -[0.1726936772441, -0.1944174228139], -[0.1779709911781, -0.1945522750674], -[0.1832449646707, -0.1946916183369], -[0.1885154927281, -0.1948354915794], -[0.1937824699451, -0.1949839353241], -[0.199045790503, -0.1951369917146], -[0.2043053481672, -0.1952947045536], -[0.209561036287, -0.1954571193495], -[0.2148127477961, -0.1956242833649], -[0.220060375214, -0.1957962456678], -[0.2253038106499, -0.1959730571848], -[0.2305429458067, -0.1961547707573], -[0.235777671988, -0.1963414411993], -[0.2410078801052, -0.1965331253589], -[0.2462334606878, -0.1967298821818], -[0.2514543038952, -0.196931772778], -[0.25667029953, -0.1971388604913], -[0.2618813370544, -0.1973512109721], -[0.2670873056081, -0.1975688922532], -[0.2722880940301, -0.1977919748287], -[0.2774835908816, -0.1980205317373], -[0.282673684473, -0.1982546386477], -[0.2878582628937, -0.1984943739491], -[0.2930372140454, -0.1987398188447], -[0.2982104256788, -0.1989910574493], -[0.3033777854344, -0.1992481768916], -[0.308539180888, -0.1995112674199], -[0.3136944995993, -0.1997804225126], -[0.3188436291672, -0.2000557389937], -[0.3239864572886, -0.2003373171519], -[0.3291228718242, -0.2006252608658], -[0.3342527608691, -0.2009196777331], -[0.3393760128307, -0.2012206792052], -[0.3444925165131, -0.2015283807273], -[0.3496021612092, -0.2018429018834], -[0.3547048368002, -0.2021643665469], -[0.3598004338643, -0.202492903037], -[0.3648888437941, -0.2028286442802], -[0.3699699589242, -0.2031717279783], -[0.3750436726688, -0.2035222967809], -[0.380109879671, -0.2038804984647], -[0.3851684759639, -0.204246486118], -[0.3902193591447, -0.2046204183312], -[0.3952624285629, -0.2050024593916], -[0.4002975855224, -0.2053927794855], -[0.4053247335, -0.2057915549037], -[0.4103437783807, -0.2061989682524], -[0.4153546287102, -0.2066152086687], -[0.420357195967, -0.2070404720397], -[0.4253513948542, -0.2074749612254], -[0.4303371436131, -0.2079188862833], -[0.4353143643587, -0.2083724646956], -[0.4402829834394, -0.2088359215973], -[0.445242931822, -0.2093094900028], -[0.4501941455024, -0.2097934110318], -[0.4551365659445, -0.2102879341312], -[0.4600701405472, -0.2107933172921], -[0.4649948231413, -0.2113098272591], -[0.4699105745181, -0.2118377397305], -[0.474817362988, -0.2123773395451], -[0.479715164973, -0.2129289208547], -[0.484603965631, -0.2134927872772], -[0.4894837595132, -0.2140692520266], -[0.4943545512548, -0.2146586380174], -[0.4992163562962, -0.2152612779365], -[0.5040692016371, -0.2158775142794], -[0.5089131266184, -0.2165076993444], -[0.513748183731, -0.217152195179], -[0.518574439449, -0.2178113734726], -[0.5233919750813, -0.2184856153888], -[0.5282008876386, -0.2191753113306], -[0.5330012907081, -0.2198808606312], -[0.5377933153299, -0.2206026711629], -[0.542577110865, -0.2213411588588], -[0.5473528458469, -0.2220967471378], -[0.5521207088042, -0.222869866229], -[-0.5496929903026, -0.2186649344378], -[-0.5449084538159, -0.217892654596], -[-0.5401163732926, -0.2171376271777], -[-0.5353165690963, -0.2163994392401], -[-0.5305088803103, -0.215677684234], -[-0.5256931639881, -0.2149719626249], -[-0.5208692943787, -0.2142818824235], -[-0.5160371621353, -0.2136070596304], -[-0.5111966735151, -0.2129471186016], -[-0.5063477495812, -0.21230169234], -[-0.5014903254084, -0.2116704227198], -[-0.4966243493029, -0.2110529606501], -[-0.491749782037, -0.210448966183], -[-0.486866596105, -0.2098581085725], -[-0.4819747750018, -0.2092800662894], -[-0.4770743125269, -0.2087145269977], -[-0.4721652121154, -0.208161187497], -[-0.4672474861981, -0.2076197536359], -[-0.4623211555892, -0.2070899401995], -[-0.4573862489045, -0.2065714707756], -[-0.4524428020081, -0.2060640776036], -[-0.4474908574884, -0.2055675014074], -[-0.4425304641628, -0.2050814912165], -[-0.4375616766098, -0.2046058041777], -[-0.4325845547285, -0.2041402053588], -[-0.4275991633238, -0.2036844675471], -[-0.4226055717173, -0.2032383710439], -[-0.4176038533819, -0.2028017034566], -[-0.4125940855993, -0.2023742594902], -[-0.4075763491401, -0.201955840738], -[-0.4025507279638, -0.2015462554747], -[-0.3975173089395, -0.20114531845], -[-0.3924761815844, -0.2007528506857], -[-0.3874274378206, -0.2003686792761], -[-0.3823711717499, -0.19999263719], -[-0.3773074794388, -0.1996245630819], -[-0.3722364587264, -0.1992643011006], -[-0.3671582090402, -0.1989117007078], -[-0.3620728312264, -0.1985666164996], -[-0.3569804273936, -0.1982289080328], -[-0.3518811007662, -0.1978984396568], -[-0.34677495555, -0.1975750803503], -[-0.3416620968066, -0.1972587035632], -[-0.3365426303383, -0.1969491870637], -[-0.3314166625807, -0.1966464127907], -[-0.3262843005043, -0.1963502667106], -[-0.3211456515234, -0.1960606386801], -[-0.3160008234121, -0.1957774223126], -[-0.310849924227, -0.1955005148508], -[-0.3056930622365, -0.1952298170429], -[-0.3005303458552, -0.1949652330242], -[-0.2953618835845, -0.1947066702024], -[-0.2901877839577, -0.1944540391481], -[-0.2850081554901, -0.1942072534888], -[-0.2798231066337, -0.1939662298075], -[-0.2746327457352, -0.1937308875451], -[-0.269437180999, -0.1935011489068], -[-0.264236520453, -0.1932769387718], -[-0.259030871918, -0.1930581846074], -[-0.25382034298, -0.192844816386], -[-0.248605040966, -0.1926367665054], -[-0.2433850729218, -0.1924339697128], -[-0.238160545593, -0.1922363630321], -[-0.2329315654076, -0.1920438856931], -[-0.227698238462, -0.1918564790651], -[-0.2224606705077, -0.1916740865923], -[-0.2172189669411, -0.1914966537325], -[-0.2119732327942, -0.1913241278979], -[-0.2067235727278, -0.1911564583989], -[-0.2014700910258, -0.1909935963902], -[-0.1962128915909, -0.1908354948191], -[-0.1909520779422, -0.1906821083762], -[-0.1856877532135, -0.1905333934482], -[-0.1804200201531, -0.1903893080728], -[-0.1751489811249, -0.1902498118959], -[-0.1698747381101, -0.1901148661303], -[-0.1645973927106, -0.1899844335166], -[-0.1593170461522, -0.1898584782857], -[-0.1540337992903, -0.1897369661233], -[-0.1487477526144, -0.189619864136], -[-0.1434590062554, -0.1895071408187], -[-0.1381676599919, -0.1893987660241], -[-0.1328738132586, -0.1892947109338], -[-0.1275775651536, -0.1891949480297], -[-0.1222790144486, -0.1890994510683], -[-0.1169782595972, -0.1890081950559], -[-0.1116753987455, -0.1889211562244], -[-0.1063705297425, -0.1888383120094], -[-0.1010637501504, -0.1887596410291], -[-0.09575515725654, -0.1886851230641], -[-0.09044484808465, -0.1886147390394], -[-0.08513291940692, -0.188548471006], -[-0.07981946775637, -0.1884863021253], -[-0.07450458943942, -0.1884282166532], -[-0.0691883805488, -0.1883741999263], -[-0.06387093697674, -0.1883242383481], -[-0.05855235442831, -0.1882783193773], -[-0.05323272843504, -0.1882364315165], -[-0.04791215436875, -0.1881985643016], -[-0.0425907274555, -0.1881647082928], -[-0.03726854278972, -0.1881348550662], -[-0.03194569534853, -0.1881089972062], -[-0.02662228000607, -0.1880871282993], -[-0.02129839154809, -0.1880692429279], -[-0.01597412468647, -0.1880553366661], -[-0.01064957407397, -0.1880454060753], -[-0.005324834318918, -0.1880394487019], -[-4.433059415229e-14, -0.1880374630741], -[0.005324834318919, -0.1880394487019], -[0.01064957407397, -0.1880454060753], -[0.01597412468647, -0.1880553366661], -[0.02129839154809, -0.1880692429279], -[0.02662228000607, -0.1880871282993], -[0.03194569534853, -0.1881089972062], -[0.03726854278972, -0.1881348550662], -[0.0425907274555, -0.1881647082928], -[0.04791215436875, -0.1881985643016], -[0.05323272843504, -0.1882364315165], -[0.05855235442831, -0.1882783193773], -[0.06387093697674, -0.1883242383481], -[0.0691883805488, -0.1883741999263], -[0.07450458943942, -0.1884282166532], -[0.07981946775637, -0.1884863021253], -[0.08513291940692, -0.188548471006], -[0.09044484808465, -0.1886147390394], -[0.09575515725655, -0.1886851230641], -[0.1010637501504, -0.1887596410291], -[0.1063705297425, -0.1888383120094], -[0.1116753987455, -0.1889211562244], -[0.1169782595972, -0.1890081950559], -[0.1222790144486, -0.1890994510683], -[0.1275775651536, -0.1891949480297], -[0.1328738132586, -0.1892947109338], -[0.1381676599919, -0.1893987660241], -[0.1434590062554, -0.1895071408187], -[0.1487477526144, -0.189619864136], -[0.1540337992903, -0.1897369661233], -[0.1593170461522, -0.1898584782857], -[0.1645973927106, -0.1899844335166], -[0.1698747381101, -0.1901148661303], -[0.1751489811249, -0.1902498118959], -[0.1804200201531, -0.1903893080728], -[0.1856877532135, -0.1905333934482], -[0.1909520779423, -0.1906821083762], -[0.1962128915909, -0.1908354948191], -[0.2014700910258, -0.1909935963902], -[0.2067235727278, -0.1911564583989], -[0.2119732327942, -0.1913241278979], -[0.2172189669411, -0.1914966537325], -[0.2224606705077, -0.1916740865923], -[0.227698238462, -0.1918564790651], -[0.2329315654076, -0.1920438856931], -[0.238160545593, -0.1922363630321], -[0.2433850729218, -0.1924339697128], -[0.248605040966, -0.1926367665054], -[0.25382034298, -0.192844816386], -[0.259030871918, -0.1930581846074], -[0.264236520453, -0.1932769387718], -[0.269437180999, -0.1935011489068], -[0.2746327457352, -0.1937308875451], -[0.2798231066337, -0.1939662298075], -[0.2850081554901, -0.1942072534888], -[0.2901877839577, -0.1944540391481], -[0.2953618835845, -0.1947066702024], -[0.3005303458552, -0.1949652330242], -[0.3056930622365, -0.1952298170429], -[0.310849924227, -0.1955005148508], -[0.3160008234121, -0.1957774223126], -[0.3211456515234, -0.1960606386801], -[0.3262843005043, -0.1963502667106], -[0.3314166625807, -0.1966464127907], -[0.3365426303383, -0.1969491870637], -[0.3416620968066, -0.1972587035632], -[0.34677495555, -0.1975750803503], -[0.3518811007662, -0.1978984396568], -[0.3569804273936, -0.1982289080328], -[0.3620728312264, -0.1985666164996], -[0.3671582090402, -0.1989117007078], -[0.3722364587264, -0.1992643011006], -[0.3773074794388, -0.1996245630819], -[0.3823711717499, -0.19999263719], -[0.3874274378215, -0.2003686792754], -[0.3924761815844, -0.2007528506857], -[0.3975173089395, -0.20114531845], -[0.4025507279638, -0.2015462554747], -[0.4075763491401, -0.201955840738], -[0.4125940855993, -0.2023742594902], -[0.4176038533819, -0.2028017034566], -[0.4226055717173, -0.2032383710439], -[0.4275991633238, -0.2036844675471], -[0.4325845547285, -0.2041402053588], -[0.4375616766098, -0.2046058041777], -[0.4425304641628, -0.2050814912165], -[0.4474908574884, -0.2055675014074], -[0.452442802008, -0.2060640776036], -[0.4573862489045, -0.2065714707756], -[0.4623211555892, -0.2070899401995], -[0.4672474861981, -0.2076197536359], -[0.4721652121154, -0.208161187497], -[0.4770743125269, -0.2087145269977], -[0.4819747750018, -0.2092800662894], -[0.486866596105, -0.2098581085725], -[0.491749782037, -0.210448966183], -[0.4966243493029, -0.2110529606501], -[0.5014903254084, -0.2116704227198], -[0.5063477495812, -0.21230169234], -[0.5111966735151, -0.2129471186016], -[0.5160371621353, -0.2136070596304], -[0.5208692943788, -0.2142818824235], -[0.5256931639881, -0.2149719626249], -[0.5305088803103, -0.215677684234], -[0.5353165690963, -0.2163994392401], -[0.5401163732926, -0.2171376271776], -[0.5449084538159, -0.217892654596], -[0.5496929903026, -0.2186649344378], -[-0.547254456239, -0.2144412695437], -[-0.5424537786234, -0.2136700033573], -[-0.5376458746434, -0.2129157223942], -[-0.5328305730312, -0.212178029936], -[-0.5280077200668, -0.2114565352781], -[-0.5231771788947, -0.2107508543011], -[-0.5183388288166, -0.2100606099618], -[-0.5134925645684, -0.2093854327065], -[-0.5086382955896, -0.2087249608125], -[-0.5037759452917, -0.2080788406633], -[-0.4989054503307, -0.2074467269627], -[-0.4940267598907, -0.2068282828934], -[-0.4891398349794, -0.206223180225], -[-0.4842446477431, -0.2056310993767], -[-0.4793411807999, -0.2050517294398], -[-0.474429426596, -0.2044847681647], -[-0.4695093867861, -0.2039299219151], -[-0.4645810716378, -0.2033869055966], -[-0.4596444994624, -0.2028554425599], -[-0.4546996960717, -0.2023352644842], -[-0.4497466942609, -0.2018261112441], -[-0.4447855333174, -0.2013277307604], -[-0.4398162585556, -0.2008398788406], -[-0.4348389208769, -0.2003623190088], -[-0.4298535763535, -0.1998948223287], -[-0.4248602858371, -0.1994371672196], -[-0.4198591145899, -0.1989891392702], -[-0.4148501319377, -0.1985505310476], -[-0.4098334109442, -0.1981211419061], -[-0.4048090281056, -0.1977007777952], -[-0.3997770630647, -0.197289251068], -[-0.3947375983424, -0.1968863802907], -[-0.3896907190879, -0.1964919900545], -[-0.3846365128443, -0.19610591079], -[-0.3795750693302, -0.1957279785842], -[-0.3745064802359, -0.1953580350012], -[-0.3694308390336, -0.1949959269069], -[-0.3643482408003, -0.1946415062975], -[-0.3592587820537, -0.1942946301318], -[-0.3541625605983, -0.1939551601691], -[-0.349059675384, -0.1936229628102], -[-0.3439502263738, -0.1932979089438], -[-0.338834314421, -0.1929798737975], -[-0.333712041156, -0.1926687367932], -[-0.3285835088809, -0.1923643814072], -[-0.3234488204724, -0.192066695035], -[-0.3183080792916, -0.1917755688606], -[-0.3131613891011, -0.1914908977303], -[-0.3080088539882, -0.1912125800308], -[-0.3028505782943, -0.190940517572], -[-0.2976866665499, -0.1906746154738], -[-0.292517223415, -0.190414782057], -[-0.2873423536242, -0.1901609287382], -[-0.2821621619364, -0.1899129699291], -[-0.2769767530892, -0.1896708229393], -[-0.2717862317568, -0.1894344078829], -[-0.266590702512, -0.1892036475883], -[-0.2613902697919, -0.1889784675128], -[-0.256185037866, -0.1887587956587], -[-0.250975110809, -0.1885445624948], -[-0.2457605924745, -0.188335700879], -[-0.2405415864732, -0.188132145986], -[-0.2353181961524, -0.1879338352363], -[-0.2300905245784, -0.1877407082292], -[-0.224858674521, -0.1875527066779], -[-0.2196227484402, -0.1873697743478], -[-0.2143828484746, -0.187191856997], -[-0.2091390764316, -0.1870189023197], -[-0.2038915337797, -0.1868508598914], -[-0.198640321642, -0.1866876811173], -[-0.1933855407909, -0.1865293191819], -[-0.1881272916454, -0.186375729002], -[-0.1828656742681, -0.1862268671803], -[-0.1776007883647, -0.1860826919629], -[-0.1723327332838, -0.1859431631966], -[-0.1670616080184, -0.1858082422899], -[-0.1617875112083, -0.1856778921748], -[-0.1565105411425, -0.185552077271], -[-0.1512307957642, -0.1854307634506], -[-0.1459483726751, -0.1853139180063], -[-0.1406633691409, -0.1852015096194], -[-0.1353758820985, -0.1850935083304], -[-0.1300860081619, -0.1849898855107], -[-0.124793843631, -0.1848906138355], -[-0.1194994844989, -0.184795667259], -[-0.1142030264615, -0.1847050209896], -[-0.1089045649261, -0.1846186514675], -[-0.1036041950221, -0.1845365363428], -[-0.09830201161046, -0.1844586544558], -[-0.09299810929472, -0.1843849858171], -[-0.08769258243213, -0.1843155115901], -[-0.082385525145, -0.1842502140741], -[-0.07707703133248, -0.1841890766883], -[-0.07176719468261, -0.1841320839572], -[-0.06645610868475, -0.184079221497], -[-0.06114386664214, -0.1840304760028], -[-0.0558305616848, -0.1839858352372], -[-0.05051628678259, -0.1839452880193], -[-0.04520113475852, -0.1839088242152], -[-0.03988519830222, -0.183876434729], -[-0.0345685699835, -0.1838481114952], -[-0.02925134226618, -0.1838238474715], -[-0.02393360752197, -0.1838036366329], -[-0.01861545804443, -0.1837874739663], -[-0.01329698606306, -0.1837753554664], -[-0.007978283757516, -0.1837672781324], -[-0.002659443271737, -0.183763239965], -[0.002659443271738, -0.183763239965], -[0.007978283757517, -0.1837672781324], -[0.01329698606307, -0.1837753554664], -[0.01861545804443, -0.1837874739663], -[0.02393360752197, -0.1838036366329], -[0.02925134226618, -0.1838238474715], -[0.0345685699835, -0.1838481114952], -[0.03988519830222, -0.183876434729], -[0.04520113475852, -0.1839088242152], -[0.05051628678259, -0.1839452880193], -[0.0558305616848, -0.1839858352372], -[0.06114386664214, -0.1840304760028], -[0.06645610868475, -0.184079221497], -[0.07176719468262, -0.1841320839572], -[0.07707703133248, -0.1841890766883], -[0.082385525145, -0.1842502140741], -[0.08769258243213, -0.1843155115901], -[0.09299810929472, -0.1843849858171], -[0.09830201161046, -0.1844586544558], -[0.1036041950221, -0.1845365363428], -[0.1089045649261, -0.1846186514675], -[0.1142030264615, -0.1847050209896], -[0.1194994844989, -0.184795667259], -[0.124793843631, -0.1848906138355], -[0.1300860081619, -0.1849898855107], -[0.1353758820985, -0.1850935083304], -[0.1406633691409, -0.1852015096194], -[0.1459483726751, -0.1853139180063], -[0.1512307957642, -0.1854307634506], -[0.1565105411425, -0.185552077271], -[0.1617875112083, -0.1856778921748], -[0.1670616080184, -0.1858082422899], -[0.1723327332838, -0.1859431631966], -[0.1776007883647, -0.1860826919629], -[0.1828656742681, -0.1862268671803], -[0.1881272916454, -0.186375729002], -[0.1933855407909, -0.1865293191819], -[0.198640321642, -0.1866876811173], -[0.2038915337797, -0.1868508598914], -[0.2091390764316, -0.1870189023197], -[0.2143828484746, -0.187191856997], -[0.2196227484402, -0.1873697743478], -[0.224858674521, -0.1875527066779], -[0.2300905245784, -0.1877407082292], -[0.2353181961524, -0.1879338352363], -[0.2405415864732, -0.188132145986], -[0.2457605924745, -0.188335700879], -[0.250975110809, -0.1885445624948], -[0.256185037866, -0.1887587956587], -[0.2613902697919, -0.1889784675128], -[0.266590702512, -0.1892036475883], -[0.2717862317568, -0.1894344078829], -[0.2769767530892, -0.1896708229393], -[0.2821621619364, -0.1899129699291], -[0.2873423536242, -0.1901609287382], -[0.292517223415, -0.190414782057], -[0.2976866665499, -0.1906746154739], -[0.3028505782943, -0.190940517572], -[0.3080088539882, -0.1912125800308], -[0.3131613891011, -0.1914908977303], -[0.3183080792916, -0.1917755688606], -[0.3234488204724, -0.192066695035], -[0.3285835088809, -0.1923643814072], -[0.333712041156, -0.1926687367932], -[0.338834314421, -0.1929798737975], -[0.3439502263738, -0.1932979089438], -[0.349059675384, -0.1936229628102], -[0.3541625605983, -0.1939551601691], -[0.3592587820537, -0.1942946301318], -[0.3643482408003, -0.1946415062975], -[0.3694308390336, -0.1949959269069], -[0.3745064802359, -0.1953580350012], -[0.3795750693302, -0.1957279785842], -[0.3846365128443, -0.19610591079], -[0.3896907190879, -0.1964919900545], -[0.3947375983424, -0.1968863802907], -[0.3997770630647, -0.197289251068], -[0.4048090281057, -0.1977007777952], -[0.4098334109442, -0.1981211419061], -[0.4148501319377, -0.1985505310476], -[0.4198591145899, -0.1989891392702], -[0.4248602858371, -0.1994371672196], -[0.4298535763535, -0.1998948223287], -[0.4348389208769, -0.2003623190088], -[0.4398162585556, -0.2008398788406], -[0.4447855333174, -0.2013277307604], -[0.4497466942609, -0.2018261112441], -[0.4546996960717, -0.2023352644842], -[0.4596444994624, -0.2028554425599], -[0.4645810716378, -0.2033869055966], -[0.4695093867861, -0.2039299219151], -[0.474429426596, -0.2044847681647], -[0.4793411807999, -0.2050517294398], -[0.4842446477431, -0.2056310993767], -[0.4891398349794, -0.206223180225], -[0.4940267598907, -0.2068282828935], -[0.4989054503307, -0.2074467269627], -[0.5037759452917, -0.2080788406633], -[0.5086382955896, -0.2087249608125], -[0.5134925645684, -0.2093854327065], -[0.5183388288166, -0.2100606099618], -[0.5231771788947, -0.2107508543011], -[0.5280077200668, -0.2114565352781], -[0.5328305730312, -0.212178029936], -[0.5376458746434, -0.2129157223941], -[0.5424537786234, -0.2136700033573], -[0.547254456239, -0.2144412695437], -[-0.5448053556292, -0.2101993028548], -[-0.5399890504768, -0.2094292202601], -[-0.535165826996, -0.2086758661544], -[-0.530335521802, -0.2079388590718], -[-0.5254979879792, -0.2072178232116], -[-0.5206530944565, -0.206512388967], -[-0.5158007253608, -0.2058221933791], -[-0.5109407793552, -0.2051468805209], -[-0.5060731689698, -0.2044861018178], -[-0.5011978199308, -0.2038395163064], -[-0.4963146704927, -0.2032067908389], -[-0.4914236707784, -0.2025876002361], -[-0.4865247821317, -0.2019816273947], -[-0.4816179764838, -0.2013885633528], -[-0.4767032357376, -0.2008081073184], -[-0.4717805511711, -0.2002399666642], -[-0.4668499228623, -0.1996838568938], -[-0.4619113591356, -0.1991395015818], -[-0.4569648760314, -0.1986066322913], -[-0.4520104967985, -0.1980849884727], -[-0.4470482514107, -0.1975743173455], -[-0.4420781761063, -0.1970743737665], -[-0.4371003129505, -0.1965849200861], -[-0.4321147094217, -0.1961057259956], -[-0.4271214180189, -0.1956365683667], -[-0.4221204958914, -0.1951772310846], -[-0.4171120044893, -0.1947275048778], -[-0.4120960092344, -0.1942871871435], -[-0.4070725792103, -0.1938560817722], -[-0.4020417868714, -0.1934339989707], -[-0.3970037077695, -0.1930207550854], -[-0.3919584202973, -0.1926161724262], -[-0.3869060054485, -0.1922200790921], -[-0.3818465465927, -0.1918323087985], -[-0.3767801292653, -0.1914527007071], -[-0.3717068409706, -0.1910810992585], -[-0.3666267709985, -0.1907173540086], -[-0.3615400102529, -0.1903613194676], -[-0.3564466510926, -0.1900128549434], -[-0.3513467871816, -0.1896718243886], -[-0.3462405133514, -0.1893380962515], -[-0.3411279254716, -0.1890115433312], -[-0.3360091203302, -0.188692042637], -[-0.3308841955224, -0.1883794752519], -[-0.3257532493473, -0.1880737262001], -[-0.3206163807122, -0.1877746843191], -[-0.3154736890439, -0.1874822421357], -[-0.3103252742065, -0.1871962957462], -[-0.3051712364255, -0.1869167447007], -[-0.3000116762182, -0.1866434918912], -[-0.2948466943284, -0.186376443444], -[-0.2896763916675, -0.1861155086158], -[-0.2845008692595, -0.1858605996934], -[-0.2793202281906, -0.1856116318975], -[-0.2741345695638, -0.1853685232893], -[-0.268943994456, -0.1851311946819], -[-0.2637486038802, -0.1848995695537], -[-0.2585484987505, -0.1846735739659], -[-0.2533437798499, -0.1844531364832], -[-0.2481345478022, -0.1842381880974], -[-0.2429209030459, -0.1840286621539], -[-0.237702945811, -0.1838244942816], -[-0.2324807760984, -0.1836256223251], -[-0.2272544936614, -0.1834319862797], -[-0.2220241979898, -0.1832435282298], -[-0.2167899882957, -0.1830601922887], -[-0.211551963501, -0.1828819245415], -[-0.2063102222277, -0.1827086729907], -[-0.2010648627885, -0.1825403875033], -[-0.1958159831802, -0.1823770197607], -[-0.1905636810779, -0.182218523211], -[-0.1853080538308, -0.1820648530222], -[-0.1800491984593, -0.181915966039], -[-0.1747872116535, -0.1817718207403], -[-0.1695221897721, -0.181632377199], -[-0.1642542288439, -0.181497597044], -[-0.1589834245685, -0.181367443423], -[-0.1537098723192, -0.1812418809682], -[-0.1484336671464, -0.1811208757624], -[-0.1431549037818, -0.1810043953079], -[-0.1378736766434, -0.1808924084956], -[-0.1325900798412, -0.1807848855769], -[-0.1273042071839, -0.180681798136], -[-0.1220161521856, -0.1805831190643], -[-0.1167260080738, -0.1804888225355], -[-0.1114338677975, -0.1803988839827], -[-0.106139824036, -0.1803132800762], -[-0.100843969208, -0.1802319887028], -[-0.09554639548168, -0.180154988946], -[-0.0902471947846, -0.1800822610679], -[-0.08494645881418, -0.1800137864918], -[-0.07964427904877, -0.1799495477858], -[-0.07434074675881, -0.1798895286479], -[-0.06903595301839, -0.1798337138919], -[-0.06372998871713, -0.1797820894341], -[-0.05842294457231, -0.1797346422815], -[-0.05311491114116, -0.1796913605206], -[-0.04780597883353, -0.179652233307], -[-0.04249623792461, -0.1796172508569], -[-0.03718577856792, -0.1795864044378], -[-0.03187469080844, -0.1795596863621], -[-0.02656306459583, -0.1795370899801], -[-0.0212509897979, -0.1795186096746], -[-0.01593855621402, -0.1795042408558], -[-0.01062585358875, -0.1794939799582], -[-0.005312971625443, -0.179487824437], -[-7.636836550085e-13, -0.1794857727661], -[0.005312971625443, -0.179487824437], -[0.01062585358875, -0.1794939799582], -[0.01593855621403, -0.1795042408558], -[0.0212509897979, -0.1795186096746], -[0.02656306459583, -0.1795370899801], -[0.03187469080844, -0.1795596863621], -[0.03718577856792, -0.1795864044378], -[0.04249623792461, -0.1796172508569], -[0.04780597883353, -0.179652233307], -[0.05311491114116, -0.1796913605206], -[0.05842294457231, -0.1797346422815], -[0.06372998871713, -0.1797820894341], -[0.06903595301839, -0.1798337138919], -[0.07434074675881, -0.1798895286479], -[0.07964427904878, -0.1799495477858], -[0.08494645881418, -0.1800137864918], -[0.0902471947846, -0.1800822610679], -[0.09554639548168, -0.180154988946], -[0.100843969208, -0.1802319887028], -[0.106139824036, -0.1803132800762], -[0.1114338677975, -0.1803988839827], -[0.1167260080738, -0.1804888225355], -[0.1220161521856, -0.1805831190643], -[0.1273042071839, -0.180681798136], -[0.1325900798412, -0.1807848855769], -[0.1378736766434, -0.1808924084956], -[0.1431549037818, -0.1810043953079], -[0.1484336671464, -0.1811208757624], -[0.1537098723192, -0.1812418809682], -[0.1589834245685, -0.181367443423], -[0.1642542288439, -0.181497597044], -[0.1695221897721, -0.181632377199], -[0.1747872116535, -0.1817718207403], -[0.1800491984593, -0.181915966039], -[0.1853080538308, -0.1820648530222], -[0.1905636810779, -0.182218523211], -[0.1958159831802, -0.1823770197607], -[0.2010648627885, -0.1825403875032], -[0.2063102222277, -0.1827086729907], -[0.211551963501, -0.1828819245415], -[0.2167899882957, -0.1830601922887], -[0.2220241979898, -0.1832435282298], -[0.2272544936614, -0.1834319862797], -[0.2324807760984, -0.1836256223251], -[0.237702945811, -0.1838244942816], -[0.2429209030459, -0.1840286621539], -[0.2481345478022, -0.1842381880974], -[0.2533437798499, -0.1844531364832], -[0.2585484987505, -0.1846735739659], -[0.2637486038802, -0.1848995695537], -[0.268943994456, -0.1851311946819], -[0.2741345695638, -0.1853685232893], -[0.2793202281906, -0.1856116318975], -[0.2845008692595, -0.1858605996934], -[0.2896763916675, -0.1861155086158], -[0.2948466943284, -0.186376443444], -[0.3000116762182, -0.1866434918912], -[0.3051712364255, -0.1869167447007], -[0.3103252742065, -0.1871962957462], -[0.3154736890439, -0.1874822421357], -[0.3206163807122, -0.1877746843191], -[0.3257532493473, -0.1880737262001], -[0.3308841955224, -0.1883794752519], -[0.3360091203302, -0.188692042637], -[0.3411279254716, -0.1890115433312], -[0.3462405133514, -0.1893380962515], -[0.3513467871816, -0.1896718243886], -[0.3564466510926, -0.1900128549434], -[0.3615400102529, -0.1903613194676], -[0.3666267709985, -0.1907173540086], -[0.3717068409706, -0.1910810992585], -[0.3767801292653, -0.1914527007071], -[0.3818465465927, -0.1918323087985], -[0.3869060054485, -0.1922200790921], -[0.3919584202973, -0.1926161724262], -[0.3970037077695, -0.1930207550854], -[0.4020417868714, -0.1934339989707], -[0.4070725792103, -0.1938560817722], -[0.4120960092344, -0.1942871871435], -[0.4171120044893, -0.1947275048778], -[0.4221204958914, -0.1951772310846], -[0.4271214180189, -0.1956365683667], -[0.4321147094217, -0.1961057259956], -[0.4371003129505, -0.1965849200861], -[0.4420781761063, -0.1970743737665], -[0.4470482514107, -0.1975743173455], -[0.4520104967985, -0.1980849884727], -[0.4569648760314, -0.1986066322913], -[0.4619113591356, -0.1991395015818], -[0.4668499228623, -0.1996838568938], -[0.4717805511711, -0.2002399666642], -[0.4767032357376, -0.2008081073184], -[0.4816179764838, -0.2013885633528], -[0.4865247821317, -0.2019816273947], -[0.4914236707784, -0.2025876002361], -[0.4963146704927, -0.2032067908389], -[0.5011978199309, -0.2038395163064], -[0.5060731689698, -0.2044861018178], -[0.5109407793552, -0.2051468805209], -[0.5158007253608, -0.2058221933791], -[0.5206530944565, -0.206512388967], -[0.5254979879792, -0.2072178232116], -[0.530335521802, -0.2079388590718], -[0.535165826996, -0.2086758661544], -[0.5399890504768, -0.20942922026], -[0.5448053556292, -0.2101993028547], -[-0.5423459289887, -0.2059394509559], -[-0.5375144922708, -0.2051707176651], -[-0.5326764362448, -0.2044184659328], -[-0.5278316049571, -0.2036823286517], -[-0.522979857929, -0.2029619440621], -[-0.5181210695839, -0.2022569562388], -[-0.5132551286552, -0.2015670155127], -[-0.5083819375793, -0.2008917788283], -[-0.503501411882, -0.2002309100433], -[-0.4986134795616, -0.1995840801731], -[-0.4937180804746, -0.1989509675852], -[-0.4888151657287, -0.1983312581467], -[-0.483904697084, -0.1977246453302], -[-0.4789866463688, -0.1971308302809], -[-0.4740609949087, -0.1965495218498], -[-0.4691277329743, -0.195980436596], -[-0.4641868592458, -0.1954232987613], -[-0.4592383802984, -0.1948778402218], -[-0.4542823101076, -0.1943438004173], -[-0.4493186695745, -0.193820926263], -[-0.4443474860736, -0.1933089720457], -[-0.4393687930205, -0.1928076993066], -[-0.4343826294611, -0.1923168767123], -[-0.4293890396815, -0.1918362799169], -[-0.4243880728375, -0.1913656914175], -[-0.4193797826048, -0.1909049004017], -[-0.4143642268479, -0.1904537025927], -[-0.4093414673073, -0.1900119000891], -[-0.4043115693054, -0.1895793012041], -[-0.3992746014685, -0.1891557203026], -[-0.3942306354661, -0.1887409776379], -[-0.389179745766, -0.1883348991887], -[-0.3841220094036, -0.1879373164977], -[-0.379057505766, -0.1875480665105], -[-0.3739863163901, -0.187166991418], -[-0.3689085247727, -0.1867939384997], -[-0.3638242161934, -0.1864287599709], -[-0.3587334775488, -0.1860713128322], -[-0.3536363971978, -0.1857214587221], -[-0.3485330648172, -0.1853790637741], -[-0.3434235712665, -0.1850439984759], -[-0.3383080084628, -0.1847161375333], -[-0.3331864692634, -0.1843953597375], -[-0.3280590473574, -0.1840815478357], -[-0.322925837164, -0.1837745884067], -[-0.3177869337389, -0.1834743717391], -[-0.3126424326868, -0.1831807917141], -[-0.3074924300807, -0.1828937456915], -[-0.3023370223868, -0.1826131343999], -[-0.2971763063954, -0.1823388618308], -[-0.2920103791566, -0.1820708351352], -[-0.2868393379217, -0.1818089645255], -[-0.2816632800879, -0.1815531631791], -[-0.2764823031491, -0.1813033471471], -[-0.2712965046493, -0.181059435265], -[-0.2661059821407, -0.1808213490675], -[-0.2609108331451, -0.1805890127064], -[-0.2557111551184, -0.1803623528709], -[-0.2505070454191, -0.1801412987122], -[-0.2452986012789, -0.1799257817695], -[-0.2400859197766, -0.1797157359003], -[-0.2348690978141, -0.1795110972125], -[-0.2296482320959, -0.1793118039995], -[-0.2244234191095, -0.179117796678], -[-0.2191947551094, -0.178929017728], -[-0.2139623361018, -0.1787454116356], -[-0.2087262578323, -0.1785669248379], -[-0.2034866157747, -0.1783935056701], -[-0.1982435051218, -0.1782251043153], -[-0.1929970207777, -0.178061672756], -[-0.1877472573516, -0.1779031647274], -[-0.182494309153, -0.1777495356735], -[-0.177238270188, -0.1776007427044], -[-0.1719792341574, -0.1774567445558], -[-0.1667172944552, -0.1773175015504], -[-0.1614525441686, -0.1771829755604], -[-0.1561850760792, -0.1770531299729], -[-0.1509149826648, -0.1769279296553], -[-0.1456423561023, -0.176807340924], -[-0.140367288271, -0.1766913315133], -[-0.1350898707575, -0.1765798705462], -[-0.1298101948609, -0.1764729285071], -[-0.1245283515982, -0.1763704772152], -[-0.1192444317114, -0.1762724897995], -[-0.1139585256742, -0.1761789406753], -[-0.1086707237, -0.1760898055217], -[-0.10338111575, -0.1760050612602], -[-0.09808979154213, -0.1759246860351], -[-0.09279684055995, -0.1758486591947], -[-0.08750235206236, -0.1757769612727], -[-0.08220641509394, -0.1757095739731], -[-0.07690911849506, -0.1756464801533], -[-0.07161055091265, -0.1755876638102], -[-0.06631080081136, -0.175533110067], -[-0.06100995648489, -0.17548280516], -[-0.0557081060676, -0.1754367364278], -[-0.05040533754643, -0.1753948923004], -[-0.04510173877297, -0.1753572622897], -[-0.03979739747575, -0.1753238369807], -[-0.03449240127275, -0.1752946080239], -[-0.02918683768402, -0.1752695681285], -[-0.02388079414447, -0.1752487110562], -[-0.01857435801676, -0.1752320316162], -[-0.0132676166043, -0.1752195256609], -[-0.007960657164326, -0.1752111900825], -[-0.002653566921072, -0.1752070228108], -[0.002653566921072, -0.1752070228108], -[0.007960657164326, -0.1752111900825], -[0.0132676166043, -0.1752195256609], -[0.01857435801676, -0.1752320316162], -[0.02388079414447, -0.1752487110562], -[0.02918683768402, -0.1752695681285], -[0.03449240127275, -0.1752946080239], -[0.03979739747575, -0.1753238369807], -[0.04510173877297, -0.1753572622897], -[0.05040533754643, -0.1753948923004], -[0.0557081060676, -0.1754367364278], -[0.06100995648489, -0.17548280516], -[0.06631080081136, -0.175533110067], -[0.07161055091265, -0.1755876638102], -[0.07690911849506, -0.1756464801533], -[0.08220641509394, -0.1757095739731], -[0.08750235206236, -0.1757769612728], -[0.09279684055991, -0.1758486591946], -[0.09808979154213, -0.1759246860351], -[0.10338111575, -0.1760050612602], -[0.1086707237, -0.1760898055217], -[0.1139585256742, -0.1761789406753], -[0.1192444317114, -0.1762724897995], -[0.1245283515982, -0.1763704772152], -[0.1298101948609, -0.1764729285071], -[0.1350898707575, -0.1765798705462], -[0.140367288271, -0.1766913315133], -[0.1456423561023, -0.176807340924], -[0.1509149826648, -0.1769279296553], -[0.1561850760792, -0.1770531299729], -[0.1614525441686, -0.1771829755604], -[0.1667172944552, -0.1773175015504], -[0.1719792341574, -0.1774567445558], -[0.177238270188, -0.1776007427044], -[0.182494309153, -0.1777495356735], -[0.1877472573516, -0.1779031647274], -[0.1929970207777, -0.178061672756], -[0.1982435051218, -0.1782251043153], -[0.2034866157747, -0.1783935056701], -[0.2087262578323, -0.1785669248379], -[0.2139623361018, -0.1787454116356], -[0.2191947551094, -0.178929017728], -[0.2244234191095, -0.179117796678], -[0.2296482320959, -0.1793118039995], -[0.2348690978141, -0.1795110972125], -[0.2400859197766, -0.1797157359003], -[0.2452986012789, -0.1799257817695], -[0.2505070454191, -0.1801412987122], -[0.2557111551184, -0.1803623528709], -[0.2609108331449, -0.1805890127064], -[0.2661059821407, -0.1808213490675], -[0.2712965046493, -0.181059435265], -[0.2764823031491, -0.1813033471471], -[0.2816632800879, -0.1815531631791], -[0.2868393379217, -0.1818089645255], -[0.2920103791566, -0.1820708351352], -[0.2971763063954, -0.1823388618308], -[0.3023370223868, -0.1826131343999], -[0.3074924300807, -0.1828937456915], -[0.3126424326868, -0.1831807917141], -[0.3177869337389, -0.1834743717391], -[0.322925837164, -0.1837745884067], -[0.3280590473574, -0.1840815478357], -[0.3331864692634, -0.1843953597375], -[0.3383080084628, -0.1847161375333], -[0.3434235712665, -0.1850439984759], -[0.3485330648172, -0.1853790637741], -[0.3536363971978, -0.1857214587221], -[0.3587334775488, -0.1860713128322], -[0.3638242161934, -0.1864287599709], -[0.3689085247727, -0.1867939384997], -[0.3739863163901, -0.187166991418], -[0.379057505766, -0.1875480665105], -[0.3841220094036, -0.1879373164977], -[0.389179745766, -0.1883348991887], -[0.3942306354661, -0.1887409776379], -[0.3992746014685, -0.1891557203026], -[0.4043115693054, -0.1895793012041], -[0.4093414673073, -0.1900119000891], -[0.4143642268479, -0.1904537025927], -[0.4193797826048, -0.1909049004017], -[0.4243880728375, -0.1913656914175], -[0.4293890396815, -0.1918362799169], -[0.4343826294615, -0.1923168767118], -[0.4393687930205, -0.1928076993066], -[0.4443474860736, -0.1933089720457], -[0.4493186695745, -0.193820926263], -[0.4542823101076, -0.1943438004173], -[0.4592383802984, -0.1948778402219], -[0.4641868592458, -0.1954232987613], -[0.4691277329743, -0.195980436596], -[0.4740609949087, -0.1965495218498], -[0.4789866463688, -0.1971308302809], -[0.483904697084, -0.1977246453302], -[0.4888151657287, -0.1983312581467], -[0.4937180804746, -0.1989509675852], -[0.4986134795616, -0.1995840801731], -[0.503501411882, -0.2002309100433], -[0.5083819375793, -0.2008917788283], -[0.5132551286552, -0.2015670155127], -[0.5181210695839, -0.2022569562388], -[0.522979857929, -0.2029619440621], -[0.5278316049571, -0.2036823286517], -[0.5326764362448, -0.2044184659328], -[0.5375144922708, -0.2051707176651], -[0.5423459289887, -0.2059394509559], -[-0.5398757441077, -0.2016618902647], -[-0.5350303200397, -0.2008948943877], -[-0.5301779024597, -0.2001439159345], -[-0.5253190072, -0.199408827733], -[-0.5204534998737, -0.198689281269], -[-0.5155812601241, -0.1979849335335], -[-0.5107021810809, -0.1972954474138], -[-0.5058161688029, -0.1966204920268], -[-0.5009231417135, -0.1959597429997], -[-0.4960230300333, -0.1953128827006], -[-0.4911157752144, -0.1946796004234], -[-0.4862013293795, -0.1940595925296], -[-0.4812796547699, -0.1934525625522], -[-0.4763507232036, -0.1928582212638], -[-0.4714145155471, -0.1922762867137], -[-0.466471021202, -0.1917064842356], -[-0.4615202376077, -0.1911485464305], -[-0.4565621697612, -0.1906022131272], -[-0.4515968297556, -0.1900672313225], -[-0.4466242363367, -0.1895433551045], -[-0.4416444144788, -0.1890303455615], -[-0.4366573949789, -0.1885279706767], -[-0.4316632140707, -0.188036005214], -[-0.426661913057, -0.1875542305928], -[-0.42165353796, -0.187082434757], -[-0.4166381391904, -0.1866204120371], -[-0.4116157712338, -0.1861679630077], -[-0.4065864923539, -0.185724894342], -[-0.4015503643123, -0.1852910186631], -[-0.3965074521045, -0.1848661543942], -[-0.3914578237105, -0.1844501256081], -[-0.3864015498605, -0.1840427618762], -[-0.3813387038143, -0.1836438981186], -[-0.3762693611542, -0.1832533744549], -[-0.3711935995901, -0.1828710360565], -[-0.3661114987776, -0.1824967330013], -[-0.3610231401464, -0.1821303201307], -[-0.3559286067407, -0.181771656908], -[-0.3508279830687, -0.1814206072815], -[-0.3457213549629, -0.181077039549], -[-0.3406088094491, -0.1807408262262], -[-0.3354904346239, -0.1804118439181], -[-0.3303663195409, -0.1800899731942], -[-0.3252365541043, -0.179775098466], -[-0.32010122897, -0.1794671078698], -[-0.3149604354532, -0.1791658931507], -[-0.309814265443, -0.1788713495523], -[-0.3046628113231, -0.1785833757082], -[-0.2995061658971, -0.1783018735379], -[-0.2943444223211, -0.1780267481454], -[-0.2891776740399, -0.1777579077223], -[-0.2840060147283, -0.1774952634527], -[-0.2788295382376, -0.1772387294226], -[-0.2736483385452, -0.176988222532], -[-0.268462509709, -0.17674366241], -[-0.2632721458255, -0.1765049713335], -[-0.2580773409906, -0.176272074148], -[-0.2528781892651, -0.1760448981925], -[-0.2476747846419, -0.1758233732258], -[-0.2424672210169, -0.1756074313572], -[-0.2372555921624, -0.1753970069785], -[-0.2320399917032, -0.1751920366992], -[-0.2268205130953, -0.1749924592843], -[-0.221597249606, -0.1747982155946], -[-0.2163702942974, -0.1746092485289], -[-0.2111397400108, -0.1744255029689], -[-0.2059056793539, -0.1742469257267], -[-0.200668204689, -0.1740734654935], -[-0.1954274081234, -0.1739050727914], -[-0.190183381501, -0.1737416999264], -[-0.184936216396, -0.1735833009442], -[-0.1796860041068, -0.1734298315871], -[-0.1744328356529, -0.1732812492534], -[-0.1691768017712, -0.1731375129581], -[-0.163917992915, -0.1729985832957], -[-0.1586564992531, -0.1728644224045], -[-0.15339241067, -0.1727349939323], -[-0.1481258167681, -0.1726102630043], -[-0.1428568068691, -0.1724901961918], -[-0.1375854700178, -0.1723747614828], -[-0.1323118949855, -0.172263928254], -[-0.1270361702752, -0.1721576672441], -[-0.1217583841266, -0.1720559505282], -[-0.1164786245223, -0.1719587514942], -[-0.1111969791944, -0.1718660448195], -[-0.1059135356318, -0.17177780645], -[-0.1006283810877, -0.1716940135791], -[-0.09534160258832, -0.171614644629], -[-0.09005328694098, -0.1715396792325], -[-0.08476352074384, -0.1714690982159], -[-0.0794723903952, -0.171402883583], -[-0.07417998210344, -0.1713410185007], -[-0.06888638189733, -0.1712834872845], -[-0.06359167563665, -0.1712302753862], -[-0.05829594902305, -0.1711813693819], -[-0.05299928761123, -0.1711367569607], -[-0.04770177682038, -0.1710964269154], -[-0.04240350194578, -0.1710603691328], -[-0.03710454817062, -0.171028574586], -[-0.03180500057806, -0.171001035327], -[-0.02650494416338, -0.1709777444803], -[-0.02120446384626, -0.1709586962373], -[-0.01590364448323, -0.1709438858519], -[-0.01060257088019, -0.1709333096366], -[-0.005301327804961, -0.1709269649595], -[-1.452527585694e-13, -0.1709248502425], -[0.005301327804961, -0.1709269649595], -[0.01060257088019, -0.1709333096366], -[0.01590364448323, -0.1709438858519], -[0.02120446384626, -0.1709586962373], -[0.02650494416338, -0.1709777444803], -[0.03180500057806, -0.171001035327], -[0.03710454817062, -0.171028574586], -[0.04240350194578, -0.1710603691328], -[0.04770177682039, -0.1710964269154], -[0.05299928761123, -0.1711367569607], -[0.05829594902305, -0.1711813693819], -[0.06359167563665, -0.1712302753862], -[0.06888638189733, -0.1712834872845], -[0.07417998210344, -0.1713410185007], -[0.0794723903952, -0.171402883583], -[0.08476352074384, -0.1714690982159], -[0.09005328694098, -0.1715396792325], -[0.09534160258832, -0.171614644629], -[0.1006283810878, -0.1716940135791], -[0.1059135356318, -0.17177780645], -[0.1111969791944, -0.1718660448195], -[0.1164786245223, -0.1719587514942], -[0.1217583841266, -0.1720559505282], -[0.1270361702752, -0.1721576672441], -[0.1323118949855, -0.172263928254], -[0.1375854700178, -0.1723747614828], -[0.1428568068691, -0.1724901961918], -[0.1481258167681, -0.1726102630043], -[0.15339241067, -0.1727349939323], -[0.1586564992531, -0.1728644224045], -[0.163917992915, -0.1729985832957], -[0.1691768017712, -0.1731375129581], -[0.1744328356529, -0.1732812492534], -[0.1796860041068, -0.1734298315871], -[0.184936216396, -0.1735833009442], -[0.190183381501, -0.1737416999264], -[0.1954274081234, -0.1739050727914], -[0.200668204689, -0.1740734654935], -[0.2059056793539, -0.1742469257267], -[0.2111397400108, -0.1744255029689], -[0.2163702942974, -0.1746092485289], -[0.221597249606, -0.1747982155946], -[0.2268205130953, -0.1749924592843], -[0.2320399917033, -0.1751920366992], -[0.2372555921624, -0.1753970069785], -[0.2424672210169, -0.1756074313572], -[0.2476747846419, -0.1758233732258], -[0.2528781892651, -0.1760448981925], -[0.2580773409906, -0.176272074148], -[0.2632721458255, -0.1765049713335], -[0.268462509709, -0.17674366241], -[0.2736483385452, -0.176988222532], -[0.2788295382376, -0.1772387294226], -[0.2840060147283, -0.1774952634527], -[0.2891776740399, -0.1777579077223], -[0.2943444223211, -0.1780267481454], -[0.2995061658971, -0.1783018735379], -[0.3046628113231, -0.1785833757082], -[0.309814265443, -0.1788713495523], -[0.3149604354532, -0.1791658931507], -[0.32010122897, -0.1794671078698], -[0.3252365541043, -0.179775098466], -[0.3303663195409, -0.1800899731942], -[0.3354904346239, -0.1804118439181], -[0.3406088094491, -0.1807408262262], -[0.3457213549629, -0.181077039549], -[0.3508279830687, -0.1814206072815], -[0.3559286067407, -0.181771656908], -[0.3610231401464, -0.1821303201307], -[0.3661114987776, -0.1824967330013], -[0.3711935995901, -0.1828710360565], -[0.3762693611542, -0.1832533744549], -[0.3813387038143, -0.1836438981186], -[0.3864015498605, -0.1840427618762], -[0.3914578237105, -0.1844501256081], -[0.3965074521045, -0.1848661543942], -[0.4015503643123, -0.1852910186631], -[0.4065864923539, -0.185724894342], -[0.4116157712338, -0.1861679630077], -[0.4166381391904, -0.1866204120371], -[0.42165353796, -0.187082434757], -[0.426661913057, -0.1875542305928], -[0.4316632140707, -0.188036005214], -[0.4366573949789, -0.1885279706767], -[0.4416444144788, -0.1890303455615], -[0.4466242363367, -0.1895433551045], -[0.4515968297556, -0.1900672313224], -[0.4565621697612, -0.1906022131272], -[0.4615202376077, -0.1911485464305], -[0.466471021202, -0.1917064842356], -[0.4714145155471, -0.1922762867137], -[0.4763507232036, -0.1928582212638], -[0.4812796547699, -0.1934525625522], -[0.4862013293795, -0.1940595925296], -[0.4911157752144, -0.1946796004235], -[0.4960230300333, -0.1953128827007], -[0.5009231417135, -0.1959597429997], -[0.5058161688029, -0.1966204920268], -[0.5107021810809, -0.1972954474138], -[0.5155812601241, -0.1979849335335], -[0.5204534998737, -0.198689281269], -[0.5253190072, -0.199408827733], -[0.5301779024597, -0.2001439159345], -[0.5350303200397, -0.2008948943878], -[0.5398757440997, -0.2016618903223], -[-0.5373963484116, -0.1973675823481], -[-0.5325367433735, -0.1966021365508], -[-0.5276704202196, -0.1958525979244], -[-0.5227979086454, -0.195118733225], -[-0.5179190800317, -0.1944002064501], -[-0.5130338189813, -0.1936966868001], -[-0.5081420228182, -0.1930078490402], -[-0.5032436010752, -0.1923333738125], -[-0.498338474974, -0.1916729478986], -[-0.493426576902, -0.1910262644373], -[-0.4885078498904, -0.1903930230998], -[-0.4835822470963, -0.1897729302267], -[-0.4786497312912, -0.189165698929], -[-0.4737102743598, -0.188571049157], -[-0.4687638568093, -0.1879887077394], -[-0.463810467292, -0.1874184083966], -[-0.458850102143, -0.1868598917302], -[-0.4538827649317, -0.1863129051906], -[-0.4489084660312, -0.1857772030279], -[-0.443927222203, -0.1852525462243], -[-0.4389390561992, -0.1847387024143], -[-0.4339439963821, -0.1842354457913], -[-0.4289420763603, -0.1837425570046], -[-0.4239333346427, -0.1832598230474], -[-0.4189178143081, -0.1827870371374], -[-0.4138955626924, -0.1823239985916], -[-0.4088666310912, -0.1818705126961], -[-0.4038310744783, -0.1814263905728], -[-0.3987889512395, -0.1809914490428], -[-0.3937403229203, -0.1805655104886], -[-0.3886852539889, -0.1801484027143], -[-0.3836238116114, -0.179739958807], -[-0.3785560654412, -0.1793400169967], -[-0.3734820874201, -0.178948420518], -[-0.3684019515909, -0.1785650174729], -[-0.3633157339226, -0.1781896606946], -[-0.3582235121448, -0.177822207614], -[-0.3531253655935, -0.1774625201278], -[-0.348021375066, -0.1771104644691], -[-0.3429116226847, -0.1767659110809], -[-0.3377961917709, -0.1764287344922], -[-0.332675166725, -0.1760988131968], -[-0.3275486329162, -0.1757760295354], -[-0.3224166765784, -0.1754602695808], -[-0.3172793847138, -0.1751514230261], -[-0.3121368450024, -0.1748493830756], -[-0.3069891457184, -0.17455404634], -[-0.301836375652, -0.1742653127339], -[-0.2966786240365, -0.1739830853763], -[-0.2915159804818, -0.1737072704951], -[-0.2863485349109, -0.1734377773343], -[-0.2811763775028, -0.1731745180636], -[-0.2759995986384, -0.1729174076923], -[-0.2708182888519, -0.1726663639854], -[-0.2656325387843, -0.1724213073824], -[-0.2604424391423, -0.1721821609198], -[-0.2552480806591, -0.1719488501556], -[-0.2500495540596, -0.171721303097], -[-0.2448469500282, -0.1714994501306], -[-0.2396403591789, -0.1712832239551], -[-0.234429872029, -0.1710725595169], -[-0.2292155789749, -0.1708673939478], -[-0.22399757027, -0.1706676665053], -[-0.2187759360053, -0.1704733185152], -[-0.2135507660922, -0.1702842933162], -[-0.2083221502465, -0.1701005362073], -[-0.2030901779751, -0.1699219943964], -[-0.1978549385642, -0.1697486169524], -[-0.1926165210689, -0.1695803547576], -[-0.1873750143045, -0.1694171604633], -[-0.1821305068398, -0.1692589884468], -[-0.1768830869907, -0.1691057947701], -[-0.171632842816, -0.1689575371411], -[-0.1663798621142, -0.1688141748754], -[-0.1611242324212, -0.1686756688604], -[-0.1558660410092, -0.1685419815213], -[-0.1506053748869, -0.1684130767882], -[-0.1453423208004, -0.1682889200644], -[-0.1400769652347, -0.1681694781972], -[-0.1348093944168, -0.168054719449], -[-0.1295396943189, -0.1679446134706], -[-0.1242679506627, -0.1678391312754], -[-0.1189942489244, -0.167738245215], -[-0.11371867434, -0.1676419289561], -[-0.1084413119119, -0.1675501574586], -[-0.1031622464152, -0.1674629069548], -[-0.09788156240542, -0.16738015493], -[-0.0925993442259, -0.1673018801041], -[-0.08731567601642, -0.167228062414], -[-0.08203064172176, -0.1671586829977], -[-0.07674432510077, -0.1670937241788], -[-0.07145680973594, -0.1670331694523], -[-0.06616817904322, -0.1669770034718], -[-0.06087851628212, -0.1669252120366], -[-0.05558790456626, -0.1668777820812], -[-0.05029642687401, -0.1668347016643], -[-0.04500416605948, -0.1667959599598], -[-0.03971120486371, -0.1667615472481], -[-0.03441762592608, -0.1667314549085], -[-0.02912351179579, -0.1667056754127], -[-0.02382894494367, -0.1666842023186], -[-0.01853400777395, -0.1666670302653], -[-0.01323878263625, -0.1666541549691], -[-0.007943351837587, -0.1666455732203], -[-0.002647797654559, -0.1666412828803], -[0.002647797654559, -0.1666412828803], -[0.007943351837588, -0.1666455732203], -[0.01323878263624, -0.1666541549691], -[0.01853400777395, -0.1666670302653], -[0.02382894494367, -0.1666842023186], -[0.02912351179579, -0.1667056754127], -[0.03441762592608, -0.1667314549085], -[0.03971120486371, -0.1667615472481], -[0.04500416605948, -0.1667959599598], -[0.05029642687401, -0.1668347016643], -[0.05558790456626, -0.1668777820812], -[0.06087851628212, -0.1669252120366], -[0.06616817904322, -0.1669770034718], -[0.07145680973594, -0.1670331694523], -[0.07674432510077, -0.1670937241788], -[0.08203064172176, -0.1671586829977], -[0.08731567601642, -0.167228062414], -[0.0925993442259, -0.1673018801041], -[0.09788156240542, -0.16738015493], -[0.1031622464152, -0.1674629069548], -[0.1084413119119, -0.1675501574586], -[0.11371867434, -0.1676419289561], -[0.1189942489244, -0.167738245215], -[0.1242679506627, -0.1678391312754], -[0.1295396943189, -0.1679446134706], -[0.1348093944168, -0.168054719449], -[0.1400769652347, -0.1681694781972], -[0.1453423208004, -0.1682889200644], -[0.1506053748869, -0.1684130767882], -[0.1558660410092, -0.1685419815213], -[0.1611242324212, -0.1686756688604], -[0.1663798621142, -0.1688141748754], -[0.171632842816, -0.1689575371411], -[0.1768830869907, -0.1691057947701], -[0.1821305068398, -0.1692589884468], -[0.1873750143045, -0.1694171604633], -[0.1926165210689, -0.1695803547576], -[0.1978549385642, -0.1697486169524], -[0.2030901779751, -0.1699219943964], -[0.2083221502465, -0.1701005362073], -[0.2135507660922, -0.1702842933162], -[0.2187759360053, -0.1704733185152], -[0.22399757027, -0.1706676665053], -[0.2292155789749, -0.1708673939478], -[0.234429872029, -0.1710725595169], -[0.2396403591789, -0.1712832239551], -[0.2448469500282, -0.1714994501306], -[0.2500495540596, -0.171721303097], -[0.2552480806591, -0.1719488501556], -[0.2604424391423, -0.1721821609198], -[0.2656325387843, -0.1724213073824], -[0.2708182888519, -0.1726663639854], -[0.2759995986384, -0.1729174076923], -[0.2811763775028, -0.1731745180636], -[0.2863485349109, -0.1734377773343], -[0.2915159804818, -0.1737072704951], -[0.2966786240365, -0.1739830853763], -[0.301836375652, -0.1742653127339], -[0.3069891457184, -0.17455404634], -[0.3121368450024, -0.1748493830756], -[0.3172793847138, -0.1751514230261], -[0.3224166765784, -0.1754602695808], -[0.3275486329162, -0.1757760295354], -[0.332675166725, -0.1760988131968], -[0.3377961917709, -0.1764287344922], -[0.3429116226847, -0.1767659110809], -[0.348021375066, -0.1771104644691], -[0.3531253655935, -0.1774625201278], -[0.3582235121448, -0.177822207614], -[0.3633157339226, -0.1781896606946], -[0.3684019515909, -0.1785650174729], -[0.3734820874201, -0.178948420518], -[0.3785560654412, -0.1793400169967], -[0.3836238116114, -0.179739958807], -[0.3886852539889, -0.1801484027143], -[0.3937403229203, -0.1805655104886], -[0.3987889512395, -0.1809914490428], -[0.4038310744783, -0.1814263905728], -[0.4088666310912, -0.1818705126961], -[0.4138955626924, -0.1823239985916], -[0.4189178143081, -0.1827870371374], -[0.4239333346427, -0.1832598230474], -[0.4289420763603, -0.1837425570046], -[0.4339439963821, -0.1842354457913], -[0.4389390561992, -0.1847387024143], -[0.443927222203, -0.1852525462243], -[0.4489084660312, -0.1857772030279], -[0.4538827649317, -0.1863129051906], -[0.458850102143, -0.1868598917301], -[0.463810467292, -0.1874184083966], -[0.4687638568093, -0.1879887077394], -[0.4737102743598, -0.188571049157], -[0.4786497312912, -0.189165698929], -[0.4835822470963, -0.1897729302267], -[0.4885078498904, -0.1903930230998], -[0.493426576902, -0.1910262644373], -[0.498338474974, -0.1916729478986], -[0.5032436010752, -0.1923333738125], -[0.5081420228182, -0.1930078490402], -[0.5130338189813, -0.1936966868001], -[0.5179190800317, -0.1944002064501], -[0.5227979086454, -0.195118733225], -[0.5276704202196, -0.1958525979244], -[0.5325367433735, -0.1966021365508], -[0.5373963484039, -0.1973675824059], -[-0.5349073557362, -0.1930565951044], -[-0.5300339658017, -0.1922928183702], -[-0.5251541789216, -0.1915448819898], -[-0.5202684850589, -0.1908124106252], -[-0.5153767610577, -0.1900950801085], -[-0.5104788962329, -0.1893925711946], -[-0.5055747919089, -0.1887045698988], -[-0.5006643609473, -0.1880307677878], -[-0.4957475272674, -0.1873708622258], -[-0.4908242253633, -0.1867245565801], -[-0.4858943998215, -0.1860915603875], -[-0.4809580048417, -0.1854715894859], -[-0.4760150037628, -0.1848643661123], -[-0.4710653685982, -0.1842696189717], -[-0.4661090795797, -0.1836870832787], -[-0.4611461247133, -0.1831165007741], -[-0.4561764993484, -0.1825576197201], -[-0.4512002057593, -0.1820101948756], -[-0.4462172527423, -0.1814739874539], -[-0.4412276552269, -0.1809487650656], -[-0.4362314339029, -0.1804343016471], -[-0.4312286148627, -0.1799303773787], -[-0.4262192292587, -0.1794367785916], -[-0.4212033129772, -0.1789532976672], -[-0.4161809063265, -0.1784797329286], -[-0.4111520537408, -0.1780158885272], -[-0.4061168034984, -0.177561574323], -[-0.4010752074546, -0.1771166057633], -[-0.3960273207882, -0.1766808037564], -[-0.3909732017619, -0.1762539945448], -[-0.3859129114955, -0.1758360095767], -[-0.3808465137516, -0.1754266853765], -[-0.3757740747334, -0.1750258634156], -[-0.3706956628948, -0.174633389984], -[-0.3656113487599, -0.1742491160616], -[-0.3605212047549, -0.1738728971922], -[-0.3554253050488, -0.1735045933579], -[-0.3503237254045, -0.173144068856], -[-0.3452165430384, -0.1727911921777], -[-0.340103836489, -0.172445835889], -[-0.3349856854939, -0.1721078765148], -[-0.3298621708744, -0.1717771944242], -[-0.3247333744272, -0.1714536737197], -[-0.3195993788239, -0.1711372021289], -[-0.3144602675163, -0.1708276708985], -[-0.3093161246484, -0.1705249746916], -[-0.3041670349747, -0.170229011488], -[-0.2990130837829, -0.1699396824873], -[-0.2938543568235, -0.1696568920146], -[-0.288690940243, -0.1693805474295], -[-0.2835229205227, -0.1691105590378], -[-0.2783503844215, -0.1688468400061], -[-0.2731734189232, -0.1685893062794], -[-0.2679921111875, -0.1683378765008], -[-0.2628065485049, -0.1680924719348], -[-0.2576168182552, -0.167853016393], -[-0.2524230078688, -0.1676194361616], -[-0.2472252047923, -0.1673916599331], -[-0.2420234964556, -0.1671696187387], -[-0.2368179702428, -0.166953245885], -[-0.2316087134653, -0.166742476891], -[-0.2263958133377, -0.1665372494295], -[-0.2211793569555, -0.1663375032695], -[-0.2159594312756, -0.1661431802209], -[-0.2107361230985, -0.1659542240819], -[-0.2055095190526, -0.1657705805882], -[-0.20027970558, -0.1655921973638], -[-0.1950467689248, -0.1654190238748], -[-0.1898107951222, -0.1652510113838], -[-0.1845718699895, -0.1650881129074], -[-0.1793300791189, -0.1649302831746], -[-0.174085507871, -0.1647774785874], -[-0.1688382413698, -0.1646296571832], -[-0.1635883644995, -0.1644867785981], -[-0.1583359619015, -0.1643488040329], -[-0.1530811179732, -0.1642156962197], -[-0.1478239168674, -0.1640874193903], -[-0.142564442493, -0.1639639392466], -[-0.1373027785162, -0.1638452229315], -[-0.1320390083629, -0.1637312390016], -[-0.1267732152218, -0.1636219574016], -[-0.1215054820479, -0.1635173494392], -[-0.1162358915673, -0.1634173877618], -[-0.1109645262822, -0.1633220463346], -[-0.1056914684766, -0.1632313004192], -[-0.1004168002231, -0.1631451265538], -[-0.09514060338898, -0.1630635025347], -[-0.08986295964423, -0.1629864073984], -[-0.08458395046914, -0.1629138214051], -[-0.07930365716266, -0.1628457260232], -[-0.07402216085105, -0.1627821039147], -[-0.06873954249698, -0.1627229389219], -[-0.06345588290891, -0.1626682160545], -[-0.05817126275088, -0.1626179214782], -[-0.05288576255248, -0.1625720425039], -[-0.04759946271918, -0.1625305675781], -[-0.04231244354285, -0.1624934862741], -[-0.03702478521254, -0.1624607892838], -[-0.03173656782537, -0.1624324684107], -[-0.02644787139771, -0.1624085165637], -[-0.02115877587642, -0.1623889277516], -[-0.01586936115023, -0.1623736970788], -[-0.01057970706127, -0.1623628207414], -[-0.005289893416631, -0.1623562960244], -[1.019094118443e-15, -0.1623541212996], -[0.005289893416631, -0.1623562960244], -[0.01057970706127, -0.1623628207414], -[0.01586936115023, -0.1623736970788], -[0.02115877587642, -0.1623889277516], -[0.02644787139771, -0.1624085165637], -[0.03173656782537, -0.1624324684107], -[0.03702478521254, -0.1624607892838], -[0.04231244354285, -0.1624934862741], -[0.04759946271918, -0.1625305675781], -[0.05288576255248, -0.1625720425039], -[0.05817126275088, -0.1626179214782], -[0.06345588290891, -0.1626682160545], -[0.06873954249698, -0.1627229389219], -[0.07402216085105, -0.1627821039147], -[0.07930365716266, -0.1628457260232], -[0.08458395046914, -0.1629138214051], -[0.08986295964423, -0.1629864073984], -[0.09514060338898, -0.1630635025347], -[0.1004168002231, -0.1631451265538], -[0.1056914684766, -0.1632313004192], -[0.1109645262821, -0.1633220463346], -[0.1162358915673, -0.1634173877618], -[0.1215054820479, -0.1635173494392], -[0.1267732152218, -0.1636219574016], -[0.1320390083629, -0.1637312390016], -[0.1373027785162, -0.1638452229315], -[0.142564442493, -0.1639639392466], -[0.1478239168674, -0.1640874193903], -[0.1530811179732, -0.1642156962197], -[0.1583359619015, -0.1643488040329], -[0.1635883644995, -0.1644867785981], -[0.1688382413698, -0.1646296571832], -[0.174085507871, -0.1647774785874], -[0.1793300791189, -0.1649302831746], -[0.1845718699895, -0.1650881129074], -[0.1898107951222, -0.1652510113838], -[0.1950467689248, -0.1654190238748], -[0.20027970558, -0.1655921973638], -[0.2055095190526, -0.1657705805882], -[0.2107361230985, -0.1659542240819], -[0.2159594312756, -0.1661431802209], -[0.2211793569555, -0.1663375032695], -[0.2263958133377, -0.1665372494295], -[0.2316087134653, -0.166742476891], -[0.2368179702428, -0.166953245885], -[0.2420234964556, -0.1671696187387], -[0.2472252047923, -0.1673916599331], -[0.2524230078688, -0.1676194361616], -[0.2576168182552, -0.1678530163929], -[0.2628065485049, -0.1680924719348], -[0.2679921111875, -0.1683378765008], -[0.2731734189232, -0.1685893062794], -[0.2783503844215, -0.1688468400061], -[0.2835229205227, -0.1691105590378], -[0.288690940243, -0.1693805474295], -[0.2938543568235, -0.1696568920146], -[0.2990130837829, -0.1699396824873], -[0.3041670349747, -0.170229011488], -[0.3093161246484, -0.1705249746916], -[0.3144602675163, -0.1708276708985], -[0.3195993788239, -0.1711372021289], -[0.3247333744272, -0.1714536737197], -[0.3298621708744, -0.1717771944242], -[0.3349856854939, -0.1721078765148], -[0.340103836489, -0.172445835889], -[0.3452165430384, -0.1727911921777], -[0.3503237254045, -0.173144068856], -[0.3554253050488, -0.1735045933579], -[0.3605212047549, -0.1738728971922], -[0.3656113487599, -0.1742491160616], -[0.3706956628948, -0.1746333899839], -[0.3757740747335, -0.1750258634156], -[0.3808465137516, -0.1754266853765], -[0.3859129114955, -0.1758360095767], -[0.3909732017619, -0.1762539945448], -[0.3960273207882, -0.1766808037564], -[0.4010752074546, -0.1771166057633], -[0.4061168034984, -0.177561574323], -[0.4111520537408, -0.1780158885272], -[0.4161809063265, -0.1784797329286], -[0.4212033129772, -0.1789532976672], -[0.4262192292587, -0.1794367785916], -[0.4312286148627, -0.1799303773787], -[0.4362314339029, -0.1804343016471], -[0.4412276552269, -0.1809487650656], -[0.4462172527423, -0.1814739874539], -[0.4512002057593, -0.1820101948756], -[0.4561764993484, -0.1825576197201], -[0.4611461247133, -0.1831165007741], -[0.4661090795797, -0.1836870832787], -[0.4710653685982, -0.1842696189717], -[0.4760150037628, -0.1848643661123], -[0.4809580048417, -0.1854715894859], -[0.4858943998215, -0.1860915603875], -[0.4908242253633, -0.1867245565801], -[0.4957475272674, -0.1873708622258], -[0.5006643609473, -0.1880307677878], -[0.5055747919089, -0.1887045698988], -[0.5104788962329, -0.1893925711946], -[0.5153767610577, -0.1900950801085], -[0.5202684850589, -0.1908124106252], -[0.5251541789216, -0.1915448819898], -[0.5300339658017, -0.1922928183702], -[0.5349079815599, -0.1930565481197], -[-0.5324090264385, -0.1887285427495], -[-0.5275221851481, -0.1879673028774], -[-0.5226293630675, -0.1872211272423], -[-0.517730908081, -0.1864902146982], -[-0.5128267022085, -0.1857742522844], -[-0.507916639242, -0.1850729317041], -[-0.5030006243198, -0.1843859496399], -[-0.4980785734908, -0.1837130080246], -[-0.4931504132707, -0.183053814273], -[-0.4882160801966, -0.1824080814756], -[-0.4832755203796, -0.1817755285567], -[-0.4783286890614, -0.1811558804001], -[-0.4733755501744, -0.1805488679453], -[-0.4684160759102, -0.1799542282547], -[-0.4634502462948, -0.1793717045572], -[-0.4584780487761, -0.1788010462683], -[-0.4534994778205, -0.1782420089894], -[-0.4485145345231, -0.1776943544896], -[-0.4435232262299, -0.1771578506705], -[-0.4385255661742, -0.1766322715163], -[-0.4335215731258, -0.1761173970322], -[-0.4285112710553, -0.1756130131705], -[-0.4234946888112, -0.1751189117481], -[-0.4184718598123, -0.1746348903551], -[-0.4134428217532, -0.174160752257], -[-0.408407616324, -0.1736963062907], -[-0.4033662889433, -0.1732413667565], -[-0.3983188885045, -0.1727957533049], -[-0.393265467135, -0.1723592908225], -[-0.3882060799676, -0.1719318093139], -[-0.3831407849246, -0.1715131437832], -[-0.3780696425129, -0.1711031341142], -[-0.3729927156308, -0.1707016249507], -[-0.367910069385, -0.1703084655766], -[-0.362821770919, -0.1699235097966], -[-0.3577278892498, -0.169546615818], -[-0.352628495116, -0.1691776461339], -[-0.3475236608329, -0.1688164674078], -[-0.3424134601581, -0.1684629503595], -[-0.3372979681637, -0.1681169696541], -[-0.3321772611176, -0.167778403792], -[-0.3270514163709, -0.1674471350019], -[-0.3219205122536, -0.167123049136], -[-0.3167846279763, -0.1668060355676], -[-0.3116438435379, -0.1664959870913], -[-0.3064982396403, -0.1661927998258], -[-0.3013478976076, -0.1658963731196], -[-0.2961928993118, -0.1656066094588], -[-0.2910333271024, -0.1653234143781], -[-0.285869263742, -0.1650466963745], -[-0.2807007923456, -0.1647763668228], -[-0.2755279963244, -0.1645123398951], -[-0.270350959334, -0.1642545324817], -[-0.2651697652258, -0.1640028641155], -[-0.2599844980027, -0.1637572568979], -[-0.2547952417778, -0.1635176354285], -[-0.2496020807362, -0.1632839267361], -[-0.2444050991004, -0.1630560602128], -[-0.2392043810982, -0.1628339675504], -[-0.2340000109332, -0.1626175826785], -[-0.2287920727583, -0.1624068417057], -[-0.223580650651, -0.1622016828625], -[-0.2183658285917, -0.1620020464465], -[-0.2131476904437, -0.1618078747696], -[-0.2079263199352, -0.1616191121074], -[-0.2027018006437, -0.1614357046501], -[-0.1974742159812, -0.1612576004563], -[-0.1922436491826, -0.1610847494078], -[-0.1870101832944, -0.1609171031661], -[-0.1817739011656, -0.1607546151319], -[-0.1765348854395, -0.1605972404047], -[-0.1712932185478, -0.1604449357454], -[-0.166048982705, -0.1602976595398], -[-0.1608022599042, -0.1601553717637], -[-0.1555531319149, -0.1600180339499], -[-0.1503016802803, -0.1598856091566], -[-0.1450479863172, -0.1597580619366], -[-0.1397921311158, -0.1596353583091], -[-0.1345341955411, -0.1595174657315], -[-0.129274260234, -0.1594043530738], -[-0.124012405615, -0.1592959905931], -[-0.1187487118866, -0.1591923499104], -[-0.1134832590384, -0.159093403988], -[-0.1082161268509, -0.158999127108], -[-0.1029473949017, -0.1589094948523], -[-0.09767714257082, -0.1588244840839], -[-0.09240544904759, -0.1587440729282], -[-0.08713239333749, -0.1586682407571], -[-0.08185805426963, -0.1585969681724], -[-0.07658251050462, -0.1585302369911], -[-0.07130584054292, -0.1584680302321], -[-0.06602812273345, -0.1584103321026], -[-0.06074943528266, -0.1583571279868], -[-0.05546985626383, -0.1583084044344], -[-0.0501894636267, -0.1582641491509], -[-0.04490833520737, -0.1582243509883], -[-0.03962654873839, -0.1581889999367], -[-0.03434418185914, -0.1581580871169], -[-0.02906131212632, -0.1581316047741], -[-0.02377801702465, -0.1581095462717], -[-0.01849437397771, -0.1580919060866], -[-0.01321046035893, -0.1580786798054], -[-0.007926353502545, -0.1580698641208], -[-0.002642130714818, -0.1580654568291], -[0.002642130714818, -0.1580654568291], -[0.007926353502543, -0.1580698641207], -[0.01321046035893, -0.1580786798054], -[0.01849437397772, -0.1580919060866], -[0.02377801702465, -0.1581095462717], -[0.02906131212632, -0.1581316047741], -[0.03434418185914, -0.1581580871169], -[0.03962654873839, -0.1581889999367], -[0.04490833520737, -0.1582243509883], -[0.0501894636267, -0.1582641491509], -[0.05546985626383, -0.1583084044344], -[0.06074943528266, -0.1583571279868], -[0.06602812273345, -0.1584103321026], -[0.07130584054292, -0.1584680302321], -[0.07658251050462, -0.1585302369911], -[0.08185805426963, -0.1585969681724], -[0.08713239333749, -0.1586682407571], -[0.09240544904759, -0.1587440729282], -[0.09767714257082, -0.1588244840839], -[0.1029473949017, -0.1589094948523], -[0.1082161268509, -0.158999127108], -[0.1134832590384, -0.159093403988], -[0.1187487118866, -0.1591923499104], -[0.124012405615, -0.1592959905931], -[0.129274260234, -0.1594043530738], -[0.1345341955411, -0.1595174657315], -[0.1397921311158, -0.1596353583091], -[0.1450479863172, -0.1597580619366], -[0.1503016802803, -0.1598856091566], -[0.1555531319149, -0.1600180339499], -[0.1608022599042, -0.1601553717637], -[0.166048982705, -0.1602976595398], -[0.1712932185478, -0.1604449357454], -[0.1765348854395, -0.1605972404047], -[0.1817739011656, -0.1607546151319], -[0.1870101832944, -0.1609171031661], -[0.1922436491826, -0.1610847494078], -[0.1974742159812, -0.1612576004563], -[0.2027018006437, -0.1614357046501], -[0.2079263199352, -0.1616191121074], -[0.2131476904437, -0.1618078747696], -[0.2183658285917, -0.1620020464465], -[0.223580650651, -0.1622016828625], -[0.2287920727583, -0.1624068417057], -[0.2340000109332, -0.1626175826785], -[0.2392043810982, -0.1628339675504], -[0.2444050991004, -0.1630560602128], -[0.2496020807362, -0.1632839267361], -[0.2547952417778, -0.1635176354285], -[0.2599844980027, -0.1637572568979], -[0.2651697652258, -0.1640028641155], -[0.270350959334, -0.1642545324817], -[0.2755279963244, -0.1645123398951], -[0.2807007923456, -0.1647763668228], -[0.285869263742, -0.1650466963745], -[0.2910333271024, -0.1653234143781], -[0.2961928993118, -0.1656066094588], -[0.3013478976076, -0.1658963731196], -[0.3064982396403, -0.1661927998258], -[0.3116438435379, -0.1664959870913], -[0.3167846279763, -0.1668060355676], -[0.3219205122536, -0.167123049136], -[0.3270514163709, -0.1674471350019], -[0.3321772611176, -0.167778403792], -[0.3372979681637, -0.1681169696541], -[0.3424134601581, -0.1684629503595], -[0.3475236608329, -0.1688164674078], -[0.352628495116, -0.1691776461339], -[0.3577278892498, -0.169546615818], -[0.362821770919, -0.1699235097966], -[0.3679100693851, -0.1703084655766], -[0.3729927156308, -0.1707016249507], -[0.3780696425129, -0.1711031341142], -[0.3831407849246, -0.1715131437832], -[0.3882060799676, -0.1719318093139], -[0.393265467135, -0.1723592908225], -[0.3983188885045, -0.1727957533049], -[0.4033662889433, -0.1732413667565], -[0.408407616324, -0.1736963062907], -[0.4134428217532, -0.174160752257], -[0.4184718598123, -0.1746348903551], -[0.4234946888112, -0.1751189117481], -[0.4285112710553, -0.1756130131705], -[0.4335215731258, -0.1761173970322], -[0.4385255661742, -0.1766322715163], -[0.4435232262299, -0.1771578506705], -[0.4485145345231, -0.1776943544896], -[0.4534994778205, -0.1782420089894], -[0.4584780487761, -0.1788010462683], -[0.4634502462948, -0.1793717045572], -[0.4684160759102, -0.1799542282547], -[0.4733755501744, -0.1805488679453], -[0.4783286890614, -0.1811558804001], -[0.4832755203796, -0.1817755285567], -[0.4882160801966, -0.1824080814756], -[0.4931504132707, -0.183053814273], -[0.4980785734908, -0.1837130080246], -[0.5030006243198, -0.1843859496399], -[0.507916639242, -0.1850729317041], -[0.5128267022085, -0.1857742522844], -[0.517730908081, -0.1864902146982], -[0.5226293630675, -0.1872211272423], -[0.5275221851481, -0.1879673028773], -[0.5324090264358, -0.1887285427772], -[-0.5299012660222, -0.1843851234623], -[-0.5250015938585, -0.1836259425852], -[-0.5200961525316, -0.1828816824663], -[-0.5151853454369, -0.182152490103], -[-0.5102690594994, -0.1814380631596], -[-0.5053471927648, -0.1807381037256], -[-0.5004196540062, -0.1800523186084], -[-0.4954863623211, -0.1793804195879], -[-0.490547246721, -0.1787221236335], -[-0.4856022457189, -0.178077153087], -[-0.4806513069146, -0.1774452358127], -[-0.4756943865835, -0.1768261053183], -[-0.4707314492679, -0.1762195008469], -[-0.4657624673757, -0.1756251674449], -[-0.4607874207852, -0.1750428560055], -[-0.45580629646, -0.1744723232916], -[-0.4508190880725, -0.1739133319394], -[-0.4458257956395, -0.1733656504453], -[-0.4408264251688, -0.1728290531364], -[-0.4358209883171, -0.1723033201285], -[-0.4308095020619, -0.1717882372712], -[-0.4257919883845, -0.1712835960831], -[-0.4207684739665, -0.1707891936774], -[-0.4157389898996, -0.1703048326798], -[-0.4107035714068, -0.1698303211397], -[-0.4056622575775, -0.1693654724354], -[-0.4006150911142, -0.1689101051754], -[-0.3955621180918, -0.1684640430954], -[-0.3905033877284, -0.168027114952], -[-0.3854389521681, -0.1675991544148], -[-0.3803688662745, -0.1671799999567], -[-0.3752931874353, -0.166769494743], -[-0.3702119753774, -0.1663674865199], -[-0.3651252919917, -0.1659738275035], -[-0.3600332011682, -0.1655883742686], -[-0.3549357686397, -0.1652109876381], -[-0.3498330618348, -0.1648415325742], -[-0.3447251497392, -0.16447987807], -[-0.3396121027649, -0.1641258970432], -[-0.3344939926281, -0.1637794662313], -[-0.3293708922328, -0.1634404660882], -[-0.3242428755631, -0.1631087806843], -[-0.3191100175813, -0.1627842976066], -[-0.3139723941321, -0.1624669078632], -[-0.3088300818537, -0.1621565057883], -[-0.3036831580937, -0.1618529889508], -[-0.298531700831, -0.1615562580647], -[-0.2933757886028, -0.1612662169022], -[-0.2882155004363, -0.160982772209], -[-0.2830509157846, -0.1607058336223], -[-0.2778821144683, -0.1604353135912], -[-0.2727091766195, -0.1601711272996], -[-0.2675321826311, -0.1599131925909], -[-0.2623512131093, -0.1596614298966], -[-0.2571663488293, -0.1594157621653], -[-0.2519776706946, -0.1591761147959], -[-0.2467852596998, -0.1589424155714], -[-0.2415891968957, -0.1587145945968], -[-0.2363895633577, -0.1584925842373], -[-0.2311864401564, -0.1582763190604], -[-0.2259799083312, -0.1580657357785], -[-0.2207700488659, -0.1578607731953], -[-0.2155569426666, -0.1576613721527], -[-0.2103406705419, -0.1574674754804], -[-0.2051213131849, -0.1572790279477], -[-0.1998989511572, -0.1570959762164], -[-0.1946736648744, -0.1569182687963], -[-0.189445534594, -0.1567458560021], -[-0.1842146404037, -0.1565786899117], -[-0.1789810622126, -0.1564167243272], -[-0.1737448797426, -0.1562599147365], -[-0.1685061725219, -0.1561082182771], -[-0.1632650198795, -0.1559615937009], -[-0.1580215009406, -0.1558200013414], -[-0.152775694624, -0.1556834030817], -[-0.1475276796395, -0.1555517623238], -[-0.142277534487, -0.1554250439597], -[-0.1370253374562, -0.1553032143439], -[-0.1317711666273, -0.1551862412667], -[-0.1265150998729, -0.1550740939291], -[-0.1212572148597, -0.1549667429193], -[-0.1159975890522, -0.1548641601895], -[-0.1107362997161, -0.1547663190345], -[-0.1054734239226, -0.1546731940719], -[-0.100209038554, -0.1545847612218], -[-0.09494322030856, -0.1545009976895], -[-0.0896760457072, -0.1544218819481], -[-0.08440759109981, -0.1543473937222], -[-0.07913793267248, -0.1542775139731], -[-0.07386714645501, -0.1542122248843], -[-0.06859530832879, -0.154151509849], -[-0.06332249403513, -0.1540953534572], -[-0.0580487791839, -0.1540437414848], -[-0.05277423926246, -0.1539966608832], -[-0.04749894964492, -0.1539540997697], -[-0.04222298560162, -0.1539160474188], -[-0.03694642230885, -0.1538824942548], -[-0.03166933485876, -0.1538534318445], -[-0.02639179826957, -0.1538288528914], -[-0.02111388749576, -0.1538087512303], -[-0.0158356774385, -0.153793121823], -[-0.01055724295621, -0.1537819607546], -[-0.005278658875114, -0.1537752652307], -[-7.897979417936e-15, -0.1537730335756], -[0.005278658875114, -0.1537752652308], -[0.01055724295621, -0.1537819607546], -[0.01583567743851, -0.153793121823], -[0.02111388749576, -0.1538087512303], -[0.02639179826957, -0.1538288528914], -[0.03166933485876, -0.1538534318445], -[0.03694642230883, -0.1538824942547], -[0.04222298560162, -0.1539160474188], -[0.04749894964495, -0.1539540997697], -[0.05277423926246, -0.1539966608832], -[0.0580487791839, -0.1540437414848], -[0.06332249403513, -0.1540953534572], -[0.06859530832879, -0.154151509849], -[0.07386714645501, -0.1542122248843], -[0.07913793267248, -0.1542775139731], -[0.08440759109981, -0.1543473937222], -[0.0896760457072, -0.1544218819481], -[0.09494322030857, -0.1545009976895], -[0.100209038554, -0.1545847612218], -[0.1054734239226, -0.1546731940719], -[0.1107362997161, -0.1547663190345], -[0.1159975890522, -0.1548641601895], -[0.1212572148597, -0.1549667429193], -[0.1265150998729, -0.1550740939291], -[0.1317711666273, -0.1551862412667], -[0.1370253374562, -0.1553032143439], -[0.142277534487, -0.1554250439597], -[0.1475276796395, -0.1555517623238], -[0.152775694624, -0.1556834030817], -[0.1580215009406, -0.1558200013414], -[0.1632650198795, -0.1559615937009], -[0.1685061725219, -0.1561082182771], -[0.1737448797426, -0.1562599147365], -[0.1789810622126, -0.1564167243272], -[0.1842146404037, -0.1565786899117], -[0.189445534594, -0.1567458560021], -[0.1946736648744, -0.1569182687963], -[0.1998989511572, -0.1570959762164], -[0.2051213131849, -0.1572790279477], -[0.2103406705419, -0.1574674754804], -[0.2155569426666, -0.1576613721527], -[0.2207700488659, -0.1578607731953], -[0.2259799083312, -0.1580657357785], -[0.2311864401564, -0.1582763190604], -[0.2363895633577, -0.1584925842373], -[0.2415891968957, -0.1587145945968], -[0.2467852596998, -0.1589424155714], -[0.2519776706946, -0.1591761147958], -[0.2571663488293, -0.1594157621653], -[0.2623512131093, -0.1596614298966], -[0.2675321826311, -0.1599131925909], -[0.2727091766195, -0.1601711272996], -[0.2778821144683, -0.1604353135912], -[0.2830509157846, -0.1607058336223], -[0.2882155004363, -0.160982772209], -[0.2933757886028, -0.1612662169022], -[0.298531700831, -0.1615562580647], -[0.3036831580937, -0.1618529889508], -[0.3088300818537, -0.1621565057883], -[0.3139723941321, -0.1624669078632], -[0.3191100175813, -0.1627842976066], -[0.3242428755631, -0.1631087806843], -[0.3293708922328, -0.1634404660882], -[0.3344939926281, -0.1637794662313], -[0.3396121027649, -0.1641258970432], -[0.3447251497392, -0.16447987807], -[0.3498330618348, -0.1648415325742], -[0.3549357686397, -0.1652109876381], -[0.3600332011682, -0.1655883742686], -[0.3651252919917, -0.1659738275035], -[0.3702119753774, -0.1663674865199], -[0.3752931874353, -0.166769494743], -[0.3803688662745, -0.1671799999567], -[0.3854389521681, -0.1675991544148], -[0.3905033877284, -0.168027114952], -[0.3955621180918, -0.1684640430954], -[0.4006150911142, -0.1689101051754], -[0.4056622575775, -0.1693654724354], -[0.4107035714068, -0.1698303211397], -[0.4157389898996, -0.1703048326798], -[0.4207684739665, -0.1707891936774], -[0.4257919883845, -0.1712835960831], -[0.4308095020619, -0.1717882372712], -[0.4358209883171, -0.1723033201285], -[0.4408264251688, -0.1728290531364], -[0.4458257956395, -0.1733656504453], -[0.4508190880725, -0.1739133319394], -[0.45580629646, -0.1744723232916], -[0.4607874207853, -0.1750428560055], -[0.4657624673757, -0.1756251674449], -[0.4707314492679, -0.1762195008469], -[0.4756943865835, -0.1768261053183], -[0.4806513069146, -0.1774452358127], -[0.4856022457189, -0.178077153087], -[0.490547246721, -0.1787221236335], -[0.4954863623211, -0.1793804195879], -[0.5004196540062, -0.1800523186084], -[0.5053471927648, -0.1807381037256], -[0.5102690594994, -0.1814380631596], -[0.5151853454369, -0.182152490103], -[0.5200961525316, -0.1828816824663], -[0.5250015938585, -0.1836259425852], -[0.5299012660194, -0.1843851234928], -[-0.527384423468, -0.180026190253], -[-0.5224723793052, -0.1792690801039], -[-0.5175547228085, -0.1785268867184], -[-0.5126319611332, -0.1777995719727], -[-0.5077039858532, -0.1770868436164], -[-0.5027706990551, -0.1763884136014], -[-0.4978320129747, -0.1757039983563], -[-0.4928878496231, -0.1750333190236], -[-0.4879381404073, -0.1743761016644], -[-0.4829828257468, -0.1737320774305], -[-0.4780218546897, -0.1731009827076], -[-0.47305518453, -0.1724825592303], -[-0.4680827804281, -0.1718765541718], -[-0.4631046150366, -0.1712827202099], -[-0.4581206681327, -0.1707008155717], -[-0.453130926258, -0.1701306040584], -[-0.4481353823672, -0.1695718550523], -[-0.443134035487, -0.1690243435076], -[-0.4381268903843, -0.1684878499275], -[-0.4331139572462, -0.1679621603271], -[-0.4280952513708, -0.1674470661865], -[-0.4230707928692, -0.1669423643926], -[-0.4180406063796, -0.1664478571728], -[-0.4130047207926, -0.1659633520207], -[-0.4079631689887, -0.1654886616161], -[-0.4029159875869, -0.1650236037386], -[-0.3978632167046, -0.1645680011768], -[-0.392804899729, -0.1641216816345], -[-0.3877410830996, -0.1636844776328], -[-0.3826718161008, -0.1632562264104], -[-0.3775971506654, -0.1628367698224], -[-0.3725171411876, -0.1624259542377], -[-0.3674318443467, -0.1620236304353], -[-0.362341318939, -0.161629653501], -[-0.3572456257194, -0.1612438827241], -[-0.352144827252, -0.1608661814943], -[-0.347038987768, -0.1604964171994], -[-0.3419281730325, -0.1601344611247], -[-0.3368124502187, -0.1597801883528], -[-0.3316918877891, -0.1594334776652], -[-0.3265665553839, -0.159094211446], -[-0.3214365237164, -0.1587622755865], -[-0.3163018644738, -0.1584375593926], -[-0.3111626502249, -0.1581199554934], -[-0.3060189543333, -0.1578093597528], -[-0.3008708508756, -0.1575056711821], -[-0.2957184145656, -0.157208791856], -[-0.2905617206825, -0.1569186268297], -[-0.2854008450048, -0.1566350840592], -[-0.2802358637473, -0.1563580743232], -[-0.2750668535039, -0.1560875111478], -[-0.2698938911929, -0.1558233107329], -[-0.264717054007, -0.1555653918811], -[-0.2595364193664, -0.1553136759294], -[-0.254352064876, -0.1550680866819], -[-0.2491640682845, -0.1548285503457], -[-0.2439725074481, -0.1545949954688], -[-0.2387774602956, -0.1543673528796], -[-0.2335790047977, -0.154145555629], -[-0.2283772189373, -0.1539295389344], -[-0.2231721806838, -0.1537192401256], -[-0.2179639679683, -0.1535145985926], -[-0.212752658662, -0.153315555736], -[-0.2075383305564, -0.1531220549181], -[-0.202321061345, -0.1529340414167], -[-0.1971009286076, -0.1527514623805], -[-0.1918780097954, -0.1525742667862], -[-0.1866523822189, -0.1524024053972], -[-0.1814241230366, -0.1522358307241], -[-0.1761933092449, -0.1520744969868], -[-0.1709600176704, -0.1519183600779], -[-0.1657243249628, -0.1517673775281], -[-0.1604863075889, -0.1516215084727], -[-0.1552460418283, -0.1514807136197], -[-0.1500036037702, -0.1513449552192], -[-0.1447590693106, -0.1512141970346], -[-0.1395125141512, -0.151088404314], -[-0.1342640137987, -0.1509675437646], -[-0.1290136435656, -0.1508515835268], -[-0.1237614785711, -0.1507404931502], -[-0.1185075937433, -0.150634243571], -[-0.113252063822, -0.1505328070901], -[-0.107994963362, -0.1504361573527], -[-0.1027363667372, -0.1503442693284], -[-0.09747634814556, -0.1502571192935], -[-0.09221498161408, -0.1501746848128], -[-0.08695234100473, -0.1500969447241], -[-0.08168850002071, -0.1500238791223], -[-0.07642353221321, -0.1499554693452], -[-0.0711575109886, -0.1498916979603], -[-0.065890509616, -0.1498325487518], -[-0.06062260123522, -0.1497780067098], -[-0.05535385886504, -0.1497280580189], -[-0.05008435541176, -0.149682690049], -[-0.04481416367816, -0.149641891346], -[-0.0395433563725, -0.1496056516239], -[-0.03427200611796, -0.1495739617576], -[-0.02900018546213, -0.1495468137766], -[-0.02372796688677, -0.1495242008591], -[-0.01845542281766, -0.1495061173278], -[-0.0131826256346, -0.1494925586453], -[-0.007909647681559, -0.1494835214114], -[-0.002636561276804, -0.1494790033606], -[0.002636561276804, -0.1494790033606], -[0.007909647681559, -0.1494835214114], -[0.0131826256346, -0.1494925586453], -[0.01845542281766, -0.1495061173278], -[0.02372796688677, -0.1495242008591], -[0.02900018546213, -0.1495468137766], -[0.03427200611796, -0.1495739617576], -[0.0395433563725, -0.1496056516239], -[0.04481416367816, -0.149641891346], -[0.05008435541176, -0.149682690049], -[0.05535385886505, -0.149728058019], -[0.06062260123522, -0.1497780067098], -[0.065890509616, -0.1498325487518], -[0.0711575109886, -0.1498916979603], -[0.07642353221321, -0.1499554693452], -[0.08168850002071, -0.1500238791223], -[0.08695234100473, -0.1500969447241], -[0.09221498161409, -0.1501746848128], -[0.09747634814556, -0.1502571192935], -[0.1027363667372, -0.1503442693284], -[0.107994963362, -0.1504361573527], -[0.113252063822, -0.1505328070901], -[0.1185075937433, -0.150634243571], -[0.1237614785711, -0.1507404931502], -[0.1290136435656, -0.1508515835268], -[0.1342640137987, -0.1509675437646], -[0.1395125141512, -0.151088404314], -[0.1447590693106, -0.1512141970346], -[0.1500036037702, -0.1513449552192], -[0.1552460418283, -0.1514807136197], -[0.1604863075889, -0.1516215084727], -[0.1657243249628, -0.1517673775281], -[0.1709600176704, -0.1519183600779], -[0.1761933092449, -0.1520744969868], -[0.1814241230366, -0.1522358307241], -[0.1866523822189, -0.1524024053972], -[0.1918780097954, -0.1525742667862], -[0.1971009286076, -0.1527514623805], -[0.202321061345, -0.1529340414167], -[0.2075383305564, -0.1531220549181], -[0.212752658662, -0.153315555736], -[0.2179639679683, -0.1535145985926], -[0.2231721806838, -0.1537192401256], -[0.2283772189373, -0.1539295389344], -[0.2335790047977, -0.154145555629], -[0.2387774602956, -0.1543673528796], -[0.2439725074481, -0.1545949954688], -[0.2491640682845, -0.1548285503457], -[0.254352064876, -0.1550680866819], -[0.2595364193664, -0.1553136759294], -[0.264717054007, -0.1555653918811], -[0.2698938911929, -0.1558233107329], -[0.2750668535039, -0.1560875111478], -[0.2802358637473, -0.1563580743232], -[0.2854008450048, -0.1566350840592], -[0.2905617206825, -0.1569186268297], -[0.2957184145656, -0.157208791856], -[0.3008708508756, -0.1575056711821], -[0.3060189543333, -0.1578093597528], -[0.3111626502249, -0.1581199554934], -[0.3163018644738, -0.1584375593926], -[0.3214365237164, -0.1587622755865], -[0.3265665553839, -0.159094211446], -[0.3316918877891, -0.1594334776652], -[0.3368124502187, -0.1597801883528], -[0.3419281730325, -0.1601344611247], -[0.347038987768, -0.1604964171994], -[0.352144827252, -0.1608661814943], -[0.3572456257194, -0.1612438827241], -[0.362341318939, -0.161629653501], -[0.3674318443467, -0.1620236304353], -[0.3725171411876, -0.1624259542377], -[0.3775971506654, -0.1628367698224], -[0.3826718161008, -0.1632562264104], -[0.3877410830996, -0.1636844776328], -[0.392804899729, -0.1641216816345], -[0.3978632167046, -0.1645680011768], -[0.4029159875869, -0.1650236037386], -[0.4079631689887, -0.1654886616161], -[0.4130047207926, -0.1659633520207], -[0.4180406063796, -0.1664478571728], -[0.4230707928692, -0.1669423643926], -[0.4280952513708, -0.1674470661865], -[0.4331139572462, -0.1679621603271], -[0.4381268903843, -0.1684878499275], -[0.443134035487, -0.1690243435076], -[0.4481353823672, -0.1695718550523], -[0.453130926258, -0.1701306040584], -[0.4581206681327, -0.1707008155717], -[0.4631046150366, -0.1712827202099], -[0.4680827804281, -0.1718765541718], -[0.47305518453, -0.1724825592303], -[0.4780218546897, -0.1731009827076], -[0.4829828257468, -0.1737320774305], -[0.4879381404073, -0.1743761016644], -[0.4928878496231, -0.1750333190236], -[0.4978320129747, -0.1757039983563], -[0.5027706990551, -0.1763884136015], -[0.5077039858532, -0.1770868436164], -[0.5126319611332, -0.1777995719727], -[0.5175547228085, -0.1785268867184], -[0.5224723793052, -0.1792690801039], -[0.5273844234649, -0.18002619029], -[-0.5248588383599, -0.1756518752571], -[-0.5199347240689, -0.1748970487101], -[-0.5150052452452, -0.1741570698816], -[-0.5100709156421, -0.1734317864529], -[-0.5051316312398, -0.1727209157559], -[-0.5001872979633, -0.1720241791183], -[-0.4952378313453, -0.1713413021192], -[-0.4902831561793, -0.1706720148122], -[-0.4853232061678, -0.170016051917], -[-0.4803579235661, -0.1693731529828], -[-0.475387258826, -0.1687430625236], -[-0.4704111702395, -0.1681255301289], -[-0.4654296235858, -0.1675203105493], -[-0.4604425917823, -0.1669271637626], -[-0.4554500545418, -0.1663458550173], -[-0.4504519980357, -0.1657761548602], -[-0.445448414566, -0.1652178391453], -[-0.440439302245, -0.1646706890296], -[-0.4354246646849, -0.1641344909534], -[-0.430404510697, -0.1636090366104], -[-0.4253788540005, -0.1630941229054], -[-0.4203477129428, -0.1625895519036], -[-0.415311110229, -0.1620951307711], -[-0.4102690726632, -0.1616106717079], -[-0.4052216308997, -0.1611359918755], -[-0.4001688192054, -0.160670913318], -[-0.3951106752317, -0.1602152628796], -[-0.3900472397981, -0.159768872118], -[-0.3849785566845, -0.1593315772146], -[-0.3799046724343, -0.1589032188831], -[-0.3748256361669, -0.1584836422751], -[-0.3697414993993, -0.1580726968853], -[-0.364652315877, -0.157670236456], -[-0.3595581414139, -0.1572761188802], -[-0.3544590337397, -0.1568902061056], -[-0.3493550523567, -0.1565123640385], -[-0.3442462584035, -0.1561424624486], -[-0.3391327145267, -0.1557803748741], -[-0.3340144847593, -0.1554259785282], -[-0.3288916344065, -0.1550791542072], -[-0.3237642299379, -0.1547397861992], -[-0.3186323388857, -0.1544077621952], -[-0.3134960297496, -0.1540829732012], -[-0.3083553719066, -0.1537653134527], -[-0.3032104355268, -0.1534546803307], -[-0.2980612914944, -0.1531509742798], -[-0.2929080113332, -0.152854098728], -[-0.2877506671373, -0.1525639600091], -[-0.2825893315059, -0.1522804672865], -[-0.2774240774829, -0.1520035324799], -[-0.2722549784996, -0.151733070193], -[-0.2670821083222, -0.1514689976444], -[-0.2619055410025, -0.1512112346], -[-0.2567253508317, -0.1509597033074], -[-0.2515416122984, -0.1507143284325], -[-0.2463544000487, -0.1504750369987], -[-0.2411637888498, -0.1502417583268], -[-0.2359698535565, -0.1500144239785], -[-0.23077266908, -0.1497929677003], -[-0.2255723103591, -0.1495773253707], -[-0.2203688523344, -0.1493674349483], -[-0.215162369924, -0.149163236422], -[-0.2099529380019, -0.1489646717634], -[-0.2047406313784, -0.1487716848807], -[-0.1995255247817, -0.1485842215741], -[-0.1943076928421, -0.148402229493], -[-0.1890872100777, -0.1482256580956], -[-0.1838641508816, -0.1480544586088], -[-0.1786385895107, -0.1478885839906], -[-0.1734106000758, -0.1477279888941], -[-0.1681802565332, -0.1475726296322], -[-0.1629476326781, -0.1474224641445], -[-0.1577128021378, -0.1472774519654], -[-0.152475838368, -0.1471375541935], -[-0.1472368146484, -0.1470027334622], -[-0.1419958040806, -0.1468729539121], -[-0.1367528795862, -0.1467481811643], -[-0.1315081139063, -0.1466283822949], -[-0.1262615796015, -0.1465135258109], -[-0.1210133490531, -0.1464035816272], -[-0.1157634944648, -0.1462985210446], -[-0.110512087865, -0.1461983167295], -[-0.1052592011102, -0.1461029426938], -[-0.1000049058888, -0.1460123742764], -[-0.0947492737254, -0.1459265881259], -[-0.08949237598584, -0.1458455621839], -[-0.08423428388264, -0.1457692756692], -[-0.07897506848103, -0.145697709064], -[-0.07371480070536, -0.1456308440992], -[-0.06845355134597, -0.1455686637425], -[-0.06319139106643, -0.1455111521865], -[-0.05792839041116, -0.1454582948373], -[-0.05266461981335, -0.1454100783051], -[-0.04740014960322, -0.1453664903945], -[-0.04213505001651, -0.1453275200965], -[-0.03686939120325, -0.1452931575807], -[-0.03160324323675, -0.1452633941891], -[-0.02633667612273, -0.1452382224297], -[-0.02106975980873, -0.1452176359716], -[-0.01580256419354, -0.145201629641], -[-0.0105351591368, -0.1451901994171], -[-0.005267614468768, -0.1451833424303], -[-1.607939438756e-13, -0.1451810569592], -[0.005267614468768, -0.1451833424303], -[0.0105351591368, -0.1451901994171], -[0.01580256419354, -0.145201629641], -[0.02106975980873, -0.1452176359716], -[0.02633667612273, -0.1452382224297], -[0.03160324323675, -0.1452633941891], -[0.03686939120325, -0.1452931575807], -[0.04213505001651, -0.1453275200965], -[0.04740014960322, -0.1453664903945], -[0.05266461981335, -0.1454100783051], -[0.05792839041116, -0.1454582948373], -[0.06319139106643, -0.1455111521865], -[0.06845355134597, -0.1455686637425], -[0.07371480070536, -0.1456308440992], -[0.07897506848103, -0.145697709064], -[0.08423428388264, -0.1457692756692], -[0.08949237598584, -0.1458455621839], -[0.0947492737254, -0.1459265881259], -[0.1000049058888, -0.1460123742764], -[0.1052592011102, -0.1461029426938], -[0.110512087865, -0.1461983167295], -[0.1157634944648, -0.1462985210446], -[0.1210133490531, -0.1464035816272], -[0.1262615796015, -0.1465135258109], -[0.1315081139063, -0.1466283822949], -[0.1367528795862, -0.1467481811643], -[0.1419958040806, -0.1468729539121], -[0.1472368146484, -0.1470027334622], -[0.152475838368, -0.1471375541935], -[0.1577128021378, -0.1472774519654], -[0.1629476326781, -0.1474224641445], -[0.1681802565332, -0.1475726296322], -[0.1734106000758, -0.1477279888941], -[0.1786385895107, -0.1478885839906], -[0.1838641508816, -0.1480544586088], -[0.1890872100778, -0.1482256580956], -[0.1943076928421, -0.148402229493], -[0.1995255247817, -0.1485842215741], -[0.2047406313784, -0.1487716848807], -[0.2099529380019, -0.1489646717634], -[0.215162369924, -0.149163236422], -[0.2203688523344, -0.1493674349483], -[0.2255723103591, -0.1495773253707], -[0.23077266908, -0.1497929677003], -[0.2359698535565, -0.1500144239785], -[0.2411637888498, -0.1502417583268], -[0.2463544000487, -0.1504750369987], -[0.2515416122984, -0.1507143284325], -[0.2567253508317, -0.1509597033074], -[0.2619055410025, -0.1512112346], -[0.2670821083222, -0.1514689976444], -[0.2722549784996, -0.151733070193], -[0.2774240774829, -0.1520035324799], -[0.2825893315059, -0.1522804672865], -[0.2877506671373, -0.1525639600091], -[0.2929080113332, -0.152854098728], -[0.2980612914944, -0.1531509742798], -[0.3032104355268, -0.1534546803307], -[0.3083553719066, -0.1537653134527], -[0.3134960297496, -0.1540829732012], -[0.3186323388857, -0.1544077621952], -[0.3237642299379, -0.1547397861992], -[0.3288916344065, -0.1550791542072], -[0.3340144847593, -0.1554259785282], -[0.3391327145267, -0.1557803748741], -[0.3442462584035, -0.1561424624486], -[0.3493550523567, -0.1565123640385], -[0.3544590337397, -0.1568902061056], -[0.3595581414139, -0.1572761188802], -[0.364652315877, -0.157670236456], -[0.3697414993993, -0.1580726968853], -[0.3748256361669, -0.1584836422751], -[0.3799046724343, -0.1589032188831], -[0.3849785566845, -0.1593315772146], -[0.3900472397981, -0.159768872118], -[0.3951106752317, -0.1602152628796], -[0.4001688192054, -0.160670913318], -[0.4052216308997, -0.1611359918755], -[0.4102690726632, -0.1616106717079], -[0.415311110229, -0.1620951307711], -[0.4203477129428, -0.1625895519036], -[0.4253788540005, -0.1630941229054], -[0.430404510697, -0.1636090366104], -[0.4354246646849, -0.1641344909534], -[0.440439302245, -0.1646706890296], -[0.445448414566, -0.1652178391453], -[0.4504519980357, -0.1657761548602], -[0.4554500545418, -0.1663458550173], -[0.4604425917823, -0.1669271637626], -[0.4654296235858, -0.1675203105493], -[0.4704111702395, -0.1681255301289], -[0.475387258826, -0.1687430625236], -[0.4803579235661, -0.1693731529828], -[0.4853232061678, -0.170016051917], -[0.4902831561793, -0.1706720148122], -[0.4952378313453, -0.1713413021192], -[0.5001872979633, -0.1720241791183], -[0.5051316312398, -0.1727209157559], -[0.5100709156421, -0.1734317864529], -[0.5150052452452, -0.1741570698816], -[0.5199347240689, -0.1748970487101], -[0.5248588379347, -0.1756518796568], -[-0.5223252324629, -0.1712625873702], -[-0.5173888062008, -0.1705101728746], -[-0.5124478872574, -0.1697725531802], -[-0.5075023660747, -0.1690494512002], -[-0.5025521428097, -0.1683405933805], -[-0.4975971270326, -0.1676457099701], -[-0.4926372374132, -0.1669645352599], -[-0.4876724013997, -0.166296807792], -[-0.4827025548912, -0.1656422705398], -[-0.4777276419069, -0.1650006710627], -[-0.4727476142545, -0.1643717616345], -[-0.4677624311986, -0.1637552993488], -[-0.4627720591314, -0.1631510462026], -[-0.4577764712475, -0.1625587691598], -[-0.4527756472235, -0.1619782401956], -[-0.4477695729031, -0.1614092363247], -[-0.44275823999, -0.1608515396131], -[-0.4377416457479, -0.1603049371765], -[-0.432719792709, -0.159769221166], -[-0.427692688391, -0.1592441887414], -[-0.4226603450241, -0.1587296420361], -[-0.4176227792862, -0.1582253881108], -[-0.4125800120488, -0.1577312389014], -[-0.4075320681321, -0.1572470111582], -[-0.4024789760697, -0.1567725263803], -[-0.3974207678834, -0.156307610744], -[-0.3923574788676, -0.1558520950271], -[-0.3872891473825, -0.1554058145299], -[-0.3822158146579, -0.1549686089923], -[-0.377137524605, -0.1545403225097], -[-0.3720543236377, -0.1541208034456], -[-0.3669662605025, -0.1537099043442], -[-0.3618733861166, -0.1533074818411], -[-0.3567757534147, -0.1529133965738], -[-0.3516734172032, -0.1525275130922], -[-0.3465664340223, -0.1521496997689], -[-0.341454862015, -0.1517798287101], -[-0.336338760804, -0.1514177756669], -[-0.3312181913746, -0.1510634199482], -[-0.3260932159644, -0.1507166443337], -[-0.3209638979592, -0.1503773349888], -[-0.3158303017951, -0.1500453813807], -[-0.3106924928656, -0.1497206761958], -[-0.305550537435, -0.1494031152592], -[-0.3004045025564, -0.1490925974552], -[-0.295254455995, -0.1487890246504], -[-0.2901004661559, -0.1484923016176], -[-0.2849426020164, -0.1482023359625], -[-0.2797809330625, -0.1479190380519], -[-0.2746155292303, -0.1476423209434], -[-0.2694464608497, -0.147372100318], -[-0.2642737985932, -0.1471082944139], -[-0.2590976134278, -0.146850823962], -[-0.2539179765697, -0.1465996121246], -[-0.2487349594427, -0.1463545844342], -[-0.2435486336399, -0.1461156687362], -[-0.238359070887, -0.1458827951315], -[-0.23316634301, -0.1456558959227], -[-0.227970521904, -0.1454349055609], -[-0.2227716795051, -0.1452197605951], -[-0.2175698877649, -0.1450103996227], -[-0.2123652186263, -0.1448067632426], -[-0.2071577440024, -0.144608794009], -[-0.2019475357564, -0.1444164363876], -[-0.1967346656842, -0.1442296367135], -[-0.1915192054981, -0.1440483431499], -[-0.1863012268129, -0.1438725056496], -[-0.1810808011326, -0.1437020759165], -[-0.1758579998395, -0.1435370073704], -[-0.1706328941844, -0.1433772551114], -[-0.1654055552782, -0.1432227758873], -[-0.1601760540841, -0.1430735280613], -[-0.1549444614125, -0.142929471582], -[-0.1497108479156, -0.1427905679535], -[-0.1444752840837, -0.1426567802079], -[-0.1392378402424, -0.1425280728787], -[-0.1339985865511, -0.1424044119752], -[-0.1287575930018, -0.1422857649583], -[-0.1235149294191, -0.1421721007173], -[-0.1182706654611, -0.1420633895482], -[-0.1130248706211, -0.1419596031327], -[-0.1077776142294, -0.1418607145184], -[-0.1025289654564, -0.1417666981], -[-0.09727899331645, -0.1416775296018], -[-0.09202776667165, -0.1415931860611], -[-0.08677535423664, -0.141513645812], -[-0.08152182458385, -0.141438888471], -[-0.07626724614916, -0.1413688949231], -[-0.07101168723804, -0.141303647309], -[-0.06575521603217, -0.1412431290127], -[-0.06049790059631, -0.1411873246509], -[-0.05523980888558, -0.1411362200622], -[-0.04998100875314, -0.141089802298], -[-0.04472156795806, -0.141048059614], -[-0.0394615541735, -0.1410109814618], -[-0.03420103499511, -0.1409785584828], -[-0.02894007794968, -0.1409507825015], -[-0.02367875050396, -0.1409276465202], -[-0.01841712007359, -0.1409091447144], -[-0.01315525403223, -0.1408952724291], -[-0.007893219720792, -0.1408860261759], -[-0.002631084456702, -0.1408814036302], -[0.002631084456702, -0.1408814036302], -[0.007893219720793, -0.1408860261759], -[0.01315525403223, -0.1408952724291], -[0.01841712007359, -0.1409091447144], -[0.02367875050396, -0.1409276465202], -[0.02894007794968, -0.1409507825015], -[0.03420103499511, -0.1409785584828], -[0.0394615541735, -0.1410109814618], -[0.04472156795806, -0.141048059614], -[0.04998100875314, -0.141089802298], -[0.05523980888558, -0.1411362200622], -[0.06049790059631, -0.1411873246509], -[0.06575521603217, -0.1412431290127], -[0.07101168723804, -0.141303647309], -[0.07626724614915, -0.1413688949231], -[0.08152182458382, -0.141438888471], -[0.08677535423664, -0.141513645812], -[0.09202776667165, -0.1415931860611], -[0.09727899331645, -0.1416775296018], -[0.1025289654564, -0.1417666981], -[0.1077776142294, -0.1418607145184], -[0.1130248706211, -0.1419596031327], -[0.1182706654611, -0.1420633895482], -[0.1235149294191, -0.1421721007173], -[0.1287575930018, -0.1422857649583], -[0.1339985865511, -0.1424044119752], -[0.1392378402424, -0.1425280728787], -[0.1444752840837, -0.1426567802079], -[0.1497108479156, -0.1427905679535], -[0.1549444614125, -0.142929471582], -[0.1601760540841, -0.1430735280613], -[0.1654055552782, -0.1432227758873], -[0.1706328941844, -0.1433772551114], -[0.1758579998395, -0.1435370073704], -[0.1810808011326, -0.1437020759165], -[0.1863012268129, -0.1438725056496], -[0.1915192054981, -0.1440483431499], -[0.1967346656842, -0.1442296367135], -[0.2019475357564, -0.1444164363876], -[0.2071577440024, -0.144608794009], -[0.2123652186263, -0.1448067632426], -[0.2175698877649, -0.1450103996227], -[0.2227716795051, -0.1452197605951], -[0.227970521904, -0.1454349055609], -[0.23316634301, -0.1456558959227], -[0.238359070887, -0.1458827951315], -[0.2435486336399, -0.1461156687362], -[0.2487349594427, -0.1463545844342], -[0.2539179765697, -0.1465996121246], -[0.2590976134278, -0.146850823962], -[0.2642737985932, -0.1471082944139], -[0.2694464608497, -0.147372100318], -[0.2746155292303, -0.1476423209434], -[0.2797809330625, -0.1479190380519], -[0.2849426020164, -0.1482023359625], -[0.2901004661559, -0.1484923016176], -[0.295254455995, -0.1487890246504], -[0.3004045025564, -0.1490925974552], -[0.305550537435, -0.1494031152592], -[0.3106924928656, -0.1497206761958], -[0.3158303017951, -0.1500453813807], -[0.3209638979592, -0.1503773349888], -[0.3260932159644, -0.1507166443337], -[0.3312181913746, -0.1510634199482], -[0.336338760804, -0.1514177756669], -[0.341454862015, -0.1517798287101], -[0.3465664340223, -0.1521496997689], -[0.3516734172032, -0.1525275130922], -[0.3567757534147, -0.1529133965738], -[0.3618733861166, -0.1533074818411], -[0.3669662605025, -0.1537099043442], -[0.3720543236377, -0.1541208034456], -[0.377137524605, -0.1545403225097], -[0.3822158146579, -0.1549686089923], -[0.3872891473825, -0.1554058145299], -[0.3923574788675, -0.1558520950271], -[0.3974207678834, -0.156307610744], -[0.4024789760697, -0.1567725263803], -[0.4075320681321, -0.1572470111582], -[0.4125800120488, -0.1577312389014], -[0.4176227792862, -0.1582253881108], -[0.4226603450241, -0.1587296420361], -[0.427692688391, -0.1592441887414], -[0.432719792709, -0.159769221166], -[0.4377416457479, -0.1603049371765], -[0.44275823999, -0.1608515396131], -[0.4477695729031, -0.1614092363247], -[0.4527756472235, -0.1619782401956], -[0.4577764712475, -0.1625587691598], -[0.4627720591314, -0.1631510462026], -[0.4677624311986, -0.1637552993488], -[0.4727476142545, -0.1643717616345], -[0.4777276419069, -0.1650006710627], -[0.4827025548912, -0.1656422705398], -[0.4876724013997, -0.166296807792], -[0.4926372374132, -0.1669645352599], -[0.4975971270326, -0.1676457099701], -[0.5025521428097, -0.1683405933805], -[0.5075023660747, -0.1690494512002], -[0.5124478872574, -0.1697725531802], -[0.5173888062008, -0.1705101728746], -[0.5223252324629, -0.1712625873702], -[-0.5197825322292, -0.166858501377], -[-0.5148347994666, -0.1661087687518], -[-0.5098828125312, -0.1653736496573], -[-0.5049264663435, -0.1646528758463], -[-0.4999656650196, -0.1639461824417], -[-0.4950003215899, -0.1632533081896], -[-0.4900303577082, -0.1625739956824], -[-0.4850557033528, -0.1619079915549], -[-0.4800762965216, -0.1612550466549], -[-0.4750920829249, -0.1606149161887], -[-0.470103015676, -0.1599873598429], -[-0.4651090549823, -0.1593721418861], -[-0.4601101678379, -0.1587690312486], -[-0.4551063277203, -0.1581778015844], -[-0.4500975142904, -0.1575982313161], -[-0.4450837130982, -0.1570301036632], -[-0.4400649152948, -0.1564732066566], -[-0.435041117351, -0.1559273331394], -[-0.4300123207836, -0.1553922807561], -[-0.4249785318898, -0.154867851931], -[-0.4199397614889, -0.1543538538367], -[-0.4148960246742, -0.1538500983548], -[-0.4098473405721, -0.153356402028], -[-0.4047937321112, -0.1528725860061], -[-0.3997352257994, -0.1523984759865], -[-0.3946718515108, -0.1519339021489], -[-0.3896036422809, -0.1514786990865], -[-0.3845306341105, -0.1510327057331], -[-0.3794528657787, -0.1505957652875], -[-0.3743703786642, -0.1501677251351], -[-0.3692832165745, -0.1497484367681], -[-0.3641914255837, -0.1493377557039], -[-0.359095053878, -0.1489355414025], -[-0.3539941516086, -0.1485416571835], -[-0.3488887707525, -0.1481559701422], -[-0.3437789649798, -0.1477783510665], -[-0.3386647895285, -0.1474086743535], -[-0.3335463010856, -0.1470468179268], -[-0.3284235576745, -0.1466926631542], -[-0.3232966185489, -0.146346094767], -[-0.3181655440924, -0.1460070007797], -[-0.3130303957235, -0.1456752724111], -[-0.3078912358064, -0.1453508040069], -[-0.3027481275668, -0.1450334929633], -[-0.2976011350124, -0.1447232396531], -[-0.292450322859, -0.1444199473517], -[-0.2872957564595, -0.1441235221667], -[-0.282137501739, -0.1438338729678], -[-0.2769756251329, -0.1435509113188], -[-0.271810193529, -0.1432745514116], -[-0.2666412742135, -0.143004710002], -[-0.2614689348207, -0.1427413063467], -[-0.2562932432861, -0.142484262143], -[-0.2511142678017, -0.1422335014696], -[-0.2459320767762, -0.1419889507291], -[-0.2407467387961, -0.1417505385932], -[-0.2355583225912, -0.1415181959486], -[-0.2303668970016, -0.1412918558453], -[-0.2251725309479, -0.1410714534464], -[-0.2199752934032, -0.1408569259794], -[-0.2147752533678, -0.1406482126898], -[-0.2095724798457, -0.1404452547956], -[-0.2043670418234, -0.140247995444], -[-0.1991590082506, -0.1400563796693], -[-0.1939484480221, -0.1398703543524], -[-0.1887354299625, -0.1396898681822], -[-0.1835200228117, -0.1395148716182], -[-0.178302295212, -0.1393453168542], -[-0.1730823156975, -0.1391811577841], -[-0.1678601526836, -0.1390223499689], -[-0.1626358744589, -0.1388688506046], -[-0.1574095491778, -0.1387206184921], -[-0.1521812448544, -0.1385776140078], -[-0.146951029358, -0.1384397990758], -[-0.1417189704083, -0.1383071371416], -[-0.1364851355735, -0.138179593146], -[-0.1312495922677, -0.1380571335013], -[-0.1260124077499, -0.1379397260683], -[-0.1207736491244, -0.1378273401338], -[-0.1155333833405, -0.13771994639], -[-0.1102916771945, -0.1376175169147], -[-0.1050485973315, -0.137520025152], -[-0.09980421024812, -0.1374274458953], -[-0.09455858229569, -0.1373397552696], -[-0.08931177968443, -0.1372569307162], -[-0.08406386848768, -0.1371789509775], -[-0.07881491464703, -0.1371057960833], -[-0.0735649839775, -0.1370374473374], -[-0.06831414217364, -0.1369738873053], -[-0.06306245481572, -0.1369150998033], -[-0.05780998737637, -0.1368610698877], -[-0.05255680522756, -0.1368117838453], -[-0.04730297364798, -0.1367672291843], -[-0.04204855783054, -0.1367273946265], -[-0.03679362289032, -0.1366922701003], -[-0.03153823387256, -0.1366618467338], -[-0.02628245576101, -0.1366361168493], -[-0.02102635348639, -0.1366150739586], -[-0.01576999193494, -0.1365987127589], -[-0.01051343595724, -0.136587029129], -[-0.00525675037701, -0.1365800201272], -[-3.267470517259e-14, -0.1365776839893], -[0.00525675037701, -0.1365800201272], -[0.01051343595724, -0.136587029129], -[0.01576999193494, -0.1365987127589], -[0.02102635348638, -0.1366150739586], -[0.02628245576101, -0.1366361168493], -[0.03153823387256, -0.1366618467338], -[0.03679362289032, -0.1366922701003], -[0.04204855783054, -0.1367273946265], -[0.04730297364798, -0.1367672291843], -[0.05255680522756, -0.1368117838453], -[0.05780998737637, -0.1368610698877], -[0.06306245481572, -0.1369150998033], -[0.06831414217364, -0.1369738873053], -[0.0735649839775, -0.1370374473374], -[0.07881491464703, -0.1371057960833], -[0.0840638684877, -0.1371789509776], -[0.08931177968443, -0.1372569307162], -[0.09455858229569, -0.1373397552696], -[0.09980421024812, -0.1374274458953], -[0.1050485973315, -0.137520025152], -[0.1102916771945, -0.1376175169147], -[0.1155333833405, -0.13771994639], -[0.1207736491244, -0.1378273401338], -[0.1260124077499, -0.1379397260683], -[0.1312495922677, -0.1380571335013], -[0.1364851355735, -0.138179593146], -[0.1417189704083, -0.1383071371416], -[0.146951029358, -0.1384397990758], -[0.1521812448544, -0.1385776140078], -[0.1574095491778, -0.1387206184921], -[0.1626358744589, -0.1388688506046], -[0.1678601526836, -0.1390223499689], -[0.1730823156975, -0.1391811577841], -[0.178302295212, -0.1393453168542], -[0.1835200228117, -0.1395148716182], -[0.1887354299625, -0.1396898681822], -[0.1939484480221, -0.1398703543524], -[0.1991590082506, -0.1400563796693], -[0.2043670418234, -0.140247995444], -[0.2095724798457, -0.1404452547956], -[0.2147752533678, -0.1406482126898], -[0.2199752934032, -0.1408569259794], -[0.2251725309479, -0.1410714534464], -[0.2303668970016, -0.1412918558453], -[0.2355583225912, -0.1415181959486], -[0.2407467387961, -0.1417505385932], -[0.2459320767762, -0.1419889507291], -[0.2511142678017, -0.1422335014696], -[0.2562932432861, -0.142484262143], -[0.2614689348207, -0.1427413063467], -[0.2666412742135, -0.143004710002], -[0.271810193529, -0.1432745514116], -[0.2769756251329, -0.1435509113188], -[0.282137501739, -0.1438338729678], -[0.2872957564595, -0.1441235221667], -[0.292450322859, -0.1444199473517], -[0.2976011350124, -0.1447232396531], -[0.3027481275668, -0.1450334929633], -[0.3078912358064, -0.1453508040069], -[0.3130303957235, -0.1456752724111], -[0.3181655440924, -0.1460070007797], -[0.3232966185489, -0.146346094767], -[0.3284235576745, -0.1466926631542], -[0.3335463010856, -0.1470468179268], -[0.3386647895285, -0.1474086743535], -[0.3437789649798, -0.1477783510665], -[0.3488887707525, -0.1481559701422], -[0.3539941516086, -0.1485416571835], -[0.359095053878, -0.1489355414025], -[0.3641914255837, -0.1493377557039], -[0.3692832165745, -0.1497484367681], -[0.3743703786642, -0.1501677251351], -[0.3794528657787, -0.1505957652875], -[0.3845306341105, -0.1510327057331], -[0.3896036422809, -0.1514786990865], -[0.3946718515108, -0.1519339021489], -[0.3997352257994, -0.1523984759865], -[0.4047937321112, -0.1528725860061], -[0.4098473405721, -0.153356402028], -[0.4148960246742, -0.1538500983548], -[0.4199397614889, -0.1543538538367], -[0.4249785318898, -0.154867851931], -[0.4300123207836, -0.1553922807561], -[0.435041117351, -0.1559273331394], -[0.4400649152948, -0.1564732066566], -[0.4450837130982, -0.1570301036632], -[0.4500975142904, -0.1575982313161], -[0.4551063277203, -0.1581778015844], -[0.4601101678379, -0.1587690312486], -[0.4651090549823, -0.1593721418861], -[0.470103015676, -0.1599873598429], -[0.4750920829249, -0.1606149161887], -[0.4800762965216, -0.1612550466549], -[0.4850557033528, -0.1619079915549], -[0.4900303577082, -0.1625739956824], -[0.4950003215899, -0.1632533081896], -[0.4999656650196, -0.1639461824417], -[0.5049264663435, -0.1646528758463], -[0.5098828125312, -0.1653736496573], -[0.5148347994666, -0.1661087687518], -[0.5197825322292, -0.166858501377], -[-0.5172315452403, -0.1624400623028], -[-0.5122728735738, -0.1616931446345], -[-0.5073101812123, -0.1609606646187], -[-0.5023433673157, -0.1602423624292], -[-0.4973723397516, -0.1595379814581], -[-0.4923970148344, -0.1588472685511], -[-0.4874173170541, -0.1581699742179], -[-0.4824331787977, -0.1575058528158], -[-0.477444540066, -0.1568546627104], -[-0.4724513481868, -0.1562161664135], -[-0.4674535575264, -0.1555901306986], -[-0.4624511292016, -0.1549763266983], -[-0.4574440307928, -0.1543745299808], -[-0.4524322360599, -0.1537845206108], -[-0.447415724662, -0.1532060831934], -[-0.4423944818818, -0.1526390069036], -[-0.4373684983551, -0.1520830855019], -[-0.4323377698074, -0.1515381173381], -[-0.427302296796, -0.1510039053434], -[-0.4222620844601, -0.1504802570128], -[-0.4172171422783, -0.1499669843779], -[-0.4121674838336, -0.1494639039722], -[-0.4071131265867, -0.1489708367885], -[-0.4020540916572, -0.1484876082308], -[-0.3969904036133, -0.1480140480597], -[-0.3919220902689, -0.1475499903338], -[-0.3868491824902, -0.1470952733462], -[-0.3817717140089, -0.1466497395581], -[-0.3766897212446, -0.1462132355292], -[-0.3716032431344, -0.1457856118455], -[-0.3665123209704, -0.1453667230454], -[-0.3614169982447, -0.1449564275446], -[-0.3563173205016, -0.144554587559], -[-0.3512133351974, -0.1441610690275], -[-0.3461050915665, -0.1437757415347], -[-0.3409926404945, -0.1433984782327], -[-0.335876034398, -0.1430291557632], -[-0.3307553271103, -0.1426676541808], -[-0.325630573773, -0.1423138568753], -[-0.3205018307337, -0.1419676504969], -[-0.3153691554498, -0.1416289248796], -[-0.3102326063962, -0.1412975729682], -[-0.3050922429794, -0.1409734907452], -[-0.2999481254558, -0.1406565771588], -[-0.2948003148555, -0.1403467340532], -[-0.2896488729094, -0.1400438660991], -[-0.2844938619818, -0.1397478807269], -[-0.2793353450062, -0.1394586880609], -[-0.2741733854257, -0.1391762008546], -[-0.2690080471367, -0.1389003344287], -[-0.2638393944362, -0.13863100661], -[-0.2586674919728, -0.1383681376718], -[-0.2534924047006, -0.1381116502769], -[-0.2483141978364, -0.137861469421], -[-0.2431329368199, -0.1376175223791], -[-0.2379486872762, -0.1373797386523], -[-0.2327615149819, -0.1371480499171], -[-0.2275714858324, -0.1369223899763], -[-0.2223786658134, -0.1367026947109], -[-0.2171831209725, -0.1364889020342], -[-0.2119849173951, -0.1362809518471], -[-0.206784121181, -0.1360787859956], -[-0.2015807984233, -0.1358823482286], -[-0.1963750151895, -0.1356915841586], -[-0.191166837504, -0.135506441223], -[-0.1859563313323, -0.1353268686467], -[-0.1807435625671, -0.1351528174073], -[-0.1755285970154, -0.1349842401998], -[-0.1703115003879, -0.1348210914048], -[-0.1650923382886, -0.134663327056], -[-0.1598711762068, -0.1345109048106], -[-0.1546480795093, -0.1343637839198], -[-0.1494231134351, -0.1342219252015], -[-0.1441963430893, -0.1340852910132], -[-0.1389678334404, -0.1339538452272], -[-0.1337376493163, -0.1338275532058], -[-0.1285058554025, -0.1337063817786], -[-0.1232725162412, -0.1335902992203], -[-0.1180376962309, -0.1334792752296], -[-0.1128014596263, -0.1333732809096], -[-0.1075638705403, -0.1332722887487], -[-0.1023249929451, -0.1331762726027], -[-0.09708489067516, -0.1330852076781], -[-0.09184362743026, -0.1329990705157], -[-0.086601266779, -0.132917838976], -[-0.08135787216317, -0.1328414922247], -[-0.07611350690246, -0.1327700107199], -[-0.07086823419959, -0.1327033761991], -[-0.065622117146, -0.1326415716682], -[-0.06037521872779, -0.1325845813908], -[-0.05512760183214, -0.132532390878], -[-0.049879329254, -0.1324849868796], -[-0.04463046370314, -0.132442357376], -[-0.03938106781141, -0.1324044915704], -[-0.03413120414032, -0.1323713798824], -[-0.02888093518878, -0.1323430139418], -[-0.02363032340105, -0.132319386584], -[-0.01837943117491, -0.1323004918448], -[-0.01312832086988, -0.1322863249576], -[-0.007877054815619, -0.1322768823498], -[-0.002625695320392, -0.1322721616408], -[0.002625695320392, -0.1322721616408], -[0.007877054815619, -0.1322768823498], -[0.01312832086988, -0.1322863249576], -[0.01837943117491, -0.1323004918448], -[0.02363032340105, -0.132319386584], -[0.02888093518878, -0.1323430139418], -[0.03413120414032, -0.1323713798824], -[0.03938106781141, -0.1324044915704], -[0.04463046370314, -0.132442357376], -[0.049879329254, -0.1324849868796], -[0.05512760183214, -0.132532390878], -[0.06037521872779, -0.1325845813908], -[0.065622117146, -0.1326415716682], -[0.07086823419959, -0.1327033761991], -[0.07611350690246, -0.1327700107199], -[0.08135787216317, -0.1328414922247], -[0.086601266779, -0.132917838976], -[0.09184362743026, -0.1329990705157], -[0.09708489067516, -0.1330852076781], -[0.1023249929451, -0.1331762726027], -[0.1075638705403, -0.1332722887487], -[0.1128014596263, -0.1333732809096], -[0.1180376962309, -0.1334792752296], -[0.1232725162412, -0.1335902992203], -[0.1285058554025, -0.1337063817786], -[0.1337376493163, -0.1338275532058], -[0.1389678334404, -0.1339538452272], -[0.1441963430893, -0.1340852910132], -[0.149423113435, -0.1342219252015], -[0.1546480795093, -0.1343637839198], -[0.1598711762068, -0.1345109048106], -[0.1650923382886, -0.134663327056], -[0.1703115003879, -0.1348210914048], -[0.1755285970154, -0.1349842401998], -[0.1807435625671, -0.1351528174073], -[0.1859563313323, -0.1353268686467], -[0.191166837504, -0.135506441223], -[0.1963750151895, -0.1356915841586], -[0.2015807984233, -0.1358823482286], -[0.206784121181, -0.1360787859956], -[0.2119849173951, -0.1362809518471], -[0.2171831209725, -0.1364889020342], -[0.2223786658134, -0.1367026947109], -[0.2275714858324, -0.1369223899763], -[0.2327615149819, -0.1371480499171], -[0.2379486872762, -0.1373797386523], -[0.2431329368199, -0.1376175223791], -[0.2483141978364, -0.137861469421], -[0.2534924047006, -0.1381116502769], -[0.2586674919728, -0.1383681376718], -[0.2638393944362, -0.13863100661], -[0.2690080471367, -0.1389003344287], -[0.2741733854257, -0.1391762008546], -[0.2793353450062, -0.1394586880609], -[0.2844938619818, -0.1397478807269], -[0.2896488729094, -0.1400438660991], -[0.2948003148555, -0.1403467340532], -[0.2999481254558, -0.1406565771588], -[0.3050922429794, -0.1409734907452], -[0.3102326063962, -0.1412975729682], -[0.3153691554498, -0.1416289248796], -[0.3205018307337, -0.1419676504969], -[0.3256305737729, -0.1423138568754], -[0.3307553271103, -0.1426676541808], -[0.335876034398, -0.1430291557632], -[0.3409926404945, -0.1433984782327], -[0.3461050915665, -0.1437757415347], -[0.3512133351974, -0.1441610690275], -[0.3563173205016, -0.144554587559], -[0.3614169982447, -0.1449564275446], -[0.3665123209704, -0.1453667230454], -[0.3716032431344, -0.1457856118455], -[0.3766897212446, -0.1462132355292], -[0.3817717140089, -0.1466497395581], -[0.3868491824902, -0.1470952733462], -[0.3919220902689, -0.1475499903338], -[0.3969904036133, -0.1480140480597], -[0.4020540916572, -0.1484876082308], -[0.4071131265867, -0.1489708367885], -[0.4121674838336, -0.1494639039722], -[0.4172171422783, -0.1499669843779], -[0.4222620844601, -0.1504802570128], -[0.427302296796, -0.1510039053434], -[0.4323377698074, -0.1515381173381], -[0.4373684983551, -0.1520830855019], -[0.4423944818818, -0.1526390069036], -[0.447415724662, -0.1532060831934], -[0.4524322360599, -0.1537845206108], -[0.4574440307928, -0.1543745299808], -[0.4624511292016, -0.1549763266983], -[0.4674535575264, -0.1555901306986], -[0.4724513481868, -0.1562161664135], -[0.477444540066, -0.1568546627104], -[0.4824331787977, -0.1575058528158], -[0.4874173170541, -0.1581699742179], -[0.4923970148344, -0.1588472685511], -[0.4973723397516, -0.159537981458], -[0.5023433673157, -0.1602423624292], -[0.5073101812123, -0.1609606646187], -[0.5122728735738, -0.1616931446345], -[0.5172315452403, -0.1624400623028], -[-0.5146724466859, -0.1580075735849], -[-0.5097031943839, -0.1572636013773], -[-0.5047301500833, -0.1565338960465], -[-0.4997532169565, -0.155818205796], -[-0.494772306426, -0.1551162819043], -[-0.4897873379212, -0.1544278789455], -[-0.4847982386255, -0.1537527549863], -[-0.4798049432171, -0.1530906717584], -[-0.4748073936047, -0.1524413948107], -[-0.4698055386597, -0.151804693639], -[-0.4647993339474, -0.1511803417966], -[-0.4597887414578, -0.1505681169867], -[-0.4547737293371, -0.1499678011367], -[-0.4497542716224, -0.1493791804569], -[-0.4447303479788, -0.1488020454841], -[-0.4397019434412, -0.1482361911117], -[-0.4346690481607, -0.1476814166065], -[-0.4296316571566, -0.1471375256144], -[-0.4245897700744, -0.1466043261558], -[-0.4195433909504, -0.1460816306111], -[-0.4144925279831, -0.1455692556976], -[-0.4094371933115, -0.1450670224386], -[-0.4043774028009, -0.1445747561265], -[-0.3993131758363, -0.1440922862786], -[-0.3942445351227, -0.1436194465885], -[-0.3891715064936, -0.1431560748722], -[-0.3840941187264, -0.1427020130109], -[-0.3790124033663, -0.1422571068895], -[-0.373926394556, -0.141821206333], -[-0.3688361288747, -0.1413941650401], -[-0.363741645182, -0.1409758405146], -[-0.3586429844709, -0.1405660939961], -[-0.3535401897265, -0.1401647903885], -[-0.3484333057911, -0.1397717981884], -[-0.3433223792371, -0.1393869894131], -[-0.3382074582448, -0.1390102395275], -[-0.3330885924868, -0.1386414273719], -[-0.3279658330187, -0.1382804350896], -[-0.3228392321749, -0.1379271480552], -[-0.3177088434699, -0.1375814548034], -[-0.3125747215053, -0.1372432469582], -[-0.3074369218814, -0.1369124191638], -[-0.3022955011142, -0.1365888690158], -[-0.2971505165562, -0.136272496994], -[-0.2920020263224, -0.1359632063961], -[-0.2868500892207, -0.1356609032729], -[-0.2816947646853, -0.135365496365], -[-0.2765361127158, -0.1350768970402], -[-0.2713741938184, -0.1347950192333], -[-0.2662090689512, -0.134519779387], -[-0.2610407994736, -0.1342510963938], -[-0.255869447098, -0.1339888915406], -[-0.2506950738451, -0.1337330884534], -[-0.2455177420024, -0.1334836130449], -[-0.2403375140848, -0.1332403934625], -[-0.2351544527986, -0.1330033600391], -[-0.2299686210078, -0.132772445244], -[-0.2247800817027, -0.1325475836367], -[-0.2195888979711, -0.132328711821], -[-0.2143951329718, -0.1321157684017], -[-0.2091988499097, -0.1319086939422], -[-0.2040001120133, -0.1317074309232], -[-0.1987989825141, -0.1315119237038], -[-0.193595524628, -0.1313221184832], -[-0.1883898015376, -0.1311379632643], -[-0.1831818763772, -0.1309594078181], -[-0.1779718122189, -0.1307864036503], -[-0.1727596720596, -0.1306189039681], -[-0.1675455188107, -0.1304568636495], -[-0.162329415288, -0.1303002392128], -[-0.1571114242031, -0.1301489887878], -[-0.1518916081566, -0.1300030720888], -[-0.1466700296317, -0.1298624503871], -[-0.141446750989, -0.1297270864866], -[-0.136221834463, -0.1295969446995], -[-0.1309953421587, -0.1294719908228], -[-0.1257673360493, -0.1293521921165], -[-0.1205378779755, -0.1292375172832], -[-0.1153070296444, -0.1291279364472], -[-0.1100748526301, -0.1290234211365], -[-0.1048414083748, -0.1289239442642], -[-0.09960675819042, -0.1288294801119], -[-0.09437096326075, -0.1287400043135], -[-0.08913408464466, -0.1286554938402], -[-0.08389618327948, -0.128575926986], -[-0.078657319985, -0.1285012833546], -[-0.073417555468, -0.1284315438468], -[-0.06817695032723, -0.1283666906488], -[-0.06293556505875, -0.1283067072214], -[-0.05769346006173, -0.1282515782899], -[-0.05245069564453, -0.1282012898352], -[-0.04720733203121, -0.1281558290849], -[-0.04196342936824, -0.1281151845058], -[-0.03671904773149, -0.1280793457973], -[-0.03147424713352, -0.1280483038849], -[-0.02622908753105, -0.1280220509147], -[-0.02098362883252, -0.1280005802492], -[-0.01573793090602, -0.127983886463], -[-0.01049205358708, -0.1279719653396], -[-0.005246056686824, -0.1279648138691], -[7.961672800339e-16, -0.1279624302461], -[0.005246056686824, -0.1279648138691], -[0.01049205358708, -0.1279719653396], -[0.01573793090602, -0.127983886463], -[0.02098362883252, -0.1280005802492], -[0.02622908753105, -0.1280220509147], -[0.03147424713352, -0.1280483038849], -[0.03671904773149, -0.1280793457973], -[0.04196342936824, -0.1281151845058], -[0.04720733203121, -0.1281558290849], -[0.05245069564453, -0.1282012898352], -[0.05769346006173, -0.1282515782899], -[0.06293556505875, -0.1283067072214], -[0.06817695032723, -0.1283666906488], -[0.073417555468, -0.1284315438468], -[0.078657319985, -0.1285012833546], -[0.08389618327948, -0.128575926986], -[0.08913408464466, -0.1286554938402], -[0.09437096326075, -0.1287400043135], -[0.09960675819042, -0.1288294801119], -[0.1048414083748, -0.1289239442642], -[0.1100748526301, -0.1290234211365], -[0.1153070296444, -0.1291279364472], -[0.1205378779755, -0.1292375172832], -[0.1257673360493, -0.1293521921165], -[0.1309953421587, -0.1294719908228], -[0.136221834463, -0.1295969446995], -[0.141446750989, -0.1297270864866], -[0.1466700296317, -0.1298624503871], -[0.1518916081567, -0.1300030720888], -[0.1571114242031, -0.1301489887878], -[0.162329415288, -0.1303002392128], -[0.1675455188107, -0.1304568636495], -[0.1727596720596, -0.1306189039681], -[0.1779718122189, -0.1307864036503], -[0.1831818763772, -0.1309594078181], -[0.1883898015376, -0.1311379632643], -[0.193595524628, -0.1313221184832], -[0.1987989825141, -0.1315119237038], -[0.2040001120133, -0.1317074309232], -[0.2091988499097, -0.1319086939422], -[0.2143951329718, -0.1321157684017], -[0.2195888979711, -0.132328711821], -[0.2247800817027, -0.1325475836367], -[0.2299686210078, -0.132772445244], -[0.2351544527986, -0.1330033600391], -[0.2403375140848, -0.1332403934625], -[0.2455177420024, -0.1334836130449], -[0.2506950738451, -0.1337330884534], -[0.255869447098, -0.1339888915406], -[0.2610407994736, -0.1342510963938], -[0.2662090689512, -0.134519779387], -[0.2713741938184, -0.1347950192333], -[0.2765361127158, -0.1350768970402], -[0.2816947646853, -0.135365496365], -[0.2868500892207, -0.1356609032729], -[0.2920020263224, -0.1359632063961], -[0.2971505165562, -0.136272496994], -[0.3022955011142, -0.1365888690158], -[0.3074369218814, -0.1369124191638], -[0.3125747215053, -0.1372432469582], -[0.3177088434699, -0.1375814548034], -[0.3228392321749, -0.1379271480552], -[0.3279658330187, -0.1382804350896], -[0.3330885924868, -0.1386414273719], -[0.3382074582448, -0.1390102395275], -[0.3433223792371, -0.1393869894131], -[0.3484333057911, -0.1397717981884], -[0.3535401897265, -0.1401647903885], -[0.3586429844709, -0.1405660939961], -[0.363741645182, -0.1409758405146], -[0.3688361288747, -0.1413941650401], -[0.373926394556, -0.141821206333], -[0.3790124033663, -0.1422571068895], -[0.3840941187264, -0.1427020130109], -[0.3891715064936, -0.1431560748722], -[0.3942445351227, -0.1436194465885], -[0.3993131758363, -0.1440922862786], -[0.4043774028009, -0.1445747561265], -[0.4094371933115, -0.1450670224386], -[0.4144925279831, -0.1455692556976], -[0.4195433909504, -0.1460816306111], -[0.4245897700744, -0.1466043261558], -[0.4296316571566, -0.1471375256144], -[0.4346690481607, -0.1476814166065], -[0.4397019434412, -0.1482361911117], -[0.4447303479788, -0.1488020454841], -[0.4497542716224, -0.1493791804569], -[0.4547737293371, -0.1499678011367], -[0.4597887414578, -0.1505681169867], -[0.4647993339474, -0.1511803417966], -[0.4698055386597, -0.151804693639], -[0.4748073936047, -0.1524413948107], -[0.4798049432171, -0.1530906717584], -[0.4847982386255, -0.1537527549863], -[0.4897873379212, -0.1544278789455], -[0.494772306426, -0.1551162819043], -[0.4997532169565, -0.155818205796], -[0.5047301500833, -0.1565338960465], -[0.5097031943839, -0.1572636013774], -[0.5146724466859, -0.1580075735849], -[-0.5121047582121, -0.1535611866271], -[-0.5071259241101, -0.1528204327914], -[-0.5021428727291, -0.1520936349849], -[-0.4971561604654, -0.1513806939772], -[-0.4921657021087, -0.150681368575], -[-0.4871714200416, -0.1499954207322], -[-0.4821732440037, -0.1493226157339], -[-0.4771711108498, -0.1486627223597], -[-0.4721649643028, -0.1480155130263], -[-0.4671547547042, -0.1473807639114], -[-0.4621404387627, -0.1467582550579], -[-0.4571219793022, -0.146147770463], -[-0.4520993450114, -0.1455490981491], -[-0.4470725101944, -0.1449620302213], -[-0.4420414545248, -0.1443863629102], -[-0.4370061628034, -0.143821896602], -[-0.4319666247202, -0.1432684358569], -[-0.4269228346208, -0.1427257894166], -[-0.4218747912794, -0.1421937702018], -[-0.4168224976764, -0.1416721953008], -[-0.4117659607835, -0.1411608859501], -[-0.4067051913538, -0.1406596675078], -[-0.4016402037198, -0.1401683694199], -[-0.3965710155977, -0.1396868251816], -[-0.3914976478988, -0.1392148722929], -[-0.386420124547, -0.1387523522103], -[-0.381338472305, -0.1382991102936], -[-0.3762527206052, -0.1378549957507], -[-0.3711629013896, -0.1374198615785], -[-0.3660690489549, -0.136993564502], -[-0.3609711998048, -0.136575964911], -[-0.3558693925093, -0.136166926796], -[-0.3507636675695, -0.1357663176817], -[-0.3456540672892, -0.1353740085612], -[-0.3405406356527, -0.1349898738278], -[-0.3354234182078, -0.1346137912084], -[-0.3303024619556, -0.1342456416951], -[-0.3251778152444, -0.1338853094781], -[-0.3200495276705, -0.1335326818783], -[-0.3149176499828, -0.1331876492808], -[-0.3097822339936, -0.1328501050689], -[-0.3046433324929, -0.1325199455584], -[-0.2995009991686, -0.132197069934], -[-0.2943552885302, -0.1318813801854], -[-0.2892062558374, -0.1315727810453], -[-0.2840539570318, -0.1312711799281], -[-0.2788984486739, -0.1309764868704], -[-0.2737397878828, -0.1306886144721], -[-0.2685780322798, -0.1304074778394], -[-0.2634132399355, -0.130132994529], -[-0.25824546932, -0.1298650844932], -[-0.2530747792565, -0.1296036700273], -[-0.2479012288777, -0.129348675718], -[-0.242724877585, -0.1291000283929], -[-0.2375457850107, -0.1288576570718], -[-0.2323640109826, -0.1286214929197], -[-0.2271796154909, -0.1283914692009], -[-0.2219926586581, -0.1281675212344], -[-0.2168032007102, -0.1279495863508], -[-0.2116113019513, -0.1277376038512], -[-0.2064170227387, -0.1275315149667], -[-0.2012204234615, -0.1273312628194], -[-0.1960215645199, -0.1271367923855], -[-0.190820506307, -0.1269480504587], -[-0.1856173091917, -0.1267649856156], -[-0.1804120335037, -0.1265875481822], -[-0.1752047395196, -0.1264156902015], -[-0.1699954874509, -0.1262493654029], -[-0.1647843374328, -0.1260885291721], -[-0.1595713495149, -0.1259331385226], -[-0.1543565836528, -0.1257831520682], -[-0.1491400997004, -0.125638529997], -[-0.1439219574046, -0.1254992340463], -[-0.1387022163999, -0.1253652274781], -[-0.1334809362042, -0.1252364750567], -[-0.1282581762161, -0.1251129430264], -[-0.1230339957124, -0.1249945990907], -[-0.1178084538469, -0.1248814123927], -[-0.1125816096497, -0.1247733534959], -[-0.1073535220277, -0.1246703943662], -[-0.1021242497652, -0.1245725083551], -[-0.09689385152547, -0.1244796701837], -[-0.0916623858532, -0.1243918559272], -[-0.08642991117704, -0.1243090430008], -[-0.08119648581301, -0.1242312101463], -[-0.07596216796832, -0.1241583374192], -[-0.07072701574571, -0.1240904061773], -[-0.06549108714815, -0.1240273990695], -[-0.06025444008406, -0.1239693000258], -[-0.05501713237281, -0.1239160942477], -[-0.04977922175061, -0.1238677681997], -[-0.04454076587673, -0.1238243096017], -[-0.03930182233995, -0.1237857074212], -[-0.03406244866533, -0.1237519518678], -[-0.02882270232118, -0.1237230343869], -[-0.02358264072621, -0.1236989476554], -[-0.01834232125687, -0.1236796855766], -[-0.01310180125487, -0.1236652432777], -[-0.007861138034714, -0.1236556171064], -[-0.002620388891479, -0.123650804629], -[0.00262038889148, -0.123650804629], -[0.007861138034714, -0.1236556171064], -[0.01310180125487, -0.1236652432777], -[0.01834232125688, -0.1236796855766], -[0.02358264072622, -0.1236989476554], -[0.02882270232118, -0.1237230343869], -[0.03406244866533, -0.1237519518678], -[0.03930182233995, -0.1237857074212], -[0.04454076587673, -0.1238243096017], -[0.04977922175061, -0.1238677681997], -[0.05501713237281, -0.1239160942477], -[0.06025444008406, -0.1239693000258], -[0.06549108714815, -0.1240273990695], -[0.07072701574571, -0.1240904061773], -[0.07596216796832, -0.1241583374192], -[0.08119648581301, -0.1242312101463], -[0.08642991117704, -0.1243090430008], -[0.0916623858532, -0.1243918559272], -[0.09689385152547, -0.1244796701837], -[0.1021242497652, -0.1245725083551], -[0.1073535220277, -0.1246703943662], -[0.1125816096497, -0.1247733534959], -[0.1178084538469, -0.1248814123927], -[0.1230339957124, -0.1249945990907], -[0.1282581762161, -0.1251129430264], -[0.1334809362042, -0.1252364750567], -[0.1387022163999, -0.1253652274781], -[0.1439219574046, -0.1254992340463], -[0.1491400997004, -0.125638529997], -[0.1543565836528, -0.1257831520682], -[0.159571349515, -0.1259331385225], -[0.1647843374328, -0.1260885291721], -[0.1699954874509, -0.1262493654029], -[0.1752047395196, -0.1264156902015], -[0.1804120335037, -0.1265875481822], -[0.1856173091917, -0.1267649856156], -[0.190820506307, -0.1269480504587], -[0.1960215645199, -0.1271367923855], -[0.2012204234615, -0.1273312628194], -[0.2064170227387, -0.1275315149667], -[0.2116113019513, -0.1277376038512], -[0.2168032007102, -0.1279495863508], -[0.2219926586581, -0.1281675212344], -[0.2271796154909, -0.1283914692009], -[0.2323640109826, -0.1286214929197], -[0.2375457850107, -0.1288576570718], -[0.242724877585, -0.1291000283929], -[0.2479012288777, -0.129348675718], -[0.2530747792565, -0.1296036700273], -[0.25824546932, -0.1298650844932], -[0.2634132399355, -0.130132994529], -[0.2685780322798, -0.1304074778394], -[0.2737397878828, -0.1306886144721], -[0.2788984486739, -0.1309764868704], -[0.2840539570318, -0.1312711799281], -[0.2892062558374, -0.1315727810453], -[0.2943552885302, -0.1318813801854], -[0.2995009991686, -0.132197069934], -[0.3046433324929, -0.1325199455584], -[0.3097822339936, -0.1328501050689], -[0.3149176499828, -0.1331876492808], -[0.3200495276705, -0.1335326818783], -[0.3251778152444, -0.1338853094781], -[0.3303024619556, -0.1342456416951], -[0.3354234182078, -0.1346137912084], -[0.3405406356527, -0.1349898738278], -[0.3456540672892, -0.1353740085612], -[0.3507636675695, -0.1357663176817], -[0.3558693925093, -0.136166926796], -[0.3609711998048, -0.136575964911], -[0.3660690489549, -0.136993564502], -[0.3711629013896, -0.1374198615785], -[0.3762527206052, -0.1378549957507], -[0.381338472305, -0.1382991102936], -[0.386420124547, -0.1387523522103], -[0.3914976478988, -0.1392148722929], -[0.3965710155978, -0.1396868251816], -[0.4016402037198, -0.1401683694198], -[0.4067051913538, -0.1406596675078], -[0.4117659607835, -0.1411608859501], -[0.4168224976764, -0.1416721953008], -[0.4218747912794, -0.1421937702018], -[0.4269228346208, -0.1427257894166], -[0.4319666247202, -0.1432684358569], -[0.4370061628034, -0.143821896602], -[0.4420414545248, -0.1443863629102], -[0.4470725101944, -0.1449620302213], -[0.4520993450114, -0.1455490981491], -[0.4571219793022, -0.146147770463], -[0.4621404387627, -0.1467582550579], -[0.4671547547042, -0.1473807639114], -[0.4721649643028, -0.1480155130263], -[0.4771711108498, -0.1486627223597], -[0.4821732440037, -0.1493226157339], -[0.4871714200416, -0.1499954207322], -[0.4921657021087, -0.150681368575], -[0.4971561604654, -0.1513806939772], -[0.5021428727291, -0.1520936349849], -[0.5071259241101, -0.1528204327914], -[0.5121047582104, -0.1535611866708], -[-0.5095299752866, -0.1491016000428], -[-0.5045412215028, -0.1483639260116], -[-0.4995484996929, -0.1476401658996], -[-0.4945523404034, -0.1469301085378], -[-0.4895526616125, -0.146233519925], -[-0.4845493885008, -0.1455501690672], -[-0.4795424532314, -0.1448798281501], -[-0.4745317947241, -0.1442222726933], -[-0.4695173584244, -0.143577281685], -[-0.4644990960703, -0.142944637699], -[-0.4594769654571, -0.1423241269945], -[-0.4544509302018, -0.1417155396004], -[-0.4494209595081, -0.1411186693845], -[-0.4443870279334, -0.1405333141086], -[-0.4393491151576, -0.139959275471], -[-0.4343072057556, -0.1393963591365], -[-0.429261288974, -0.138844374756], -[-0.4242113585113, -0.1383031359752], -[-0.4191574123037, -0.1377724604345], -[-0.4140994523165, -0.1372521697604], -[-0.40903748434, -0.1367420895492], -[-0.4039715177927, -0.1362420493437], -[-0.3989015655296, -0.1357518826037], -[-0.393827643657, -0.1352714266712], -[-0.3887497713537, -0.1348005227305], -[-0.383667970699, -0.1343390157644], -[-0.3785822665061, -0.1338867545057], -[-0.3734926861629, -0.1334435913867], -[-0.3683992594789, -0.1330093824851], -[-0.3633020185376, -0.1325839874676], -[-0.3582009975566, -0.1321672695321], -[-0.3530962327523, -0.1317590953479], -[-0.3479877622114, -0.1313593349946], -[-0.3428756257683, -0.1309678619003], -[-0.3377598648874, -0.1305845527793], -[-0.3326405225519, -0.1302092875688], -[-0.3275176431573, -0.1298419493664], -[-0.3223912724107, -0.1294824243667], -[-0.3172614572342, -0.1291306017984], -[-0.3121282456743, -0.1287863738625], -[-0.3069916868151, -0.1284496356698], -[-0.3018518306967, -0.12812028518], -[-0.2967087282375, -0.1277982231417], -[-0.2915624311612, -0.1274833530321], -[-0.2864129919271, -0.1271755809992], -[-0.281260463665, -0.1268748158038], -[-0.2761049001136, -0.1265809687638], -[-0.2709463555622, -0.1262939536983], -[-0.2657848847965, -0.1260136868739], -[-0.2606205430468, -0.1257400869524], -[-0.2554533859398, -0.1254730749386], -[-0.2502834694541, -0.125212574131], -[-0.2451108498767, -0.1249585100723], -[-0.2399355837647, -0.1247108105024], -[-0.2347577279073, -0.1244694053122], -[-0.2295773392921, -0.1242342264986], -[-0.2243944750726, -0.1240052081215], -[-0.2192091925386, -0.1237822862614], -[-0.2140215490888, -0.1235653989788], -[-0.208831602205, -0.1233544862746], -[-0.2036394094288, -0.1231494900523], -[-0.1984450283398, -0.122950354081], -[-0.193248516536, -0.1227570239599], -[-0.1880499316155, -0.1225694470839], -[-0.1828493311602, -0.122387572611], -[-0.1776467727205, -0.1222113514299], -[-0.1724423138022, -0.1220407361299], -[-0.1672360118546, -0.1218756809714], -[-0.1620279242592, -0.1217161418572], -[-0.1568181083207, -0.121562076306], -[-0.1516066212587, -0.1214134434261], -[-0.1463935202005, -0.1212702038904], -[-0.1411788621751, -0.1211323199125], -[-0.1359627041083, -0.1209997552244], -[-0.1307451028187, -0.1208724750541], -[-0.1255261150143, -0.1207504461052], -[-0.1203057972907, -0.1206336365368], -[-0.1150842061295, -0.1205220159451], -[-0.1098613978977, -0.1204155553451], -[-0.1046374288477, -0.1203142271538], -[-0.0994123551184, -0.1202180051739], -[-0.09418623273642, -0.1201268645792], -[-0.08895911761819, -0.1200407818994], -[-0.08373106557263, -0.1199597350072], -[-0.07850213230432, -0.1198837031056], -[-0.07327237341719, -0.1198126667156], -[-0.0680418444186, -0.1197466076657], -[-0.06281060072395, -0.1196855090813], -[-0.05757869766161, -0.1196293553751], -[-0.05234619047828, -0.1195781322387], -[-0.04711313434462, -0.1195318266343], -[-0.04187958436124, -0.1194904267873], -[-0.0366455955649, -0.1194539221803], -[-0.03141122293505, -0.1194223035466], -[-0.02617652140049, -0.1193955628655], -[-0.02094154584623, -0.1193736933577], -[-0.01570635112063, -0.1193566894816], -[-0.01047099204248, -0.1193445469302], -[-0.005235523408371, -0.1193372626287], -[-1.210174265652e-15, -0.1193348347331], -[0.005235523408371, -0.1193372626287], -[0.01047099204248, -0.1193445469302], -[0.01570635112063, -0.1193566894816], -[0.02094154584623, -0.1193736933577], -[0.02617652140049, -0.1193955628655], -[0.03141122293505, -0.1194223035466], -[0.03664559556491, -0.1194539221803], -[0.04187958436124, -0.1194904267873], -[0.04711313434462, -0.1195318266343], -[0.05234619047828, -0.1195781322387], -[0.05757869766161, -0.1196293553751], -[0.06281060072395, -0.1196855090813], -[0.0680418444186, -0.1197466076657], -[0.07327237341719, -0.1198126667156], -[0.07850213230432, -0.1198837031056], -[0.08373106557263, -0.1199597350072], -[0.08895911761819, -0.1200407818994], -[0.09418623273642, -0.1201268645792], -[0.0994123551184, -0.1202180051739], -[0.1046374288477, -0.1203142271538], -[0.1098613978976, -0.1204155553451], -[0.1150842061295, -0.1205220159451], -[0.1203057972907, -0.1206336365368], -[0.1255261150143, -0.1207504461052], -[0.1307451028187, -0.1208724750541], -[0.1359627041083, -0.1209997552244], -[0.1411788621751, -0.1211323199125], -[0.1463935202005, -0.1212702038904], -[0.1516066212587, -0.1214134434261], -[0.1568181083207, -0.121562076306], -[0.1620279242592, -0.1217161418572], -[0.1672360118546, -0.1218756809714], -[0.1724423138022, -0.1220407361299], -[0.1776467727205, -0.1222113514299], -[0.1828493311602, -0.122387572611], -[0.1880499316155, -0.1225694470839], -[0.193248516536, -0.1227570239599], -[0.1984450283398, -0.122950354081], -[0.2036394094288, -0.1231494900523], -[0.208831602205, -0.1233544862746], -[0.2140215490888, -0.1235653989788], -[0.2192091925386, -0.1237822862614], -[0.2243944750726, -0.1240052081215], -[0.2295773392921, -0.1242342264986], -[0.2347577279073, -0.1244694053122], -[0.2399355837647, -0.1247108105024], -[0.2451108498767, -0.1249585100723], -[0.2502834694541, -0.125212574131], -[0.2554533859398, -0.1254730749386], -[0.2606205430468, -0.1257400869524], -[0.2657848847965, -0.1260136868739], -[0.2709463555622, -0.1262939536983], -[0.2761049001136, -0.1265809687638], -[0.281260463665, -0.1268748158038], -[0.2864129919271, -0.1271755809992], -[0.2915624311612, -0.1274833530321], -[0.2967087282375, -0.1277982231417], -[0.3018518306967, -0.12812028518], -[0.3069916868151, -0.1284496356698], -[0.3121282456743, -0.1287863738625], -[0.3172614572342, -0.1291306017984], -[0.3223912724107, -0.1294824243667], -[0.3275176431573, -0.1298419493664], -[0.3326405225519, -0.1302092875688], -[0.3377598648874, -0.1305845527793], -[0.3428756257683, -0.1309678619003], -[0.3479877622114, -0.1313593349946], -[0.3530962327523, -0.1317590953479], -[0.3582009975566, -0.1321672695321], -[0.3633020185376, -0.1325839874676], -[0.3683992594789, -0.1330093824851], -[0.3734926861629, -0.1334435913867], -[0.3785822665061, -0.1338867545057], -[0.383667970699, -0.1343390157644], -[0.3887497713537, -0.1348005227305], -[0.393827643657, -0.1352714266712], -[0.3989015655296, -0.1357518826037], -[0.4039715177927, -0.1362420493437], -[0.4090374843401, -0.1367420895492], -[0.4140994523165, -0.1372521697604], -[0.4191574123037, -0.1377724604345], -[0.4242113585113, -0.1383031359752], -[0.429261288974, -0.138844374756], -[0.4343072057556, -0.1393963591365], -[0.4393491151576, -0.139959275471], -[0.4443870279334, -0.1405333141086], -[0.4494209595081, -0.1411186693845], -[0.4544509302018, -0.1417155396004], -[0.4594769654571, -0.1423241269945], -[0.4644990960703, -0.142944637699], -[0.4695173584244, -0.143577281685], -[0.4745317947241, -0.1442222726933], -[0.4795424532314, -0.1448798281501], -[0.4845493885008, -0.1455501690672], -[0.4895526616125, -0.146233519925], -[0.4945523404034, -0.1469301085378], -[0.4995484996929, -0.1476401658996], -[0.5045412215028, -0.1483639260116], -[0.50953059527, -0.1491016256878], -[-0.5069476482163, -0.1446283404431], -[-0.5019492420229, -0.1438943618411], -[-0.4969471786223, -0.1431737670145], -[-0.4919418968141, -0.1424667249048], -[-0.4869333175937, -0.1417730083871], -[-0.4819213687909, -0.141092393211], -[-0.4769059848646, -0.1404246581639], -[-0.4718871066909, -0.1397695852154], -[-0.4668646813476, -0.1391269596452], -[-0.461838661896, -0.1384965701539], -[-0.4568090071606, -0.1378782089579], -[-0.4517756815083, -0.1372716718704], -[-0.4467386546284, -0.1366767583673], -[-0.4416979013139, -0.1360932716417], -[-0.4366534012445, -0.1355210186443], -[-0.431605138773, -0.1349598101147], -[-0.4265531027148, -0.1344094606009], -[-0.4214972861419, -0.1338697884697], -[-0.4164376861804, -0.1333406159086], -[-0.4113743038142, -0.1328217689195], -[-0.4063071436923, -0.1323130773051], -[-0.4012362139427, -0.1318143746489], -[-0.3961615259914, -0.1313254982895], -[-0.3910830943868, -0.1308462892893], -[-0.3860009366309, -0.1303765923986], -[-0.3809150730151, -0.1299162560159], -[-0.3758255264632, -0.1294651321443], -[-0.3707323223794, -0.1290230763445], -[-0.3656354885028, -0.1285899476859], -[-0.3605350547672, -0.1281656086945], -[-0.3554310531671, -0.1277499252996], -[-0.3503235176293, -0.1273427667785], -[-0.3452124838899, -0.1269440057003], -[-0.3400979893768, -0.126553517868], -[-0.3349800730981, -0.1261711822613], -[-0.3298587755343, -0.1257968809773], -[-0.3247341385373, -0.1254304991723], -[-0.3196062052331, -0.1250719250028], -[-0.3144750199296, -0.1247210495669], -[-0.3093406280291, -0.1243777668459], -[-0.3042030759451, -0.1240419736468], -[-0.2990624110236, -0.1237135695443], -[-0.2939186814684, -0.123392456825], -[-0.2887719362704, -0.1230785404308], -[-0.2836222251407, -0.1227717279046], -[-0.2784695984476, -0.1224719293356], -[-0.2733141071571, -0.122179057307], -[-0.2681558027766, -0.1218930268434], -[-0.2629947373021, -0.1216137553604], -[-0.2578309631682, -0.1213411626148], -[-0.252664533202, -0.1210751706558], -[-0.2474955005787, -0.1208157037782], -[-0.2423239187807, -0.120562688476], -[-0.2371498415594, -0.1203160533976], -[-0.2319733228987, -0.1200757293024], -[-0.2267944169825, -0.1198416490183], -[-0.2216131781623, -0.1196137474005], -[-0.2164296609293, -0.1193919612921], -[-0.2112439198871, -0.1191762294852], -[-0.2060560097266, -0.1189664926838], -[-0.2008659852035, -0.1187626934674], -[-0.195673901117, -0.1185647762564], -[-0.1904798122905, -0.1183726872785], -[-0.1852837735538, -0.1181863745359], -[-0.1800858397269, -0.1180057877744], -[-0.1748860656059, -0.1178308784528], -[-0.169684505949, -0.1176615997144], -[-0.1644812154657, -0.1174979063586], -[-0.1592762488053, -0.1173397548147], -[-0.1540696605482, -0.1171871031156], -[-0.1488615051979, -0.1170399108736], -[-0.1436518371735, -0.1168981392564], -[-0.1384407108043, -0.1167617509649], -[-0.1332281803245, -0.1166307102113], -[-0.1280142998694, -0.1165049826987], -[-0.1227991234725, -0.1163845356011], -[-0.1175827050627, -0.116269337545], -[-0.1123650984636, -0.1161593585915], -[-0.1071463573924, -0.1160545702193], -[-0.10192653546, -0.1159549453087], -[-0.09670568617189, -0.1158604581263], -[-0.09148386292931, -0.1157710843108], -[-0.08626111903141, -0.1156868008597], -[-0.08103750767763, -0.1156075861159], -[-0.07581308197083, -0.1155334197566], -[-0.07058789492073, -0.1154642827817], -[-0.06536199944794, -0.1154001575034], -[-0.06013544838833, -0.1153410275368], -[-0.05490829449783, -0.1152868777909], -[-0.04968059045753, -0.1152376944607], -[-0.04445238887912, -0.1151934650193], -[-0.0392237423107, -0.1151541782116], -[-0.0339947032427, -0.115119824048], -[-0.02876532411418, -0.1150903937992], -[-0.02353565731925, -0.1150658799916], -[-0.01830575521368, -0.1150462764032], -[-0.01307567012168, -0.1150315780603], -[-0.007845454342793, -0.1150217812352], -[-0.002615160158874, -0.1150168834435], -[0.002615160158874, -0.1150168834435], -[0.007845454342793, -0.1150217812352], -[0.01307567012168, -0.1150315780603], -[0.01830575521368, -0.1150462764032], -[0.02353565731925, -0.1150658799916], -[0.02876532411418, -0.1150903937992], -[0.0339947032427, -0.115119824048], -[0.0392237423107, -0.1151541782116], -[0.04445238887912, -0.1151934650193], -[0.04968059045753, -0.1152376944607], -[0.05490829449783, -0.115286877791], -[0.06013544838833, -0.1153410275368], -[0.06536199944794, -0.1154001575034], -[0.07058789492073, -0.1154642827817], -[0.07581308197083, -0.1155334197566], -[0.08103750767763, -0.1156075861159], -[0.08626111903141, -0.1156868008597], -[0.09148386292931, -0.1157710843108], -[0.09670568617189, -0.1158604581263], -[0.10192653546, -0.1159549453087], -[0.1071463573924, -0.1160545702193], -[0.1123650984636, -0.1161593585915], -[0.1175827050627, -0.116269337545], -[0.1227991234725, -0.1163845356011], -[0.1280142998694, -0.1165049826987], -[0.1332281803245, -0.1166307102113], -[0.1384407108043, -0.1167617509649], -[0.1436518371735, -0.1168981392564], -[0.1488615051979, -0.1170399108736], -[0.1540696605482, -0.1171871031156], -[0.1592762488053, -0.1173397548147], -[0.1644812154657, -0.1174979063586], -[0.169684505949, -0.1176615997144], -[0.1748860656059, -0.1178308784528], -[0.1800858397269, -0.1180057877744], -[0.1852837735538, -0.1181863745359], -[0.1904798122905, -0.1183726872785], -[0.195673901117, -0.1185647762564], -[0.2008659852035, -0.1187626934674], -[0.2060560097266, -0.1189664926838], -[0.2112439198871, -0.1191762294852], -[0.2164296609293, -0.1193919612921], -[0.2216131781623, -0.1196137474005], -[0.2267944169825, -0.1198416490183], -[0.2319733228987, -0.1200757293024], -[0.2371498415594, -0.1203160533976], -[0.2423239187807, -0.120562688476], -[0.2474955005787, -0.1208157037782], -[0.252664533202, -0.1210751706558], -[0.2578309631682, -0.1213411626148], -[0.2629947373021, -0.1216137553604], -[0.2681558027766, -0.1218930268434], -[0.2733141071571, -0.122179057307], -[0.2784695984476, -0.1224719293356], -[0.2836222251407, -0.1227717279046], -[0.2887719362704, -0.1230785404308], -[0.2939186814684, -0.123392456825], -[0.2990624110236, -0.1237135695443], -[0.3042030759451, -0.1240419736468], -[0.3093406280291, -0.1243777668459], -[0.3144750199296, -0.1247210495669], -[0.3196062052331, -0.1250719250028], -[0.3247341385373, -0.1254304991723], -[0.3298587755343, -0.1257968809773], -[0.3349800730981, -0.1261711822613], -[0.3400979893768, -0.126553517868], -[0.3452124838899, -0.1269440057003], -[0.3503235176293, -0.1273427667785], -[0.3554310531671, -0.1277499252996], -[0.3605350547672, -0.1281656086945], -[0.3656354885028, -0.1285899476859], -[0.3707323223794, -0.1290230763445], -[0.3758255264632, -0.1294651321443], -[0.3809150730151, -0.1299162560159], -[0.3860009366309, -0.1303765923986], -[0.3910830943868, -0.1308462892893], -[0.3961615259914, -0.1313254982895], -[0.4012362139427, -0.1318143746489], -[0.4063071436923, -0.1323130773051], -[0.4113743038142, -0.1328217689195], -[0.4164376861804, -0.1333406159086], -[0.4214972861419, -0.1338697884697], -[0.4265531027148, -0.1344094606009], -[0.431605138773, -0.1349598101147], -[0.4366534012445, -0.1355210186443], -[0.4416979013139, -0.1360932716417], -[0.4467386546284, -0.1366767583673], -[0.4517756815083, -0.1372716718704], -[0.4568090071606, -0.1378782089579], -[0.461838661896, -0.1384965701539], -[0.4668646813476, -0.1391269596452], -[0.4718871066909, -0.1397695852154], -[0.4769059848646, -0.1404246581639], -[0.4819213687909, -0.141092393211], -[0.4869333175937, -0.1417730083871], -[0.4919418968141, -0.1424667249048], -[0.4969471786223, -0.1431737670145], -[0.5019492420229, -0.1438943618411], -[0.5069476482161, -0.1446283404714], -[-0.5043577299024, -0.1401426224486], -[-0.4993501380044, -0.1394120150721], -[-0.4943390544071, -0.1386947106261], -[-0.489324967337, -0.1379908126744], -[-0.4843078006433, -0.1373001006704], -[-0.4792874846622, -0.1366223568178], -[-0.4742639560242, -0.135957366223], -[-0.4692371574564, -0.1353049170325], -[-0.4642070375805, -0.1346648005533], -[-0.4591735507081, -0.1340368113577], -[-0.4541366566347, -0.1334207473748], -[-0.4490963204327, -0.1328164099668], -[-0.4440525122451, -0.1322236039934], -[-0.4390052070797, -0.1316421378638], -[-0.4339543846058, -0.1310718235772], -[-0.4289000289532, -0.1305124767533], -[-0.4238421285143, -0.1299639166528], -[-0.4187806757496, -0.1294259661888], -[-0.4137156669978, -0.1288984519303], -[-0.4086471022895, -0.1283812040985], -[-0.4035749851661, -0.1278740565553], -[-0.3984993225037, -0.1273768467865], -[-0.3934201243415, -0.1268894158793], -[-0.3883374037164, -0.1264116084941], -[-0.3832511765019, -0.1259432728328], -[-0.3781614612535, -0.1254842606029], -[-0.3730682790588, -0.1250344269771], -[-0.3679716533933, -0.1245936305518], -[-0.3628716099821, -0.1241617333007], -[-0.3577681766663, -0.1237386005286], -[-0.3526613832755, -0.123324100821], -[-0.3475512615049, -0.1229181059937], -[-0.3424378447983, -0.1225204910406], -[-0.3373211682358, -0.1221311340807], -[-0.3322012684264, -0.1217499163038], -[-0.3270781834058, -0.1213767219167], -[-0.3219519525392, -0.1210114380879], -[-0.3168226164274, -0.1206539548933], -[-0.3116902168195, -0.1203041652615], -[-0.3065547965277, -0.1199619649192], -[-0.3014163993485, -0.1196272523367], -[-0.2962750699857, -0.1192999286752], -[-0.2911308539795, -0.1189798977328], -[-0.285983797638, -0.1186670658925], -[-0.2808339479727, -0.118361342071], -[-0.2756813526377, -0.1180626376673], -[-0.2705260598723, -0.1177708665133], -[-0.2653681184465, -0.1174859448246], -[-0.2602075776102, -0.1172077911533], -[-0.2550444870447, -0.1169363263403], -[-0.2498788968177, -0.1166714734705], -[-0.2447108573411, -0.1164131578274], -[-0.2395404193305, -0.1161613068502], -[-0.2343676337686, -0.1159158500916], -[-0.2291925518701, -0.1156767191758], -[-0.2240152250491, -0.1154438477597], -[-0.2188357048888, -0.1152171714932], -[-0.2136540431136, -0.1149966279819], -[-0.2084702915628, -0.1147821567508], -[-0.2032845021664, -0.1145736992087], -[-0.1980967269227, -0.1143711986144], -[-0.192907017878, -0.1141746000433], -[-0.1877154271075, -0.113983850356], -[-0.1825220066982, -0.1137988981672], -[-0.1773268087329, -0.1136196938163], -[-0.1721298852763, -0.1134461893389], -[-0.166931288362, -0.1132783384392], -[-0.1617310699809, -0.1131160964637], -[-0.156529282071, -0.1129594203756], -[-0.1513259765082, -0.112808268731], -[-0.1461212050986, -0.1126626016552], -[-0.1409150195715, -0.1125223808202], -[-0.1357074715735, -0.1123875694238], -[-0.1304986126641, -0.1122581321689], -[-0.1252884943111, -0.1121340352438], -[-0.1200771678883, -0.1120152463042], -[-0.1148646846726, -0.1119017344548], -[-0.1096510958432, -0.111793470233], -[-0.1044364524805, -0.1116904255929], -[-0.09922080556624, -0.1115925738897], -[-0.09400420598441, -0.111499889866], -[-0.08878670452215, -0.1114123496378], -[-0.08356835187188, -0.1113299306824], -[-0.07834919863364, -0.1112526118256], -[-0.07312929531805, -0.1111803732315], -[-0.06790869234964, -0.1111131963912], -[-0.06268744007077, -0.1110510641137], -[-0.05746558874573, -0.1109939605168], -[-0.05224318856552, -0.1109418710187], -[-0.04702028965265, -0.1108947823306], -[-0.04179694206647, -0.1108526824497], -[-0.03657319580865, -0.110815560653], -[-0.03134910082905, -0.1107834074922], -[-0.02612470703162, -0.1107562147881], -[-0.0209000642807, -0.1107339756273], -[-0.01567522240729, -0.1107166843578], -[-0.01045023121561, -0.1107043365869], -[-0.005225140489675, -0.1106969291784], -[-2.315254450339e-14, -0.1106944602512], -[0.005225140489675, -0.1106969291784], -[0.01045023121561, -0.1107043365869], -[0.01567522240729, -0.1107166843578], -[0.0209000642807, -0.1107339756273], -[0.02612470703162, -0.1107562147881], -[0.03134910082905, -0.1107834074922], -[0.03657319580865, -0.110815560653], -[0.04179694206647, -0.1108526824497], -[0.04702028965265, -0.1108947823306], -[0.05224318856552, -0.1109418710187], -[0.05746558874573, -0.1109939605168], -[0.06268744007075, -0.1110510641137], -[0.06790869234964, -0.1111131963912], -[0.07312929531805, -0.1111803732315], -[0.07834919863364, -0.1112526118256], -[0.08356835187188, -0.1113299306824], -[0.08878670452215, -0.1114123496378], -[0.09400420598441, -0.111499889866], -[0.09922080556625, -0.1115925738897], -[0.1044364524805, -0.1116904255929], -[0.1096510958432, -0.111793470233], -[0.1148646846726, -0.1119017344548], -[0.1200771678883, -0.1120152463042], -[0.1252884943111, -0.1121340352438], -[0.1304986126641, -0.1122581321689], -[0.1357074715735, -0.1123875694238], -[0.1409150195715, -0.1125223808202], -[0.1461212050986, -0.1126626016552], -[0.1513259765082, -0.112808268731], -[0.156529282071, -0.1129594203756], -[0.1617310699809, -0.1131160964637], -[0.166931288362, -0.1132783384392], -[0.1721298852763, -0.1134461893389], -[0.1773268087329, -0.1136196938163], -[0.1825220066982, -0.1137988981672], -[0.1877154271075, -0.113983850356], -[0.192907017878, -0.1141746000433], -[0.1980967269227, -0.1143711986144], -[0.2032845021664, -0.1145736992087], -[0.2084702915628, -0.1147821567508], -[0.2136540431136, -0.1149966279819], -[0.2188357048888, -0.1152171714932], -[0.2240152250491, -0.1154438477597], -[0.2291925518701, -0.1156767191758], -[0.2343676337686, -0.1159158500916], -[0.2395404193305, -0.1161613068502], -[0.2447108573411, -0.1164131578274], -[0.2498788968177, -0.1166714734705], -[0.2550444870447, -0.1169363263403], -[0.2602075776102, -0.1172077911533], -[0.2653681184465, -0.1174859448246], -[0.2705260598723, -0.1177708665133], -[0.2756813526377, -0.1180626376673], -[0.2808339479727, -0.118361342071], -[0.285983797638, -0.1186670658925], -[0.2911308539795, -0.1189798977328], -[0.2962750699857, -0.1192999286752], -[0.3014163993485, -0.1196272523367], -[0.3065547965277, -0.1199619649192], -[0.3116902168195, -0.1203041652615], -[0.3168226164274, -0.1206539548933], -[0.3219519525392, -0.1210114380879], -[0.3270781834058, -0.1213767219167], -[0.3322012684264, -0.1217499163039], -[0.3373211682358, -0.1221311340807], -[0.3424378447983, -0.1225204910406], -[0.3475512615049, -0.1229181059937], -[0.3526613832755, -0.123324100821], -[0.3577681766663, -0.1237386005286], -[0.3628716099821, -0.1241617333007], -[0.3679716533933, -0.1245936305518], -[0.3730682790588, -0.1250344269771], -[0.3781614612535, -0.1254842606029], -[0.3832511765019, -0.1259432728328], -[0.3883374037164, -0.1264116084941], -[0.3934201243415, -0.1268894158793], -[0.3984993225037, -0.1273768467865], -[0.4035749851661, -0.1278740565553], -[0.4086471022895, -0.1283812040985], -[0.4137156669978, -0.1288984519303], -[0.4187806757496, -0.1294259661888], -[0.4238421285143, -0.1299639166528], -[0.4289000289532, -0.1305124767533], -[0.4339543846058, -0.1310718235772], -[0.4390052070797, -0.1316421378638], -[0.4440525122451, -0.1322236039934], -[0.4490963204327, -0.1328164099668], -[0.4541366566347, -0.1334207473748], -[0.4591735507081, -0.1340368113577], -[0.4642070375805, -0.1346648005533], -[0.4692371574564, -0.1353049170325], -[0.4742639560242, -0.135957366223], -[0.4792874846622, -0.1366223568178], -[0.4843078006433, -0.1373001006704], -[0.489324967337, -0.1379908126744], -[0.4943390544071, -0.1386947106261], -[0.4993501380044, -0.1394120150721], -[0.5043577299025, -0.1401426224794], -[-0.5017605375235, -0.1356443506623], -[-0.4967440588066, -0.1349171547872], -[-0.4917242693086, -0.1342032633987], -[-0.4867016873155, -0.133502635899], -[-0.4816762393743, -0.1328150580402], -[-0.4766478581899, -0.1321403182059], -[-0.4716164824452, -0.1314782075556], -[-0.4665820566152, -0.1308285201543], -[-0.4615445307783, -0.130191053086], -[-0.4565038604246, -0.1295656065544], -[-0.4514600062621, -0.1289519839686], -[-0.4464129340228, -0.1283499920173], -[-0.4413626142691, -0.1277594407305], -[-0.4363090222004, -0.1271801435295], -[-0.4312521374622, -0.1266119172672], -[-0.4261919439567, -0.126054582258], -[-0.4211284296567, -0.1255079622989], -[-0.4160615864223, -0.1249718846822], -[-0.4109914098218, -0.1244461802002], -[-0.405917898956, -0.1239306831433], -[-0.400841056287, -0.1234252312912], -[-0.3957608874718, -0.1229296658987], -[-0.3906774012001, -0.1224438316758], -[-0.385590609037, -0.1219675767631], -[-0.3805005252715, -0.1215007527034], -[-0.3754071667684, -0.1210432144089], -[-0.370310552827, -0.1205948201254], -[-0.3652107050439, -0.1201554313933], -[-0.3601076471808, -0.1197249130066], -[-0.3550014050383, -0.1193031329693], -[-0.3498920063333, -0.1188899624497], -[-0.3447794805828, -0.118485275734], -[-0.3396638589915, -0.1180889501776], -[-0.3345451743449, -0.1177008661564], -[-0.3294234609065, -0.1173209070163], -[-0.32429875432, -0.1169489590233], -[-0.3191710915159, -0.1165849113125], -[-0.3140405106224, -0.1162286558367], -[-0.3089070508803, -0.1158800873162], -[-0.3037707525628, -0.1155391031871], -[-0.2986316568981, -0.1152056035514], -[-0.2934898059969, -0.1148794911265], -[-0.2883452427833, -0.1145606711958], -[-0.283198010929, -0.1142490515594], -[-0.2780481547912, -0.1139445424859], -[-0.2728957193543, -0.1136470566647], -[-0.2677407501739, -0.1133565091594], -[-0.2625832933247, -0.1130728173615], -[-0.2574233953512, -0.1127959009461], -[-0.252261103221, -0.1125256818272], -[-0.2470964642812, -0.1122620841149], -[-0.2419295262171, -0.1120050340739], -[-0.2367603370141, -0.1117544600816], -[-0.231588944921, -0.1115102925893], -[-0.2264153984168, -0.1112724640826], -[-0.2212397461788, -0.1110409090442], -[-0.2160620370533, -0.1108155639168], -[-0.2108823200283, -0.1105963670682], -[-0.2057006442084, -0.1103832587565], -[-0.2005170587906, -0.1101761810968], -[-0.1953316130434, -0.109975078029], -[-0.1901443562864, -0.1097798952868], -[-0.1849553378719, -0.1095905803675], -[-0.1797646071682, -0.1094070825027], -[-0.1745722135445, -0.1092293526309], -[-0.1693782063566, -0.1090573433699], -[-0.1641826349348, -0.1088910089915], -[-0.1589855485724, -0.1087303053958], -[-0.1537869965157, -0.1085751900881], -[-0.1485870279553, -0.1084256221553], -[-0.1433856920181, -0.1082815622442], -[-0.1381830377612, -0.10814297254], -[-0.1329791141653, -0.1080098167466], -[-0.1277739701308, -0.1078820600671], -[-0.1225676544738, -0.1077596691855], -[-0.1173602159227, -0.1076426122489], -[-0.1121517031164, -0.1075308588511], -[-0.1069421646031, -0.1074243800168], -[-0.1017316488392, -0.1073231481861], -[-0.09652020418938, -0.107227137201], -[-0.09130787892747, -0.1071363222912], -[-0.08609472123754, -0.1070506800622], -[-0.08088077921569, -0.1069701884826], -[-0.07566610087245, -0.1068948268734], -[-0.07045073413554, -0.1068245758975], -[-0.06523472685317, -0.10675941755], -[-0.0600181267978, -0.1066993351489], -[-0.05480098167011, -0.1066443133271], -[-0.04958333910356, -0.1065943380244], -[-0.04436524666911, -0.106549396481], -[-0.0391467518803, -0.1065094772308], -[-0.0339279021986, -0.1064745700957], -[-0.02870874503899, -0.1064446661809], -[-0.02348932777571, -0.1064197578704], -[-0.01826969774828, -0.106399838823], -[-0.01304990226753, -0.1063849039697], -[-0.007829988621946, -0.1063749495109], -[-0.002610004083897, -0.1063699729143], -[0.002610004083897, -0.1063699729143], -[0.007829988621946, -0.1063749495109], -[0.01304990226753, -0.1063849039698], -[0.01826969774828, -0.106399838823], -[0.02348932777571, -0.1064197578704], -[0.02870874503899, -0.1064446661809], -[0.0339279021986, -0.1064745700957], -[0.0391467518803, -0.1065094772308], -[0.04436524666911, -0.106549396481], -[0.04958333910356, -0.1065943380244], -[0.05480098167011, -0.1066443133271], -[0.0600181267978, -0.1066993351489], -[0.06523472685317, -0.10675941755], -[0.07045073413552, -0.1068245758975], -[0.07566610087245, -0.1068948268734], -[0.08088077921569, -0.1069701884825], -[0.08609472123754, -0.1070506800622], -[0.09130787892747, -0.1071363222912], -[0.09652020418938, -0.107227137201], -[0.1017316488392, -0.1073231481861], -[0.1069421646031, -0.1074243800168], -[0.1121517031164, -0.1075308588511], -[0.1173602159227, -0.1076426122489], -[0.1225676544738, -0.1077596691855], -[0.1277739701308, -0.1078820600671], -[0.1329791141653, -0.1080098167466], -[0.1381830377612, -0.10814297254], -[0.1433856920181, -0.1082815622442], -[0.1485870279553, -0.1084256221553], -[0.1537869965157, -0.1085751900881], -[0.1589855485724, -0.1087303053958], -[0.1641826349348, -0.1088910089915], -[0.1693782063566, -0.1090573433699], -[0.1745722135445, -0.1092293526309], -[0.1797646071682, -0.1094070825027], -[0.1849553378719, -0.1095905803675], -[0.1901443562864, -0.1097798952868], -[0.1953316130434, -0.109975078029], -[0.2005170587906, -0.1101761810968], -[0.2057006442084, -0.1103832587565], -[0.2108823200283, -0.1105963670682], -[0.2160620370533, -0.1108155639168], -[0.2212397461788, -0.1110409090442], -[0.2264153984168, -0.1112724640826], -[0.231588944921, -0.1115102925893], -[0.2367603370141, -0.1117544600816], -[0.2419295262171, -0.1120050340739], -[0.2470964642812, -0.1122620841149], -[0.252261103221, -0.1125256818272], -[0.2574233953512, -0.1127959009461], -[0.2625832933247, -0.1130728173615], -[0.2677407501739, -0.1133565091594], -[0.2728957193543, -0.1136470566647], -[0.2780481547912, -0.1139445424859], -[0.283198010929, -0.1142490515594], -[0.2883452427833, -0.1145606711958], -[0.2934898059969, -0.1148794911265], -[0.2986316568981, -0.1152056035514], -[0.3037707525628, -0.1155391031871], -[0.3089070508803, -0.1158800873162], -[0.3140405106224, -0.1162286558367], -[0.3191710915159, -0.1165849113125], -[0.32429875432, -0.1169489590233], -[0.3294234609065, -0.1173209070163], -[0.3345451743449, -0.1177008661564], -[0.3396638589915, -0.1180889501776], -[0.3447794805828, -0.118485275734], -[0.3498920063333, -0.1188899624497], -[0.3550014050383, -0.1193031329693], -[0.3601076471808, -0.1197249130066], -[0.3652107050439, -0.1201554313933], -[0.370310552827, -0.1205948201254], -[0.3754071667684, -0.1210432144089], -[0.3805005252715, -0.1215007527034], -[0.385590609037, -0.1219675767631], -[0.3906774012001, -0.1224438316758], -[0.3957608874718, -0.1229296658987], -[0.400841056287, -0.1234252312912], -[0.405917898956, -0.1239306831433], -[0.4109914098218, -0.1244461802002], -[0.4160615864223, -0.1249718846822], -[0.4211284296567, -0.1255079622989], -[0.4261919439567, -0.126054582258], -[0.4312521374622, -0.1266119172672], -[0.4363090222004, -0.1271801435295], -[0.4413626142691, -0.1277594407305], -[0.4464129340228, -0.1283499920173], -[0.4514600062621, -0.1289519839686], -[0.4565038604246, -0.1295656065544], -[0.4615445307783, -0.130191053086], -[0.4665820566152, -0.1308285201543], -[0.4716164824452, -0.1314782075556], -[0.4766478581899, -0.1321403182059], -[0.4816762393743, -0.1328150580402], -[0.4867016873155, -0.133502635899], -[0.4917242693086, -0.1342032633987], -[0.4967440588066, -0.1349171547872], -[0.5017605375238, -0.1356443506947], -[-0.4991562400798, -0.1311338312438], -[-0.4941311509578, -0.1304100446412], -[-0.4891029630812, -0.1296996866403], -[-0.4840721898985, -0.1290024533581], -[-0.4790387605042, -0.1283181365805], -[-0.4740026098398, -0.127646530613], -[-0.4689636785245, -0.1269874324166], -[-0.4639219126817, -0.1263406417303], -[-0.4588772637611, -0.1257059611791], -[-0.4538296883595, -0.125083196369], -[-0.4487791480385, -0.1244721559694], -[-0.4437256091433, -0.123872651784], -[-0.4386690426196, -0.1232844988098], -[-0.4336094238329, -0.1227075152862], -[-0.4285467323882, -0.1221415227342], -[-0.4234809519522, -0.1215863459858], -[-0.4184120700778, -0.1210418132062], -[-0.4133400780315, -0.1205077559065], -[-0.408264970624, -0.1199840089505], -[-0.4031867460448, -0.119470410554], -[-0.3981054057004, -0.1189668022787], -[-0.3930209540565, -0.1184730290196], -[-0.387933398485, -0.1179889389885], -[-0.3828427491147, -0.1175143836923], -[-0.3777490186877, -0.1170492179072], -[-0.3726522224192, -0.1165932996496], -[-0.3675523778627, -0.1161464901435], -[-0.36244950478, -0.1157086537855], -[-0.3573436250156, -0.1152796581067], -[-0.3522347623761, -0.1148593737334], -[-0.3471229425139, -0.1144476743447], -[-0.3420081928158, -0.1140444366297], -[-0.3368905422962, -0.1136495402433], -[-0.3317700214949, -0.1132628677602], -[-0.3266466623785, -0.1128843046291], -[-0.3215204982475, -0.1125137391256], -[-0.3163915636462, -0.1121510623052], -[-0.3112598942777, -0.1117961679557], -[-0.3061255269223, -0.11144895255], -[-0.3009884993604, -0.1111093151983], -[-0.2958488502983, -0.1107771576015], -[-0.2907066192986, -0.1104523840038], -[-0.2855618467134, -0.1101349011466], -[-0.2804145736215, -0.1098246182225], -[-0.2752648417684, -0.1095214468302], -[-0.2701126935099, -0.1092253009294], -[-0.2649581717586, -0.1089360967978], -[-0.2598013199332, -0.1086537529871], -[-0.2546421819112, -0.1083781902814], -[-0.2494808019836, -0.1081093316556], -[-0.244317224813, -0.107847102235], -[-0.2391514953937, -0.107591429256], -[-0.2339836590145, -0.1073422420271], -[-0.2288137612236, -0.1070994718923], -[-0.2236418477961, -0.1068630521933], -[-0.2184679647035, -0.1066329182354], -[-0.2132921580851, -0.1064090072519], -[-0.2081144742215, -0.1061912583711], -[-0.2029349595102, -0.1059796125839], -[-0.1977536604427, -0.1057740127124], -[-0.1925706235832, -0.1055744033794], -[-0.1873858955497, -0.1053807309788], -[-0.1821995229957, -0.1051929436478], -[-0.1770115525945, -0.105010991239], -[-0.1718220310235, -0.1048348252941], -[-0.1666310049513, -0.1046643990189], -[-0.1614385210256, -0.104499667258], -[-0.1562446258621, -0.1043405864721], -[-0.1510493660344, -0.1041871147151], -[-0.145852788066, -0.1040392116122], -[-0.1406549384225, -0.1038968383395], -[-0.1354558635052, -0.103759957604], -[-0.1302556096453, -0.1036285336243], -[-0.1250542230999, -0.1035025321129], -[-0.1198517500476, -0.1033819202587], -[-0.1146482365861, -0.1032666667104], -[-0.1094437287297, -0.1031567415607], -[-0.1042382724085, -0.1030521163319], -[-0.09903191346708, -0.1029527639614], -[-0.09382469766508, -0.1028586587882], -[-0.08861667067746, -0.1027697765408], -[-0.08340787809585, -0.1026860943249], -[-0.07819836543024, -0.1026075906125], -[-0.07298817811132, -0.1025342452311], -[-0.06777736149314, -0.1024660393544], -[-0.06256596085635, -0.1024029554932], -[-0.05735402141171, -0.1023449774866], -[-0.05214158830415, -0.1022920904947], -[-0.04692870661699, -0.1022442809912], -[-0.04171542137662, -0.1022015367575], -[-0.03650177755735, -0.1021638468763], -[-0.03128782008659, -0.1021312017267], -[-0.02607359385026, -0.1021035929798], -[-0.02085914369831, -0.1020810135948], -[-0.01564451445046, -0.1020634578152], -[-0.01042975090213, -0.1020509211668], -[-0.005214897830382, -0.1020434004551], -[4.140069856176e-15, -0.1020408937641], -[0.005214897830382, -0.1020434004551], -[0.01042975090213, -0.1020509211668], -[0.01564451445046, -0.1020634578152], -[0.02085914369831, -0.1020810135948], -[0.02607359385026, -0.1021035929798], -[0.03128782008659, -0.1021312017267], -[0.03650177755735, -0.1021638468763], -[0.04171542137662, -0.1022015367575], -[0.04692870661699, -0.1022442809912], -[0.05214158830415, -0.1022920904946], -[0.05735402141171, -0.1023449774866], -[0.06256596085634, -0.1024029554932], -[0.06777736149314, -0.1024660393544], -[0.07298817811132, -0.1025342452311], -[0.07819836543024, -0.1026075906125], -[0.08340787809585, -0.1026860943249], -[0.08861667067747, -0.1027697765408], -[0.09382469766508, -0.1028586587882], -[0.09903191346708, -0.1029527639614], -[0.1042382724085, -0.1030521163319], -[0.1094437287297, -0.1031567415607], -[0.1146482365861, -0.1032666667104], -[0.1198517500476, -0.1033819202587], -[0.1250542230999, -0.1035025321129], -[0.1302556096453, -0.1036285336243], -[0.1354558635052, -0.103759957604], -[0.1406549384225, -0.1038968383395], -[0.145852788066, -0.1040392116122], -[0.1510493660344, -0.1041871147151], -[0.1562446258621, -0.1043405864721], -[0.1614385210256, -0.104499667258], -[0.1666310049513, -0.1046643990189], -[0.1718220310235, -0.1048348252941], -[0.1770115525945, -0.105010991239], -[0.1821995229957, -0.1051929436478], -[0.1873858955497, -0.1053807309788], -[0.1925706235832, -0.1055744033794], -[0.1977536604427, -0.1057740127124], -[0.2029349595102, -0.1059796125839], -[0.2081144742215, -0.1061912583711], -[0.2132921580851, -0.1064090072519], -[0.2184679647035, -0.1066329182354], -[0.2236418477961, -0.1068630521933], -[0.2288137612236, -0.1070994718923], -[0.2339836590145, -0.1073422420271], -[0.2391514953937, -0.107591429256], -[0.244317224813, -0.107847102235], -[0.2494808019836, -0.1081093316556], -[0.2546421819112, -0.1083781902814], -[0.2598013199332, -0.1086537529871], -[0.2649581717586, -0.1089360967978], -[0.2701126935099, -0.1092253009294], -[0.2752648417684, -0.1095214468302], -[0.2804145736215, -0.1098246182225], -[0.2855618467134, -0.1101349011466], -[0.2907066192986, -0.1104523840038], -[0.2958488502983, -0.1107771576015], -[0.3009884993604, -0.1111093151983], -[0.3061255269223, -0.11144895255], -[0.3112598942777, -0.1117961679557], -[0.3163915636462, -0.1121510623052], -[0.3215204982475, -0.1125137391256], -[0.3266466623785, -0.1128843046291], -[0.3317700214949, -0.1132628677602], -[0.3368905422962, -0.1136495402433], -[0.3420081928158, -0.1140444366297], -[0.3471229425139, -0.1144476743447], -[0.3522347623761, -0.1148593737334], -[0.3573436250156, -0.1152796581067], -[0.36244950478, -0.1157086537855], -[0.3675523778627, -0.1161464901435], -[0.3726522224192, -0.1165932996496], -[0.3777490186877, -0.1170492179072], -[0.3828427491147, -0.1175143836923], -[0.387933398485, -0.1179889389885], -[0.3930209540565, -0.1184730290196], -[0.3981054057004, -0.1189668022787], -[0.4031867460448, -0.119470410554], -[0.408264970624, -0.1199840089505], -[0.4133400780315, -0.1205077559065], -[0.4184120700778, -0.1210418132062], -[0.4234809519522, -0.1215863459858], -[0.4285467323882, -0.1221415227342], -[0.4336094238329, -0.1227075152862], -[0.4386690426196, -0.1232844988098], -[0.4437256091433, -0.123872651784], -[0.4487791480385, -0.1244721559694], -[0.4538296883595, -0.125083196369], -[0.4588772637611, -0.1257059611791], -[0.4639219126817, -0.1263406417303], -[0.4689636785245, -0.1269874324166], -[0.4740026098398, -0.127646530613], -[0.4790387605042, -0.1283181365805], -[0.4840721898985, -0.1290024533581], -[0.4891029630812, -0.1296996866403], -[0.4941311509578, -0.1304100446412], -[0.4991568073815, -0.1311336980954], -[-0.4965449298895, -0.126610782496], -[-0.4915115582896, -0.1258909431261], -[-0.4864752730881, -0.1251842365625], -[-0.4814366061365, -0.1244905188108], -[-0.4763954889333, -0.1238095874409], -[-0.4713518585291, -0.1231412424356], -[-0.4663056573676, -0.1224852863197], -[-0.4612568331227, -0.1218415242748], -[-0.456205338532, -0.1212097642425], -[-0.4511511312279, -0.1205898170148], -[-0.4460941735673, -0.1199814963123], -[-0.4410344324602, -0.1193846188523], -[-0.4359718791989, -0.1187990044061], -[-0.4309064892868, -0.118224475846], -[-0.4258382422695, -0.1176608591839], -[-0.4207671215674, -0.1171079836007], -[-0.4156931143095, -0.1165656814682], -[-0.4106162111715, -0.1160337883634], -[-0.4055364062158, -0.1155121430758], -[-0.4004536967347, -0.1150005876086], -[-0.3953680830981, -0.1144989671742], -[-0.3902795686038, -0.1140071301845], -[-0.3851881593331, -0.1135249282361], -[-0.380093864009, -0.1130522160917], -[-0.3749966938599, -0.1125888516572], -[-0.3698966624871, -0.1121346959555], -[-0.3647937857363, -0.1116896130973], -[-0.3596880815744, -0.1112534702489], -[-0.3545795699696, -0.1108261375982], -[-0.3494682727769, -0.110407488318], -[-0.3443542136272, -0.1099973985277], -[-0.3392374178212, -0.109595747254], -[-0.3341179122274, -0.1092024163894], -[-0.3289957251842, -0.108817290651], -[-0.3238708864065, -0.1084402575368], -[-0.3187434268959, -0.1080712072831], -[-0.3136133788551, -0.1077100328204], -[-0.3084807756063, -0.1073566297296], -[-0.303345651513, -0.1070108961973], -[-0.2982080419059, -0.1066727329726], -[-0.2930679830123, -0.1063420433221], -[-0.2879255118883, -0.1060187329871], -[-0.2827806663555, -0.1057027101397], -[-0.2776334849402, -0.1053938853404], -[-0.2724840068156, -0.1050921714951], -[-0.2673322717478, -0.104797483814], -[-0.2621783200441, -0.1045097397703], -[-0.2570221925043, -0.1042288590597], -[-0.2518639303746, -0.1039547635611], -[-0.2467035753047, -0.1036873772974], -[-0.2415411693068, -0.1034266263981], -[-0.236376754717, -0.1031724390618], -[-0.2312103741597, -0.1029247455202], -[-0.2260420705139, -0.1026834780029], -[-0.220871886881, -0.1024485707029], -[-0.2156998665559, -0.1022199597434], -[-0.2105260529992, -0.1019975831452], -[-0.2053504898117, -0.1017813807955], -[-0.2001732207103, -0.101571294417], -[-0.1949942895062, -0.1013672675386], -[-0.1898137400845, -0.1011692454667], -[-0.1846316163854, -0.1009771752576], -[-0.1794479623868, -0.1007910056906], -[-0.1742628220885, -0.1006106872426], -[-0.1690762394982, -0.1004361720626], -[-0.1638882586178, -0.1002674139487], -[-0.1586989234321, -0.100104368324], -[-0.1535082778981, -0.09994699221539], -[-0.1483163659353, -0.09979524423165], -[-0.1431232314177, -0.09964908454339], -[-0.1379289181664, -0.0995084748634], -[-0.1327334699433, -0.09937337842796], -[-0.1275369304459, -0.09924375997897], -[-0.1223393433025, -0.0991195857469], -[-0.1171407520688, -0.09900082343449], -[-0.1119412002254, -0.09888744220129], -[-0.1067407311754, -0.09877941264891], -[-0.1015393882432, -0.09867670680708], -[-0.09633721467383, -0.09857929812043], -[-0.09113425363314, -0.09848716143595], -[-0.08593054820828, -0.09840027299124], -[-0.08072614140893, -0.09831861040339], -[-0.07552107616897, -0.09824215265861], -[-0.07031539534877, -0.0981708801025], -[-0.06510914173776, -0.09810477443095], -[-0.05990235805759, -0.09804381868181], -[-0.0546950869656, -0.09798799722706], -[-0.04948737105865, -0.0979372957657], -[-0.04427925287731, -0.09789170131729], -[-0.03907077491031, -0.09785120221602], -[-0.03386197959932, -0.09781578810544], -[-0.0286529093439, -0.09778544993381], -[-0.02344360650673, -0.09776017995004], -[-0.01823411341892, -0.09773997170016], -[-0.01302447238561, -0.09772482002447], -[-0.007814725691558, -0.0977147210552], -[-0.002604915606924, -0.09770967221481], -[0.002604915606925, -0.09770967221481], -[0.007814725691559, -0.0977147210552], -[0.01302447238561, -0.09772482002447], -[0.01823411341892, -0.09773997170016], -[0.02344360650673, -0.09776017995004], -[0.0286529093439, -0.09778544993381], -[0.03386197959932, -0.09781578810544], -[0.03907077491031, -0.09785120221602], -[0.04427925287731, -0.09789170131729], -[0.04948737105865, -0.0979372957657], -[0.0546950869656, -0.09798799722706], -[0.05990235805759, -0.09804381868181], -[0.06510914173776, -0.09810477443095], -[0.07031539534877, -0.0981708801025], -[0.07552107616897, -0.09824215265861], -[0.08072614140892, -0.09831861040339], -[0.08593054820828, -0.09840027299124], -[0.09113425363314, -0.09848716143595], -[0.09633721467383, -0.09857929812043], -[0.1015393882432, -0.09867670680708], -[0.1067407311754, -0.09877941264891], -[0.1119412002254, -0.09888744220129], -[0.1171407520688, -0.09900082343449], -[0.1223393433025, -0.0991195857469], -[0.1275369304459, -0.09924375997897], -[0.1327334699433, -0.09937337842796], -[0.1379289181664, -0.0995084748634], -[0.1431232314177, -0.09964908454339], -[0.1483163659353, -0.09979524423165], -[0.1535082778981, -0.09994699221539], -[0.1586989234321, -0.100104368324], -[0.1638882586178, -0.1002674139487], -[0.1690762394982, -0.1004361720626], -[0.1742628220885, -0.1006106872426], -[0.1794479623868, -0.1007910056906], -[0.1846316163854, -0.1009771752576], -[0.1898137400845, -0.1011692454667], -[0.1949942895062, -0.1013672675386], -[0.2001732207103, -0.101571294417], -[0.2053504898117, -0.1017813807955], -[0.2105260529992, -0.1019975831452], -[0.2156998665559, -0.1022199597433], -[0.220871886881, -0.1024485707029], -[0.2260420705139, -0.1026834780029], -[0.2312103741597, -0.1029247455202], -[0.236376754717, -0.1031724390618], -[0.2415411693068, -0.1034266263981], -[0.2467035753047, -0.1036873772974], -[0.2518639303746, -0.1039547635611], -[0.2570221925043, -0.1042288590597], -[0.2621783200441, -0.1045097397703], -[0.2673322717478, -0.104797483814], -[0.2724840068156, -0.1050921714951], -[0.2776334849402, -0.1053938853404], -[0.2827806663555, -0.1057027101397], -[0.2879255118883, -0.1060187329871], -[0.2930679830123, -0.1063420433221], -[0.2982080419059, -0.1066727329726], -[0.303345651513, -0.1070108961973], -[0.3084807756063, -0.1073566297296], -[0.3136133788551, -0.1077100328204], -[0.3187434268959, -0.1080712072831], -[0.3238708864065, -0.1084402575368], -[0.3289957251842, -0.108817290651], -[0.3341179122274, -0.1092024163894], -[0.3392374178212, -0.109595747254], -[0.3443542136272, -0.1099973985277], -[0.3494682727769, -0.110407488318], -[0.3545795699696, -0.1108261375982], -[0.3596880815744, -0.1112534702489], -[0.3647937857363, -0.1116896130973], -[0.3698966624871, -0.1121346959555], -[0.3749966938599, -0.1125888516572], -[0.380093864009, -0.1130522160917], -[0.3851881593331, -0.1135249282361], -[0.3902795686038, -0.1140071301845], -[0.3953680830981, -0.1144989671742], -[0.4004536967347, -0.1150005876086], -[0.4055364062158, -0.1155121430758], -[0.4106162111715, -0.1160337883634], -[0.4156931143095, -0.1165656814682], -[0.4207671215674, -0.1171079836007], -[0.4258382422695, -0.1176608591839], -[0.4309064892868, -0.118224475846], -[0.4359718791989, -0.1187990044061], -[0.4410344324602, -0.1193846188523], -[0.4460941735673, -0.1199814963123], -[0.4511511312279, -0.1205898170148], -[0.456205338532, -0.1212097642425], -[0.4612568331227, -0.1218415242748], -[0.4663056573676, -0.1224852863197], -[0.4713518585291, -0.1231412424357], -[0.4763954889333, -0.1238095874409], -[0.4814366061365, -0.1244905188108], -[0.4864752730881, -0.1251842365625], -[0.4915115582896, -0.1258909431261], -[0.4965449298622, -0.1266107842933], -[-0.493927399688, -0.1220760981793], -[-0.4888854220637, -0.1213601038195], -[-0.4838413344091, -0.1206571645247], -[-0.478795065073, -0.1199670812353], -[-0.47374654782, -0.119289657069], -[-0.4686957216867, -0.118624697455], -[-0.4636425308329, -0.1179720102559], -[-0.458586924388, -0.117331405877], -[-0.4535288562955, -0.116702697364], -[-0.4484682851534, -0.1160857004888], -[-0.4434051740549, -0.1154802338246], -[-0.4383394904269, -0.1148861188112], -[-0.433271205869, -0.1143031798098], -[-0.4282002959935, -0.1137312441494], -[-0.4231267402651, -0.1131701421637], -[-0.4180505218439, -0.1126197072208], -[-0.4129716274285, -0.1120797757453], -[-0.4078900471034, -0.1115501872327], -[-0.4028057741877, -0.1110307842586], -[-0.397718805087, -0.1105214124806], -[-0.3926291391497, -0.1100219206362], -[-0.387536778525, -0.1095321605346], -[-0.3824417280263, -0.1090519870445], -[-0.3773439949968, -0.1085812580778], -[-0.3722435891806, -0.1081198345694], -[-0.367140522596, -0.1076675804539], -[-0.3620348094149, -0.1072243626396], -[-0.3569264658441, -0.1067900509789], -[-0.3518155100125, -0.1063645182375], -[-0.3467019618616, -0.1059476400612], -[-0.3415858430398, -0.1055392949408], -[-0.3364671768015, -0.1051393641758], -[-0.3313459879093, -0.1047477318365], -[-0.3262223025415, -0.1043642847258], -[-0.3210961482017, -0.1039889123391], -[-0.3159675536336, -0.1036215068248], -[-0.3108365487394, -0.1032619629435], -[-0.3057031645009, -0.1029101780271], -[-0.3005674329052, -0.102566051938], -[-0.2954293868734, -0.1022294870278], -[-0.2902890601929, -0.1019003880969], -[-0.2851464874527, -0.1015786623533], -[-0.280001703982, -0.1012642193725], -[-0.2748547457921, -0.1009569710575], -[-0.269705649521, -0.1006568315991], -[-0.2645544523814, -0.100363717437], -[-0.2594011921104, -0.1000775472214], -[-0.2542459069234, -0.09979824177536], -[-0.2490886354695, -0.09952572405742], -[-0.2439294167897, -0.09925991912565], -[-0.2387682902776, -0.0990007541019], -[-0.2336052956428, -0.09874815813709], -[-0.2284404728755, -0.09850206237732], -[-0.2232738622146, -0.09826239993077], -[-0.2181055041166, -0.09802910583551], -[-0.2129354392275, -0.09780211702813], -[-0.2077637083562, -0.09758137231333], -[-0.2025903524493, -0.09736681233433], -[-0.1974154125687, -0.09715837954422], -[-0.1922389298697, -0.09695601817816], -[-0.1870609455816, -0.09675967422653], -[-0.1818815009895, -0.09656929540892], -[-0.1767006374177, -0.09638483114904], -[-0.1715183962142, -0.09620623255046], -[-0.1663348187368, -0.09603345237331], -[-0.1611499463407, -0.09586644501174], -[-0.1559638203668, -0.0957051664723], -[-0.1507764821317, -0.09554957435314], -[-0.1455879729185, -0.09539962782406], -[-0.1403983339686, -0.09525528760733], -[-0.1352076064749, -0.09511651595937], -[-0.1300158315757, -0.0949832766532], -[-0.1248230503495, -0.09485553496165], -[-0.1196293038106, -0.0947332576414], -[-0.1144346329058, -0.0946164129177], -[-0.1092390785117, -0.09450497046986], -[-0.1040426814329, -0.09439890141753], -[-0.09884548240048, -0.09429817830755], -[-0.09364752207161, -0.09420277510164], -[-0.0884488410296, -0.09411266716475], -[-0.0832494797845, -0.09402783125402], -[-0.07804947877429, -0.09394824550847], -[-0.07284887836655, -0.09387388943934], -[-0.06764771886064, -0.09380474392104], -[-0.06244604049032, -0.09374079118278], -[-0.05724388342675, -0.09368201480076], -[-0.05204128778189, -0.09362839969105], -[-0.04683829361224, -0.09357993210304], -[-0.04163494092292, -0.09353659961342], -[-0.03643126967196, -0.09349839112092], -[-0.03122731977494, -0.09346529684144], -[-0.0260231311098, -0.09343730830387], -[-0.02081874352185, -0.09341441834649], -[-0.01561419682895, -0.09339662111385], -[-0.01040953082683, -0.09338391205433], -[-0.005204785294557, -0.09337628791815], -[-1.592334560068e-16, -0.09337374675598], -[0.005204785294557, -0.09337628791815], -[0.01040953082683, -0.09338391205433], -[0.01561419682895, -0.09339662111385], -[0.02081874352185, -0.09341441834648], -[0.0260231311098, -0.09343730830387], -[0.03122731977494, -0.09346529684144], -[0.03643126967196, -0.09349839112092], -[0.04163494092292, -0.09353659961343], -[0.04683829361224, -0.09357993210304], -[0.05204128778189, -0.09362839969105], -[0.05724388342675, -0.09368201480076], -[0.06244604049032, -0.09374079118278], -[0.06764771886064, -0.09380474392104], -[0.07284887836655, -0.09387388943934], -[0.07804947877429, -0.09394824550847], -[0.0832494797845, -0.09402783125402], -[0.0884488410296, -0.09411266716475], -[0.09364752207161, -0.09420277510164], -[0.09884548240048, -0.09429817830754], -[0.1040426814329, -0.09439890141753], -[0.1092390785117, -0.09450497046987], -[0.1144346329058, -0.0946164129177], -[0.1196293038106, -0.0947332576414], -[0.1248230503495, -0.09485553496165], -[0.1300158315757, -0.0949832766532], -[0.1352076064749, -0.09511651595938], -[0.1403983339686, -0.09525528760733], -[0.1455879729185, -0.09539962782406], -[0.1507764821317, -0.09554957435314], -[0.1559638203668, -0.0957051664723], -[0.1611499463407, -0.09586644501174], -[0.1663348187368, -0.09603345237331], -[0.1715183962142, -0.09620623255046], -[0.1767006374177, -0.09638483114904], -[0.1818815009895, -0.09656929540892], -[0.1870609455816, -0.09675967422653], -[0.1922389298697, -0.09695601817816], -[0.1974154125687, -0.09715837954422], -[0.2025903524493, -0.09736681233433], -[0.2077637083562, -0.09758137231333], -[0.2129354392275, -0.09780211702813], -[0.2181055041166, -0.09802910583551], -[0.2232738622146, -0.09826239993077], -[0.2284404728755, -0.09850206237732], -[0.2336052956428, -0.09874815813709], -[0.2387682902776, -0.0990007541019], -[0.2439294167897, -0.09925991912565], -[0.2490886354695, -0.09952572405742], -[0.2542459069234, -0.09979824177536], -[0.2594011921104, -0.1000775472214], -[0.2645544523814, -0.100363717437], -[0.269705649521, -0.1006568315991], -[0.2748547457921, -0.1009569710575], -[0.280001703982, -0.1012642193725], -[0.2851464874527, -0.1015786623533], -[0.2902890601929, -0.1019003880969], -[0.2954293868734, -0.1022294870278], -[0.3005674329052, -0.102566051938], -[0.3057031645009, -0.1029101780271], -[0.3108365487394, -0.1032619629435], -[0.3159675536336, -0.1036215068248], -[0.3210961482017, -0.1039889123391], -[0.3262223025415, -0.1043642847258], -[0.3313459879093, -0.1047477318365], -[0.3364671768015, -0.1051393641758], -[0.3415858430398, -0.1055392949408], -[0.3467019618616, -0.1059476400612], -[0.3518155100125, -0.1063645182375], -[0.3569264658441, -0.1067900509789], -[0.3620348094149, -0.1072243626396], -[0.367140522596, -0.1076675804539], -[0.3722435891806, -0.1081198345694], -[0.3773439949968, -0.1085812580778], -[0.3824417280263, -0.1090519870445], -[0.387536778525, -0.1095321605346], -[0.3926291391497, -0.1100219206362], -[0.397718805087, -0.1105214124806], -[0.4028057741877, -0.1110307842586], -[0.4078900471034, -0.1115501872327], -[0.4129716274285, -0.1120797757453], -[0.4180505218439, -0.1126197072208], -[0.4231267402651, -0.1131701421637], -[0.4282002959935, -0.1137312441494], -[0.433271205869, -0.1143031798098], -[0.4383394904269, -0.1148861188112], -[0.4434051740549, -0.1154802338246], -[0.4484682851534, -0.1160857004888], -[0.4535288562955, -0.116702697364], -[0.458586924388, -0.117331405877], -[0.4636425308329, -0.1179720102559], -[0.4686957216867, -0.118624697455], -[0.47374654782, -0.119289657069], -[0.478795065073, -0.1199670812353], -[0.4838413344091, -0.1206571645247], -[0.4888854220637, -0.1213601038195], -[0.4939273995338, -0.1220760983263], -[-0.4913025665178, -0.1175297537671], -[-0.4862528810913, -0.1168177756187], -[-0.4812012799436, -0.1161187172627], -[-0.4761476938311, -0.1154323850525], -[-0.4710920586517, -0.1147585874293], -[-0.4660343153095, -0.1140971350495], -[-0.4609744095751, -0.1134478409], -[-0.4559122919414, -0.1128105204016], -[-0.4508479174768, -0.1121849915018], -[-0.445781245676, -0.111571074757], -[-0.4407122403096, -0.1109685934041], -[-0.4356408692724, -0.1103773734229], -[-0.4305671044323, -0.1097972435895], -[-0.4254909214786, -0.1092280355206], -[-0.4204122997721, -0.1086695837105], -[-0.4153312221964, -0.1081217255599], -[-0.4102476750102, -0.1075843013982], -[-0.4051616477032, -0.1070571544988], -[-0.400073132853, -0.1065401310888], -[-0.3949821259859, -0.1060330803529], -[-0.3898886254397, -0.1055358544321], -[-0.3847926322306, -0.1050483084179], -[-0.3796941499231, -0.104570300342], -[-0.3745931845027, -0.1041016911624], -[-0.3694897442539, -0.1036423447457], -[-0.3643838396399, -0.1031921278465], -[-0.3592754831874, -0.1027509100835], -[-0.3541646893752, -0.1023185639138], -[-0.3490514745253, -0.1018949646044], -[-0.3439358566998, -0.1014799902021], -[-0.3388178555998, -0.1010735215015], -[-0.3336974924691, -0.1006754420117], -[-0.3285747900016, -0.1002856379217], -[-0.3234497722517, -0.0999039980649], -[-0.3183224645494, -0.09953041388278], -[-0.3131928934184, -0.0991647793878], -[-0.3080610864972, -0.09880699112598], -[-0.3029270724649, -0.09845694813908], -[-0.2977908809694, -0.09811455192667], -[-0.2926525425591, -0.09777970640799], -[-0.2875120886182, -0.09745231788407], -[-0.2823695513043, -0.09713229499981], -[-0.27722496349, -0.09681954870645], -[-0.2720783587066, -0.09651399222428], -[-0.2669297710915, -0.09621554100582], -[-0.2617792353373, -0.0959241126994], -[-0.2566267866444, -0.09563962711337], -[-0.2514724606761, -0.09536200618083], -[-0.2463162935157, -0.09509117392498], -[-0.2411583216267, -0.0948270564252], -[-0.2359985818143, -0.09456958178377], -[-0.2308371111905, -0.09431868009341], -[-0.2256739471402, -0.09407428340547], -[-0.22050912729, -0.093836325699], -[-0.2153426894784, -0.0936047428506], -[-0.2101746717288, -0.09337947260498], -[-0.2050051122237, -0.09316045454653], -[-0.1998340492804, -0.09294763007152], -[-0.1946615213294, -0.09274094236129], -[-0.1894875668933, -0.09254033635618], -[-0.1843122245682, -0.09234575873031], -[-0.1791355330059, -0.09215715786727], -[-0.1739575308978, -0.09197448383651], -[-0.1687782569602, -0.09179768837068], -[-0.163597749921, -0.09162672484368], -[-0.1584160485073, -0.09146154824962], -[-0.1532331914343, -0.09130211518253], -[-0.148049217396, -0.09114838381684], -[-0.1428641650557, -0.09100031388868], -[-0.1376780730388, -0.09085786667796], -[-0.1324909799257, -0.09072100499122], -[-0.127302924246, -0.0905896931451], -[-0.1221139444739, -0.09046389695075], -[-0.1169240790237, -0.09034358369886], -[-0.1117333662466, -0.09022872214534], -[-0.1065418444284, -0.09011928249784], -[-0.1013495517874, -0.09001523640285], -[-0.09615652647323, -0.08991655693353], -[-0.09096280656671, -0.0898232185782], -[-0.08576843007953, -0.08973519722945], -[-0.08057343495513, -0.08965247017395], -[-0.07537785906982, -0.08957501608284], -[-0.07018174023448, -0.08950281500278], -[-0.06498511619669, -0.08943584834759], -[-0.05978802464329, -0.08937409889047], -[-0.05459050320332, -0.08931755075688], -[-0.04939258945139, -0.08926618941795], -[-0.04419432091128, -0.08922000168448], -[-0.03899573505989, -0.08917897570149], -[-0.03379686933149, -0.08914310094341], -[-0.02859776112217, -0.08911236820971], -[-0.02339844779447, -0.08908676962117], -[-0.01819896668228, -0.08906629861667], -[-0.01299935509583, -0.08905094995048], -[-0.007799650326788, -0.08904071969021], -[-0.002599889653544, -0.08903560521512], -[0.002599889653544, -0.08903560521512], -[0.007799650326788, -0.08904071969021], -[0.01299935509583, -0.08905094995048], -[0.01819896668228, -0.08906629861666], -[0.02339844779447, -0.08908676962117], -[0.02859776112217, -0.08911236820971], -[0.03379686933149, -0.08914310094341], -[0.03899573505989, -0.08917897570149], -[0.04419432091128, -0.08922000168448], -[0.04939258945139, -0.08926618941795], -[0.05459050320332, -0.08931755075688], -[0.05978802464329, -0.08937409889047], -[0.06498511619669, -0.08943584834759], -[0.07018174023448, -0.08950281500278], -[0.07537785906982, -0.08957501608284], -[0.08057343495513, -0.08965247017395], -[0.08576843007953, -0.08973519722945], -[0.0909628065667, -0.0898232185782], -[0.09615652647323, -0.08991655693353], -[0.1013495517874, -0.09001523640285], -[0.1065418444284, -0.09011928249784], -[0.1117333662466, -0.09022872214535], -[0.1169240790237, -0.09034358369886], -[0.1221139444739, -0.09046389695075], -[0.127302924246, -0.0905896931451], -[0.1324909799257, -0.09072100499122], -[0.1376780730388, -0.09085786667798], -[0.1428641650557, -0.09100031388868], -[0.148049217396, -0.09114838381684], -[0.1532331914343, -0.09130211518253], -[0.1584160485073, -0.09146154824962], -[0.163597749921, -0.09162672484368], -[0.1687782569602, -0.09179768837068], -[0.1739575308978, -0.09197448383651], -[0.1791355330059, -0.09215715786727], -[0.1843122245682, -0.09234575873031], -[0.1894875668933, -0.09254033635618], -[0.1946615213294, -0.09274094236129], -[0.1998340492804, -0.09294763007152], -[0.2050051122237, -0.09316045454653], -[0.2101746717288, -0.09337947260498], -[0.2153426894784, -0.0936047428506], -[0.22050912729, -0.093836325699], -[0.2256739471402, -0.09407428340547], -[0.2308371111905, -0.09431868009341], -[0.2359985818143, -0.09456958178377], -[0.2411583216267, -0.0948270564252], -[0.2463162935157, -0.09509117392498], -[0.2514724606761, -0.09536200618083], -[0.2566267866444, -0.09563962711337], -[0.2617792353373, -0.0959241126994], -[0.2669297710915, -0.09621554100582], -[0.2720783587066, -0.09651399222428], -[0.27722496349, -0.09681954870645], -[0.2823695513043, -0.09713229499981], -[0.2875120886182, -0.09745231788407], -[0.2926525425591, -0.09777970640799], -[0.2977908809694, -0.09811455192667], -[0.3029270724649, -0.09845694813908], -[0.3080610864972, -0.09880699112598], -[0.3131928934184, -0.0991647793878], -[0.3183224645494, -0.09953041388278], -[0.3234497722517, -0.0999039980649], -[0.3285747900016, -0.1002856379217], -[0.3336974924692, -0.1006754420117], -[0.3388178555998, -0.1010735215015], -[0.3439358566998, -0.1014799902021], -[0.3490514745253, -0.1018949646044], -[0.3541646893752, -0.1023185639138], -[0.3592754831874, -0.1027509100835], -[0.3643838396399, -0.1031921278465], -[0.3694897442539, -0.1036423447457], -[0.3745931845027, -0.1041016911624], -[0.3796941499231, -0.104570300342], -[0.3847926322306, -0.1050483084179], -[0.3898886254397, -0.1055358544321], -[0.3949821259859, -0.1060330803529], -[0.400073132853, -0.1065401310888], -[0.4051616477032, -0.1070571544988], -[0.4102476750102, -0.1075843013982], -[0.4153312221964, -0.1081217255599], -[0.4204122997721, -0.1086695837105], -[0.4254909214786, -0.1092280355206], -[0.4305671044323, -0.1097972435895], -[0.4356408692724, -0.1103773734229], -[0.4407122403096, -0.1109685934041], -[0.445781245676, -0.111571074757], -[0.4508479174768, -0.1121849915018], -[0.4559122919414, -0.1128105204016], -[0.4609744095751, -0.1134478409], -[0.4660343153095, -0.1140971350495], -[0.4710920586517, -0.1147585874293], -[0.4761476938311, -0.1154323850524], -[0.4812012799436, -0.1161187172627], -[0.4862528810913, -0.1168177756187], -[0.4913025665178, -0.1175297537671], -[-0.4886711786882, -0.1129720563517], -[-0.483614071846, -0.1122642029602], -[-0.4785552405073, -0.1115691371057], -[-0.4734946176949, -0.1108866703378], -[-0.4684321413123, -0.1102166162093], -[-0.4633677540167, -0.1095587903957], -[-0.4583014030874, -0.1089130108051], -[-0.4532330402905, -0.108279097676], -[-0.4481626217405, -0.107656873666], -[-0.4430901077605, -0.1070461639295], -[-0.43801546274, -0.1064467961872], -[-0.4329386549926, -0.1058586007851], -[-0.4278596566136, -0.1052814107466], -[-0.4227784433372, -0.1047150618155], -[-0.4176949943948, -0.1041593924919], -[-0.4126092923754, -0.1036142440612], -[-0.4075213230858, -0.1030794606159], -[-0.4024310754144, -0.102554889072], -[-0.3973385411968, -0.1020403791793], -[-0.392243715083, -0.1015357835263], -[-0.3871465944088, -0.1010409575409], -[-0.3820471790693, -0.1005557594858], -[-0.376945471395, -0.1000800504505], -[-0.3718414760328, -0.0996136943392], -[-0.3667351998285, -0.09915655785587], -[-0.3616266517136, -0.09870851048556], -[-0.3565158425959, -0.09826942447361], -[-0.3514027852532, -0.09783917480225], -[-0.34628749423, -0.09741763916501], -[-0.3411699857394, -0.09700469793936], -[-0.3360502775665, -0.09660023415765], -[-0.3309283889771, -0.09620413347667], -[-0.3258043406291, -0.09581628414606], -[-0.3206781544872, -0.09543657697563], -[-0.3155498537415, -0.09506490530199], -[-0.3104194627296, -0.09470116495444], -[-0.3052870068613, -0.09434525422039], -[-0.3001525125469, -0.09399707381047], -[-0.2950160071295, -0.09365652682339], -[-0.2898775188187, -0.09332351871071], -[-0.2847370766292, -0.0929979572416], -[-0.2795947103209, -0.09267975246777], -[-0.2744504503426, -0.09236881668853], -[-0.2693043277783, -0.09206506441615], -[-0.2641563742965, -0.09176841234159], -[-0.2590066221014, -0.09147877930068], -[-0.2538551038876, -0.09119608624065], -[-0.2487018527966, -0.09092025618734], -[-0.2435469023756, -0.09065121421285], -[-0.2383902865391, -0.09038888740394], -[-0.2332320395327, -0.09013320483091], -[-0.2280721958983, -0.08988409751731], -[-0.2229107904423, -0.08964149841025], -[-0.2177478582051, -0.08940534235137], -[-0.2125834344329, -0.08917556604891], -[-0.2074175545513, -0.08895210804996], -[-0.2022502541402, -0.08873490871395], -[-0.1970815689112, -0.08852391018666], -[-0.1919115346862, -0.08831905637514], -[-0.1867401873771, -0.0881202929233], -[-0.1815675629679, -0.08792756718837], -[-0.1763936974977, -0.08774082821807], -[-0.1712186270452, -0.08756002672862], -[-0.1660423877145, -0.08738511508346], -[-0.1608650156218, -0.08721604727279], -[-0.1556865468845, -0.08705277889383], -[-0.1505070176097, -0.08689526713188], -[-0.1453264638853, -0.08674347074207], -[-0.1401449217713, -0.08659735003189], -[-0.1349624272927, -0.08645686684444], -[-0.1297790164324, -0.08632198454234], -[-0.1245947251262, -0.08619266799246], -[-0.1194095892579, -0.08606888355125], -[-0.1142236446553, -0.08595059905077], -[-0.1090369270871, -0.08583778378541], -[-0.1038494722606, -0.08573040849931], -[-0.09866131582007, -0.08562844537432], -[-0.09347249334534, -0.08553186801875], -[-0.08828304035179, -0.08544065145661], -[-0.08309299229025, -0.08535477211755], -[-0.07790238454779, -0.0852742078274], -[-0.07271125244892, -0.08519893779929], -[-0.06751963125723, -0.08512894262537], -[-0.06232755617753, -0.08506420426907], -[-0.05713506235842, -0.08500470605804], -[-0.05194218489511, -0.08495043267752], -[-0.04674895883277, -0.08490137016435], -[-0.04155541917002, -0.0848575059015], -[-0.03636160086283, -0.08481882861317], -[-0.03116753882859, -0.08478532836035], -[-0.02597326795047, -0.084756996537], -[-0.02077882308194, -0.08473382586671], -[-0.01558423905145, -0.08471581039986], -[-0.01038955066729, -0.08470294551137], -[-0.00519479272252, -0.08469522789886], -[9.554007360407e-17, -0.08469265558143], -[0.00519479272252, -0.08469522789886], -[0.01038955066729, -0.08470294551137], -[0.01558423905145, -0.08471581039986], -[0.02077882308194, -0.08473382586671], -[0.02597326795047, -0.084756996537], -[0.03116753882859, -0.08478532836035], -[0.03636160086283, -0.08481882861317], -[0.04155541917002, -0.08485750590151], -[0.04674895883277, -0.08490137016435], -[0.05194218489511, -0.08495043267751], -[0.05713506235842, -0.08500470605804], -[0.06232755617753, -0.08506420426907], -[0.06751963125723, -0.08512894262537], -[0.07271125244892, -0.08519893779929], -[0.0779023845478, -0.0852742078274], -[0.08309299229025, -0.08535477211755], -[0.08828304035179, -0.08544065145661], -[0.09347249334534, -0.08553186801875], -[0.09866131582007, -0.08562844537432], -[0.1038494722606, -0.0857304084993], -[0.1090369270871, -0.08583778378541], -[0.1142236446553, -0.08595059905077], -[0.1194095892579, -0.08606888355125], -[0.1245947251262, -0.08619266799246], -[0.1297790164324, -0.08632198454234], -[0.1349624272927, -0.08645686684443], -[0.1401449217713, -0.08659735003189], -[0.1453264638853, -0.08674347074207], -[0.1505070176097, -0.08689526713188], -[0.1556865468845, -0.08705277889383], -[0.1608650156218, -0.08721604727279], -[0.1660423877145, -0.08738511508346], -[0.1712186270452, -0.08756002672862], -[0.1763936974977, -0.08774082821807], -[0.1815675629679, -0.08792756718837], -[0.1867401873771, -0.0881202929233], -[0.1919115346862, -0.08831905637514], -[0.1970815689112, -0.08852391018666], -[0.2022502541402, -0.08873490871395], -[0.2074175545513, -0.08895210804996], -[0.2125834344329, -0.08917556604891], -[0.2177478582051, -0.08940534235137], -[0.2229107904422, -0.08964149841029], -[0.2280721958983, -0.08988409751731], -[0.2332320395327, -0.09013320483091], -[0.2383902865391, -0.09038888740394], -[0.2435469023756, -0.09065121421285], -[0.2487018527966, -0.09092025618734], -[0.2538551038876, -0.09119608624065], -[0.2590066221014, -0.09147877930068], -[0.2641563742965, -0.09176841234159], -[0.2693043277783, -0.09206506441615], -[0.2744504503426, -0.09236881668853], -[0.2795947103209, -0.09267975246777], -[0.2847370766292, -0.0929979572416], -[0.2898775188187, -0.09332351871071], -[0.2950160071295, -0.09365652682339], -[0.3001525125469, -0.09399707381047], -[0.3052870068613, -0.09434525422038], -[0.3104194627296, -0.09470116495444], -[0.3155498537415, -0.09506490530199], -[0.3206781544872, -0.09543657697563], -[0.3258043406291, -0.09581628414606], -[0.3309283889771, -0.09620413347667], -[0.3360502775665, -0.09660023415765], -[0.3411699857394, -0.09700469793936], -[0.34628749423, -0.09741763916501], -[0.3514027852532, -0.09783917480225], -[0.3565158425959, -0.09826942447361], -[0.3616266517136, -0.09870851048556], -[0.3667351998285, -0.09915655785587], -[0.3718414760328, -0.0996136943392], -[0.376945471395, -0.1000800504505], -[0.3820471790693, -0.1005557594858], -[0.3871465944088, -0.1010409575409], -[0.392243715083, -0.1015357835263], -[0.3973385411968, -0.1020403791793], -[0.4024310754144, -0.102554889072], -[0.4075213230858, -0.1030794606159], -[0.4126092923754, -0.1036142440612], -[0.4176949943948, -0.1041593924919], -[0.4227784433372, -0.1047150618155], -[0.4278596566136, -0.1052814107466], -[0.4329386549926, -0.1058586007851], -[0.43801546274, -0.1064467961872], -[0.4430901077605, -0.1070461639295], -[0.4481626217405, -0.107656873666], -[0.4532330402905, -0.108279097676], -[0.4583014030874, -0.1089130108051], -[0.4633677540167, -0.1095587903957], -[0.4684321413123, -0.1102166162093], -[0.4734946176949, -0.1108866703378], -[0.4785552405073, -0.1115691371056], -[0.483614071846, -0.1122642029602], -[0.4886711786882, -0.1129720563517], -[-0.4860333759709, -0.1084032480251], -[-0.4809691285695, -0.1076996260277], -[-0.4759033449241, -0.1070086621794], -[-0.4708359601881, -0.1063301730209], -[-0.4657669141477, -0.1056639770146], -[-0.4606961511025, -0.1050098946578], -[-0.4556236197416, -0.1043677485867], -[-0.4505492730163, -0.1037373636697], -[-0.4454730680101, -0.1031185670912], -[-0.4403949658067, -0.1025111884269], -[-0.4353149313564, -0.1019150597088], -[-0.4302329333423, -0.1013300154839], -[-0.4251489440458, -0.1007558928627], -[-0.420062939212, -0.1001925315621], -[-0.4149748979167, -0.09963977394038], -[-0.4098848024336, -0.09909746502542], -[-0.4047926381036, -0.09856545253722], -[-0.3996983932052, -0.09804358690434], -[-0.3946020588279, -0.09753172127508], -[-0.3895036287467, -0.09702971152369], -[-0.3844030993002, -0.09653741625201], -[-0.3793004692708, -0.09605469678687], -[-0.3741957397679, -0.09558141717365], -[-0.3690889141141, -0.09511744416641], -[-0.3639799977347, -0.09466264721472], -[-0.3588689980498, -0.09421689844766], -[-0.3537559243705, -0.09378007265526], -[-0.3486407877975, -0.0933520472676], -[-0.3435236011238, -0.09293270233186], -[-0.3384043787401, -0.09252192048753], -[-0.3332831365441, -0.09211958694017], -[-0.3281598918524, -0.0917255894336], -[-0.3230346633169, -0.09133981822111], -[-0.3179074708427, -0.09096216603559], -[-0.3127783355114, -0.09059252805887], -[-0.3076472795053, -0.0902308018904], -[-0.3025143260368, -0.08987688751547], -[-0.2973794992793, -0.08953068727303], -[-0.2922428243021, -0.08919210582321], -[-0.2871043270078, -0.08886105011484], -[-0.2819640340725, -0.08853742935283], -[-0.2768219728891, -0.08822115496569], -[-0.2716781715135, -0.08791214057312], -[-0.2665326586125, -0.08761030195394], -[-0.2613854634155, -0.08731555701424], -[-0.2562366156678, -0.08702782575594], -[-0.2510861455867, -0.08674703024575], -[-0.2459340838202, -0.08647309458459], -[-0.2407804614072, -0.08620594487757], -[-0.2356253097407, -0.08594550920448], -[-0.2304686605327, -0.08569171759089], -[-0.2253105457813, -0.08544450197988], -[-0.2201509977396, -0.08520379620437], -[-0.2149900488866, -0.08496953596016], -[-0.2098277319001, -0.08474165877962], -[-0.2046640796313, -0.0845201040061], -[-0.1994991250807, -0.08430481276902], -[-0.1943329013761, -0.08409572795973], -[-0.189165441752, -0.083892794208], -[-0.1839967795309, -0.08369595785932], -[-0.1788269481049, -0.0835051669529], -[-0.1736559809202, -0.08332037120038], -[-0.1684839114616, -0.0831415219653], -[-0.1633107732394, -0.08296857224324], -[-0.1581365997765, -0.08280147664275], -[-0.1529614245973, -0.08264019136694], -[-0.1477852812177, -0.08248467419578], -[-0.1426082031359, -0.08233488446914], -[-0.1374302238241, -0.08219078307045], -[-0.1322513767217, -0.08205233241115], -[-0.1270716952292, -0.08191949641568], -[-0.1218912127023, -0.08179224050725], -[-0.1167099624481, -0.08167053159421], -[-0.1115279777209, -0.08155433805707], -[-0.1063452917196, -0.08144362973615], -[-0.1011619375852, -0.08133837791987], -[-0.09597794839941, -0.08123855533365], -[-0.09079335718369, -0.08114413612941], -[-0.08560819689882, -0.08105509587567], -[-0.08042250044519, -0.08097141154821], -[-0.07523630066353, -0.08089306152134], -[-0.07004963033615, -0.08082002555971], -[-0.06486252218863, -0.08075228481072], -[-0.05967500889192, -0.08068982179739], -[-0.05448712306488, -0.08063262041189], -[-0.04929889727711, -0.08058066590949], -[-0.04411036405216, -0.08053394490312], -[-0.03892155587105, -0.08049244535836], -[-0.033732505176, -0.0804561565891], -[-0.02854324437444, -0.08042506925351], -[-0.02335380584326, -0.08039917535064], -[-0.01816422193316, -0.08037846821752], -[-0.01297452497323, -0.08036294252667], -[-0.007784747275593, -0.08035259428418], -[-0.002594921140229, -0.08034742082826], -[0.002594921140229, -0.08034742082826], -[0.007784747275593, -0.08035259428418], -[0.01297452497323, -0.08036294252667], -[0.01816422193316, -0.08037846821752], -[0.02335380584326, -0.08039917535064], -[0.02854324437444, -0.08042506925351], -[0.03373250517599, -0.0804561565891], -[0.03892155587105, -0.08049244535836], -[0.04411036405216, -0.08053394490311], -[0.04929889727711, -0.08058066590949], -[0.05448712306488, -0.08063262041189], -[0.05967500889192, -0.08068982179739], -[0.06486252218863, -0.08075228481072], -[0.07004963033615, -0.08082002555971], -[0.07523630066353, -0.08089306152134], -[0.08042250044519, -0.08097141154821], -[0.08560819689882, -0.08105509587567], -[0.09079335718369, -0.08114413612941], -[0.0959779483994, -0.08123855533365], -[0.1011619375852, -0.08133837791987], -[0.1063452917196, -0.08144362973615], -[0.1115279777209, -0.08155433805707], -[0.1167099624481, -0.08167053159421], -[0.1218912127023, -0.08179224050725], -[0.1270716952292, -0.08191949641568], -[0.1322513767217, -0.08205233241115], -[0.1374302238241, -0.08219078307045], -[0.1426082031359, -0.08233488446914], -[0.1477852812177, -0.08248467419578], -[0.1529614245973, -0.08264019136694], -[0.1581365997765, -0.08280147664275], -[0.1633107732394, -0.08296857224324], -[0.1684839114616, -0.0831415219653], -[0.1736559809202, -0.08332037120038], -[0.1788269481049, -0.0835051669529], -[0.1839967795309, -0.08369595785932], -[0.189165441752, -0.083892794208], -[0.1943329013761, -0.08409572795973], -[0.1994991250807, -0.08430481276902], -[0.2046640796313, -0.0845201040061], -[0.2098277319001, -0.08474165877962], -[0.2149900488866, -0.08496953596016], -[0.2201509977396, -0.08520379620437], -[0.2253105457813, -0.08544450197988], -[0.2304686605327, -0.08569171759089], -[0.2356253097407, -0.08594550920448], -[0.2407804614072, -0.08620594487757], -[0.2459340838202, -0.08647309458459], -[0.2510861455867, -0.08674703024575], -[0.2562366156678, -0.08702782575594], -[0.2613854634155, -0.08731555701424], -[0.2665326586125, -0.08761030195394], -[0.2716781715135, -0.08791214057312], -[0.2768219728891, -0.08822115496569], -[0.2819640340725, -0.08853742935283], -[0.2871043270078, -0.08886105011484], -[0.2922428243021, -0.0891921058232], -[0.2973794992793, -0.08953068727303], -[0.3025143260368, -0.08987688751547], -[0.3076472795053, -0.0902308018904], -[0.3127783355114, -0.09059252805887], -[0.3179074708427, -0.09096216603559], -[0.3230346633169, -0.09133981822111], -[0.3281598918524, -0.0917255894336], -[0.3332831365441, -0.09211958694017], -[0.3384043787401, -0.09252192048753], -[0.3435236011238, -0.09293270233186], -[0.3486407877975, -0.0933520472676], -[0.3537559243705, -0.09378007265526], -[0.3588689980498, -0.09421689844766], -[0.3639799977347, -0.09466264721472], -[0.3690889141141, -0.09511744416641], -[0.3741957397679, -0.09558141717365], -[0.3793004692708, -0.09605469678687], -[0.3844030993002, -0.09653741625201], -[0.3895036287467, -0.09702971152369], -[0.3946020588279, -0.09753172127508], -[0.3996983932052, -0.09804358690434], -[0.4047926381036, -0.09856545253722], -[0.4098848024336, -0.09909746502542], -[0.4149748979167, -0.09963977394038], -[0.420062939212, -0.1001925315621], -[0.4251489440458, -0.1007558928627], -[0.4302329333423, -0.1013300154839], -[0.4353149313564, -0.1019150597088], -[0.4403949658067, -0.1025111884269], -[0.4454730680101, -0.1031185670912], -[0.4505492730163, -0.1037373636697], -[0.4556236197416, -0.1043677485867], -[0.4606961511025, -0.1050098946578], -[0.4657669141477, -0.1056639770146], -[0.4708359601881, -0.1063301730209], -[0.4759033449241, -0.1070086621794], -[0.4809691285695, -0.1076996260277], -[0.4860333759709, -0.1084032480251], -[-0.4833887387086, -0.1038232936338], -[-0.4783181833725, -0.1031242809475], -[-0.4732457201127, -0.1024375265984], -[-0.4681718431472, -0.1017631250733], -[-0.4630964940266, -0.1011008995523], -[-0.4580196185857, -0.1004506751666], -[-0.4529411668272, -0.09981227909691], -[-0.4478610928021, -0.09918554066221], -[-0.4427793544867, -0.09857029139987], -[-0.437695913659, -0.09796636513711], -[-0.4326107357723, -0.09737359805417], -[-0.4275237898296, -0.09679182873978], -[-0.4224350482564, -0.09622089823912], -[-0.4173444867742, -0.09566065009481], -[-0.4122520842749, -0.09511093038144], -[-0.4071578226952, -0.09457158773346], -[-0.4020616868937, -0.09404247336779], -[-0.3969636645282, -0.09352344110068], -[-0.3918637459359, -0.09301434735957], -[-0.3867619240149, -0.09251505119033], -[-0.381658194109, -0.09202541426013], -[-0.3765525538937, -0.09154530085639], -[-0.3714450032663, -0.09107457788195], -[-0.3663355442375, -0.0906131148471], -[-0.3612241808266, -0.0901607838584], -[-0.3561109189593, -0.08971745960485], -[-0.3509957663689, -0.08928301934156], -[-0.3458787325004, -0.08885734287121], -[-0.3407598284174, -0.08844031252359], -[-0.3356390667123, -0.08803181313317], -[-0.3305164614201, -0.08763173201558], -[-0.3253920279347, -0.08723995894227], -[-0.3202657829284, -0.08685638611434], -[-0.3151377442746, -0.08648090813533], -[-0.3100079309737, -0.08611342198317], -[-0.3048763630818, -0.0857538269815], -[-0.2997430616421, -0.0854020247705], -[-0.29460804862, -0.08505791927728], -[-0.28947134684, -0.08472141668609], -[-0.284332979926, -0.08439242540826], -[-0.2791929722447, -0.08407085605217], -[-0.2740513488507, -0.08375662139321], -[-0.2689081354348, -0.0834496363439], -[-0.2637633582748, -0.08314981792411], -[-0.2586170441887, -0.08285708523164], -[-0.2534692204901, -0.08257135941306], -[-0.248319914946, -0.08229256363491], -[-0.2431691557373, -0.08202062305539], -[-0.2380169714205, -0.08175546479643], -[-0.2328633908925, -0.0814970179163], -[-0.2277084433567, -0.0812452133828], -[-0.2225521582916, -0.08099998404693], -[-0.217394565421, -0.08076126461719], -[-0.2122356946857, -0.08052899163453], -[-0.2070755762179, -0.08030310344785], -[-0.2019142403165, -0.08008354019019], -[-0.1967517174239, -0.07987024375559], -[-0.1915880381053, -0.07966315777658], -[-0.1864232330286, -0.07946222760229], -[-0.181257332946, -0.0792674002775], -[-0.1760903686775, -0.07907862452182], -[-0.1709223710949, -0.07889585071023], -[-0.1657533711074, -0.07871903085375], -[-0.1605833996491, -0.07854811858109], -[-0.1554124876665, -0.07838306912085], -[-0.1502406661078, -0.07822383928439], -[-0.1450679659137, -0.07807038744942], -[-0.139894418008, -0.0779226735442], -[-0.1347200532903, -0.07778065903237], -[-0.1295449026291, -0.07764430689851], -[-0.124368996856, -0.0775135816342], -[-0.1191923667606, -0.07738844922483], -[-0.1140150430863, -0.07726887713692], -[-0.1088370565265, -0.07715483430615], -[-0.1036584377226, -0.07704629112589], -[-0.09847921726097, -0.07694321943637], -[-0.09329942567236, -0.07684559251442], -[-0.0881190934306, -0.07675338506379], -[-0.08293825095252, -0.07666657320596], -[-0.07775692859824, -0.07658513447162], -[-0.07257515667198, -0.07650904779261], -[-0.06739296542329, -0.07643829349436], -[-0.06221038504884, -0.07637285328898], -[-0.05702744569447, -0.07631271026875], -[-0.05184417745771, -0.07625784890015], -[-0.04666061039067, -0.07620825501847], -[-0.04147677450307, -0.07616391582278], -[-0.0362926997658, -0.07612481987149], -[-0.03110841611454, -0.07609095707841], -[-0.02592395345367, -0.07606231870919], -[-0.02073934166042, -0.07603889737831], -[-0.01555461058912, -0.07602068704657], -[-0.01036979007559, -0.07600768301895], -[-0.005184909941709, -0.07599988194303], -[-1.337561030457e-15, -0.07599728180781], -[0.005184909941709, -0.07599988194303], -[0.01036979007559, -0.07600768301895], -[0.01555461058912, -0.07602068704657], -[0.02073934166042, -0.07603889737831], -[0.02592395345367, -0.07606231870919], -[0.03110841611453, -0.07609095707841], -[0.0362926997658, -0.07612481987149], -[0.04147677450307, -0.07616391582278], -[0.04666061039067, -0.07620825501847], -[0.05184417745771, -0.07625784890015], -[0.05702744569447, -0.07631271026875], -[0.06221038504884, -0.07637285328898], -[0.06739296542329, -0.07643829349436], -[0.07257515667198, -0.07650904779261], -[0.07775692859824, -0.07658513447163], -[0.08293825095252, -0.07666657320596], -[0.0881190934306, -0.07675338506379], -[0.09329942567236, -0.07684559251442], -[0.09847921726097, -0.07694321943637], -[0.1036584377226, -0.07704629112589], -[0.1088370565265, -0.07715483430615], -[0.1140150430863, -0.07726887713692], -[0.1191923667606, -0.07738844922483], -[0.124368996856, -0.0775135816342], -[0.1295449026291, -0.07764430689851], -[0.1347200532903, -0.07778065903237], -[0.139894418008, -0.0779226735442], -[0.1450679659137, -0.07807038744942], -[0.1502406661078, -0.07822383928439], -[0.1554124876665, -0.07838306912085], -[0.1605833996491, -0.07854811858109], -[0.1657533711074, -0.07871903085375], -[0.1709223710949, -0.07889585071023], -[0.1760903686775, -0.07907862452182], -[0.181257332946, -0.0792674002775], -[0.1864232330286, -0.07946222760231], -[0.1915880381053, -0.07966315777658], -[0.1967517174239, -0.07987024375559], -[0.2019142403165, -0.08008354019019], -[0.2070755762179, -0.08030310344785], -[0.2122356946857, -0.08052899163453], -[0.217394565421, -0.08076126461719], -[0.2225521582916, -0.08099998404693], -[0.2277084433567, -0.0812452133828], -[0.2328633908925, -0.0814970179163], -[0.2380169714205, -0.08175546479643], -[0.2431691557373, -0.08202062305539], -[0.248319914946, -0.08229256363491], -[0.2534692204901, -0.08257135941306], -[0.2586170441887, -0.08285708523164], -[0.2637633582748, -0.08314981792411], -[0.2689081354348, -0.0834496363439], -[0.2740513488507, -0.08375662139321], -[0.2791929722447, -0.08407085605217], -[0.284332979926, -0.08439242540826], -[0.28947134684, -0.08472141668609], -[0.29460804862, -0.08505791927728], -[0.2997430616421, -0.0854020247705], -[0.3048763630818, -0.0857538269815], -[0.3100079309737, -0.08611342198317], -[0.3151377442746, -0.08648090813533], -[0.3202657829284, -0.08685638611434], -[0.3253920279347, -0.08723995894227], -[0.3305164614201, -0.08763173201558], -[0.3356390667123, -0.08803181313317], -[0.3407598284174, -0.08844031252357], -[0.3458787325004, -0.08885734287121], -[0.3509957663689, -0.08928301934156], -[0.3561109189593, -0.08971745960485], -[0.3612241808266, -0.0901607838584], -[0.3663355442375, -0.0906131148471], -[0.3714450032663, -0.09107457788195], -[0.3765525538937, -0.09154530085639], -[0.381658194109, -0.09202541426013], -[0.3867619240149, -0.09251505119033], -[0.3918637459359, -0.09301434735957], -[0.3969636645282, -0.09352344110068], -[0.4020616868937, -0.09404247336779], -[0.4071578226952, -0.09457158773346], -[0.4122520842749, -0.09511093038144], -[0.4173444867742, -0.09566065009492], -[0.4224350482564, -0.09622089823912], -[0.4275237898296, -0.09679182873978], -[0.4326107357723, -0.09737359805417], -[0.437695913659, -0.09796636513711], -[0.4427793544867, -0.09857029139987], -[0.4478610928021, -0.09918554066221], -[0.4529411668272, -0.09981227909691], -[0.4580196185857, -0.1004506751666], -[0.4630964940266, -0.1011008995523], -[0.4681718431472, -0.1017631250733], -[0.4732457201127, -0.1024375265984], -[0.4783181833725, -0.1031242809475], -[0.483388738711, -0.1038232936622], -[-0.4807385013406, -0.09923304486795], -[-0.4756613663294, -0.09853839997275], -[-0.4705824911691, -0.09785596064788], -[-0.4655023867926, -0.09718575468684], -[-0.4604209963999, -0.09652760980524], -[-0.4553382672578, -0.09588135558926], -[-0.4502541505894, -0.09524682358906], -[-0.4451686014612, -0.09462384740351], -[-0.4400815786685, -0.09401226275658], -[-0.4349930446176, -0.09341190756572], -[-0.4299029652076, -0.09282262200258], -[-0.4248113097116, -0.09224424854638], -[-0.4197180506571, -0.09167663203043], -[-0.4146231637062, -0.09111961968198], -[-0.4095266275376, -0.09057306115598], -[-0.404428423728, -0.09003680856294], -[-0.3993285366354, -0.08951071649131], -[-0.394226953284, -0.08899464202485], -[-0.3891236632503, -0.08848844475517], -[-0.3840186585516, -0.08799198678982], -[-0.3789119335362, -0.08750513275642], -[-0.3738034847765, -0.08702774980291], -[-0.3686933109635, -0.08655970759436], -[-0.3635814128055, -0.08610087830669], -[-0.3584677929275, -0.08565113661739], -[-0.3533524557751, -0.08521035969373], -[-0.3482354075202, -0.08477842717849], -[-0.3431166559695, -0.08435522117373], -[-0.3379962104771, -0.08394062622246], -[-0.3328740818582, -0.08353452928885], -[-0.3277502823071, -0.08313681973674], -[-0.322624825318, -0.08274738930706], -[-0.3174977256077, -0.08236613209398], -[-0.3123689990426, -0.08199294452022], -[-0.3072386625675, -0.0816277253115], -[-0.3021067341375, -0.08127037547035], -[-0.2969732326532, -0.08092079824942], -[-0.2918381778977, -0.08057889912442], -[-0.2867015904773, -0.08024458576664], -[-0.2815634917641, -0.07991776801549], -[-0.2764239038414, -0.07959835785075], -[-0.2712828494516, -0.079286269365], -[-0.266140351947, -0.07898141873598], -[-0.2609964352422, -0.0786837241992], -[-0.2558511237694, -0.07839310602072], -[-0.2507044424359, -0.07810948647019], -[-0.2455564165835, -0.07783278979431], -[-0.2404070719505, -0.07756294219053], -[-0.2352564346354, -0.07729987178124], -[-0.2301045310626, -0.07704350858844], -[-0.2249513879505, -0.07679378450885], -[-0.2197970322808, -0.07655063328953], -[-0.2146414912702, -0.07631399050407], -[-0.2094847923435, -0.07608379352931], -[-0.2043269631087, -0.07585998152269], -[-0.199168031333, -0.07564249540012], -[-0.1940080249214, -0.0754312778145], -[-0.1888469718963, -0.07522627313492], -[-0.1836849003782, -0.07502742742613], -[-0.1785218385682, -0.0748346884294], -[-0.1733578147321, -0.07464800554307], -[-0.1681928571853, -0.07446732980441], -[-0.1630269942788, -0.07429261387181], -[-0.1578602543873, -0.07412381200772], -[-0.152692665897, -0.07396088006212], -[-0.1475242571962, -0.0738037754567], -[-0.1423550566652, -0.07365245716965], -[-0.1371850926687, -0.07350688572092], -[-0.1320143935479, -0.07336702315831], -[-0.1268429876144, -0.07323283304401], -[-0.1216709031447, -0.07310428044177], -[-0.116498168375, -0.07298133190466], -[-0.1113248114978, -0.07286395546337], -[-0.106150860658, -0.07275212061516], -[-0.100976343951, -0.07264579831328], -[-0.0958012894204, -0.07254496095699], -[-0.09062572505672, -0.07244958238211], -[-0.08544967879696, -0.07235963785208], -[-0.08027317852432, -0.07227510404962], -[-0.07509625206858, -0.0721959590688], -[-0.06991892720704, -0.07212218240772], -[-0.0647412316658, -0.07205375496162], -[-0.05956319312154, -0.07199065901651], -[-0.05438483920362, -0.07193287824329], -[-0.04920619749658, -0.07188039769237], -[-0.04402729554299, -0.0718332037887], -[-0.03884816084654, -0.07179128432732], -[-0.0336688208754, -0.0717546284694], -[-0.02848930306591, -0.07172322673864], -[-0.02330963482631, -0.0716970710182], -[-0.01812984354087, -0.07167615454807], -[-0.01294995657394, -0.07166047192289], -[-0.007770001274294, -0.07165001909015], -[-0.002590004979528, -0.07164479334891], -[0.002590004979528, -0.0716447933489], -[0.007770001274294, -0.07165001909015], -[0.01294995657394, -0.07166047192289], -[0.01812984354087, -0.07167615454808], -[0.02330963482631, -0.0716970710182], -[0.0284893030659, -0.07172322673864], -[0.0336688208754, -0.0717546284694], -[0.03884816084654, -0.07179128432732], -[0.04402729554299, -0.0718332037887], -[0.04920619749658, -0.07188039769237], -[0.05438483920362, -0.07193287824329], -[0.05956319312154, -0.07199065901651], -[0.0647412316658, -0.07205375496162], -[0.06991892720704, -0.07212218240772], -[0.07509625206858, -0.0721959590688], -[0.08027317852432, -0.07227510404962], -[0.08544967879696, -0.07235963785208], -[0.09062572505672, -0.07244958238211], -[0.0958012894204, -0.07254496095699], -[0.100976343951, -0.07264579831328], -[0.106150860658, -0.07275212061516], -[0.1113248114978, -0.07286395546337], -[0.116498168375, -0.07298133190466], -[0.1216709031447, -0.07310428044177], -[0.1268429876144, -0.07323283304401], -[0.1320143935479, -0.07336702315831], -[0.1371850926687, -0.07350688572092], -[0.1423550566652, -0.07365245716965], -[0.1475242571962, -0.07380377545672], -[0.152692665897, -0.07396088006212], -[0.1578602543873, -0.07412381200772], -[0.1630269942788, -0.07429261387181], -[0.1681928571853, -0.07446732980441], -[0.1733578147321, -0.07464800554307], -[0.1785218385682, -0.0748346884294], -[0.1836849003782, -0.07502742742613], -[0.1888469718963, -0.07522627313487], -[0.1940080249214, -0.07543127781451], -[0.199168031333, -0.07564249540012], -[0.2043269631087, -0.07585998152269], -[0.2094847923435, -0.07608379352931], -[0.2146414912702, -0.07631399050407], -[0.2197970322808, -0.07655063328953], -[0.2249513879505, -0.07679378450885], -[0.2301045310626, -0.07704350858844], -[0.2352564346354, -0.07729987178124], -[0.2404070719505, -0.07756294219053], -[0.2455564165835, -0.07783278979431], -[0.2507044424359, -0.07810948647019], -[0.2558511237694, -0.07839310602072], -[0.2609964352422, -0.0786837241992], -[0.266140351947, -0.07898141873598], -[0.2712828494516, -0.079286269365], -[0.2764239038414, -0.07959835785075], -[0.2815634917641, -0.07991776801549], -[0.2867015904774, -0.08024458576664], -[0.2918381778977, -0.08057889912442], -[0.2969732326532, -0.08092079824942], -[0.3021067341375, -0.08127037547035], -[0.3072386625675, -0.0816277253115], -[0.3123689990426, -0.08199294452022], -[0.3174977256077, -0.08236613209398], -[0.322624825318, -0.08274738930706], -[0.3277502823071, -0.08313681973674], -[0.3328740818582, -0.08353452928885], -[0.3379962104771, -0.08394062622246], -[0.3431166559695, -0.08435522117373], -[0.3482354075202, -0.08477842717849], -[0.3533524557751, -0.08521035969373], -[0.3584677929275, -0.08565113661739], -[0.3635814128055, -0.08610087830669], -[0.3686933109635, -0.08655970759436], -[0.3738034847765, -0.0870277498029], -[0.3789119335362, -0.08750513275642], -[0.3840186585516, -0.08799198678982], -[0.3891236632503, -0.08848844475517], -[0.394226953284, -0.08899464202485], -[0.3993285366354, -0.08951071649131], -[0.404428423728, -0.09003680856294], -[0.4095266275376, -0.09057306115598], -[0.4146231637062, -0.09111961968198], -[0.4197180506571, -0.09167663203043], -[0.4248113097116, -0.09224424854638], -[0.4299029652076, -0.09282262200258], -[0.4349930446176, -0.09341190756572], -[0.4400815786685, -0.09401226275658], -[0.4451686014612, -0.09462384740351], -[0.4502541505894, -0.09524682358906], -[0.4553382672578, -0.09588135558926], -[0.4604209963999, -0.09652760980523], -[0.4655023867926, -0.09718575468684], -[0.4705824911691, -0.09785596064788], -[0.4756613663294, -0.09853839997276], -[0.4807385013434, -0.09923304489689], -[-0.4780822614972, -0.09463241305382], -[-0.4729988055684, -0.0939422116584], -[-0.467913781445, -0.09326419095468], -[-0.4628277097946, -0.09259828644162], -[-0.4577405353568, -0.09194433019644], -[-0.4526522067294, -0.09130215608965], -[-0.4475626762652, -0.090671599874], -[-0.442471899965, -0.09005249926528], -[-0.4373798373697, -0.08944469401528], -[-0.4322864514493, -0.08884802597736], -[-0.427191708492, -0.08826233916479], -[-0.4220955779914, -0.08768747980229], -[-0.416998032534, -0.08712329637104], -[-0.4118990476865, -0.0865696396476], -[-0.4067986018841, -0.08602636273692], -[-0.4016966763185, -0.08549332110001], -[-0.3965932548279, -0.08497037257634], -[-0.3914883237879, -0.08445737740153], -[-0.3863818720043, -0.08395419822051], -[-0.3812738906069, -0.08346070009653], -[-0.3761643729463, -0.0829767505163], -[-0.3710533144921, -0.08250221939158], -[-0.3659407127335, -0.08203697905749], -[-0.3608265670826, -0.08158090426776], -[-0.3557108787796, -0.08113387218733], -[-0.3505936508014, -0.0806957623824], -[-0.3454748877716, -0.08026645680818], -[-0.3403545958746, -0.0798458397947], -[-0.3352327827713, -0.07943379803072], -[-0.3301094575179, -0.07903022054609], -[-0.324984630488, -0.07863499869262], -[-0.319858313296, -0.0782480261237], -[-0.3147305187252, -0.07786919877292], -[-0.3096012606567, -0.07749841483166], -[-0.3044705540026, -0.07713557472577], -[-0.2993384146402, -0.0767805810925], -[-0.2942048593511, -0.07643333875479], -[-0.2890699057604, -0.07609375469788], -[-0.28393357228, -0.07576173804358], -[-0.2787958780542, -0.0754372000252], -[-0.2736568429074, -0.07512005396216], -[-0.2685164872944, -0.07481021523463], -[-0.2633748322526, -0.07450760125819], -[-0.2582318993576, -0.07421213145857], -[-0.2530877106797, -0.07392372724665], -[-0.2479422887434, -0.07364231199366], -[-0.2427956564884, -0.07336781100658], -[-0.2376478372337, -0.07310015150402], -[-0.232498854642, -0.07283926259239], -[-0.2273487326879, -0.07258507524244], -[-0.2221974956264, -0.07233752226633], -[-0.2170451679639, -0.0720965382951], -[-0.2118917744314, -0.07186205975667], -[-0.206737339958, -0.07163402485433], -[-0.2015818896474, -0.07141237354577], -[-0.1964254487554, -0.07119704752265], -[-0.1912680426687, -0.07098799019074], -[-0.1861096968855, -0.07078514665061], -[-0.1809504369973, -0.0705884636789], -[-0.1757902886722, -0.07039788971018], -[-0.1706292776391, -0.07021337481939], -[-0.165467429674, -0.07003487070484], -[-0.1603047705861, -0.06986233067185], -[-0.1551413262067, -0.06969570961691], -[-0.1499771223777, -0.06953496401246], -[-0.1448121849421, -0.0693800518923], -[-0.1396465397349, -0.06923093283743], -[-0.1344802125758, -0.0690875679626], -[-0.1293132292615, -0.06894991990339], -[-0.1241456155603, -0.06881795280383], -[-0.1189773972063, -0.06869163230453], -[-0.1138085998952, -0.06857092553149], -[-0.1086392492807, -0.06845580108527], -[-0.1034693709712, -0.06834622903087], -[-0.09829899052747, -0.06824218088797], -[-0.09312813346128, -0.06814362962179], -[-0.08795682523396, -0.06805054963445], -[-0.08278509125597, -0.06796291675677], -[-0.07761295688692, -0.06788070824063], -[-0.07244044743603, -0.06780390275174], -[-0.06726758816307, -0.06773248036296], -[-0.06209440427978, -0.06766642254806], -[-0.05692092095165, -0.06760571217593], -[-0.05174716330005, -0.06755033350524], -[-0.04657315640477, -0.06750027217959], -[-0.04139892530681, -0.06745551522309], -[-0.03622449501145, -0.06741605103631], -[-0.03104989049161, -0.06738186939281], -[-0.02587513669143, -0.06735296143595], -[-0.02070025852999, -0.06732931967618], -[-0.01552528090525, -0.06731093798881], -[-0.01035022869811, -0.06729781161212], -[-0.00517512677657, -0.06728993714589], -[-9.554007360407e-17, -0.06728731255043], -[0.00517512677657, -0.06728993714589], -[0.01035022869811, -0.06729781161212], -[0.01552528090525, -0.06731093798881], -[0.02070025852999, -0.06732931967618], -[0.02587513669143, -0.06735296143595], -[0.03104989049161, -0.06738186939282], -[0.03622449501145, -0.06741605103631], -[0.04139892530681, -0.06745551522308], -[0.04657315640477, -0.06750027217959], -[0.05174716330005, -0.06755033350524], -[0.05692092095164, -0.06760571217593], -[0.06209440427978, -0.06766642254806], -[0.06726758816307, -0.06773248036296], -[0.07244044743603, -0.06780390275174], -[0.07761295688692, -0.06788070824063], -[0.08278509125597, -0.06796291675677], -[0.08795682523396, -0.06805054963445], -[0.09312813346128, -0.06814362962179], -[0.09829899052747, -0.06824218088797], -[0.1034693709712, -0.06834622903087], -[0.1086392492807, -0.06845580108527], -[0.1138085998952, -0.06857092553149], -[0.1189773972063, -0.06869163230453], -[0.1241456155603, -0.06881795280383], -[0.1293132292615, -0.06894991990339], -[0.1344802125758, -0.0690875679626], -[0.1396465397349, -0.06923093283743], -[0.1448121849421, -0.0693800518923], -[0.1499771223777, -0.06953496401246], -[0.1551413262067, -0.06969570961691], -[0.1603047705861, -0.06986233067185], -[0.165467429674, -0.07003487070484], -[0.1706292776391, -0.07021337481939], -[0.1757902886722, -0.07039788971018], -[0.1809504369973, -0.0705884636789], -[0.1861096968855, -0.07078514665061], -[0.1912680426687, -0.07098799019074], -[0.1964254487554, -0.07119704752265], -[0.2015818896474, -0.07141237354577], -[0.206737339958, -0.07163402485433], -[0.2118917744314, -0.07186205975667], -[0.2170451679639, -0.0720965382951], -[0.2221974956264, -0.07233752226633], -[0.2273487326879, -0.07258507524245], -[0.232498854642, -0.07283926259239], -[0.2376478372337, -0.07310015150402], -[0.2427956564884, -0.07336781100658], -[0.2479422887434, -0.07364231199366], -[0.2530877106797, -0.07392372724665], -[0.2582318993576, -0.07421213145857], -[0.2633748322526, -0.07450760125819], -[0.2685164872944, -0.07481021523463], -[0.2736568429074, -0.07512005396216], -[0.2787958780542, -0.0754372000252], -[0.28393357228, -0.07576173804358], -[0.2890699057604, -0.07609375469788], -[0.2942048593511, -0.07643333875479], -[0.2993384146402, -0.0767805810925], -[0.3044705540025, -0.07713557472595], -[0.3096012606567, -0.07749841483166], -[0.3147305187252, -0.07786919877292], -[0.319858313296, -0.0782480261237], -[0.324984630488, -0.07863499869262], -[0.3301094575179, -0.07903022054609], -[0.3352327827713, -0.07943379803072], -[0.3403545958746, -0.0798458397947], -[0.3454748877716, -0.08026645680818], -[0.3505936508014, -0.0806957623824], -[0.3557108787796, -0.08113387218733], -[0.3608265670826, -0.08158090426776], -[0.3659407127335, -0.08203697905749], -[0.3710533144921, -0.08250221939158], -[0.3761643729463, -0.0829767505163], -[0.3812738906069, -0.08346070009653], -[0.3863818720043, -0.08395419822051], -[0.3914883237879, -0.08445737740153], -[0.3965932548279, -0.08497037257634], -[0.4016966763185, -0.08549332110001], -[0.4067986018841, -0.08602636273692], -[0.4118990476865, -0.0865696396476], -[0.416998032534, -0.08712329637104], -[0.4220955779914, -0.08768747980229], -[0.427191708492, -0.08826233916479], -[0.4322864514493, -0.08884802597736], -[0.4373798373697, -0.08944469401528], -[0.442471899965, -0.09005249926528], -[0.4475626762652, -0.090671599874], -[0.4526522067294, -0.09130215608965], -[0.4577405353568, -0.09194433019644], -[0.4628277097946, -0.09259828644162], -[0.467913781445, -0.09326419095468], -[0.4729988055684, -0.0939422116584], -[0.4780822615003, -0.09463241308305], -[-0.4754201523261, -0.0900216306936], -[-0.4703306273561, -0.08933594102581], -[-0.4652397126214, -0.08866244064999], -[-0.460147929338, -0.08800094146538], -[-0.4550552236783, -0.08735127974485], -[-0.4499615454741, -0.08671329348046], -[-0.4448668481192, -0.08608682246818], -[-0.4397710884693, -0.08547170838496], -[-0.4346742267393, -0.08486779485866], -[-0.4295762263994, -0.0842749275309], -[-0.4244770540701, -0.0836929541132], -[-0.4193766794162, -0.08312172443754], -[-0.4142750750402, -0.08256109049632], -[-0.4091722163768, -0.0820109064877], -[-0.4040680815861, -0.08147102884067], -[-0.3989626514492, -0.0809413162461], -[-0.3938559092634, -0.08042162967845], -[-0.3887478407396, -0.07991183241379], -[-0.3836384339004, -0.07941179004354], -[-0.3785276789801, -0.07892137048427], -[-0.373415568327, -0.0784404439839], -[-0.3683020963064, -0.07796888312445], -[-0.3631872592073, -0.07750656282178], -[-0.3580710551501, -0.07705336032237], -[-0.3529534839969, -0.07660915519755], -[-0.3478345472646, -0.07617382933536], -[-0.34271424804, -0.07574726693015], -[-0.3375925908974, -0.07532935447058], -[-0.3324695818194, -0.07491998072513], -[-0.3273452281189, -0.07451903672701], -[-0.3222195383652, -0.07412641575693], -[-0.3170925223118, -0.07374201332507], -[-0.3119641908268, -0.07336572715179], -[-0.306834555826, -0.07299745714752], -[-0.3017036302091, -0.07263710539189], -[-0.2965714277971, -0.07228457611215], -[-0.2914379632733, -0.07193977566112], -[-0.2863032521266, -0.0716026124947], -[-0.2811673105969, -0.07127299714907], -[-0.2760301556227, -0.07095084221766], -[-0.2708918047917, -0.07063606232799], -[-0.2657522762931, -0.0703285741185], -[-0.2606115888721, -0.07002829621531], -[-0.2554697617872, -0.06973514920911], -[-0.2503268147689, -0.06944905563223], -[-0.2451827679806, -0.06916993993585], -[-0.2400376419819, -0.06889772846747], -[-0.2348914576934, -0.06863234944868], -[-0.2297442363638, -0.06837373295328], -[-0.224595999538, -0.06812181088571], -[-0.2194467690284, -0.06787651695995], -[-0.2142965668865, -0.06763778667877], -[-0.2091454153767, -0.06740555731348], -[-0.2039933369522, -0.06717976788411], -[-0.1988403542317, -0.06696035914014], -[-0.1936864899778, -0.06674727354162], -[-0.1885317670772, -0.06654045524098], -[-0.1833762085218, -0.06633985006497], -[-0.1782198373914, -0.06614540549787], -[-0.173062676838, -0.06595707066438], -[-0.1679047500703, -0.06577479631357], -[-0.1627460803409, -0.06559853480329], -[-0.1575866909332, -0.06542824008505], -[-0.1524266051502, -0.06526386768943], -[-0.1472658463042, -0.06510537471215], -[-0.1421044377077, -0.06495271980053], -[-0.1369424026645, -0.06480586314059], -[-0.1317797644629, -0.06466476644467], -[-0.1266165463685, -0.06452939293948], -[-0.121452771619, -0.06439970735482], -[-0.1162884634189, -0.06427567591267], -[-0.1111236449356, -0.0641572663169], -[-0.1059583392957, -0.06404444774341], -[-0.1007925695825, -0.06393719083082], -[-0.09562635883353, -0.06383546767157], -[-0.09045973003939, -0.06373925180355], -[-0.08529270614261, -0.06364851820226], -[-0.08012531003733, -0.06356324327329], -[-0.07495756456937, -0.0634834048454], -[-0.06978949253689, -0.06340898216395], -[-0.0646211166914, -0.06333995588485], -[-0.05945245973919, -0.06327630806889], -[-0.05428354434324, -0.06321802217657], -[-0.04911439312532, -0.06316508306324], -[-0.04394502866859, -0.06311747697478], -[-0.03877547352034, -0.06307519154366], -[-0.03360575019511, -0.06303821578534], -[-0.02843588117795, -0.0630065400952], -[-0.023265888928, -0.06298015624573], -[-0.01809579588208, -0.06295905738426], -[-0.01292562445865, -0.06294323803096], -[-0.007755397061683, -0.06293269407734], -[-0.002585136084767, -0.06292742278502], -[0.002585136084767, -0.06292742278502], -[0.007755397061683, -0.06293269407734], -[0.01292562445865, -0.06294323803097], -[0.01809579588208, -0.06295905738426], -[0.023265888928, -0.06298015624573], -[0.02843588117795, -0.0630065400952], -[0.03360575019511, -0.06303821578534], -[0.03877547352034, -0.06307519154366], -[0.04394502866859, -0.06311747697478], -[0.04911439312532, -0.06316508306324], -[0.05428354434324, -0.06321802217657], -[0.05945245973919, -0.06327630806889], -[0.0646211166914, -0.06333995588485], -[0.06978949253689, -0.06340898216395], -[0.07495756456937, -0.0634834048454], -[0.08012531003733, -0.06356324327329], -[0.08529270614261, -0.06364851820226], -[0.09045973003939, -0.06373925180355], -[0.09562635883353, -0.06383546767157], -[0.1007925695825, -0.06393719083082], -[0.1059583392957, -0.06404444774342], -[0.1111236449356, -0.0641572663169], -[0.1162884634189, -0.06427567591267], -[0.121452771619, -0.06439970735482], -[0.1266165463685, -0.06452939293949], -[0.1317797644629, -0.06466476644467], -[0.1369424026645, -0.0648058631406], -[0.1421044377077, -0.06495271980053], -[0.1472658463042, -0.06510537471215], -[0.1524266051502, -0.06526386768941], -[0.1575866909332, -0.06542824008505], -[0.1627460803409, -0.06559853480329], -[0.1679047500703, -0.06577479631357], -[0.173062676838, -0.06595707066438], -[0.1782198373914, -0.06614540549787], -[0.1833762085218, -0.06633985006497], -[0.1885317670772, -0.06654045524093], -[0.1936864899778, -0.06674727354162], -[0.1988403542317, -0.06696035914014], -[0.2039933369522, -0.06717976788411], -[0.2091454153767, -0.06740555731348], -[0.2142965668865, -0.06763778667877], -[0.2194467690284, -0.06787651695995], -[0.224595999538, -0.06812181088571], -[0.2297442363638, -0.06837373295328], -[0.2348914576934, -0.06863234944868], -[0.2400376419819, -0.06889772846747], -[0.2451827679806, -0.06916993993585], -[0.2503268147689, -0.06944905563223], -[0.2554697617872, -0.06973514920911], -[0.2606115888721, -0.07002829621531], -[0.2657522762931, -0.0703285741185], -[0.2708918047917, -0.07063606232799], -[0.2760301556227, -0.07095084221766], -[0.2811673105969, -0.07127299714907], -[0.2863032521266, -0.0716026124947], -[0.2914379632733, -0.07193977566112], -[0.2965714277971, -0.07228457611215], -[0.3017036302091, -0.07263710539189], -[0.306834555826, -0.07299745714752], -[0.3119641908268, -0.07336572715178], -[0.3170925223118, -0.07374201332507], -[0.3222195383652, -0.07412641575693], -[0.3273452281189, -0.07451903672701], -[0.3324695818194, -0.07491998072513], -[0.3375925908974, -0.07532935447058], -[0.3427142480399, -0.07574726693047], -[0.3478345472646, -0.07617382933536], -[0.3529534839969, -0.07660915519755], -[0.3580710551501, -0.07705336032237], -[0.3631872592073, -0.07750656282178], -[0.3683020963064, -0.07796888312445], -[0.373415568327, -0.0784404439839], -[0.3785276789801, -0.07892137048427], -[0.3836384339004, -0.07941179004354], -[0.3887478407396, -0.07991183241379], -[0.3938559092634, -0.08042162967845], -[0.3989626514492, -0.0809413162461], -[0.4040680815861, -0.08147102884067], -[0.4091722163768, -0.0820109064877], -[0.4142750750402, -0.08256109049632], -[0.4193766794162, -0.08312172443669], -[0.4244770540701, -0.0836929541132], -[0.4295762263994, -0.0842749275309], -[0.4346742267393, -0.08486779485866], -[0.4397710884693, -0.08547170838496], -[0.4448668481192, -0.08608682246818], -[0.4499615454741, -0.08671329348046], -[0.4550552236783, -0.08735127974485], -[0.460147929338, -0.08800094146538], -[0.4652397126214, -0.08866244064999], -[0.4703306273561, -0.08933594102581], -[0.4754207309724, -0.09002160769071], -[-0.472752343207, -0.08540039181446], -[-0.4676569561789, -0.08471980971904], -[-0.4625604047795, -0.08405092952295], -[-0.4574631611822, -0.08339393758427], -[-0.4523651728889, -0.08274867421308], -[-0.447266390871, -0.08211498136745], -[-0.4421667694776, -0.08149270273412], -[-0.437066266341, -0.08088168380235], -[-0.4319648422803, -0.08028177193078], -[-0.4268624612031, -0.07969281640786], -[-0.4217590900064, -0.07911466850599], -[-0.4166546984767, -0.07854718152965], -[-0.4115492591898, -0.07799021085786], -[-0.4064427474102, -0.07744361398121], -[-0.4013351409918, -0.07690725053375], -[-0.3962264202778, -0.07638098232014], -[-0.3911165680027, -0.0758646733381], -[-0.3860055691946, -0.07535818979676], -[-0.3808934110793, -0.07486140013092], -[-0.3757800829858, -0.07437417501163], -[-0.3706655762532, -0.07389638735334], -[-0.3655498841395, -0.07342791231783], -[-0.3604330017327, -0.07296862731515], -[-0.3553149258637, -0.072518412002], -[-0.3501956550211, -0.07207714827741], -[-0.3450751892688, -0.07164472027635], -[-0.3399535301652, -0.07122101436113], -[-0.3348306806854, -0.07080591911107], -[-0.3297066451451, -0.07039932531038], -[-0.3245814291277, -0.07000112593459], -[-0.319455039413, -0.06961121613569], -[-0.3143274839091, -0.06922949322601], -[-0.3091987715858, -0.06885585666114], -[-0.3040689124113, -0.06849020802196], -[-0.2989379172908, -0.06813245099582], -[-0.2938057980076, -0.06778249135725], -[-0.2886725671667, -0.06744023694795], -[-0.2835382381402, -0.06710559765654], -[-0.2784028250156, -0.06677848539783], -[-0.2732663425462, -0.06645881409199], -[-0.2681288061032, -0.06614649964343], -[-0.2629902316307, -0.06584145991973], -[-0.2578506356021, -0.06554361473048], -[-0.2527100349794, -0.06525288580618], -[-0.2475684471734, -0.06496919677731], -[-0.242425890007, -0.06469247315348], -[-0.2372823816794, -0.06442264230286], -[-0.2321379407331, -0.06415963343185], -[-0.2269925860219, -0.06390337756496], -[-0.2218463366811, -0.06365380752519], -[-0.2166992120994, -0.06341085791456], -[-0.2115512318919, -0.06317446509518], -[-0.2064024158756, -0.06294456717066], -[-0.2012527840458, -0.06272110396795], -[-0.1961023565538, -0.0625040170196], -[-0.1909511536869, -0.06229324954652], -[-0.1857991958487, -0.0620887464413], -[-0.1806465035419, -0.06189045425163], -[-0.1754930973511, -0.06169832116476], -[-0.1703389979281, -0.06151229699205], -[-0.1651842259774, -0.06133233315413], -[-0.1600288022433, -0.06115838266659], -[-0.1548727474982, -0.06099040012616], -[-0.1497160825318, -0.06082834169737], -[-0.1445588281411, -0.06067216509971], -[-0.1394010051216, -0.06052182959533], -[-0.1342426342597, -0.06037729597717], -[-0.1290837363252, -0.06023852655766], -[-0.1239243320656, -0.06010548515783], -[-0.1187644422004, -0.05997813709692], -[-0.1136040874166, -0.05985644918254], -[-0.108443288365, -0.0597403897012], -[-0.1032820656567, -0.05962992840935], -[-0.09812043986079, -0.05952503652489], -[-0.09295843150248, -0.05942568671912], -[-0.08779606106169, -0.05933185310911], -[-0.08263334897232, -0.05924351125056], -[-0.07747031562204, -0.05916063813103], -[-0.07230698135253, -0.05908321216368], -[-0.0671433664602, -0.05901121318131], -[-0.06197949119733, -0.05894462243094], -[-0.05681537577358, -0.0588834225687], -[-0.05165104035791, -0.05882759765517], -[-0.04648650508082, -0.0587771331511], -[-0.04132179003686, -0.05873201591353], -[-0.03615691528745, -0.05869223419228], -[-0.03099190086397, -0.05865777762683], -[-0.025826766771, -0.05862863724359], -[-0.02066153298982, -0.05860480545348], -[-0.01549621948204, -0.05858627605002], -[-0.01033084619336, -0.0585730442076], -[-0.005165433057473, -0.05856510648028], -[-9.554007360407e-17, -0.05856246080084], -[0.005165433057473, -0.05856510648028], -[0.01033084619336, -0.0585730442076], -[0.01549621948204, -0.05858627605002], -[0.02066153298982, -0.05860480545348], -[0.025826766771, -0.05862863724358], -[0.03099190086397, -0.05865777762683], -[0.03615691528745, -0.05869223419228], -[0.04132179003686, -0.05873201591353], -[0.04648650508082, -0.0587771331511], -[0.05165104035792, -0.05882759765517], -[0.05681537577358, -0.0588834225687], -[0.06197949119733, -0.05894462243094], -[0.06714336646021, -0.05901121318131], -[0.07230698135253, -0.05908321216368], -[0.07747031562204, -0.05916063813103], -[0.08263334897232, -0.05924351125056], -[0.08779606106169, -0.05933185310911], -[0.09295843150248, -0.05942568671912], -[0.09812043986079, -0.05952503652489], -[0.1032820656567, -0.05962992840935], -[0.108443288365, -0.0597403897012], -[0.1136040874166, -0.05985644918255], -[0.1187644422004, -0.05997813709692], -[0.1239243320656, -0.06010548515783], -[0.1290837363252, -0.06023852655766], -[0.1342426342597, -0.06037729597717], -[0.1394010051216, -0.06052182959533], -[0.1445588281411, -0.06067216509971], -[0.1497160825318, -0.06082834169737], -[0.1548727474982, -0.06099040012616], -[0.1600288022433, -0.06115838266659], -[0.1651842259774, -0.06133233315413], -[0.1703389979281, -0.06151229699205], -[0.1754930973511, -0.06169832116476], -[0.1806465035419, -0.06189045425163], -[0.1857991958487, -0.0620887464413], -[0.1909511536868, -0.06229324954656], -[0.1961023565538, -0.0625040170196], -[0.2012527840458, -0.06272110396795], -[0.2064024158756, -0.06294456717066], -[0.2115512318919, -0.06317446509518], -[0.2166992120994, -0.06341085791456], -[0.2218463366811, -0.06365380752519], -[0.2269925860219, -0.06390337756496], -[0.2321379407331, -0.06415963343185], -[0.2372823816794, -0.06442264230286], -[0.242425890007, -0.06469247315348], -[0.2475684471734, -0.06496919677731], -[0.2527100349794, -0.06525288580618], -[0.2578506356021, -0.06554361473048], -[0.2629902316307, -0.06584145991973], -[0.2681288061032, -0.06614649964343], -[0.2732663425462, -0.06645881409199], -[0.2784028250156, -0.06677848539783], -[0.2835382381402, -0.06710559765654], -[0.2886725671667, -0.06744023694795], -[0.2938057980076, -0.06778249135725], -[0.2989379172908, -0.06813245099582], -[0.3040689124113, -0.06849020802196], -[0.3091987715858, -0.06885585666114], -[0.3143274839091, -0.06922949322601], -[0.319455039413, -0.06961121613569], -[0.3245814291277, -0.07000112593459], -[0.3297066451451, -0.07039932531038], -[0.3348306806854, -0.07080591911107], -[0.3399535301652, -0.07122101436113], -[0.3450751892688, -0.07164472027635], -[0.3501956550211, -0.07207714827741], -[0.3553149258637, -0.072518412002], -[0.3604330017327, -0.07296862731515], -[0.3655498841395, -0.07342791231783], -[0.3706655762532, -0.07389638735334], -[0.3757800829858, -0.07437417501163], -[0.3808934110793, -0.07486140013092], -[0.3860055691946, -0.07535818979676], -[0.3911165680027, -0.0758646733381], -[0.3962264202778, -0.07638098232014], -[0.4013351409918, -0.07690725053375], -[0.4064427474102, -0.07744361398121], -[0.4115492591898, -0.07799021085786], -[0.4166546984767, -0.07854718152965], -[0.4217590900064, -0.07911466850599], -[0.4268624612031, -0.07969281640786], -[0.4319648422803, -0.08028177193078], -[0.437066266341, -0.08088168380235], -[0.4421667694776, -0.08149270273412], -[0.447266390871, -0.08211498136745], -[0.4523651728889, -0.08274867421308], -[0.4574631611822, -0.08339393758427], -[0.4625604047795, -0.08405092952295], -[0.4676569561789, -0.08471980971904], -[0.47275234321, -0.08540039183654], -[-0.4700788256316, -0.0807698920964], -[-0.4649779148189, -0.08009403615282], -[-0.4598759764676, -0.07942987416631], -[-0.4547735197194, -0.07877748946595], -[-0.4496704933057, -0.07813672624756], -[-0.4445668492458, -0.07750743028633], -[-0.4394625427607, -0.07688944901402], -[-0.4343575321834, -0.07628263158953], -[-0.4292517788681, -0.07568682896315], -[-0.424145247098, -0.07510189393461], -[-0.4190379039915, -0.07452768120537], -[-0.4139297194076, -0.07396404742526], -[-0.4088206658521, -0.0734108512337], -[-0.403710718382, -0.072867953296], -[-0.3985998545118, -0.07233521633469], -[-0.3934880541194, -0.0718125051564], -[-0.3883752993531, -0.07129968667445], -[-0.3832615745392, -0.07079662992742], -[-0.3781468660918, -0.07030320609395], -[-0.3730311624225, -0.06981928850403], -[-0.3679144538532, -0.06934475264707], -[-0.3627967325293, -0.06887947617689], -[-0.3576779923358, -0.06842333891397], -[-0.3525582288139, -0.06797622284507], -[-0.3474374390816, -0.06753801212052], -[-0.342315621754, -0.06710859304935], -[-0.337192776868, -0.06668785409246], -[-0.3320689058075, -0.06627568585394], -[-0.3269440112319, -0.06587198107093], -[-0.3218180970058, -0.06547663460187], -[-0.3166911681325, -0.06508954341357], -[-0.311563230688, -0.06471060656716], -[-0.3064342917585, -0.06433972520293], -[-0.3013043593801, -0.06397680252443], -[-0.2961734424799, -0.06362174378175], -[-0.2910415508202, -0.06327445625421], -[-0.2859086949447, -0.06293484923247], -[-0.2807748861267, -0.06260283400031], -[-0.2756401363197, -0.06227832381594], -[-0.2705044581097, -0.06196123389324], -[-0.2653678646703, -0.06165148138262], -[-0.260230369719, -0.06134898535199], -[-0.2550919874765, -0.0610536667675], -[-0.2499527326268, -0.06076544847449], -[-0.24481262028, -0.0604842551784], -[-0.2396716659369, -0.06021001342583], -[-0.2345298854554, -0.05994265158584], -[-0.2293872950181, -0.05968209983138], -[-0.2242439111024, -0.05942829012108], -[-0.219099750452, -0.05918115618119], -[-0.2139548300497, -0.058940633488], -[-0.2088091670922, -0.05870665925047], -[-0.2036627789663, -0.05847917239329], -[-0.1985156832263, -0.0582581135403], -[-0.1933678975735, -0.05804342499837], -[-0.188219439836, -0.05783505074156], -[-0.1830703279509, -0.0576329363959], -[-0.1779205799472, -0.05743702922444], -[-0.1727702139302, -0.05724727811283], -[-0.1676192480667, -0.05706363355533], -[-0.1624677005717, -0.0568860476413], -[-0.1573155896962, -0.05671447404214], -[-0.1521629337158, -0.05654886799861], -[-0.1470097509206, -0.05638918630879], -[-0.141856059606, -0.0562353873163], -[-0.136701878064, -0.05608743089915], -[-0.1315472245761, -0.05594527845892], -[-0.1263921174067, -0.05580889291046], -[-0.1212365747972, -0.05567823867203], -[-0.1160806149609, -0.05555328165586], -[-0.1109242560792, -0.05543398925919], -[-0.1057675162973, -0.05532033035573], -[-0.1006104137221, -0.0552122752875], -[-0.09545296641937, -0.05510979585717], -[-0.0902951924122, -0.05501286532078], -[-0.08513710968013, -0.05492145838086], -[-0.07997873615835, -0.05483555117999], -[-0.07482008973772, -0.0547551212947], -[-0.06966118826516, -0.05468014772983], -[-0.06450204954445, -0.05461061091326], -[-0.05934269133753, -0.05454649269096], -[-0.05418313136607, -0.05448777632251], -[-0.04902338731346, -0.05443444647691], -[-0.04386347682707, -0.05438648922881], -[-0.03870341752083, -0.05434389205507], -[-0.03354322697807, -0.05430664383169], -[-0.02838292275456, -0.05427473483108], -[-0.02322252238179, -0.05424815671969], -[-0.01806204337039, -0.05422690255598], -[-0.01290150321374, -0.05421096678875], -[-0.007740919391667, -0.05420034525576], -[-0.002580309374264, -0.05419503518275], -[0.002580309374264, -0.05419503518274], -[0.007740919391667, -0.05420034525576], -[0.01290150321374, -0.05421096678875], -[0.01806204337039, -0.05422690255598], -[0.02322252238179, -0.05424815671969], -[0.02838292275456, -0.05427473483108], -[0.03354322697807, -0.05430664383169], -[0.03870341752083, -0.05434389205507], -[0.04386347682707, -0.05438648922881], -[0.04902338731346, -0.05443444647691], -[0.05418313136608, -0.05448777632251], -[0.05934269133753, -0.05454649269096], -[0.06450204954445, -0.05461061091326], -[0.06966118826516, -0.05468014772983], -[0.07482008973773, -0.05475512129469], -[0.07997873615835, -0.05483555117999], -[0.08513710968013, -0.05492145838086], -[0.0902951924122, -0.05501286532078], -[0.09545296641937, -0.05510979585717], -[0.1006104137221, -0.0552122752875], -[0.1057675162974, -0.05532033035573], -[0.1109242560792, -0.05543398925919], -[0.1160806149609, -0.05555328165586], -[0.1212365747972, -0.05567823867203], -[0.1263921174067, -0.05580889291046], -[0.1315472245761, -0.05594527845892], -[0.136701878064, -0.05608743089915], -[0.141856059606, -0.0562353873163], -[0.1470097509206, -0.05638918630879], -[0.1521629337158, -0.05654886799861], -[0.1573155896962, -0.05671447404214], -[0.1624677005717, -0.0568860476413], -[0.1676192480667, -0.05706363355533], -[0.1727702139302, -0.05724727811283], -[0.1779205799472, -0.05743702922444], -[0.1830703279509, -0.0576329363959], -[0.188219439836, -0.05783505074156], -[0.1933678975735, -0.05804342499837], -[0.1985156832263, -0.0582581135403], -[0.2036627789663, -0.05847917239328], -[0.2088091670922, -0.05870665925047], -[0.2139548300497, -0.058940633488], -[0.219099750452, -0.05918115618119], -[0.2242439111024, -0.05942829012108], -[0.2293872950181, -0.05968209983138], -[0.2345298854554, -0.05994265158584], -[0.2396716659369, -0.06021001342583], -[0.24481262028, -0.0604842551784], -[0.2499527326268, -0.06076544847449], -[0.2550919874765, -0.0610536667675], -[0.260230369719, -0.06134898535199], -[0.2653678646703, -0.06165148138262], -[0.2705044581097, -0.06196123389324], -[0.2756401363197, -0.06227832381594], -[0.2807748861267, -0.06260283400031], -[0.2859086949447, -0.06293484923247], -[0.2910415508202, -0.06327445625421], -[0.2961734424799, -0.06362174378175], -[0.3013043593801, -0.06397680252443], -[0.3064342917585, -0.06433972520293], -[0.311563230688, -0.06471060656716], -[0.3166911681325, -0.06508954341357], -[0.3218180970058, -0.06547663460186], -[0.3269440112319, -0.06587198107093], -[0.3320689058075, -0.06627568585394], -[0.337192776868, -0.06668785409246], -[0.342315621754, -0.06710859304935], -[0.3474374390816, -0.06753801212052], -[0.3525582288139, -0.06797622284507], -[0.3576779923358, -0.06842333891397], -[0.3627967325293, -0.06887947617689], -[0.3679144538532, -0.06934475264707], -[0.3730311624225, -0.06981928850403], -[0.3781468660918, -0.07030320609395], -[0.3832615745392, -0.07079662992742], -[0.3883752993531, -0.07129968667445], -[0.3934880541194, -0.0718125051564], -[0.3985998545118, -0.07233521633469], -[0.403710718382, -0.072867953296], -[0.4088206658521, -0.0734108512337], -[0.4139297194076, -0.07396404742526], -[0.4190379039915, -0.07452768120537], -[0.424145247098, -0.07510189393461], -[0.4292517788681, -0.07568682896315], -[0.4343575321834, -0.07628263158953], -[0.4394625427607, -0.07688944901402], -[0.4445668492458, -0.07750743028633], -[0.4496704933057, -0.07813672624756], -[0.4547735197194, -0.07877748946595], -[0.4598759764676, -0.07942987416631], -[0.4649779148189, -0.08009403615282], -[0.470078825635, -0.08076989212002], -[-0.4673998366038, -0.07612996554815], -[-0.462293624427, -0.07545883565277], -[-0.4571865447648, -0.07479948811501], -[-0.4520791180295, -0.07415180875536], -[-0.4469712940851, -0.07351564551151], -[-0.4418630259102, -0.0728908478329], -[-0.4367542695157, -0.07227726675657], -[-0.4316449838611, -0.07167475497441], -[-0.4265351307687, -0.07108316689485], -[-0.4214246748361, -0.07050235869885], -[-0.4163135833483, -0.06993218839039], -[-0.4112018261885, -0.06937251584171], -[-0.4060893757486, -0.06882320283348], -[-0.4009762068404, -0.06828411309029], -[-0.3958622966061, -0.06775511231158], -[-0.3907476244294, -0.06723606819824], -[-0.3856321718483, -0.06672685047534], -[-0.3805159224673, -0.06622733091087], -[-0.3753988618718, -0.06573738333113], -[-0.3702809775436, -0.06525688363267], -[-0.3651622587774, -0.06478570979122], -[-0.3600426965992, -0.06432374186773], -[-0.3549222836866, -0.06387086201174], -[-0.3498010142899, -0.06342695446235], -[-0.3446788841567, -0.06299190554693], -[-0.3395558904566, -0.06256560367772], -[-0.3344320317094, -0.06214793934664], -[-0.3293073077144, -0.0617388051183], -[-0.3241817194821, -0.0613380956216], -[-0.3190552691683, -0.06094570753976], -[-0.3139279600098, -0.06056153959932], -[-0.3087997962627, -0.06018549255789], -[-0.3036707831422, -0.05981746919097], -[-0.2985409267655, -0.059457374278], -[-0.293410234096, -0.05910511458755], -[-0.2882787128902, -0.05876059886202], -[-0.283146371646, -0.05842373780171], -[-0.2780132195537, -0.05809444404854], -[-0.2728792664491, -0.05777263216941], -[-0.2677445227677, -0.05745821863941], -[-0.2626089995025, -0.05715112182398], -[-0.2574727081615, -0.05685126196323], -[-0.2523356607295, -0.05655856115315], -[-0.2471978696301, -0.05627294332906], -[-0.2420593476902, -0.05599433424833], -[-0.2369201081058, -0.05572266147322], -[-0.2317801644104, -0.05545785435392], -[-0.226639530444, -0.05519984401182], -[-0.2214982203249, -0.05494856332291], -[-0.2163562484217, -0.05470394690155], -[-0.2112136293284, -0.05446593108436], -[-0.2060703778396, -0.0542344539146], -[-0.2009265089282, -0.05400945512676], -[-0.195782037724, -0.0537908761315], -[-0.1906369794935, -0.053578660001], -[-0.1854913496216, -0.05337275145469], -[-0.1803451635941, -0.05317309684531], -[-0.1751984369816, -0.05297964414542], -[-0.1700511854245, -0.05279234293431], -[-0.1649034246192, -0.05261114438528], -[-0.1597551703056, -0.05243600125345], -[-0.154606438255, -0.05226686786382], -[-0.1494572442599, -0.05210370009992], -[-0.1443076041243, -0.05194645539276], -[-0.1391575336546, -0.0517950927103], -[-0.1340070486522, -0.05164957254723], -[-0.1288561649063, -0.0515098569153], -[-0.1237048981877, -0.05137590933394], -[-0.1185532642437, -0.05124769482142], -[-0.113401278793, -0.05112517988624], -[-0.1082489575224, -0.05100833251917], -[-0.1030963160828, -0.05089712218546], -[-0.09794337008733, -0.05079151981755], -[-0.09279013510887, -0.05069149780818], -[-0.08763662667878, -0.05059703000386], -[-0.08248286028601, -0.05050809169869], -[-0.07732885137673, -0.0504246596286], -[-0.0721746153544, -0.05034671196592], -[-0.06702016758034, -0.05027422831434], -[-0.06186552337469, -0.05020718970421], -[-0.05671069801777, -0.05014557858817], -[-0.05155570675176, -0.05008937883716], -[-0.04640056478277, -0.05003857573676], -[-0.04124528728317, -0.04999315598385], -[-0.03608988939417, -0.0499531076836], -[-0.03093438622871, -0.04991842034682], -[-0.02577879287452, -0.04988908488761], -[-0.02062312439735, -0.04986509362129], -[-0.0154673958444, -0.04984644026274], -[-0.01031162224788, -0.04983311992499], -[-0.005155818628663, -0.04982512911809], -[0, -0.0498224657484], -[0.005155818628663, -0.04982512911809], -[0.01031162224788, -0.04983311992499], -[0.0154673958444, -0.04984644026275], -[0.02062312439735, -0.04986509362129], -[0.02577879287452, -0.04988908488761], -[0.03093438622871, -0.04991842034682], -[0.03608988939417, -0.0499531076836], -[0.04124528728317, -0.04999315598385], -[0.04640056478277, -0.05003857573676], -[0.05155570675176, -0.05008937883716], -[0.05671069801777, -0.05014557858817], -[0.0618655233747, -0.05020718970421], -[0.06702016758034, -0.05027422831434], -[0.0721746153544, -0.05034671196592], -[0.07732885137673, -0.0504246596286], -[0.08248286028601, -0.05050809169869], -[0.08763662667878, -0.05059703000386], -[0.09279013510887, -0.05069149780818], -[0.09794337008733, -0.05079151981755], -[0.1030963160828, -0.05089712218546], -[0.1082489575224, -0.05100833251917], -[0.113401278793, -0.05112517988624], -[0.1185532642437, -0.0512476948214], -[0.1237048981877, -0.05137590933394], -[0.1288561649063, -0.0515098569153], -[0.1340070486522, -0.05164957254723], -[0.1391575336546, -0.0517950927103], -[0.1443076041243, -0.05194645539276], -[0.1494572442599, -0.05210370009992], -[0.154606438255, -0.05226686786382], -[0.1597551703056, -0.05243600125345], -[0.1649034246192, -0.05261114438528], -[0.1700511854245, -0.05279234293431], -[0.1751984369816, -0.05297964414542], -[0.1803451635941, -0.05317309684532], -[0.1854913496216, -0.05337275145469], -[0.1906369794935, -0.053578660001], -[0.195782037724, -0.0537908761315], -[0.2009265089282, -0.05400945512676], -[0.2060703778396, -0.0542344539146], -[0.2112136293284, -0.05446593108436], -[0.2163562484217, -0.05470394690155], -[0.2214982203249, -0.05494856332291], -[0.226639530444, -0.05519984401182], -[0.2317801644104, -0.05545785435392], -[0.2369201081058, -0.05572266147322], -[0.2420593476902, -0.05599433424833], -[0.2471978696301, -0.05627294332906], -[0.2523356607295, -0.05655856115315], -[0.2574727081615, -0.05685126196323], -[0.2626089995025, -0.05715112182398], -[0.2677445227678, -0.05745821863923], -[0.2728792664491, -0.05777263216941], -[0.2780132195537, -0.05809444404854], -[0.283146371646, -0.05842373780171], -[0.2882787128902, -0.05876059886202], -[0.293410234096, -0.05910511458755], -[0.2985409267655, -0.059457374278], -[0.3036707831422, -0.05981746919097], -[0.3087997962627, -0.06018549255789], -[0.3139279600098, -0.06056153959932], -[0.3190552691683, -0.06094570753976], -[0.3241817194821, -0.0613380956216], -[0.3293073077144, -0.0617388051183], -[0.3344320317094, -0.06214793934664], -[0.3395558904566, -0.06256560367772], -[0.3446788841567, -0.06299190554693], -[0.3498010142899, -0.06342695446235], -[0.3549222836866, -0.06387086201174], -[0.3600426965992, -0.06432374186773], -[0.3651622587774, -0.06478570979122], -[0.3702809775436, -0.06525688363267], -[0.3753988618718, -0.06573738333113], -[0.3805159224673, -0.06622733091087], -[0.3856321718483, -0.06672685047534], -[0.3907476244294, -0.06723606819824], -[0.3958622966061, -0.06775511231158], -[0.4009762068404, -0.06828411309029], -[0.4060893757486, -0.06882320283348], -[0.4112018261885, -0.06937251584171], -[0.4163135833483, -0.06993218839039], -[0.4214246748361, -0.07050235869885], -[0.4265351307687, -0.07108316689485], -[0.4316449838611, -0.07167475497441], -[0.4367542695157, -0.07227726675657], -[0.4418630259102, -0.0728908478329], -[0.4469712940851, -0.07351564551151], -[0.4520791180295, -0.07415180875536], -[0.4571865447648, -0.07479948811449], -[0.462293624427, -0.07545883565277], -[0.4674004103457, -0.07613000486657], -[-0.464715490006, -0.07148030858077], -[-0.4596042045922, -0.07081442058855], -[-0.454492225342, -0.07015998197536], -[-0.4493800679331, -0.0695171042036], -[-0.4442676832686, -0.06888563881143], -[-0.4391550251992, -0.06826543878671], -[-0.4340420504468, -0.06765635863778], -[-0.4289287185248, -0.06705825445835], -[-0.4238149916571, -0.06647098398689], -[-0.4187008346963, -0.06589440666064], -[-0.4135862150396, -0.06532838366449], -[-0.4084711025457, -0.06477277797487], -[-0.40335546945, -0.064227454399], -[-0.3982392902805, -0.06369227960962], -[-0.3931225417732, -0.06316712217553], -[-0.3880052027891, -0.06265185258802], -[-0.3828872542305, -0.06214634328362], -[-0.3777686789587, -0.06165046866315], -[-0.3726494617133, -0.06116410510757], -[-0.3675295890316, -0.06068713099059], -[-0.36240904917, -0.06021942668842], -[-0.3572878320268, -0.05976087458677], -[-0.3521659290665, -0.05931135908537], -[-0.3470433332453, -0.05887076660018], -[-0.3419200389394, -0.05843898556339], -[-0.3367960418738, -0.05801590642151], -[-0.3316713390541, -0.05760142163173], -[-0.3265459286996, -0.0571954256565], -[-0.3214198101784, -0.05679781495676], -[-0.3162929839444, -0.05640848798383], -[-0.3111654514772, -0.05602734517001], -[-0.3060372152224, -0.05565428891825], -[-0.3009082785353, -0.05528922359079], -[-0.2957786456262, -0.054932055497], -[-0.2906483215072, -0.05458269288054], -[-0.285517311942, -0.05424104590587], -[-0.2803856233965, -0.05390702664426], -[-0.2752532629926, -0.05358054905936], -[-0.2701202384629, -0.05326152899244], -[-0.2649865581077, -0.05294988414734], -[-0.2598522307543, -0.05264553407527], -[-0.2547172657171, -0.0523484001594], -[-0.249581672761, -0.05205840559942], -[-0.2444454620648, -0.05177547539612], -[-0.2393086441879, -0.05149953633588], -[-0.2341712300377, -0.05123051697541], -[-0.2290332308394, -0.05096834762641], -[-0.2238946581062, -0.05071296034059], -[-0.218755523613, -0.0504642888947], -[-0.2136158393693, -0.0502222687759], -[-0.2084756175956, -0.04998683716731], -[-0.2033348707001, -0.0497579329339], -[-0.1981936112571, -0.04953549660857], -[-0.1930518519866, -0.04931947037865], -[-0.1879096057358, -0.04910979807265], -[-0.1827668854607, -0.04890642514739], -[-0.1776237042104, -0.04870929867545], -[-0.1724800751111, -0.04851836733303], -[-0.1673360113525, -0.04833358138812], -[-0.1621915261744, -0.0481548926891], -[-0.1570466328547, -0.04798225465365], -[-0.1519013446986, -0.04781562225819], -[-0.1467556750284, -0.04765495202746], -[-0.1416096371743, -0.04750020202471], -[-0.1364632444667, -0.04735133184222], -[-0.1313165102282, -0.04720830259212], -[-0.1261694477675, -0.04707107689766], -[-0.1210220703738, -0.04693961888488], -[-0.1158743913113, -0.04681389417462], -[-0.1107264238155, -0.04669386987488], -[-0.1055781810892, -0.0465795145736], -[-0.1004296762998, -0.04647079833182], -[-0.09528092257694, -0.04636769267708], -[-0.09013193301078, -0.04627017059734], -[-0.08498272065075, -0.04617820653514], -[-0.07983329850491, -0.04609177638211], -[-0.07468367953982, -0.04601085747386], -[-0.06953387668075, -0.0459354285852], -[-0.06438390281242, -0.04586546992565], -[-0.0592337707801, -0.0458009631353], -[-0.05408349339105, -0.04574189128101], -[-0.04893308341638, -0.04568823885287], -[-0.04378255359311, -0.045639991761], -[-0.03863191662662, -0.0455971373327], -[-0.03348118519326, -0.0455596643098], -[-0.02833037194327, -0.04552756284638], -[-0.02317948950384, -0.04550082450678], -[-0.01802855048237, -0.0454794422639], -[-0.01287756746987, -0.04546341049775], -[-0.007726553044472, -0.04545272499432], -[-0.002575519775063, -0.04544738294475], -[0.002575519775062, -0.04544738294475], -[0.007726553044471, -0.04545272499432], -[0.01287756746987, -0.04546341049775], -[0.01802855048237, -0.04547944226391], -[0.02317948950384, -0.04550082450678], -[0.02833037194327, -0.04552756284638], -[0.03348118519326, -0.0455596643098], -[0.03863191662662, -0.0455971373327], -[0.04378255359311, -0.045639991761], -[0.04893308341638, -0.04568823885286], -[0.05408349339105, -0.04574189128101], -[0.0592337707801, -0.0458009631353], -[0.06438390281242, -0.04586546992565], -[0.06953387668075, -0.0459354285852], -[0.07468367953982, -0.04601085747386], -[0.07983329850491, -0.04609177638211], -[0.08498272065075, -0.04617820653514], -[0.09013193301078, -0.04627017059734], -[0.09528092257694, -0.04636769267708], -[0.1004296762998, -0.04647079833182], -[0.1055781810892, -0.0465795145736], -[0.1107264238155, -0.04669386987488], -[0.1158743913113, -0.04681389417462], -[0.1210220703738, -0.04693961888488], -[0.1261694477675, -0.04707107689766], -[0.1313165102282, -0.04720830259212], -[0.1364632444667, -0.04735133184222], -[0.1416096371743, -0.04750020202471], -[0.1467556750284, -0.04765495202746], -[0.1519013446986, -0.04781562225819], -[0.1570466328547, -0.04798225465368], -[0.1621915261744, -0.0481548926891], -[0.1673360113525, -0.04833358138812], -[0.1724800751111, -0.04851836733303], -[0.1776237042104, -0.04870929867545], -[0.1827668854607, -0.04890642514739], -[0.1879096057358, -0.04910979807265], -[0.1930518519866, -0.04931947037865], -[0.1981936112571, -0.04953549660857], -[0.2033348707001, -0.0497579329339], -[0.2084756175956, -0.04998683716731], -[0.2136158393693, -0.0502222687759], -[0.218755523613, -0.0504642888947], -[0.2238946581062, -0.05071296034059], -[0.2290332308394, -0.05096834762641], -[0.2341712300377, -0.0512305169754], -[0.2393086441879, -0.05149953633588], -[0.2444454620648, -0.05177547539612], -[0.249581672761, -0.05205840559942], -[0.2547172657171, -0.0523484001594], -[0.2598522307543, -0.05264553407527], -[0.2649865581077, -0.05294988414734], -[0.2701202384629, -0.05326152899243], -[0.2752532629926, -0.05358054905936], -[0.2803856233965, -0.05390702664426], -[0.285517311942, -0.05424104590587], -[0.2906483215072, -0.05458269288054], -[0.2957786456262, -0.054932055497], -[0.3009082785353, -0.05528922359079], -[0.3060372152224, -0.05565428891825], -[0.3111654514772, -0.05602734517001], -[0.3162929839444, -0.05640848798383], -[0.3214198101784, -0.05679781495676], -[0.3265459286996, -0.0571954256565], -[0.3316713390541, -0.05760142163173], -[0.3367960418738, -0.05801590642151], -[0.3419200389394, -0.05843898556339], -[0.3470433332453, -0.05887076660018], -[0.3521659290665, -0.05931135908537], -[0.3572878320268, -0.05976087458677], -[0.36240904917, -0.06021942668842], -[0.3675295890316, -0.06068713099059], -[0.3726494617133, -0.06116410510757], -[0.3777686789587, -0.06165046866315], -[0.3828872542305, -0.06214634328362], -[0.3880052027891, -0.06265185258802], -[0.3931225417732, -0.06316712217553], -[0.3982392902805, -0.06369227960962], -[0.40335546945, -0.064227454399], -[0.4084711025457, -0.06477277797487], -[0.4135862150396, -0.06532838366449], -[0.4187008346963, -0.06589440666064], -[0.4238149916571, -0.06647098398689], -[0.4289287185248, -0.06705825445835], -[0.4340420504468, -0.06765635863778], -[0.4391550251992, -0.06826543878671], -[0.4442676832686, -0.06888563881143], -[0.4493800679331, -0.0695171042036], -[0.454492225342, -0.07015998197536], -[0.4596042045922, -0.07081442058855], -[0.4647154903126, -0.07148031088069], -[-0.4620264537119, -0.06682203893904], -[-0.4569097734067, -0.06616100050036], -[-0.4517931325196, -0.06551156355372], -[-0.4466764800422, -0.06487358179056], -[-0.4415597678252, -0.06424691021731], -[-0.436442950508, -0.06363140522876], -[-0.4313259854457, -0.06302692467589], -[-0.4262088326346, -0.06243332792827], -[-0.4210914546356, -0.0618504759313], -[-0.4159738164968, -0.06127823125839], -[-0.4108558856748, -0.06071645815829], -[-0.4057376319555, -0.06016502259787], -[-0.4006190273744, -0.05962379230041], -[-0.3955000461373, -0.0590926367797], -[-0.3903806645407, -0.05857142737018], -[-0.3852608608924, -0.05806003725326], -[-0.3801406154336, -0.05755834148008], -[-0.3750199102605, -0.05706621699092], -[-0.3698987292479, -0.05658354263142], -[-0.3647770579732, -0.05611019916589], -[-0.3596548836423, -0.05564606928782], -[-0.3545321950159, -0.05519103762785], -[-0.3494089823384, -0.05474499075932], -[-0.344285237267, -0.05430781720159], -[-0.3391609528041, -0.05387940742169], -[-0.3340361232295, -0.05345965383314], -[-0.3289107440358, -0.05304845079435], -[-0.3237848118653, -0.05264569460448], -[-0.3186583244478, -0.05225128349834], -[-0.3135312805418, -0.05186511763982], -[-0.3084036798761, -0.05148709911433], -[-0.3032755230946, -0.05111713192007], -[-0.2981468117016, -0.05075512195848], -[-0.2930175480105, -0.05040097702388], -[-0.2878877350932, -0.05005460679239], -[-0.282757376732, -0.04971592281025], -[-0.2776264773734, -0.04938483848163], -[-0.2724950420832, -0.04906126905605], -[-0.2673630765042, -0.04874513161539], -[-0.2622305868151, -0.04843634506066], -[-0.2570975796914, -0.04813483009855], -[-0.2519640622681, -0.04784050922785], -[-0.2468300421042, -0.04755330672572], -[-0.2416955271487, -0.04727314863401], -[-0.236560525708, -0.04699996274547], -[-0.2314250464156, -0.04673367859017], -[-0.226289098203, -0.04647422742183], -[-0.2211526902715, -0.04622154220445], -[-0.2160158320671, -0.04597555759896], -[-0.2108785332551, -0.04573620995013], -[-0.2057408036969, -0.0455034372737], -[-0.2006026534288, -0.04527717924373], -[-0.1954640926406, -0.04505737718019], -[-0.1903251316571, -0.04484397403685], -[-0.1851857809196, -0.04463691438948], -[-0.1800460509697, -0.04443614442428], -[-0.1749059524328, -0.04424161192673], -[-0.1697654960046, -0.04405326627069], -[-0.1646246924371, -0.04387105840784], -[-0.1594835525265, -0.04369494085748], -[-0.1543420871017, -0.04352486769677], -[-0.1492003070141, -0.04336079455095], -[-0.1440582231281, -0.04320267858447], -[-0.1389158463126, -0.043050478492], -[-0.1337731874334, -0.04290415448999], -[-0.1286302573462, -0.04276366830859], -[-0.1234870668908, -0.04262898318382], -[-0.1183436268854, -0.04250006385017], -[-0.1131999481225, -0.04237687653355], -[-0.1080560413648, -0.04225938894445], -[-0.1029119173419, -0.04214757027161], -[-0.0977675867477, -0.04204139117589], -[-0.09262306023853, -0.04194082378453], -[-0.08747834843157, -0.04184584168571], -[-0.08233346190391, -0.04175641992342], -[-0.07718841119218, -0.04167253499265], -[-0.07204320679247, -0.04159416483492], -[-0.06689785916088, -0.04152128883402], -[-0.06175237871434, -0.04145388781217], -[-0.05660677583184, -0.04139194402635], -[-0.05146106085609, -0.04133544116503], -[-0.04631524409534, -0.0412843643451], -[-0.04116933582565, -0.04123870010908], -[-0.03602334629334, -0.0411984364227], -[-0.03087728571771, -0.04116356267265], -[-0.02573116429394, -0.04113406966462], -[-0.0205849921962, -0.04110994962164], -[-0.01543877958093, -0.04109119618266], -[-0.0102925365902, -0.0410778044014], -[-0.005146273355247, -0.04106977074543], -[0, -0.04106709309556], -[0.005146273355247, -0.04106977074543], -[0.0102925365902, -0.0410778044014], -[0.01543877958093, -0.04109119618266], -[0.0205849921962, -0.04110994962164], -[0.02573116429394, -0.04113406966462], -[0.03087728571771, -0.04116356267265], -[0.03602334629334, -0.0411984364227], -[0.04116933582565, -0.04123870010908], -[0.04631524409533, -0.0412843643451], -[0.05146106085609, -0.04133544116503], -[0.05660677583184, -0.04139194402635], -[0.06175237871434, -0.04145388781217], -[0.06689785916088, -0.04152128883402], -[0.07204320679247, -0.04159416483492], -[0.07718841119218, -0.04167253499265], -[0.08233346190392, -0.04175641992342], -[0.08747834843157, -0.04184584168571], -[0.09262306023853, -0.04194082378454], -[0.0977675867477, -0.04204139117589], -[0.1029119173419, -0.04214757027161], -[0.1080560413648, -0.04225938894445], -[0.1131999481225, -0.04237687653355], -[0.1183436268854, -0.04250006385017], -[0.1234870668908, -0.04262898318382], -[0.1286302573462, -0.04276366830859], -[0.1337731874334, -0.04290415448999], -[0.1389158463126, -0.043050478492], -[0.1440582231281, -0.04320267858447], -[0.1492003070141, -0.04336079455095], -[0.1543420871017, -0.04352486769677], -[0.1594835525265, -0.04369494085749], -[0.1646246924371, -0.04387105840784], -[0.1697654960046, -0.04405326627069], -[0.1749059524328, -0.04424161192673], -[0.1800460509697, -0.04443614442428], -[0.1851857809196, -0.04463691438948], -[0.1903251316571, -0.04484397403685], -[0.1954640926406, -0.04505737718019], -[0.2006026534288, -0.04527717924373], -[0.2057408036969, -0.0455034372737], -[0.2108785332551, -0.04573620995013], -[0.2160158320671, -0.04597555759896], -[0.2211526902715, -0.04622154220445], -[0.226289098203, -0.04647422742183], -[0.2314250464156, -0.04673367859017], -[0.236560525708, -0.04699996274547], -[0.2416955271487, -0.04727314863401], -[0.2468300421042, -0.04755330672572], -[0.2519640622681, -0.04784050922785], -[0.2570975796914, -0.04813483009855], -[0.2622305868151, -0.04843634506066], -[0.2673630765042, -0.04874513161539], -[0.2724950420832, -0.04906126905605], -[0.2776264773734, -0.04938483848163], -[0.282757376732, -0.04971592281025], -[0.2878877350932, -0.05005460679239], -[0.2930175480105, -0.05040097702388], -[0.2981468117016, -0.05075512195848], -[0.3032755230946, -0.05111713192007], -[0.3084036798761, -0.05148709911433], -[0.3135312805418, -0.05186511763982], -[0.3186583244478, -0.05225128349834], -[0.3237848118653, -0.05264569460448], -[0.3289107440358, -0.05304845079435], -[0.3340361232295, -0.05345965383314], -[0.3391609528041, -0.05387940742169], -[0.344285237267, -0.05430781720182], -[0.3494089823384, -0.05474499075932], -[0.3545321950159, -0.05519103762785], -[0.3596548836423, -0.05564606928782], -[0.3647770579732, -0.05611019916589], -[0.3698987292479, -0.05658354263142], -[0.3750199102605, -0.05706621699092], -[0.3801406154336, -0.05755834148008], -[0.3852608608924, -0.05806003725326], -[0.3903806645407, -0.05857142737018], -[0.3955000461373, -0.0590926367797], -[0.4006190273744, -0.05962379230041], -[0.4057376319555, -0.06016502259787], -[0.4108558856748, -0.06071645815829], -[0.4159738164968, -0.06127823125839], -[0.4210914546356, -0.0618504759313], -[0.4262088326346, -0.06243332792827], -[0.4313259854457, -0.06302692467589], -[0.436442950508, -0.06363140522876], -[0.4415597678252, -0.06424691021731], -[0.4466764800422, -0.06487358179056], -[0.4517931325196, -0.06551156355372], -[0.4569097734067, -0.06616100050036], -[0.4620264537119, -0.06682203893904], -[-0.4593317184184, -0.06215462049778], -[-0.4542104475291, -0.06149878221908], -[-0.449089379323, -0.06085443797101], -[-0.4439684638078, -0.06022144484147], -[-0.4388476536938, -0.05959966117708], -[-0.4337269043269, -0.05898894665359], -[-0.4286061736203, -0.05838916234096], -[-0.4234854219835, -0.05780017076354], -[-0.418364612251, -0.05722183595521], -[-0.4132437096083, -0.05665402350994], -[-0.4081226815185, -0.05609660062773], -[-0.4030014976468, -0.05554943615623], -[-0.3978801297863, -0.05501240062829], -[-0.392758551782, -0.05448536629541], -[-0.3876367394564, -0.05396820715756], -[-0.3825146705344, -0.0534607989894], -[-0.3773923245693, -0.0529630193631], -[-0.3722696828693, -0.05247474766801], -[-0.367146728425, -0.05199586512739], -[-0.3620234458377, -0.05152625481228], -[-0.3568998212487, -0.05106580165282], -[-0.3517758422705, -0.05061439244704], -[-0.3466514979189, -0.05017191586753], -[-0.3415267785462, -0.0497382624659], -[-0.3364016757767, -0.04931332467533], -[-0.3312761824431, -0.04889699681139], -[-0.3261502925248, -0.04848917507116], -[-0.3210240010884, -0.04808975753093], -[-0.3158973042286, -0.04769864414248], -[-0.3107701990123, -0.04731573672815], -[-0.3056426834236, -0.04694093897486], -[-0.3005147563107, -0.04657415642707], -[-0.295386417335, -0.04621529647891], -[-0.2902576669215, -0.04586426836548], -[-0.2851285062112, -0.04552098315352], -[-0.2799989370153, -0.04518535373147], -[-0.2748689617713, -0.04485729479904], -[-0.2697385835005, -0.04453672285628], -[-0.2646078057675, -0.04422355619244], -[-0.2594766326415, -0.04391771487438], -[-0.2543450686589, -0.04361912073489], -[-0.2492131187881, -0.04332769736078], -[-0.2440807883954, -0.04304337008089], -[-0.2389480832129, -0.042766065954], -[-0.2338150093077, -0.04249571375681], -[-0.2286815730529, -0.04223224397179], -[-0.2235477810997, -0.04197558877537], -[-0.2184136403514, -0.0417256820259], -[-0.2132791579386, -0.041482459252], -[-0.2081443411958, -0.04124585764093], -[-0.2030091976393, -0.04101581602722], -[-0.1978737349464, -0.04079227488141], -[-0.1927379609364, -0.04057517629918], -[-0.1876018835517, -0.04036446399052], -[-0.1824655108412, -0.04016008326933], -[-0.1773288509446, -0.03996198104319], -[-0.172191912077, -0.03977010580345], -[-0.167054702516, -0.03958440761559], -[-0.1619172305885, -0.03940483810991], -[-0.1567795046594, -0.03923135047249], -[-0.1516415331206, -0.03906389943647], -[-0.1465033243819, -0.03890244127364], -[-0.1413648868614, -0.03874693378637], -[-0.1362262289783, -0.0385973362998], -[-0.1310873591452, -0.03845360965437], -[-0.1259482857619, -0.03831571619872], -[-0.12080901721, -0.03818361978276], -[-0.1156695618481, -0.03805728575125], -[-0.110529928007, -0.03793668093746], -[-0.105390123987, -0.03782177365735], -[-0.1002501580546, -0.0377125337039], -[-0.09511003844027, -0.03760893234178], -[-0.08996977333659, -0.03751094230237], -[-0.08482937089736, -0.03741853777896], -[-0.0796888392367, -0.03733169442232], -[-0.07454818642888, -0.03725038933655], -[-0.06940742050857, -0.03717460107511], -[-0.06426654947147, -0.03710430963724], -[-0.05912558127535, -0.03703949646458], -[-0.05398452384142, -0.03698014443805], -[-0.0488433850561, -0.036926237875], -[-0.04370217277298, -0.03687776252662], -[-0.03856089481518, -0.0368347055756], -[-0.03341955897784, -0.03679705563401], -[-0.02827817303095, -0.03676480274145], -[-0.02313674472225, -0.03673793836342], -[-0.01799528178041, -0.03671645538994], -[-0.01285379191832, -0.03670034813441], -[-0.007712282836403, -0.03668961233268], -[-0.002570762226189, -0.03668424514235], -[0.00257076222619, -0.03668424514235], -[0.007712282836403, -0.03668961233268], -[0.01285379191832, -0.03670034813441], -[0.01799528178041, -0.03671645538994], -[0.02313674472225, -0.03673793836342], -[0.02827817303095, -0.03676480274145], -[0.03341955897784, -0.03679705563401], -[0.03856089481518, -0.0368347055756], -[0.04370217277298, -0.03687776252662], -[0.04884338505609, -0.036926237875], -[0.05398452384142, -0.03698014443805], -[0.05912558127534, -0.03703949646458], -[0.06426654947147, -0.03710430963724], -[0.06940742050857, -0.03717460107511], -[0.07454818642889, -0.03725038933655], -[0.07968883923671, -0.03733169442232], -[0.08482937089737, -0.03741853777895], -[0.08996977333659, -0.03751094230237], -[0.09511003844027, -0.03760893234178], -[0.1002501580546, -0.0377125337039], -[0.105390123987, -0.03782177365735], -[0.110529928007, -0.03793668093746], -[0.1156695618481, -0.03805728575125], -[0.12080901721, -0.03818361978276], -[0.1259482857619, -0.03831571619872], -[0.1310873591452, -0.03845360965437], -[0.1362262289783, -0.0385973362998], -[0.1413648868614, -0.03874693378637], -[0.1465033243819, -0.03890244127364], -[0.1516415331206, -0.03906389943647], -[0.1567795046594, -0.03923135047249], -[0.1619172305885, -0.03940483810991], -[0.167054702516, -0.03958440761559], -[0.172191912077, -0.03977010580345], -[0.1773288509446, -0.03996198104319], -[0.1824655108412, -0.04016008326933], -[0.1876018835517, -0.04036446399052], -[0.1927379609364, -0.04057517629918], -[0.1978737349464, -0.04079227488141], -[0.2030091976393, -0.04101581602722], -[0.2081443411958, -0.04124585764093], -[0.2132791579386, -0.041482459252], -[0.2184136403514, -0.0417256820259], -[0.2235477810997, -0.04197558877537], -[0.2286815730529, -0.04223224397179], -[0.2338150093077, -0.04249571375678], -[0.2389480832129, -0.042766065954], -[0.2440807883954, -0.04304337008089], -[0.2492131187881, -0.04332769736078], -[0.2543450686589, -0.04361912073489], -[0.2594766326415, -0.04391771487438], -[0.2646078057675, -0.04422355619244], -[0.2697385835005, -0.04453672285628], -[0.2748689617713, -0.04485729479904], -[0.2799989370153, -0.04518535373147], -[0.2851285062112, -0.04552098315352], -[0.2902576669215, -0.04586426836548], -[0.295386417335, -0.04621529647891], -[0.3005147563107, -0.04657415642707], -[0.3056426834236, -0.04694093897486], -[0.3107701990123, -0.04731573672815], -[0.3158973042286, -0.04769864414248], -[0.3210240010884, -0.04808975753093], -[0.3261502925248, -0.04848917507116], -[0.3312761824431, -0.04889699681139], -[0.3364016757767, -0.04931332467533], -[0.3415267785462, -0.0497382624659], -[0.3466514979189, -0.05017191586753], -[0.3517758422705, -0.05061439244704], -[0.3568998212487, -0.05106580165282], -[0.3620234458377, -0.05152625481228], -[0.367146728425, -0.05199586512739], -[0.3722696828693, -0.05247474766801], -[0.3773923245693, -0.0529630193631], -[0.3825146705344, -0.0534607989894], -[0.3876367394564, -0.05396820715756], -[0.392758551782, -0.05448536629541], -[0.3978801297863, -0.05501240062829], -[0.4030014976468, -0.05554943615623], -[0.4081226815185, -0.05609660062773], -[0.4132437096083, -0.05665402350994], -[0.418364612251, -0.05722183595522], -[0.4234854219835, -0.05780017076354], -[0.4286061736203, -0.05838916234096], -[0.4337269043269, -0.05898894665359], -[0.4388476536938, -0.05959966117708], -[0.4439684638078, -0.06022144484147], -[0.449089379323, -0.06085443797101], -[0.4542104475291, -0.06149878221908], -[0.4593317184184, -0.06215462049778], -[-0.4566319707612, -0.057478520388], -[-0.4515063422438, -0.0568279699807], -[-0.4463810775349, -0.05618880777755], -[-0.4412561275665, -0.05556089413797], -[-0.4361314458223, -0.05494409062563], -[-0.4310069882753, -0.05433826007606], -[-0.4258827133228, -0.05374326665931], -[-0.4207585817201, -0.05315897593765], -[-0.4156345565125, -0.05258525492019], -[-0.4105106029661, -0.05202197210934], -[-0.4053866884979, -0.05146899754801], -[-0.4002627826058, -0.05092620285896], -[-0.395138856797, -0.05039346128182], -[-0.3900148845177, -0.04987064770605], -[-0.3848908410818, -0.04935763870045], -[-0.3797667036007, -0.04885431253927], -[-0.374642450913, -0.04836054922516], -[-0.3695180635155, -0.04787623050912], -[-0.364393523494, -0.04740123990764], -[-0.359268814456, -0.04693546271721], -[-0.3541439214643, -0.04647878602631], -[-0.3490188309709, -0.04603109872519], -[-0.3438935307533, -0.04559229151341], -[-0.3387680098515, -0.04516225690541], -[-0.3336422585066, -0.04474088923427], -[-0.3285162681007, -0.0443280846538], -[-0.3233900310986, -0.04392374113896], -[-0.3182635409909, -0.04352775848498], -[-0.313136792239, -0.04314003830512], -[-0.3080097802208, -0.04276048402724], -[-0.3028825011799, -0.04238900088937], -[-0.2977549521742, -0.04202549593425], -[-0.2926271310281, -0.04166987800309], -[-0.2874990362855, -0.04132205772849], -[-0.2823706671644, -0.04098194752678], -[-0.2772420235137, -0.04064946158975], -[-0.2721131057712, -0.04032451587574], -[-0.2669839149236, -0.04000702810093], -[-0.2618544524678, -0.03969691772888], -[-0.2567247203743, -0.03939410596157], -[-0.2515947210518, -0.03909851572887], -[-0.2464644573134, -0.0388100716784], -[-0.2413339323449, -0.03852870016517], -[-0.2362031496735, -0.03825432924106], -[-0.2310721131392, -0.03798688864443], -[-0.2259408268669, -0.03772630978958], -[-0.2208092952404, -0.03747252575632], -[-0.2156775228773, -0.03722547127966], -[-0.2105455146055, -0.03698508273948], -[-0.2054132754413, -0.0367512981505], -[-0.2002808105684, -0.03652405715222], -[-0.1951481253181, -0.0363033009992], -[-0.190015225151, -0.03608897255141], -[-0.1848821156401, -0.0358810162649], -[-0.1797488024541, -0.03567937818257], -[-0.174615291343, -0.03548400592533], -[-0.1694815881237, -0.03529484868334], -[-0.1643476986677, -0.03511185720766], -[-0.1592136288885, -0.03493498380205], -[-0.1540793847314, -0.03476418231515], -[-0.1489449721632, -0.03459940813275], -[-0.1438103971629, -0.03444061817058], -[-0.1386756657139, -0.03428777086718], -[-0.1335407837964, -0.03414082617715], -[-0.1284057573808, -0.03399974556466], -[-0.1232705924218, -0.03386449199719], -[-0.1181352948532, -0.03373502993967], -[-0.1129998705839, -0.03361132534872], -[-0.1078643254937, -0.03349334566735], -[-0.1027286654303, -0.03338105981977], -[-0.09759289620673, -0.03327443820659], -[-0.09245702359953, -0.03317345270019], -[-0.0873210533472, -0.03307807664042], -[-0.0821849911493, -0.03298828483052], -[-0.07704884266605, -0.03290405353329], -[-0.07191261351833, -0.03282536046752], -[-0.06677630928813, -0.03275218480465], -[-0.06163993551938, -0.03268450716568], -[-0.05650349771916, -0.03262230961831], -[-0.05136700135923, -0.03256557567433], -[-0.04623045187792, -0.03251429028718], -[-0.04109385468221, -0.03246843984977], -[-0.03595721515021, -0.03242801219258], -[-0.03082053863372, -0.03239299658183], -[-0.02568383046111, -0.03236338371799], -[-0.02054709594031, -0.03233916573446], -[-0.01541034036201, -0.03232033619645], -[-0.01027356900293, -0.03230689010006], -[-0.005136787129228, -0.03229882387157], -[0, -0.03229613536695], -[0.005136787129229, -0.03229882387157], -[0.01027356900292, -0.03230689010006], -[0.01541034036201, -0.03232033619646], -[0.02054709594031, -0.03233916573446], -[0.02568383046111, -0.03236338371799], -[0.03082053863372, -0.03239299658183], -[0.03595721515021, -0.03242801219258], -[0.04109385468221, -0.03246843984977], -[0.04623045187792, -0.03251429028717], -[0.05136700135924, -0.03256557567433], -[0.05650349771916, -0.03262230961831], -[0.06163993551938, -0.03268450716568], -[0.06677630928813, -0.03275218480465], -[0.07191261351833, -0.03282536046752], -[0.07704884266605, -0.03290405353329], -[0.0821849911493, -0.03298828483052], -[0.0873210533472, -0.03307807664042], -[0.09245702359953, -0.03317345270019], -[0.09759289620673, -0.03327443820659], -[0.1027286654303, -0.03338105981977], -[0.1078643254937, -0.03349334566735], -[0.1129998705839, -0.03361132534872], -[0.1181352948532, -0.03373502993967], -[0.1232705924218, -0.03386449199719], -[0.1284057573808, -0.03399974556466], -[0.1335407837964, -0.03414082617715], -[0.1386756657139, -0.03428777086718], -[0.1438103971629, -0.03444061817058], -[0.1489449721632, -0.03459940813275], -[0.1540793847314, -0.03476418231515], -[0.1592136288885, -0.03493498380208], -[0.1643476986677, -0.03511185720766], -[0.1694815881237, -0.03529484868334], -[0.174615291343, -0.03548400592533], -[0.1797488024541, -0.03567937818257], -[0.1848821156401, -0.0358810162649], -[0.190015225151, -0.03608897255141], -[0.1951481253181, -0.0363033009992], -[0.2002808105684, -0.03652405715222], -[0.2054132754413, -0.0367512981505], -[0.2105455146055, -0.03698508273948], -[0.2156775228773, -0.03722547127966], -[0.2208092952404, -0.03747252575632], -[0.2259408268669, -0.03772630978958], -[0.2310721131392, -0.03798688864443], -[0.2362031496735, -0.03825432924106], -[0.2413339323449, -0.03852870016517], -[0.2464644573134, -0.0388100716784], -[0.2515947210518, -0.03909851572887], -[0.2567247203743, -0.03939410596157], -[0.2618544524678, -0.03969691772888], -[0.2669839149236, -0.04000702810093], -[0.2721131057712, -0.0403245158757], -[0.2772420235137, -0.04064946158975], -[0.2823706671644, -0.04098194752678], -[0.2874990362855, -0.04132205772849], -[0.2926271310281, -0.04166987800309], -[0.2977549521742, -0.04202549593425], -[0.3028825011799, -0.04238900088937], -[0.3080097802208, -0.04276048402724], -[0.313136792239, -0.04314003830512], -[0.3182635409909, -0.04352775848498], -[0.3233900310986, -0.04392374113896], -[0.3285162681007, -0.0443280846538], -[0.3336422585066, -0.04474088923427], -[0.3387680098515, -0.04516225690541], -[0.3438935307533, -0.04559229151341], -[0.3490188309709, -0.04603109872519], -[0.3541439214643, -0.04647878602631], -[0.359268814456, -0.04693546271721], -[0.364393523494, -0.04740123990764], -[0.3695180635155, -0.04787623050912], -[0.374642450913, -0.04836054922516], -[0.3797667036007, -0.04885431253927], -[0.3848908410818, -0.04935763870045], -[0.3900148845177, -0.04987064770605], -[0.395138856797, -0.05039346128182], -[0.4002627826058, -0.05092620285896], -[0.4053866884979, -0.05146899754801], -[0.4105106029661, -0.05202197210934], -[0.4156345565125, -0.05258525492019], -[0.4207585817202, -0.05315897593809], -[0.4258827133228, -0.05374326665931], -[0.4310069882753, -0.05433826007606], -[0.4361314458223, -0.05494409062563], -[0.4412561275665, -0.05556089413797], -[0.4463810775349, -0.05618880777755], -[0.4515063422438, -0.05682796998069], -[0.4566319707612, -0.057478520388], -[-0.4539273281323, -0.0527939419384], -[-0.4487975715178, -0.05214876553516], -[-0.4436683377464, -0.05151487306009], -[-0.4385395785846, -0.05089212802388], -[-0.4334112482063, -0.05028039508873], -[-0.4282833031339, -0.04967954013332], -[-0.4231557021772, -0.04908943031323], -[-0.4180284063706, -0.04850993411687], -[-0.412901378909, -0.0479409214172], -[-0.4077745850828, -0.04738226351919], -[-0.4026479922121, -0.04683383320342], -[-0.3975215695797, -0.04629550476573], -[-0.3923952883651, -0.04576715405329], -[-0.3872691215768, -0.04524865849715], -[-0.3821430439858, -0.04473989714144], -[-0.3770170320591, -0.04424075066942], -[-0.3718910638933, -0.04375110142656], -[-0.3667651191493, -0.04327083344079], -[-0.3616391789873, -0.04279983244005], -[-0.3565132260031, -0.04233798586741], -[-0.3513872441649, -0.04188518289378], -[-0.3462612187514, -0.04144131442822], -[-0.3411351362914, -0.04100627312786], -[-0.336008984504, -0.04057995340168], -[-0.3308827522405, -0.04016225141826], -[-0.3257564294281, -0.03975306510763], -[-0.3206300070137, -0.0393522941633], -[-0.3155034769112, -0.03895984004269], -[-0.3103768319482, -0.03857560596634], -[-0.3052500658159, -0.03819949691589], -[-0.3001231730195, -0.03783141963117], -[-0.2949961488308, -0.03747128260625], -[-0.2898689892421, -0.03711899608474], -[-0.2847416909219, -0.03677447205433], -[-0.279614251172, -0.03643762424066], -[-0.2744866678863, -0.03610836810067], -[-0.2693589395109, -0.03578662081542], -[-0.2642310650067, -0.03547230128252], -[-0.2591030438121, -0.03516533010813], -[-0.2539748758085, -0.03486562959878], -[-0.248846561287, -0.03457312375285], -[-0.243718100916, -0.03428773825193], -[-0.2385894957111, -0.03400940045197], -[-0.2334607470058, -0.03373803937446], -[-0.2283318564242, -0.03347358569738], -[-0.2232028258545, -0.03321597174636], -[-0.2180736574243, -0.03296513148564], -[-0.2129443534771, -0.0327210005092], -[-0.20781491655, -0.032483516032], -[-0.2026853493527, -0.03225261688121], -[-0.1975556547479, -0.03202824348766], -[-0.1924258357326, -0.0318103378774], -[-0.1872958954207, -0.03159884366347], -[-0.1821658370271, -0.03139370603772], -[-0.1770356638519, -0.03119487176304], -[-0.1719053792669, -0.03100228916556], -[-0.1667749867024, -0.03081590812725], -[-0.1616444896348, -0.03063568007866], -[-0.1565138915757, -0.03046155799188], -[-0.1513831960618, -0.03029349637379], -[-0.1462524066453, -0.03013145125947], -[-0.1411215268858, -0.02997538020598], -[-0.1359905603423, -0.02982524228624], -[-0.1308595105667, -0.02968099808325], -[-0.1257283810974, -0.02954260968455], -[-0.1205971754541, -0.02941004067685], -[-0.1154658971332, -0.02928325614104], -[-0.1103345496036, -0.0291622226473], -[-0.1052031363038, -0.02904690825052], -[-0.1000716606385, -0.02893728248599], -[-0.09494012597675, -0.02883331636524], -[-0.08980853565054, -0.0287349823722], -[-0.08467689295326, -0.02864225445949], -[-0.0795452011393, -0.02855510804503], -[-0.07441346342382, -0.0284735200088], -[-0.06928168298301, -0.02839746868986], -[-0.06414986295477, -0.02832693388353], -[-0.05901800643968, -0.02826189683885], -[-0.05388611650245, -0.02820234025616], -[-0.0487541961736, -0.02814824828495], -[-0.04362224845142, -0.02809960652186], -[-0.0384902763043, -0.0280564020089], -[-0.03335828267316, -0.02801862323184], -[-0.02822627047425, -0.02798626011879], -[-0.023094242602, -0.02795930403898], -[-0.01796220193213, -0.02793774780169], -[-0.01283015132485, -0.02792158565539], -[-0.007698093628198, -0.02791081328707], -[-0.002566031681437, -0.02790542782162], -[0.002566031681437, -0.02790542782163], -[0.007698093628197, -0.02791081328706], -[0.01283015132485, -0.0279215856554], -[0.01796220193214, -0.02793774780169], -[0.023094242602, -0.02795930403898], -[0.02822627047425, -0.02798626011879], -[0.03335828267316, -0.02801862323184], -[0.03849027630429, -0.0280564020089], -[0.04362224845142, -0.02809960652186], -[0.0487541961736, -0.02814824828495], -[0.05388611650245, -0.02820234025616], -[0.05901800643968, -0.02826189683885], -[0.06414986295477, -0.02832693388353], -[0.06928168298301, -0.02839746868986], -[0.07441346342382, -0.0284735200088], -[0.0795452011393, -0.02855510804503], -[0.08467689295326, -0.02864225445949], -[0.08980853565054, -0.0287349823722], -[0.09494012597675, -0.02883331636524], -[0.1000716606385, -0.02893728248599], -[0.1052031363038, -0.02904690825052], -[0.1103345496036, -0.0291622226473], -[0.1154658971332, -0.02928325614104], -[0.1205971754541, -0.02941004067685], -[0.1257283810974, -0.02954260968455], -[0.1308595105667, -0.02968099808325], -[0.1359905603423, -0.02982524228624], -[0.1411215268858, -0.02997538020598], -[0.1462524066453, -0.03013145125947], -[0.1513831960618, -0.03029349637379], -[0.1565138915757, -0.03046155799188], -[0.1616444896348, -0.03063568007866], -[0.1667749867024, -0.03081590812725], -[0.1719053792669, -0.03100228916556], -[0.1770356638519, -0.03119487176304], -[0.1821658370271, -0.03139370603772], -[0.1872958954207, -0.03159884366347], -[0.1924258357326, -0.0318103378774], -[0.1975556547479, -0.03202824348766], -[0.2026853493527, -0.03225261688121], -[0.20781491655, -0.032483516032], -[0.2129443534771, -0.0327210005092], -[0.2180736574243, -0.03296513148564], -[0.2232028258545, -0.03321597174636], -[0.2283318564242, -0.03347358569738], -[0.2334607470058, -0.03373803937443], -[0.2385894957111, -0.03400940045197], -[0.243718100916, -0.03428773825193], -[0.248846561287, -0.03457312375285], -[0.2539748758085, -0.03486562959878], -[0.2591030438121, -0.03516533010813], -[0.2642310650067, -0.03547230128252], -[0.2693589395109, -0.03578662081542], -[0.2744866678863, -0.03610836810067], -[0.279614251172, -0.03643762424066], -[0.2847416909219, -0.03677447205433], -[0.2898689892421, -0.03711899608474], -[0.2949961488308, -0.03747128260625], -[0.3001231730195, -0.03783141963117], -[0.3052500658159, -0.03819949691589], -[0.3103768319482, -0.03857560596634], -[0.3155034769112, -0.03895984004269], -[0.3206300070137, -0.0393522941633], -[0.3257564294281, -0.03975306510763], -[0.3308827522405, -0.04016225141826], -[0.336008984504, -0.04057995340168], -[0.3411351362914, -0.04100627312785], -[0.3462612187514, -0.04144131442847], -[0.3513872441649, -0.04188518289378], -[0.3565132260031, -0.04233798586741], -[0.3616391789873, -0.04279983244005], -[0.3667651191493, -0.04327083344079], -[0.3718910638933, -0.04375110142656], -[0.3770170320591, -0.04424075066942], -[0.3821430439858, -0.04473989714144], -[0.3872691215768, -0.04524865849715], -[0.3923952883651, -0.04576715405329], -[0.3975215695797, -0.04629550476573], -[0.4026479922121, -0.04683383320342], -[0.4077745850828, -0.04738226351919], -[0.412901378909, -0.0479409214172], -[0.4180284063706, -0.04850993411687], -[0.4231557021772, -0.04908943031323], -[0.4282833031339, -0.04967954013332], -[0.4334112482063, -0.05028039508873], -[0.4385395785846, -0.05089212802388], -[0.4436683377464, -0.05151487306008], -[0.4487975715178, -0.05214876553515], -[0.4539273281323, -0.0527939419384], -[-0.4512179065379, -0.04810108607771], -[-0.4460842480552, -0.04746136825017], -[-0.4409512694046, -0.04683283154425], -[-0.4358189231005, -0.04621534250609], -[-0.4306871639257, -0.0456087687822], -[-0.4255559488768, -0.04501297918202], -[-0.4204252371055, -0.04442784373623], -[-0.4152949898603, -0.04385323375087], -[-0.410165170426, -0.04328902185744], -[-0.4050357440618, -0.04273508205915], -[-0.3999066779399, -0.04219128977335], -[-0.3947779410823, -0.04165752187042], -[-0.3896495042978, -0.04113365670917], -[-0.3845213401192, -0.04061957416903], -[-0.37939342274, -0.04011515567897], -[-0.3742657279515, -0.03962028424357], -[-0.3691382330806, -0.03913484446624], -[-0.3640109169278, -0.0386587225697], -[-0.3588837597061, -0.03819180641403], -[-0.3537567429802, -0.03773398551234], -[-0.3486298496079, -0.03728515104419], -[-0.3435030636807, -0.036845195867], -[-0.3383763704667, -0.03641401452542], -[-0.3332497563548, -0.03599150325906], -[-0.3281232087992, -0.0355775600084], -[-0.322996716266, -0.03517208441926], -[-0.3178702681808, -0.03477497784581], -[-0.3127438548778, -0.03438614335231], -[-0.3076174675502, -0.0340054857136], -[-0.3024910982025, -0.03363291141455], -[-0.2973647396032, -0.03326832864853], -[-0.2922383852408, -0.032911647315], -[-0.2871120292789, -0.0325627790162], -[-0.2819856665155, -0.03222163705329], -[-0.2768592923414, -0.03188813642174], -[-0.2717329027016, -0.0315621938062], -[-0.2666064940578, -0.03124372757474], -[-0.2614800633521, -0.03093265777319], -[-0.2563536079727, -0.03062890611832], -[-0.2512271257206, -0.03033239599136], -[-0.2461006147779, -0.03004305243103], -[-0.2409740736777, -0.02976080212639], -[-0.2358475012752, -0.02948557340955], -[-0.2307208967201, -0.02921729624826], -[-0.2255942594306, -0.02895590223849], -[-0.2204675890687, -0.02870132459689], -[-0.2153408855164, -0.0284534981533], -[-0.2102141488538, -0.02821235934328], -[-0.2050873793376, -0.02797784620071], -[-0.1999605773821, -0.02774989835042], -[-0.1948337435397, -0.02752845700099], -[-0.189706878484, -0.02731346493759], -[-0.1845799829931, -0.02710486651505], -[-0.1794530579346, -0.02690260765098], -[-0.1743261042511, -0.02670663581913], -[-0.169199122947, -0.02651690004291], -[-0.1640721150763, -0.02633335088906], -[-0.1589450817313, -0.02615594046153], -[-0.1538180240321, -0.0259846223956], -[-0.1486909431174, -0.02581935185214], -[-0.1435638401353, -0.0256600855121], -[-0.138436716236, -0.02550678157125], -[-0.1333095725644, -0.02535939973506], -[-0.1281824102539, -0.02521790121387], -[-0.123055230421, -0.02508224871821], -[-0.1179280341602, -0.02495240645434], -[-0.11280082254, -0.02482834012007], -[-0.1076735965991, -0.02471001690071], -[-0.1025463573437, -0.02459740546526], -[-0.09741910574498, -0.02449047596279], -[-0.09229184273719, -0.02438920001904], -[-0.08716456921656, -0.02429355073324], -[-0.08203728604034, -0.02420350267505], -[-0.07690999402648, -0.02411903188176], -[-0.07178269395371, -0.02404011585565], -[-0.06665538656203, -0.02396673356155], -[-0.0615280725536, -0.02389886542455], -[-0.05640075259398, -0.02383649332791], -[-0.05127342731367, -0.02377960061112], -[-0.04614609730999, -0.0237281720682], -[-0.04101876314921, -0.02368219394602], -[-0.03589142536896, -0.02364165394296], -[-0.03076408448083, -0.02360654120758], -[-0.02563674097321, -0.02357684633753], -[-0.02050939531426, -0.02355256137858], -[-0.01538204795507, -0.02353367982383], -[-0.01025469933291, -0.02352019661303], -[-0.005127349874608, -0.02351210813209], -[9.554007360407e-17, -0.0235094122127], -[0.005127349874609, -0.0235121081321], -[0.01025469933291, -0.02352019661303], -[0.01538204795507, -0.02353367982383], -[0.02050939531426, -0.02355256137858], -[0.02563674097321, -0.02357684633752], -[0.03076408448083, -0.02360654120758], -[0.03589142536896, -0.02364165394296], -[0.04101876314921, -0.02368219394602], -[0.04614609730999, -0.02372817206819], -[0.05127342731367, -0.02377960061112], -[0.05640075259398, -0.0238364933279], -[0.0615280725536, -0.02389886542455], -[0.06665538656203, -0.02396673356155], -[0.07178269395371, -0.02404011585565], -[0.07690999402648, -0.02411903188176], -[0.08203728604034, -0.02420350267505], -[0.08716456921656, -0.02429355073324], -[0.09229184273719, -0.02438920001904], -[0.09741910574498, -0.02449047596279], -[0.1025463573437, -0.02459740546526], -[0.1076735965991, -0.02471001690071], -[0.11280082254, -0.02482834012007], -[0.1179280341602, -0.02495240645434], -[0.123055230421, -0.0250822487182], -[0.1281824102539, -0.02521790121387], -[0.1333095725644, -0.02535939973506], -[0.138436716236, -0.02550678157125], -[0.1435638401353, -0.0256600855121], -[0.1486909431174, -0.02581935185214], -[0.1538180240321, -0.0259846223956], -[0.1589450817313, -0.02615594046153], -[0.1640721150763, -0.02633335088906], -[0.169199122947, -0.02651690004291], -[0.1743261042511, -0.02670663581913], -[0.1794530579346, -0.02690260765098], -[0.1845799829931, -0.02710486651505], -[0.189706878484, -0.02731346493759], -[0.1948337435397, -0.02752845700099], -[0.1999605773821, -0.02774989835042], -[0.2050873793376, -0.02797784620071], -[0.2102141488538, -0.02821235934328], -[0.2153408855164, -0.0284534981533], -[0.2204675890687, -0.02870132459689], -[0.2255942594306, -0.02895590223849], -[0.2307208967201, -0.02921729624826], -[0.2358475012752, -0.02948557340955], -[0.2409740736777, -0.02976080212639], -[0.2461006147779, -0.03004305243103], -[0.2512271257206, -0.03033239599136], -[0.2563536079727, -0.03062890611832], -[0.2614800633521, -0.03093265777319], -[0.2666064940578, -0.03124372757474], -[0.2717329027016, -0.03156219380613], -[0.2768592923414, -0.03188813642174], -[0.2819856665155, -0.03222163705329], -[0.2871120292789, -0.0325627790162], -[0.2922383852408, -0.032911647315], -[0.2973647396032, -0.03326832864853], -[0.3024910982025, -0.03363291141455], -[0.3076174675502, -0.0340054857136], -[0.3127438548778, -0.03438614335231], -[0.3178702681808, -0.03477497784581], -[0.322996716266, -0.03517208441926], -[0.3281232087992, -0.0355775600084], -[0.3332497563548, -0.03599150325906], -[0.3383763704667, -0.03641401452542], -[0.3435030636807, -0.036845195867], -[0.3486298496079, -0.03728515104419], -[0.3537567429802, -0.03773398551234], -[0.3588837597061, -0.03819180641403], -[0.3640109169278, -0.0386587225697], -[0.3691382330806, -0.03913484446624], -[0.3742657279515, -0.03962028424357], -[0.37939342274, -0.04011515567897], -[0.3845213401192, -0.04061957416903], -[0.3896495042978, -0.04113365670917], -[0.3947779410823, -0.04165752187042], -[0.3999066779399, -0.04219128977335], -[0.4050357440618, -0.04273508205915], -[0.410165170426, -0.04328902185744], -[0.4152949898603, -0.04385323375087], -[0.4204252371055, -0.04442784373623], -[0.4255559488768, -0.04501297918202], -[0.4306871639257, -0.0456087687822], -[0.4358189231005, -0.04621534250609], -[0.4409512694046, -0.04683283154425], -[0.4460842480552, -0.04746136825017], -[0.4512179065379, -0.04810108607771], -[-0.4485032658387, -0.04340006571372], -[-0.4433664833487, -0.0427659752102], -[-0.4382299808592, -0.04214287869228], -[-0.4330942663654, -0.04153073135086], -[-0.4279592951806, -0.04092940370659], -[-0.4228250247013, -0.04033876739125], -[-0.4176914143531, -0.03975869520405], -[-0.4125584255351, -0.03918906116413], -[-0.4074260215625, -0.03862974055922], -[-0.4022941676093, -0.03808060999064], -[-0.3971628306498, -0.03754154741479], -[-0.3920319793989, -0.03701243218131], -[-0.3869015842532, -0.0364931450679], -[-0.3817716172313, -0.03598356831214], -[-0.3766420519145, -0.03548358564028], -[-0.3715128633874, -0.03499308229325], -[-0.3663840281789, -0.03451194505005], -[-0.3612555242041, -0.03404006224858], -[-0.3561273307064, -0.03357732380407], -[-0.3509994282005, -0.03312362122534], -[-0.345871798416, -0.03267884762891], -[-0.3407444242428, -0.03224289775118], -[-0.335617289676, -0.03181566795873], -[-0.3304903797638, -0.031397056257], -[-0.3253636805547, -0.03098696229726], -[-0.3202371790471, -0.03058528738223], -[-0.3151108631401, -0.03019193447026], -[-0.3099847215849, -0.02980680817835], -[-0.3048587439382, -0.02942981478392], -[-0.2997329205166, -0.02906086222564], -[-0.294607242353, -0.02869986010324], -[-0.2894817011533, -0.02834671967651], -[-0.2843562892558, -0.02800135386351], -[-0.2792309995907, -0.02766367723808], -[-0.2741058256424, -0.02733360602672], -[-0.2689807614124, -0.02701105810497], -[-0.2638558013832, -0.02669595299327], -[-0.2587309404851, -0.0263882118524], -[-0.2536061740626, -0.02608775747863], -[-0.2484814978438, -0.02579451429846], -[-0.2433569079099, -0.02550840836319], -[-0.238232400667, -0.02522936734327], -[-0.2331079728183, -0.0249573205225], -[-0.227983621339, -0.0246921987918], -[-0.2228593434505, -0.02443393464383], -[-0.2177351365978, -0.0241824621662], -[-0.2126109984272, -0.02393771703576], -[-0.207486926765, -0.0236996365124], -[-0.2023629195978, -0.02346815943296], -[-0.1972389750539, -0.02324322620528], -[-0.1921150913859, -0.02302477880222], -[-0.186991266954, -0.02281276075582], -[-0.1818675002108, -0.02260711715154], -[-0.1767437896866, -0.02240779462272], -[-0.1716201339765, -0.02221474134502], -[-0.1664965317278, -0.02202790703113], -[-0.1613729816284, -0.02184724292558], -[-0.1562494823965, -0.02167270179973], -[-0.1511260327708, -0.0215042379469], -[-0.1460026315015, -0.0213418071777], -[-0.1408792773428, -0.02118536681556], -[-0.135755969045, -0.02103487569235], -[-0.1306327053487, -0.02089029414429], -[-0.1255094849786, -0.02075158400793], -[-0.1203863066385, -0.02061870861643], -[-0.1152631690071, -0.02049163279593], -[-0.1101400707341, -0.0203703228621], -[-0.1050170104373, -0.02025474661696], -[-0.09989398669969, -0.02014487334575], -[-0.09477099806772, -0.02004067381407], -[-0.08964804304973, -0.01994212026511], -[-0.08452512011495, -0.01984918641716], -[-0.07940222769306, -0.01976184746113], -[-0.07427936417405, -0.01968008005835], -[-0.06915652790864, -0.01960386233851], -[-0.06403371720894, -0.01953317389765], -[-0.05891093034962, -0.01946799579649], -[-0.05378816556927, -0.01940831055867], -[-0.04866542107225, -0.01935410216933], -[-0.04354269503064, -0.01930535607375], -[-0.03841998558656, -0.01926205917607], -[-0.0332972908547, -0.01922419983825], -[-0.02817460892505, -0.01919176787907], -[-0.02305193786584, -0.01916475457334], -[-0.01792927572658, -0.01914315265111], -[-0.01280662054132, -0.01912695629716], -[-0.007683970331973, -0.01911616115046], -[-0.002561323111678, -0.01911076430386], -[0.002561323111679, -0.01911076430387], -[0.007683970331972, -0.01911616115045], -[0.01280662054133, -0.01912695629716], -[0.01792927572658, -0.01914315265111], -[0.02305193786584, -0.01916475457334], -[0.02817460892505, -0.01919176787907], -[0.0332972908547, -0.01922419983825], -[0.03841998558657, -0.01926205917607], -[0.04354269503064, -0.01930535607375], -[0.04866542107226, -0.01935410216933], -[0.05378816556927, -0.01940831055867], -[0.05891093034961, -0.01946799579649], -[0.06403371720894, -0.01953317389765], -[0.06915652790864, -0.01960386233851], -[0.07427936417406, -0.01968008005835], -[0.07940222769306, -0.01976184746113], -[0.08452512011495, -0.01984918641716], -[0.08964804304973, -0.01994212026512], -[0.09477099806772, -0.02004067381407], -[0.09989398669969, -0.02014487334575], -[0.1050170104373, -0.02025474661696], -[0.1101400707341, -0.0203703228621], -[0.115263169007, -0.02049163279593], -[0.1203863066385, -0.02061870861643], -[0.1255094849786, -0.02075158400793], -[0.1306327053487, -0.02089029414429], -[0.135755969045, -0.02103487569235], -[0.1408792773428, -0.02118536681556], -[0.1460026315015, -0.0213418071777], -[0.1511260327708, -0.0215042379469], -[0.1562494823965, -0.02167270179973], -[0.1613729816284, -0.02184724292559], -[0.1664965317278, -0.02202790703113], -[0.1716201339765, -0.02221474134502], -[0.1767437896866, -0.02240779462272], -[0.1818675002108, -0.02260711715154], -[0.186991266954, -0.02281276075582], -[0.1921150913859, -0.02302477880222], -[0.1972389750539, -0.02324322620528], -[0.2023629195978, -0.02346815943296], -[0.207486926765, -0.0236996365124], -[0.2126109984272, -0.02393771703576], -[0.2177351365978, -0.0241824621662], -[0.2228593434505, -0.02443393464383], -[0.227983621339, -0.0246921987918], -[0.2331079728184, -0.02495732052233], -[0.238232400667, -0.02522936734327], -[0.2433569079099, -0.02550840836319], -[0.2484814978438, -0.02579451429846], -[0.2536061740626, -0.02608775747863], -[0.2587309404851, -0.0263882118524], -[0.2638558013832, -0.02669595299327], -[0.2689807614124, -0.02701105810497], -[0.2741058256424, -0.02733360602672], -[0.2792309995907, -0.02766367723808], -[0.2843562892558, -0.02800135386351], -[0.2894817011533, -0.02834671967651], -[0.294607242353, -0.02869986010324], -[0.2997329205166, -0.02906086222564], -[0.3048587439382, -0.02942981478392], -[0.3099847215849, -0.02980680817835], -[0.3151108631401, -0.03019193447026], -[0.3202371790471, -0.03058528738223], -[0.3253636805547, -0.03098696229726], -[0.3304903797638, -0.031397056257], -[0.335617289676, -0.03181566795873], -[0.3407444242428, -0.03224289775118], -[0.345871798416, -0.03267884762891], -[0.3509994282005, -0.03312362122534], -[0.3561273307064, -0.03357732380407], -[0.3612555242041, -0.03404006224858], -[0.3663840281789, -0.03451194505005], -[0.3715128633874, -0.03499308229325], -[0.3766420519145, -0.03548358564028], -[0.3817716172313, -0.03598356831214], -[0.3869015842532, -0.0364931450679], -[0.3920319793989, -0.03701243218131], -[0.3971628306498, -0.03754154741479], -[0.4022941676093, -0.03808060999064], -[0.4074260215625, -0.03862974055922], -[0.4125584255351, -0.03918906116413], -[0.4176914143531, -0.03975869520405], -[0.4228250247013, -0.04033876739125], -[0.4279592951806, -0.04092940370659], -[0.4330942663654, -0.04153073135086], -[0.4382299808592, -0.04214287869228], -[0.4433664833487, -0.0427659752102], -[0.4485032658444, -0.04340006573725], -[-0.4457846483746, -0.03869134192271], -[-0.4406443877294, -0.03806278131087], -[-0.4355045794062, -0.03744520779637], -[-0.4303657126823, -0.03683848617582], -[-0.4252277433245, -0.03624248973769], -[-0.4200906290578, -0.03565709283136], -[-0.4149543295144, -0.03508217092172], -[-0.4098188061816, -0.03451760063999], -[-0.4046840223476, -0.0339632598312], -[-0.3995499430476, -0.033419027598], -[-0.3944165350083, -0.03288478434136], -[-0.3892837665925, -0.03236041179797], -[-0.3841516077426, -0.03184579307461], -[-0.3790200299254, -0.03134081267965], -[-0.3738890060751, -0.03084535655172], -[-0.3687585105382, -0.03035931208575], -[-0.3636285190173, -0.02988256815651], -[-0.3584990085168, -0.02941501513973], -[-0.3533699572878, -0.02895654493105], -[-0.3482413447745, -0.02850705096275], -[-0.3431131515614, -0.02806642821862], -[-0.3379853593207, -0.02763457324684], -[-0.3328579507618, -0.02721138417122], -[-0.3277309095806, -0.02679676070072], -[-0.3226042204107, -0.0263906041376], -[-0.3174778687752, -0.02599281738398], -[-0.3123518410406, -0.02560330494731], -[-0.3072261243705, -0.02522197294448], -[-0.3021007066821, -0.02484872910499], -[-0.2969755766025, -0.02448348277291], -[-0.291850723428, -0.02412614490818], -[-0.2867261370828, -0.02377662808688], -[-0.2816018080807, -0.02343484650085], -[-0.2764777274873, -0.02310071595664], -[-0.2713538868836, -0.02277415387385], -[-0.2662302783314, -0.0224550792826], -[-0.2611068943391, -0.02214341282155], -[-0.2559837278301, -0.02183907673408], -[-0.2508607721117, -0.0215419948652], -[-0.2457380208453, -0.02125209265772], -[-0.2406154680182, -0.02096929714821], -[-0.2354931079166, -0.0206935369628], -[-0.2303709351, -0.02042474231272], -[-0.2252489443764, -0.02016284498983], -[-0.2201271307792, -0.01990777836187], -[-0.2150054895451, -0.01965947736787], -[-0.209884016093, -0.01941787851327], -[-0.2047627060046, -0.01918291986524], -[-0.1996415550054, -0.01895454104788], -[-0.1945205589474, -0.01873268323749], -[-0.1893997137922, -0.01851728915792], -[-0.1842790155961, -0.0183083030759], -[-0.1791584604956, -0.01810567079656], -[-0.1740380446934, -0.01790933965899], -[-0.1689177644466, -0.01771925853186], -[-0.1637976160547, -0.01753537780928], -[-0.1586775958492, -0.01735764940666], -[-0.1535577001834, -0.01718602675677], -[-0.1484379254241, -0.0170204648059], -[-0.1433182679427, -0.01686092001023], -[-0.1381987241084, -0.01670735033225], -[-0.1330792902813, -0.01655971523739], -[-0.1279599628066, -0.01641797569078], -[-0.1228407380093, -0.01628209415416], -[-0.1177216121898, -0.01615203458296], -[-0.1126025816199, -0.01602776242347], -[-0.1074836425395, -0.01590924461023], -[-0.102364791154, -0.01579644956353], -[-0.09724602363218, -0.01568934718701], -[-0.09212733610425, -0.01558790886552], -[-0.08700872466112, -0.01549210746296], -[-0.08189018535353, -0.01540191732041], -[-0.07677171419194, -0.01531731425427], -[-0.07165330714668, -0.01523827555457], -[-0.06653496014861, -0.01516477998345], -[-0.0614166690901, -0.01509680777369], -[-0.05629842982633, -0.0150343406274], -[-0.05118023817698, -0.0149773617148], -[-0.04606208992811, -0.01492585567313], -[-0.04094398083442, -0.01487980860566], -[-0.03582590662166, -0.01483920808078], -[-0.03070786298934, -0.01480404313125], -[-0.02558984561353, -0.01477430425349], -[-0.02047185014994, -0.014749983407], -[-0.01535387223711, -0.01473107401386], -[-0.01023590749961, -0.0147175709583], -[-0.005117951551558, -0.01470947058646], -[6.369338240271e-17, -0.01470677070609], -[0.005117951551562, -0.01470947058647], -[0.01023590749961, -0.0147175709583], -[0.0153538722371, -0.01473107401385], -[0.02047185014994, -0.014749983407], -[0.02558984561352, -0.01477430425349], -[0.03070786298934, -0.01480404313125], -[0.03582590662166, -0.01483920808078], -[0.04094398083442, -0.01487980860566], -[0.04606208992811, -0.01492585567313], -[0.05118023817698, -0.0149773617148], -[0.05629842982633, -0.0150343406274], -[0.0614166690901, -0.01509680777369], -[0.06653496014861, -0.01516477998344], -[0.07165330714668, -0.01523827555457], -[0.07677171419194, -0.01531731425427], -[0.08189018535354, -0.01540191732042], -[0.08700872466112, -0.01549210746296], -[0.09212733610425, -0.01558790886552], -[0.09724602363218, -0.01568934718701], -[0.102364791154, -0.01579644956353], -[0.1074836425395, -0.01590924461023], -[0.1126025816199, -0.01602776242347], -[0.1177216121898, -0.01615203458296], -[0.1228407380093, -0.01628209415416], -[0.1279599628066, -0.01641797569078], -[0.1330792902813, -0.01655971523739], -[0.1381987241084, -0.01670735033225], -[0.1433182679427, -0.01686092001023], -[0.1484379254241, -0.0170204648059], -[0.1535577001834, -0.01718602675677], -[0.1586775958492, -0.01735764940666], -[0.1637976160547, -0.01753537780928], -[0.1689177644466, -0.01771925853186], -[0.1740380446934, -0.01790933965899], -[0.1791584604956, -0.01810567079656], -[0.1842790155961, -0.0183083030759], -[0.1893997137922, -0.01851728915792], -[0.1945205589474, -0.01873268323749], -[0.1996415550054, -0.01895454104788], -[0.2047627060046, -0.01918291986524], -[0.209884016093, -0.01941787851327], -[0.2150054895451, -0.01965947736787], -[0.2201271307792, -0.01990777836187], -[0.2252489443764, -0.02016284498983], -[0.2303709351, -0.02042474231273], -[0.2354931079166, -0.0206935369628], -[0.2406154680182, -0.02096929714821], -[0.2457380208453, -0.02125209265772], -[0.2508607721117, -0.0215419948652], -[0.2559837278301, -0.02183907673408], -[0.2611068943391, -0.02214341282155], -[0.2662302783314, -0.0224550792826], -[0.2713538868836, -0.02277415387387], -[0.2764777274873, -0.02310071595664], -[0.2816018080807, -0.02343484650085], -[0.2867261370828, -0.02377662808688], -[0.291850723428, -0.02412614490818], -[0.2969755766025, -0.02448348277291], -[0.3021007066821, -0.02484872910499], -[0.3072261243705, -0.02522197294436], -[0.3123518410406, -0.02560330494731], -[0.3174778687752, -0.02599281738398], -[0.3226042204107, -0.0263906041376], -[0.3277309095806, -0.02679676070072], -[0.3328579507618, -0.02721138417122], -[0.3379853593207, -0.02763457324684], -[0.3431131515614, -0.02806642821862], -[0.3482413447745, -0.02850705096275], -[0.3533699572878, -0.02895654493105], -[0.3584990085168, -0.02941501513973], -[0.3636285190173, -0.02988256815651], -[0.3687585105382, -0.03035931208575], -[0.3738890060751, -0.03084535655172], -[0.3790200299254, -0.03134081267965], -[0.3841516077426, -0.03184579307461], -[0.3892837665925, -0.03236041179797], -[0.3944165350083, -0.03288478434136], -[0.3995499430476, -0.033419027598], -[0.4046840223476, -0.0339632598312], -[0.4098188061816, -0.03451760063999], -[0.4149543295144, -0.03508217092172], -[0.4200906290578, -0.03565709283136], -[0.4252277433245, -0.03624248973769], -[0.4303657126823, -0.03683848617582], -[0.4355045794062, -0.03744520779637], -[0.4406443877294, -0.03806278131087], -[0.4457851837043, -0.03869133410773], -[-0.4430615864798, -0.03397461942531], -[-0.4379180704143, -0.03335197934927], -[-0.4327751713309, -0.03274001006778], -[-0.4276333654437, -0.03213879653784], -[-0.4224926088983, -0.03154821471299], -[-0.417352859678, -0.03096814155901], -[-0.4122140775565, -0.03039845510691], -[-0.407076224048, -0.02983903450242], -[-0.4019392623571, -0.02928976005212], -[-0.3968031573275, -0.02875051326639], -[-0.3916678753899, -0.02822117689923], -[-0.3865333845097, -0.02770163498512], -[-0.3813996541344, -0.02719177287291], -[-0.3762666551406, -0.02669147725709], -[-0.3711343597811, -0.02620063620636], -[-0.3660027416328, -0.02571913918973], -[-0.3608717755437, -0.02524687710021], -[-0.3557414375814, -0.02478374227631], -[-0.3506117049819, -0.02432962852141], -[-0.3454825560984, -0.02388443112105], -[-0.3403539703518, -0.02344804685846], -[-0.3352259281811, -0.02302037402819], -[-0.3300984109955, -0.02260131244821], -[-0.3249714011269, -0.0221907634704], -[-0.3198448817837, -0.02178862998957], -[-0.3147188370055, -0.02139481645124], -[-0.309593251619, -0.02100922885811], -[-0.3044681111952, -0.02063177477543], -[-0.2993434020073, -0.02026236333526], -[-0.2942191109906, -0.01990090523989], -[-0.2890952257028, -0.01954731276423], -[-0.2839717342862, -0.01920149975751], -[-0.2788486254308, -0.01886338164422], -[-0.2737258883387, -0.01853287542441], -[-0.2686035126899, -0.01820989967334], -[-0.2634814886096, -0.01789437454071], -[-0.2583598066358, -0.01758622174934], -[-0.2532384576898, -0.01728536459347], -[-0.2481174330462, -0.01699172793671], -[-0.2429967243055, -0.01670523820966], -[-0.237876323367, -0.01642582340732], -[-0.2327562224039, -0.01615341308617], -[-0.2276364138382, -0.01588793836117], -[-0.2225168903184, -0.01562933190258], -[-0.2173976446971, -0.01537752793263], -[-0.2122786700104, -0.01513246222214], -[-0.2071599594582, -0.01489407208709], -[-0.2020415063854, -0.0146622963851], -[-0.1969233042649, -0.01443707551191], -[-0.1918053466805, -0.01421835139808], -[-0.186687627312, -0.01400606750519], -[-0.1815701399204, -0.01380016882271], -[-0.1764528783346, -0.01360060186455], -[-0.1713358364388, -0.0134073146657], -[-0.1662190081609, -0.01322025677911], -[-0.1611023874614, -0.01303937927247], -[-0.1559859683244, -0.01286463472525], -[-0.1508697447474, -0.01269597722574], -[-0.1457537107338, -0.01253336236822], -[-0.1406378602854, -0.01237674725025], -[-0.1355221873952, -0.01222609047008], -[-0.1304066860417, -0.01208135212417], -[-0.1252913501836, -0.01194249380482], -[-0.120176173755, -0.01180947859793], -[-0.1150611506614, -0.01168227108086], -[-0.1099462747764, -0.01156083732042], -[-0.1048315399385, -0.01144514487101], -[-0.09971693994935, -0.01133516277277], -[-0.09460246857161, -0.01123086154997], -[-0.08948811952783, -0.01113221320942], -[-0.08437388649967, -0.011039191239], -[-0.07925976312758, -0.01095177060636], -[-0.07414574301088, -0.0108699277576], -[-0.06903181970833, -0.01079364061614], -[-0.06391798673895, -0.01072288858168], -[-0.05880423758328, -0.01065765252918], -[-0.05369056568493, -0.010597914808], -[-0.04857696445245, -0.01054365924108], -[-0.04346342726142, -0.01049487112421], -[-0.03834994745692, -0.0104515372254], -[-0.03323651835602, -0.01041364578428], -[-0.02812313325072, -0.0103811865116], -[-0.02300978541083, -0.01035415058882], -[-0.0178964680872, -0.01033253066769], -[-0.01278317451493, -0.01031632086997], -[-0.007669897916799, -0.01030551678721], -[-0.002556631506729, -0.01030011548053], -[0.002556631506728, -0.01030011548053], -[0.0076698979168, -0.01030551678721], -[0.01278317451493, -0.01031632086997], -[0.0178964680872, -0.01033253066769], -[0.02300978541084, -0.01035415058882], -[0.02812313325072, -0.0103811865116], -[0.03323651835602, -0.01041364578428], -[0.03834994745691, -0.0104515372254], -[0.04346342726142, -0.01049487112421], -[0.04857696445245, -0.01054365924108], -[0.05369056568493, -0.010597914808], -[0.05880423758328, -0.01065765252918], -[0.06391798673895, -0.01072288858168], -[0.06903181970833, -0.01079364061614], -[0.07414574301088, -0.0108699277576], -[0.07925976312758, -0.01095177060636], -[0.08437388649967, -0.011039191239], -[0.08948811952783, -0.01113221320942], -[0.09460246857161, -0.01123086154997], -[0.09971693994934, -0.01133516277277], -[0.1048315399385, -0.01144514487101], -[0.1099462747764, -0.01156083732042], -[0.1150611506614, -0.01168227108086], -[0.120176173755, -0.01180947859793], -[0.1252913501836, -0.01194249380482], -[0.1304066860417, -0.01208135212417], -[0.1355221873952, -0.01222609047008], -[0.1406378602854, -0.01237674725025], -[0.1457537107338, -0.01253336236822], -[0.1508697447474, -0.01269597722575], -[0.1559859683244, -0.01286463472525], -[0.1611023874614, -0.01303937927247], -[0.1662190081609, -0.01322025677911], -[0.1713358364388, -0.0134073146657], -[0.1764528783346, -0.01360060186455], -[0.1815701399204, -0.01380016882271], -[0.186687627312, -0.01400606750519], -[0.1918053466805, -0.01421835139808], -[0.1969233042649, -0.01443707551191], -[0.2020415063854, -0.0146622963851], -[0.2071599594582, -0.01489407208709], -[0.2122786700104, -0.01513246222214], -[0.2173976446971, -0.01537752793263], -[0.2225168903184, -0.01562933190258], -[0.2276364138382, -0.01588793836117], -[0.2327562224039, -0.01615341308617], -[0.237876323367, -0.01642582340732], -[0.2429967243055, -0.01670523820966], -[0.2481174330462, -0.01699172793671], -[0.2532384576898, -0.01728536459347], -[0.2583598066358, -0.01758622174934], -[0.2634814886096, -0.01789437454071], -[0.2686035126899, -0.01820989967334], -[0.2737258883387, -0.01853287542441], -[0.2788486254308, -0.01886338164422], -[0.2839717342862, -0.01920149975751], -[0.2890952257028, -0.01954731276423], -[0.2942191109906, -0.01990090523989], -[0.2993434020073, -0.02026236333526], -[0.3044681111952, -0.02063177477543], -[0.309593251619, -0.02100922885811], -[0.3147188370055, -0.02139481645124], -[0.3198448817837, -0.02178862998957], -[0.3249714011269, -0.0221907634704], -[0.3300984109955, -0.02260131244821], -[0.3352259281811, -0.02302037402819], -[0.3403539703518, -0.02344804685846], -[0.3454825560984, -0.02388443112105], -[0.3506117049819, -0.02432962852141], -[0.3557414375814, -0.02478374227631], -[0.3608717755437, -0.02524687710021], -[0.3660027416328, -0.02571913918973], -[0.3711343597811, -0.02620063620636], -[0.3762666551406, -0.02669147725709], -[0.3813996541344, -0.02719177287291], -[0.3865333845097, -0.02770163498512], -[0.3916678753899, -0.02822117689923], -[0.3968031573275, -0.02875051326639], -[0.4019392623571, -0.02928976005212], -[0.407076224048, -0.02983903450242], -[0.4122140775565, -0.03039845510691], -[0.417352859678, -0.03096814155901], -[0.4224926088983, -0.03154821471299], -[0.4276333654437, -0.03213879653784], -[0.4327751713309, -0.03274001006778], -[0.4379180704143, -0.03335197934927], -[0.4430615864852, -0.0339746194451], -[-0.4403341449902, -0.02925070171376], -[-0.4351876395514, -0.02863376011021], -[-0.4300418619479, -0.02802747472215], -[-0.4248973271674, -0.02743185001722], -[-0.4197539916611, -0.02684676451456], -[-0.4146118136025, -0.02627209769848], -[-0.4094707528426, -0.02570773006984], -[-0.4043307708631, -0.02515354319429], -[-0.3991918307292, -0.02460941974736], -[-0.3940538970412, -0.02407524355645], -[-0.3889169358861, -0.02355089963996], -[-0.3837809147876, -0.0230362742436], -[-0.3786458026571, -0.02253125487395], -[-0.3735115697435, -0.02203573032949], -[-0.3683781875839, -0.0215495907291], -[-0.363245628954, -0.02107272753826], -[-0.3581138678185, -0.02060503359297], -[-0.3529828792827, -0.02014640312154], -[-0.3478526395436, -0.01969673176444], -[-0.3427231258427, -0.01925591659215], -[-0.3375943164185, -0.01882385612133], -[-0.3324661904602, -0.01840045032922], -[-0.3273387280623, -0.01798560066653], -[-0.3222119101803, -0.01757921006886], -[-0.3170857185862, -0.01718118296668], -[-0.311960135827, -0.01679142529418], -[-0.306835145182, -0.01640984449677], -[-0.3017107306232, -0.0160363495376], -[-0.2965868767752, -0.01567085090308], -[-0.2914635688777, -0.01531326060737], -[-0.2863407927475, -0.01496349219616], -[-0.2812185347436, -0.01462146074958], -[-0.2760967817317, -0.01428708288446], -[-0.2709755210511, -0.0139602767559], -[-0.2658547404822, -0.01364096205833], -[-0.2607344282157, -0.01332906002604], -[-0.2556145728223, -0.01302449343319], -[-0.2504951632243, -0.01272718659351], -[-0.2453761886683, -0.01243706535957], -[-0.2402576386982, -0.01215405712177], -[-0.2351395031308, -0.01187809080705], -[-0.2300217720314, -0.01160909687738], -[-0.2249044356911, -0.01134700732802], -[-0.2197874846051, -0.01109175568569], -[-0.2146709094518, -0.01084327700653], -[-0.2095547010738, -0.010601507874], -[-0.2044388504589, -0.01036638639671], -[-0.1993233487232, -0.01013785220615], -[-0.1942081870941, -0.009915846454469], -[-0.1890933568955, -0.009700311812134], -[-0.183978849533, -0.009491192465687], -[-0.1788646564804, -0.009288434115462], -[-0.1737507692673, -0.009091983973357], -[-0.1686371794675, -0.008901790760642], -[-0.1635238786879, -0.008717804705817], -[-0.1584108585588, -0.008539977542532], -[-0.1532981107248, -0.008368262507582], -[-0.148185626836, -0.008202614338959], -[-0.1430733985413, -0.008042989274001], -[-0.1379614174808, -0.00788934504761], -[-0.1328496752797, -0.007741640890556], -[-0.1277381635435, -0.007599837527857], -[-0.1226268738527, -0.007463897177334], -[-0.1175157977586, -0.007333783548022], -[-0.1124049267803, -0.007209461838978], -[-0.1072942524011, -0.007090898737942], -[-0.1021837660667, -0.006978062420177], -[-0.09707345918285, -0.006870922547368], -[-0.09196332311435, -0.006769450266616], -[-0.08685334918401, -0.006673618209486], -[-0.08174352867228, -0.006583400491162], -[-0.07663385281723, -0.006498772709638], -[-0.07152431281502, -0.006419711945004], -[-0.06641489982063, -0.006346196758779], -[-0.06130560494906, -0.006278207193319], -[-0.05619641927681, -0.006215724771278], -[-0.05108733384364, -0.00615873249512], -[-0.04597833965469, -0.006107214846687], -[-0.04086942768275, -0.006061157786816], -[-0.03576058887089, -0.006020548755007], -[-0.03065181413517, -0.005985376669115], -[-0.02554309436767, -0.005955631925113], -[-0.02043442043958, -0.005931306396865], -[-0.01532578320446, -0.005912393435952], -[-0.01021717350163, -0.005898887871521], -[-0.005108582159686, -0.005890786010193], -[6.369338240271e-17, -0.005888085635964], -[0.005108582159701, -0.00589078601021], -[0.01021717350162, -0.005898887871519], -[0.01532578320445, -0.00591239343595], -[0.02043442043958, -0.005931306396867], -[0.02554309436768, -0.005955631925115], -[0.03065181413517, -0.005985376669115], -[0.03576058887089, -0.006020548755006], -[0.04086942768276, -0.006061157786817], -[0.04597833965469, -0.006107214846686], -[0.05108733384364, -0.006158732495119], -[0.05619641927681, -0.006215724771277], -[0.06130560494906, -0.006278207193319], -[0.06641489982063, -0.006346196758778], -[0.07152431281502, -0.006419711945004], -[0.07663385281723, -0.006498772709639], -[0.08174352867228, -0.006583400491162], -[0.08685334918401, -0.006673618209486], -[0.09196332311435, -0.006769450266609], -[0.09707345918285, -0.006870922547368], -[0.1021837660667, -0.006978062420177], -[0.1072942524011, -0.007090898737942], -[0.1124049267803, -0.007209461838978], -[0.1175157977586, -0.007333783548022], -[0.1226268738527, -0.007463897177334], -[0.1277381635435, -0.007599837527869], -[0.1328496752797, -0.007741640890556], -[0.1379614174808, -0.00788934504761], -[0.1430733985413, -0.008042989274001], -[0.148185626836, -0.008202614338959], -[0.1532981107248, -0.008368262507582], -[0.1584108585588, -0.008539977542532], -[0.1635238786879, -0.008717804705817], -[0.1686371794675, -0.008901790760642], -[0.1737507692673, -0.009091983973357], -[0.1788646564804, -0.009288434115462], -[0.183978849533, -0.009491192465687], -[0.1890933568955, -0.009700311812134], -[0.1942081870941, -0.009915846454469], -[0.1993233487232, -0.01013785220615], -[0.2044388504589, -0.01036638639671], -[0.2095547010738, -0.010601507874], -[0.2146709094518, -0.01084327700653], -[0.2197874846051, -0.01109175568569], -[0.2249044356911, -0.01134700732802], -[0.2300217720314, -0.01160909687738], -[0.2351395031308, -0.01187809080705], -[0.2402576386982, -0.01215405712177], -[0.2453761886683, -0.01243706535957], -[0.2504951632243, -0.01272718659351], -[0.2556145728223, -0.01302449343319], -[0.2607344282157, -0.01332906002604], -[0.2658547404822, -0.01364096205833], -[0.2709755210511, -0.0139602767559], -[0.2760967817317, -0.01428708288446], -[0.2812185347436, -0.01462146074958], -[0.2863407927475, -0.01496349219616], -[0.2914635688777, -0.01531326060737], -[0.2965868767752, -0.01567085090308], -[0.3017107306232, -0.0160363495376], -[0.306835145182, -0.01640984449677], -[0.311960135827, -0.01679142529418], -[0.3170857185862, -0.01718118296668], -[0.3222119101803, -0.01757921006886], -[0.3273387280623, -0.01798560066653], -[0.3324661904602, -0.01840045032922], -[0.3375943164185, -0.01882385612133], -[0.3427231258427, -0.01925591659215], -[0.3478526395436, -0.01969673176444], -[0.3529828792827, -0.02014640312154], -[0.3581138678185, -0.02060503359297], -[0.363245628954, -0.02107272753826], -[0.3683781875839, -0.0215495907291], -[0.3735115697435, -0.02203573032949], -[0.3786458026571, -0.02253125487395], -[0.3837809147876, -0.0230362742436], -[0.3889169358861, -0.02355089963996], -[0.3940538970412, -0.02407524355645], -[0.3991918307292, -0.02460941974736], -[0.4043307708631, -0.02515354319429], -[0.4094707528426, -0.02570773006984], -[0.4146118136025, -0.02627209769848], -[0.4197539916611, -0.02684676451456], -[0.4248973271674, -0.02743185001722], -[0.4300418619479, -0.02802747472215], -[0.4351876395514, -0.02863376011021], -[0.4403341449962, -0.02925070173495], -[-0.4376025303998, -0.02451952405167], -[-0.4324532022632, -0.02390831244874], -[-0.4273047556406, -0.0233077890611], -[-0.4221576995314, -0.02271783229814], -[-0.4170119906214, -0.02213832314837], -[-0.4118675872075, -0.02156914351975], -[-0.4067244491556, -0.02101017628975], -[-0.4015825378563, -0.02046130535239], -[-0.3964418161807, -0.01992241566234], -[-0.3913022484354, -0.01939339327611], -[-0.3861638003157, -0.01887412539055], -[-0.3810264388603, -0.01836450037866], -[-0.3758901324037, -0.01786440782291], -[-0.3707548505301, -0.017373738546], -[-0.3656205640264, -0.01689238463945], -[-0.3604872448357, -0.01642023948982], -[-0.3553548660107, -0.0159571978029], -[-0.350223401668, -0.01550315562587], -[-0.3450928269425, -0.01505801036754], -[-0.3399631179423, -0.01462166081686], -[-0.3348342517045, -0.01419400715962], -[-0.3297062061515, -0.01377495099366], -[-0.3245789600482, -0.01336439534257], -[-0.3194524929598, -0.01296224466797], -[-0.3143267852112, -0.01256840488045], -[-0.3092018178463, -0.01218278334941], -[-0.304077572589, -0.01180528891165], -[-0.2989540318052, -0.01143583187898], -[-0.2938311784654, -0.01107432404484], -[-0.288708996109, -0.01072067869009], -[-0.2835874688092, -0.01037481058786], -[-0.2784665811389, -0.01003663600782], -[-0.2733463181388, -0.009706072719596], -[-0.2682266652848, -0.009383039995709], -[-0.2631076084585, -0.009067458613871], -[-0.257989140445, -0.008759236785285], -[-0.2528712092886, -0.008458308552949], -[-0.2477538009445, -0.008164642663275], -[-0.242637071638, -0.007878114832816], -[-0.2375207953728, -0.007598654612199], -[-0.2324050373761, -0.00732620208191], -[-0.2272897856102, -0.007060688584893], -[-0.2221750282404, -0.006802046973696], -[-0.2170607536143, -0.006550211609873], -[-0.2119469502422, -0.006305118363237], -[-0.2068336067792, -0.006066704610997], -[-0.201720712008, -0.005834909236799], -[-0.196608254822, -0.005609672629695], -[-0.1914962242108, -0.005390936683059], -[-0.186384609245, -0.005178644793468], -[-0.1812733990634, -0.004972741859565], -[-0.1761625828603, -0.004773174280907], -[-0.1710521498734, -0.004579889956833], -[-0.1659420893736, -0.004392838285336], -[-0.1608323906549, -0.004211970161992], -[-0.1557230430248, -0.004037237978781], -[-0.1506140357965, -0.003868595623295], -[-0.1455053582808, -0.003705998477527], -[-0.1403969997795, -0.003549403417061], -[-0.1352889495791, -0.00339876881017], -[-0.1301811969452, -0.003254054516996], -[-0.1250737311181, -0.003115221888789], -[-0.1199665413079, -0.002982233767179], -[-0.1148596166913, -0.00285505448356], -[-0.1097529464085, -0.002733649858459], -[-0.1046465195609, -0.002617987201013], -[-0.09954032520877, -0.002508035308477], -[-0.09443435237004, -0.002403764465786], -[-0.08932859001941, -0.00230514644517], -[-0.08422302708773, -0.002212154505807], -[-0.07911765246196, -0.002124763393527], -[-0.07401245498555, -0.002042949340553], -[-0.06890742345911, -0.001966690065277], -[-0.06380254664155, -0.001895964772071], -[-0.05869781325149, -0.001830754151133], -[-0.05359321196899, -0.001771040378348], -[-0.04848873143757, -0.001716807115191], -[-0.04338436026651, -0.001668039508631], -[-0.0382800870334, -0.001624724191071], -[-0.03317590028685, -0.001586849280289], -[-0.0280717885495, -0.001554404379402], -[-0.02296774032107, -0.001527380576835], -[-0.0178637440817, -0.001505770446299], -[-0.01275978829527, -0.001489568046778], -[-0.007655861412929, -0.001478768922511], -[-0.002551951876738, -0.001473370102993], -[0.002551951876748, -0.001473370102999], -[0.00765586141294, -0.001478768922513], -[0.01275978829526, -0.001489568046776], -[0.01786374408169, -0.001505770446299], -[0.02296774032108, -0.001527380576835], -[0.0280717885495, -0.001554404379402], -[0.03317590028685, -0.001586849280289], -[0.0382800870334, -0.001624724191071], -[0.04338436026651, -0.001668039508631], -[0.04848873143757, -0.001716807115191], -[0.05359321196899, -0.001771040378349], -[0.05869781325149, -0.001830754151133], -[0.06380254664155, -0.001895964772071], -[0.06890742345911, -0.001966690065277], -[0.07401245498555, -0.002042949340553], -[0.07911765246196, -0.002124763393527], -[0.08422302708773, -0.002212154505807], -[0.08932859001941, -0.002305146445169], -[0.09443435237004, -0.002403764465786], -[0.09954032520877, -0.002508035308477], -[0.1046465195609, -0.002617987201013], -[0.1097529464085, -0.002733649858459], -[0.1148596166913, -0.00285505448356], -[0.1199665413079, -0.002982233767179], -[0.1250737311181, -0.003115221888783], -[0.1301811969452, -0.003254054516997], -[0.1352889495791, -0.00339876881017], -[0.1403969997795, -0.003549403417061], -[0.1455053582808, -0.003705998477527], -[0.1506140357965, -0.003868595623295], -[0.1557230430248, -0.004037237978782], -[0.1608323906549, -0.004211970161953], -[0.1659420893736, -0.004392838285336], -[0.1710521498734, -0.004579889956833], -[0.1761625828603, -0.004773174280907], -[0.1812733990634, -0.004972741859565], -[0.186384609245, -0.005178644793468], -[0.1914962242108, -0.005390936683059], -[0.196608254822, -0.005609672629695], -[0.201720712008, -0.005834909236799], -[0.2068336067792, -0.006066704610997], -[0.2119469502422, -0.006305118363237], -[0.2170607536143, -0.006550211609873], -[0.2221750282404, -0.006802046973696], -[0.2272897856102, -0.007060688584893], -[0.2324050373761, -0.00732620208191], -[0.2375207953728, -0.007598654612198], -[0.242637071638, -0.007878114832816], -[0.2477538009445, -0.008164642663275], -[0.2528712092886, -0.008458308552949], -[0.257989140445, -0.008759236785285], -[0.2631076084585, -0.009067458613871], -[0.2682266652848, -0.009383039995709], -[0.2733463181388, -0.009706072719597], -[0.2784665811389, -0.01003663600782], -[0.2835874688092, -0.01037481058786], -[0.288708996109, -0.01072067869009], -[0.2938311784654, -0.01107432404484], -[0.2989540318052, -0.01143583187898], -[0.304077572589, -0.01180528891165], -[0.3092018178463, -0.01218278334941], -[0.3143267852112, -0.01256840488045], -[0.3194524929598, -0.01296224466797], -[0.3245789600482, -0.01336439534257], -[0.3297062061515, -0.01377495099366], -[0.3348342517045, -0.01419400715962], -[0.3399631179423, -0.01462166081686], -[0.3450928269425, -0.01505801036755], -[0.350223401668, -0.01550315562587], -[0.3553548660107, -0.0159571978029], -[0.3604872448357, -0.01642023948982], -[0.3656205640264, -0.01689238463945], -[0.3707548505301, -0.017373738546], -[0.3758901324037, -0.01786440782291], -[0.3810264388603, -0.01836450037866], -[0.3861638003157, -0.01887412539055], -[0.3913022484354, -0.01939339327611], -[0.3964418161807, -0.01992241566234], -[0.4015825378563, -0.02046130535239], -[0.4067244491556, -0.02101017628975], -[0.4118675872075, -0.02156914351975], -[0.4170119906214, -0.02213832314837], -[0.4221576995314, -0.02271783229814], -[0.4273047556406, -0.0233077890611], -[0.4324532022632, -0.02390831244874], -[0.4376030841982, -0.02451952205435], -[-0.4348668958448, -0.01978075545642], -[-0.4297148646885, -0.01917582336922], -[-0.4245639558986, -0.01858113855042], -[-0.4194145834073, -0.01799692724593], -[-0.4142667040662, -0.0174230728203], -[-0.4091202762305, -0.01685945951325], -[-0.4039752597196, -0.01630597248844], -[-0.3988316157759, -0.01576249787947], -[-0.393689307023, -0.01522892283306], -[-0.3885482974231, -0.01470513554953], -[-0.3834085522342, -0.01419102532078], -[-0.378270037966, -0.01368648256564], -[-0.3731327223365, -0.01319139886293], -[-0.3679965742279, -0.01270566698216], -[-0.3628615636429, -0.01222918091206], -[-0.3577276616605, -0.01176183588701], -[-0.3525948403929, -0.01130352841141], -[-0.3474630729417, -0.01085415628225], -[-0.3423323333556, -0.01041361860981], -[-0.337202596588, -0.009981815836687], -[-0.3320738384551, -0.009558649755197], -[-0.3269460355948, -0.009144023523284], -[-0.3218191654268, -0.008737841679005], -[-0.3166932061129, -0.008340010153681], -[-0.3115681365181, -0.007950436283805], -[-0.306443936173, -0.007569028821799], -[-0.301320585237, -0.007195697945683], -[-0.2961980644624, -0.006830355267747], -[-0.2910763551592, -0.006472913842298], -[-0.2859554391615, -0.006123288172552], -[-0.2808352987945, -0.005781394216741], -[-0.275715914749, -0.005447149550467], -[-0.2705972745363, -0.005120476838763], -[-0.2654793673989, -0.004801294202798], -[-0.2603621808767, -0.004489509206483], -[-0.2552456757531, -0.004185018555658], -[-0.2501297637298, -0.003887755725763], -[-0.2450143770648, -0.003597794511035], -[-0.2399001154568, -0.003314983112548], -[-0.2347862265379, -0.00303913497332], -[-0.2296729570455, -0.002770259056762], -[-0.2245602928434, -0.002508287563032], -[-0.2194482199754, -0.0022531541792], -[-0.2143367246463, -0.002004794080403], -[-0.2092257932037, -0.001763143930221], -[-0.204115412121, -0.001528141881018], -[-0.1990055679811, -0.001299727574182], -[-0.1938962474615, -0.001077842140211], -[-0.1887874373196, -0.0008624281988923], -[-0.1836791243799, -0.0006534298591988], -[-0.1785712955209, -0.0004507927193151], -[-0.1734639376639, -0.0002544638665651], -[-0.1683570377621, -6.439187733483e-05], -[-0.1632505827908, 0.0001194731830339], -[-0.1581445597378, 0.0002971797602439], -[-0.1530389555954, 0.0004687748112923], -[-0.1479337573526, 0.0006343038043688], -[-0.1428289519883, 0.0007938107189899], -[-0.1377245264648, 0.0009473380460097], -[-0.1326204677226, 0.001094926787625], -[-0.1275167626751, 0.001236616457372], -[-0.1224133982048, 0.001372445080002], -[-0.117310361159, 0.001502449191556], -[-0.1122076383474, 0.001626663839116], -[-0.1071052165391, 0.001745122580757], -[-0.1020030824607, 0.001857857485375], -[-0.09690122279482, 0.001964899132521], -[-0.09179962417915, 0.002066276612213], -[-0.08669827320576, 0.002162017524691], -[-0.08159715642104, 0.002252147980259], -[-0.076496260326, 0.002336692598983], -[-0.07139557137691, 0.002415674510477], -[-0.06629507598636, 0.002489115353648], -[-0.06119476052466, 0.002557035276438], -[-0.05609461132149, 0.002619452935572], -[-0.05099461466793, 0.00267638549631], -[-0.04589475681874, 0.002727848632205], -[-0.04079502399481, 0.002773856524873], -[-0.03569540238599, 0.002814421863766], -[-0.03059587815395, 0.002849555845978], -[-0.02549643743535, 0.002879268176051], -[-0.02039706634512, 0.002903567065815], -[-0.01529775097987, 0.002922459234241], -[-0.01019847742143, 0.002935949907327], -[-0.005099231740416, 0.00294404281799], -[-6.369338240271e-17, 0.002946740206033], -[0.005099231740423, 0.002944042817994], -[0.01019847742143, 0.002935949907327], -[0.01529775097987, 0.002922459234242], -[0.02039706634512, 0.002903567065815], -[0.02549643743535, 0.002879268176051], -[0.03059587815394, 0.002849555845977], -[0.03569540238599, 0.002814421863766], -[0.04079502399481, 0.002773856524873], -[0.04589475681874, 0.002727848632205], -[0.05099461466793, 0.00267638549631], -[0.05609461132148, 0.002619452935571], -[0.06119476052466, 0.002557035276438], -[0.06629507598636, 0.002489115353648], -[0.07139557137691, 0.002415674510477], -[0.076496260326, 0.002336692598982], -[0.08159715642104, 0.002252147980259], -[0.08669827320576, 0.002162017524691], -[0.09179962417915, 0.002066276612204], -[0.09690122279482, 0.001964899132521], -[0.1020030824607, 0.001857857485375], -[0.1071052165391, 0.001745122580756], -[0.1122076383474, 0.001626663839116], -[0.117310361159, 0.001502449191556], -[0.1224133982048, 0.001372445080002], -[0.1275167626751, 0.001236616457358], -[0.1326204677226, 0.001094926787625], -[0.1377245264648, 0.0009473380460097], -[0.1428289519883, 0.0007938107189899], -[0.1479337573526, 0.0006343038043691], -[0.1530389555954, 0.0004687748112923], -[0.1581445597378, 0.0002971797602438], -[0.1632505827908, 0.0001194731830303], -[0.1683570377621, -6.439187733483e-05], -[0.1734639376639, -0.0002544638665649], -[0.1785712955209, -0.0004507927193149], -[0.1836791243799, -0.0006534298591987], -[0.1887874373196, -0.0008624281988925], -[0.1938962474615, -0.001077842140211], -[0.1990055679811, -0.001299727574138], -[0.204115412121, -0.001528141881017], -[0.2092257932037, -0.001763143930221], -[0.2143367246463, -0.002004794080403], -[0.2194482199754, -0.0022531541792], -[0.2245602928434, -0.002508287563032], -[0.2296729570455, -0.002770259056762], -[0.2347862265379, -0.003039134973226], -[0.2399001154568, -0.003314983112548], -[0.2450143770648, -0.003597794511035], -[0.2501297637298, -0.003887755725763], -[0.2552456757531, -0.004185018555658], -[0.2603621808767, -0.004489509206483], -[0.2654793673989, -0.004801294202798], -[0.2705972745363, -0.005120476838763], -[0.275715914749, -0.005447149550467], -[0.2808352987945, -0.005781394216741], -[0.2859554391615, -0.006123288172552], -[0.2910763551592, -0.006472913842298], -[0.2961980644624, -0.006830355267747], -[0.301320585237, -0.007195697945683], -[0.306443936173, -0.007569028821799], -[0.3115681365181, -0.007950436283805], -[0.3166932061129, -0.00834001015368], -[0.3218191654268, -0.008737841679005], -[0.3269460355948, -0.009144023523284], -[0.3320738384551, -0.009558649755197], -[0.337202596588, -0.009981815836687], -[0.3423323333556, -0.01041361860981], -[0.3474630729417, -0.01085415628225], -[0.3525948403929, -0.01130352841141], -[0.3577276616605, -0.01176183588701], -[0.3628615636429, -0.01222918091206], -[0.3679965742279, -0.01270566698216], -[0.3731327223365, -0.01319139886293], -[0.378270037966, -0.01368648256564], -[0.3834085522342, -0.01419102532078], -[0.3885482974231, -0.01470513554953], -[0.393689307023, -0.01522892283306], -[0.3988316157759, -0.01576249787947], -[0.4039752597196, -0.01630597248844], -[0.4091202762305, -0.01685945951325], -[0.4142667040662, -0.0174230728203], -[0.4194145834073, -0.01799692724593], -[0.4245639558986, -0.01858113855042], -[0.4297148646885, -0.01917582336922], -[0.4348668961604, -0.01978075664359], -[-0.4321270824826, -0.01503554364998], -[-0.4269727320227, -0.01443647810104], -[-0.4218195653534, -0.01384770689499], -[-0.4166680788928, -0.01326931698098], -[-0.4115182295901, -0.01270119400912], -[-0.4063699757956, -0.01214322446167], -[-0.4012232772224, -0.01159529570078], -[-0.3960780949083, -0.01105729601344], -[-0.390934391177, -0.01052911465389], -[-0.3857921295974, -0.01001064188346], -[-0.3806512749438, -0.009501769008067], -[-0.3755117931548, -0.00900238841321], -[-0.3703736512919, -0.008512393596827], -[-0.3652368174989, -0.008031679199927], -[-0.36010126096, -0.007560141035152], -[-0.3549669518593, -0.007097676113361], -[-0.3498338613392, -0.006644182668321], -[-0.3447019614605, -0.00619956017961], -[-0.3395712251616, -0.005763709393786], -[-0.3344416262191, -0.005336532344001], -[-0.3293131392085, -0.004917932368025], -[-0.3241857394659, -0.004507814124881], -[-0.3190594030496, -0.004106083610114], -[-0.3139341067033, -0.003712648169792], -[-0.3088098278201, -0.003327416513329], -[-0.3036865444061, -0.002950298725192], -[-0.2985642350466, -0.002581206275586], -[-0.2934428790472, -0.002220052230784], -[-0.2883224561099, -0.001866750228055], -[-0.2832029457171, -0.001521215455285], -[-0.2780843265974, -0.00118336532898], -[-0.2729665783715, -0.0008531224853306], -[-0.2678496889922, -0.0005304156198898], -[-0.2627336639731, -0.0002151657635044], -[-0.2576185084925, 9.275118746286e-05], -[-0.2525041372255, 0.0003935193224514], -[-0.2473902637663, 0.0006872249954794], -[-0.2422766047806, 0.0009734482032922], -[-0.2371653544518, 0.001252223963925], -[-0.232053965246, 0.001524398405731], -[-0.2269432939433, 0.00178963733109], -[-0.2218333243123, 0.002048007706926], -[-0.2167240402792, 0.002299575033705], -[-0.2116154259103, 0.0025444033436], -[-0.2065074653952, 0.002782555198835], -[-0.2014001430303, 0.003014091690167], -[-0.1962934432043, 0.003239072435505], -[-0.191187350384, 0.003457555578633], -[-0.1860818491007, 0.003669597788031], -[-0.1809769239382, 0.003875254255758], -[-0.1758725595213, 0.004074578696423], -[-0.1707687405046, 0.00426762334618], -[-0.1656654515631, 0.004454438961794], -[-0.1605626773829, 0.004635074819717], -[-0.1554604026527, 0.00480957871517], -[-0.1503586120562, 0.004977996961346], -[-0.1452572902652, 0.005140374388469], -[-0.1401564219336, 0.005296754342995], -[-0.1350559916913, 0.005447178686754], -[-0.1299559841396, 0.005591687796121], -[-0.1248563838471, 0.005730320561175], -[-0.1197571753454, 0.005863114384886], -[-0.1146583431267, 0.005990105182262], -[-0.1095598716404, 0.00611132737955], -[-0.1044617452918, 0.006226813913403], -[-0.09936394844009, 0.006336596230072], -[-0.0942664653975, 0.006440704284602], -[-0.0891692804286, 0.006539166540038], -[-0.08407237775013, 0.006632009966643], -[-0.07897574153132, 0.006719260041136], -[-0.07387935589447, 0.006800940745948], -[-0.06878320491598, 0.006877074568496], -[-0.06368727262771, 0.00694768250049], -[-0.05859154301862, 0.007012784037263], -[-0.0534960000368, 0.007072397177135], -[-0.04840062759167, 0.00712653842081], -[-0.04330540955654, 0.007175222770816], -[-0.03821032977129, 0.007218463730985], -[-0.03311537204539, 0.007256273305966], -[-0.02802052016098, 0.007288662000804], -[-0.02292575787623, 0.007315638820547], -[-0.01783106892872, 0.007337211269919], -[-0.01273643703911, 0.007353385353049], -[-0.0076418459147, 0.007364165573219], -[-0.002547279253244, 0.00736955493271], -[0.002547279253245, 0.007369554932713], -[0.007641845914693, 0.007364165573212], -[0.01273643703911, 0.007353385353048], -[0.01783106892873, 0.007337211269923], -[0.02292575787623, 0.007315638820547], -[0.02802052016098, 0.007288662000803], -[0.03311537204539, 0.007256273305966], -[0.03821032977129, 0.007218463730985], -[0.04330540955654, 0.007175222770817], -[0.04840062759168, 0.00712653842081], -[0.0534960000368, 0.007072397177135], -[0.05859154301862, 0.007012784037263], -[0.06368727262771, 0.006947682500491], -[0.06878320491598, 0.006877074568496], -[0.07387935589447, 0.006800940745948], -[0.07897574153132, 0.006719260041136], -[0.08407237775013, 0.006632009966643], -[0.0891692804286, 0.006539166540038], -[0.0942664653975, 0.006440704284602], -[0.09936394844009, 0.006336596230072], -[0.1044617452918, 0.006226813913402], -[0.1095598716404, 0.00611132737955], -[0.1146583431267, 0.005990105182262], -[0.1197571753454, 0.005863114384886], -[0.1248563838471, 0.005730320561179], -[0.1299559841396, 0.005591687796121], -[0.1350559916913, 0.005447178686754], -[0.1401564219336, 0.005296754342995], -[0.1452572902652, 0.00514037438847], -[0.1503586120562, 0.004977996961345], -[0.1554604026527, 0.00480957871517], -[0.1605626773829, 0.004635074819689], -[0.1656654515631, 0.004454438961793], -[0.1707687405046, 0.004267623346181], -[0.1758725595213, 0.004074578696423], -[0.1809769239382, 0.003875254255759], -[0.1860818491007, 0.003669597788031], -[0.191187350384, 0.003457555578634], -[0.1962934432043, 0.003239072435505], -[0.2014001430303, 0.003014091690167], -[0.2065074653952, 0.002782555198835], -[0.2116154259103, 0.002544403343601], -[0.2167240402792, 0.002299575033705], -[0.2218333243123, 0.002048007706926], -[0.2269432939433, 0.00178963733109], -[0.232053965246, 0.001524398405731], -[0.2371653544518, 0.001252223963925], -[0.2422766067228, 0.0009734473169292], -[0.2473902637663, 0.0006872249954793], -[0.2525041372255, 0.0003935193224516], -[0.2576185084925, 9.27511874631e-05], -[0.2627336639731, -0.0002151657635044], -[0.2678496889922, -0.0005304156198897], -[0.2729665783715, -0.0008531224853306], -[0.2780843265974, -0.00118336532898], -[0.2832029457171, -0.001521215455285], -[0.2883224561099, -0.001866750228054], -[0.2934428790472, -0.002220052230784], -[0.2985642350466, -0.002581206275586], -[0.3036865444061, -0.002950298725192], -[0.3088098278201, -0.003327416513329], -[0.3139341067033, -0.003712648169792], -[0.3190594030496, -0.004106083610114], -[0.3241857394659, -0.004507814124881], -[0.3293131392085, -0.004917932368025], -[0.3344416262191, -0.005336532344001], -[0.3395712251616, -0.005763709393786], -[0.3447019614605, -0.006199560179541], -[0.3498338613392, -0.006644182668321], -[0.3549669518593, -0.007097676113361], -[0.36010126096, -0.007560141035152], -[0.3652368174989, -0.008031679199927], -[0.3703736512919, -0.008512393596827], -[0.3755117931548, -0.009002388413209], -[0.3806512749438, -0.009501769008067], -[0.3857921295974, -0.01001064188346], -[0.390934391177, -0.01052911465389], -[0.3960780949083, -0.01105729601344], -[0.4012232772224, -0.01159529570078], -[0.4063699757956, -0.01214322446167], -[0.4115182295901, -0.01270119400912], -[0.4166680788928, -0.01326931698098], -[0.4218195653534, -0.01384770689499], -[0.4269727320227, -0.01443647810104], -[0.4321270824885, -0.01503554366772], -[-0.4293834735336, -0.01028363170316], -[-0.4242269085556, -0.009690460171294], -[-0.4190716858137, -0.009107676110631], -[-0.4139182853422, -0.008535181949839], -[-0.4087666641227, -0.007972865536499], -[-0.4036167804377, -0.007420615508923], -[-0.3984685938359, -0.006878321342509], -[-0.3933220650957, -0.00634587339393], -[-0.3881771561889, -0.00582316294282], -[-0.3830338302431, -0.005310082231074], -[-0.3778920515038, -0.004806524499854], -[-0.372751785296, -0.004312384024377], -[-0.3676129979861, -0.003827556146571], -[-0.3624756569426, -0.003351937305678], -[-0.357339730498, -0.002885425066904], -[-0.3522051879099, -0.002427918148189], -[-0.3470719993227, -0.001979316445193], -[-0.3419401357297, -0.001539521054579], -[-0.3368095689349, -0.001108434295688], -[-0.3316802715163, -0.0006859597306749], -[-0.3265522167888, -0.0002720021832103], -[-0.3214253787681, 0.0001335322441942], -[-0.3162997321349, 0.0005307361541322], -[-0.3111752522006, 0.0009197008394658], -[-0.3060519148728, 0.001300516269611], -[-0.3009296964624, 0.001673271072468], -[-0.2958085742815, 0.002038052229306], -[-0.2906885262904, 0.002394945785116], -[-0.2855695309008, 0.002744037401094], -[-0.2804515648441, 0.003085412835794], -[-0.2753346000375, 0.003419154446315], -[-0.2702186072224, 0.003745329687496], -[-0.2651035827158, 0.004063981869357], -[-0.2599895935262, 0.004375171604778], -[-0.2548767376751, 0.004679124740383], -[-0.2497648146571, 0.00497634555931], -[-0.2446528182625, 0.00526709977079], -[-0.2395424343457, 0.005547994726719], -[-0.2344328237624, 0.00582340145431], -[-0.2293240453801, 0.006091843015247], -[-0.2242160807215, 0.006353387010119], -[-0.2191089114627, 0.006608099595897], -[-0.2140025194156, 0.006856045482557], -[-0.2088968865118, 0.007097287930115], -[-0.2037919947866, 0.007331888745822], -[-0.1986878263639, 0.007559908281556], -[-0.1935843634429, 0.00778140543109], -[-0.1884815882844, 0.007996437628176], -[-0.183379483199, 0.008205060843814], -[-0.1782780305353, 0.008407329584316], -[-0.1731772126696, 0.008603296889174], -[-0.168077011996, 0.00879301432905], -[-0.1629774109171, 0.008976532003832], -[-0.157878391836, 0.009153898540744], -[-0.1527799371483, 0.00932516109251], -[-0.1476820292356, 0.00949036533556], -[-0.142584650459, 0.009649555468281], -[-0.1374877831538, 0.009802774209298], -[-0.132391409624, 0.009950062795796], -[-0.1272955121389, 0.01009146098187], -[-0.1222000729284, 0.01022700703693], -[-0.1171050741805, 0.01035673774406], -[-0.1120104980386, 0.01048068839855], -[-0.1069163265991, 0.0105988928063], -[-0.1018225419103, 0.0107113832824], -[-0.09672912597091, 0.01081819064964], -[-0.09163606072966, 0.01091934423711], -[-0.08654332808502, 0.01101487187885], -[-0.08145090988544, 0.01110479991252], -[-0.07635878793, 0.01118915317813], -[-0.07126694396936, 0.0112679550168], -[-0.06617535970712, 0.0113412272696], -[-0.06108401680148, 0.01140899027643], -[-0.05599289686722, 0.01147126287498], -[-0.05090198147796, 0.01152806239973], -[-0.04581125216867, 0.01157940468102], -[-0.0407206904384, 0.0116253040442], -[-0.0356302777533, 0.01166577330884], -[-0.03053999554975, 0.01170082378804], -[-0.02544982523772, 0.01173046528777], -[-0.02035974820423, 0.01175470610635], -[-0.01526974581704, 0.01177355303395], -[-0.01017979942832, 0.01178701135222], -[-0.005089890378451, 0.01179508483399], -[-1.910801472081e-16, 0.01179777574306], -[0.005089890378451, 0.01179508483399], -[0.01017979942832, 0.01178701135222], -[0.01526974581705, 0.01177355303395], -[0.02035974820424, 0.01175470610635], -[0.02544982523772, 0.01173046528777], -[0.03053999554975, 0.01170082378804], -[0.0356302777533, 0.01166577330884], -[0.0407206904384, 0.0116253040442], -[0.04581125216867, 0.01157940468102], -[0.05090198147796, 0.01152806239973], -[0.05599289686722, 0.01147126287498], -[0.06108401680147, 0.01140899027643], -[0.06617535970712, 0.0113412272696], -[0.07126694396936, 0.0112679550168], -[0.07635878793, 0.01118915317813], -[0.08145090988545, 0.01110479991252], -[0.08654332808502, 0.01101487187885], -[0.09163606072966, 0.01091934423711], -[0.09672912597091, 0.01081819064964], -[0.1018225419103, 0.0107113832824], -[0.1069163265991, 0.0105988928063], -[0.1120104980386, 0.01048068839855], -[0.1171050741805, 0.01035673774406], -[0.1222000729284, 0.01022700703693], -[0.1272955121389, 0.01009146098187], -[0.132391409624, 0.009950062795796], -[0.1374877831538, 0.009802774209298], -[0.142584650459, 0.009649555468281], -[0.1476820292356, 0.00949036533556], -[0.1527799371483, 0.00932516109251], -[0.157878391836, 0.009153898540744], -[0.1629774109171, 0.008976532003832], -[0.168077011996, 0.00879301432905], -[0.1731772126696, 0.008603296889174], -[0.1782780305353, 0.008407329584316], -[0.183379483199, 0.008205060843814], -[0.1884815882844, 0.007996437628175], -[0.1935843634429, 0.00778140543109], -[0.1986878263639, 0.007559908281454], -[0.2037919947866, 0.007331888745822], -[0.2088968865118, 0.007097287930115], -[0.2140025194156, 0.006856045482557], -[0.2191089114627, 0.006608099595898], -[0.2242160807215, 0.006353387010119], -[0.2293240453801, 0.006091843015247], -[0.2344328237624, 0.00582340145439], -[0.2395424343457, 0.005547994726719], -[0.2446528182625, 0.00526709977079], -[0.2497648146571, 0.004976345559311], -[0.2548767376751, 0.004679124740383], -[0.2599895935262, 0.004375171604778], -[0.2651035827158, 0.004063981869357], -[0.2702186072224, 0.003745329687496], -[0.2753346000375, 0.003419154446315], -[0.2804515648441, 0.003085412835794], -[0.2855695309008, 0.002744037401095], -[0.2906885262904, 0.002394945785116], -[0.2958085742815, 0.002038052229306], -[0.3009296964624, 0.001673271072468], -[0.3060519148728, 0.001300516269611], -[0.3111752522006, 0.0009197008394651], -[0.3162997321349, 0.0005307361541322], -[0.3214253787681, 0.0001335322441944], -[0.3265522167888, -0.0002720021832101], -[0.3316802715163, -0.0006859597306747], -[0.3368095689349, -0.001108434295687], -[0.3419401357297, -0.001539521054579], -[0.3470719993227, -0.001979316445193], -[0.3522051879099, -0.002427918148189], -[0.357339730498, -0.002885425066904], -[0.3624756569426, -0.003351937305678], -[0.3676129979861, -0.003827556146571], -[0.372751785296, -0.004312384024377], -[0.3778920515038, -0.004806524499854], -[0.3830338302431, -0.005310082231073], -[0.3881771561889, -0.00582316294282], -[0.3933220650957, -0.00634587339393], -[0.3984685938359, -0.006878321342509], -[0.4036167804377, -0.007420615508923], -[0.4087666641227, -0.007972865536499], -[0.4139182853422, -0.008535181949839], -[0.4190716858139, -0.009107676111204], -[0.4242269085556, -0.009690460171294], -[0.4293839979208, -0.01028364702512], -[-0.4266360539294, -0.005524830290862], -[-0.4214774977088, -0.00493795147448], -[-0.4163204182984, -0.004361226593416], -[-0.4111653013973, -0.00379470099337], -[-0.4060121039551, -0.00323826463435], -[-0.4008607841263, -0.002691808226413], -[-0.3957113012376, -0.002155223275398], -[-0.3905636157541, -0.001628402126288], -[-0.3854176892454, -0.001111238004257], -[-0.38027348435, -0.0006036250534854], -[-0.3751309647403, -0.0001054583738073], -[-0.3699900950864, 0.0003833659447368], -[-0.3648508410205, 0.0008629507893487], -[-0.3597131691002, 0.001333397993868], -[-0.3545770467726, 0.001794808310009], -[-0.3494424423379, 0.002247281380369], -[-0.3443093249141, 0.002690915713137], -[-0.3391776644003, 0.0031258086584], -[-0.3340474314423, 0.003552056385987], -[-0.3289185973971, 0.003969753864759], -[-0.3237911342988, 0.004378994843275], -[-0.3186650148243, 0.004779871831753], -[-0.3135402122604, 0.005172476085253], -[-0.3084167004708, 0.00555689758801], -[-0.3032944538644, 0.005933225038848], -[-0.2981734467971, 0.006301545965723], -[-0.293053655491, 0.006661945159947], -[-0.2879350575495, 0.007014507343601], -[-0.2828176318667, 0.00735931925003], -[-0.2777013514553, 0.007696473289894], -[-0.2725861688462, 0.008026058343422], -[-0.2674720193657, 0.00834811601564], -[-0.2623589134477, 0.008662584597911], -[-0.2572471402555, 0.008969413224376], -[-0.2521372227011, 0.009269135716539], -[-0.2470287205296, 0.009563504881452], -[-0.2419174777657, 0.009848297762452], -[-0.2368095444707, 0.01012686821244], -[-0.2317025593269, 0.01039844528812], -[-0.2265965016411, 0.01066309720359], -[-0.221491350868, 0.0109208907531], -[-0.2163870865934, 0.01117189130643], -[-0.211283688518, 0.01141616280452], -[-0.2061811364414, 0.0116537677554], -[-0.201079410248, 0.01188476723021], -[-0.1959784898934, 0.0121092208595], -[-0.1908783553909, 0.01232718682957], -[-0.1857789868, 0.01253872187908], -[-0.1806803642151, 0.01274388129571], -[-0.1755824677546, 0.01294271891296], -[-0.1704852775515, 0.01313528710706], -[-0.1653887737443, 0.01332163679395], -[-0.160292936469, 0.01350181742639], -[-0.1551977458511, 0.01367587699115], -[-0.1501031819992, 0.01384386200621], -[-0.1450092249985, 0.0140058175181], -[-0.1399158549054, 0.01416178709929], -[-0.1348230517427, 0.01431181284562], -[-0.129730795495, 0.01445593537384], -[-0.1246390661053, 0.01459419381914], -[-0.1195478434718, 0.01472662583281], -[-0.114457107445, 0.0148532675799], -[-0.1093668378261, 0.01497415373703], -[-0.1042770143651, 0.01508931749014], -[-0.09918761675967, 0.01519879053243], -[-0.09409862465486, 0.01530260306225], -[-0.08901001764256, 0.01540078378118], -[-0.08392177526188, 0.01549335989206], -[-0.07883387699974, 0.01558035709719], -[-0.07374630229185, 0.01566179959657], -[-0.06865903052409, 0.01573771008621], -[-0.06357204103413, 0.01580810975655], -[-0.05848531311347, 0.01587301829095], -[-0.05339882600964, 0.01593245386427], -[-0.04831255892882, 0.0159864331416], -[-0.04322649103855, 0.01603497127696], -[-0.03814060147077, 0.01607808191225], -[-0.03305486932503, 0.01611577717621], -[-0.02796927367184, 0.01614806768348], -[-0.02288379355628, 0.01617496253385], -[-0.01779840800162, 0.01619646931155], -[-0.01271309601315, 0.01621259408464], -[-0.007627836582086, 0.01622334140461], -[-0.002542608689524, 0.01622871430592], -[0.002542608689523, 0.01622871430592], -[0.007627836582084, 0.0162233414046], -[0.01271309601315, 0.01621259408464], -[0.01779840800162, 0.01619646931155], -[0.02288379355628, 0.01617496253385], -[0.02796927367184, 0.01614806768348], -[0.03305486932503, 0.01611577717621], -[0.03814060147077, 0.01607808191225], -[0.04322649103855, 0.01603497127696], -[0.04831255892882, 0.0159864331416], -[0.05339882600964, 0.01593245386427], -[0.05848531311347, 0.01587301829095], -[0.06357204103414, 0.01580810975655], -[0.06865903052409, 0.01573771008621], -[0.07374630229185, 0.01566179959657], -[0.07883387699974, 0.01558035709719], -[0.08392177526188, 0.01549335989206], -[0.08901001764257, 0.01540078378118], -[0.09409862465487, 0.01530260306225], -[0.09918761675967, 0.01519879053243], -[0.1042770143651, 0.01508931749014], -[0.1093668378261, 0.01497415373703], -[0.114457107445, 0.0148532675799], -[0.1195478434718, 0.01472662583281], -[0.1246390661053, 0.01459419381914], -[0.129730795495, 0.01445593537384], -[0.1348230517427, 0.01431181284562], -[0.1399158549054, 0.01416178709929], -[0.1450092249985, 0.0140058175181], -[0.1501031819992, 0.01384386200621], -[0.1551977458511, 0.01367587699115], -[0.160292936469, 0.01350181742639], -[0.1653887737443, 0.01332163679395], -[0.1704852775515, 0.01313528710706], -[0.1755824677546, 0.01294271891296], -[0.1806803642151, 0.01274388129571], -[0.1857789868, 0.01253872187908], -[0.1908783553909, 0.01232718682957], -[0.1959784898934, 0.01210922085945], -[0.201079410248, 0.01188476723021], -[0.2061811364414, 0.0116537677554], -[0.211283688518, 0.01141616280452], -[0.2163870865934, 0.01117189130643], -[0.221491350868, 0.0109208907531], -[0.2265965016411, 0.01066309720359], -[0.2317025593269, 0.01039844528812], -[0.2368095444707, 0.01012686821244], -[0.2419174777657, 0.009848297762452], -[0.2470287205296, 0.009563504881452], -[0.2521372227011, 0.009269135716539], -[0.2572471402555, 0.008969413224376], -[0.2623589134477, 0.008662584597911], -[0.2674720193657, 0.00834811601564], -[0.2725861688462, 0.008026058343422], -[0.2777013514553, 0.007696473289895], -[0.2828176318667, 0.00735931925003], -[0.2879350575495, 0.007014507343601], -[0.293053655491, 0.006661945159947], -[0.2981734467971, 0.006301545965723], -[0.3032944538644, 0.005933225038847], -[0.3084167004708, 0.00555689758801], -[0.3135402122604, 0.005172476085253], -[0.3186650148243, 0.004779871831753], -[0.3237911342988, 0.004378994843275], -[0.3289185973971, 0.003969753864759], -[0.3340474314423, 0.003552056385987], -[0.3391776644003, 0.0031258086584], -[0.3443093249141, 0.002690915713137], -[0.3494424423379, 0.002247281380369], -[0.3545770467726, 0.001794808310009], -[0.3597131691002, 0.001333397993869], -[0.3648508410205, 0.000862950789349], -[0.3699900950864, 0.0003833659447365], -[0.3751309647403, -0.000105458373807], -[0.38027348435, -0.0006036250534855], -[0.3854176892454, -0.001111238004257], -[0.3905636157542, -0.001628402126288], -[0.3957113012376, -0.002155223275398], -[0.4008607841263, -0.002691808226413], -[0.4060121039551, -0.00323826463435], -[0.4111653013973, -0.00379470099337], -[0.4163204182984, -0.004361226593416], -[0.4214774977088, -0.00493795147448], -[0.4266360545437, -0.005524832156605], -[-0.4238850248647, -0.0007595781664246], -[-0.4187246020713, -0.000179132339501], -[-0.4135658630689, 0.0003914628145769], -[-0.4084092250157, 0.0009519485876322], -[-0.4032546447665, 0.001502432990494], -[-0.3981020802884, 0.002043023323174], -[-0.3929514906302, 0.00257382612996], -[-0.3878028358911, 0.003094947156739], -[-0.3826560771884, 0.003606491310504], -[-0.3775111766252, 0.004108562620954], -[-0.3723680972569, 0.004601264204152], -[-0.3672268030581, 0.005084698228145], -[-0.3620872588882, 0.005558965880482], -[-0.3569494304584, 0.006024167337561], -[-0.3518132842973, 0.006480401735722], -[-0.3466787877172, 0.006927767144018], -[-0.3415459087807, 0.007366360538584], -[-0.3364146162669, 0.007796277778533], -[-0.3312848796388, 0.008217613583295], -[-0.3261566690104, 0.008630461511342], -[-0.3210299551144, 0.009034913940211], -[-0.3159047092707, 0.009431062047762], -[-0.3107809033548, 0.0098189957946], -[-0.3056585097678, 0.01019880390759], -[-0.3005375014061, 0.01057057386442], -[-0.2954178497541, 0.01093439283077], -[-0.2902995302739, 0.01129034067233], -[-0.2851825233463, 0.01163849918766], -[-0.2800668160891, 0.01197895942593], -[-0.2749523204103, 0.01231182383065], -[-0.2698390783795, 0.0126371302115], -[-0.2647270433601, 0.01295497469293], -[-0.2596161912236, 0.01326543430668], -[-0.2545064981021, 0.01356858473288], -[-0.249397940366, 0.01386450029186], -[-0.244290494603, 0.0141532539363], -[-0.2391841375981, 0.01443491724394], -[-0.2340788463138, 0.0147095604106], -[-0.2289745978721, 0.01497725224329], -[-0.2238713695365, 0.01523806015459], -[-0.2187691386953, 0.01549205015596], -[-0.2136678828456, 0.01573928685241], -[-0.2085675795786, 0.01597983343695], -[-0.2034682065646, 0.01621375168538], -[-0.1983697415404, 0.01644110195128], -[-0.1932721622958, 0.01666194316115], -[-0.1881754466624, 0.01687633280979], -[-0.1830795725022, 0.01708432695583], -[-0.1779845176972, 0.01728598021734], -[-0.1728902601401, 0.01748134576767], -[-0.1677967777254, 0.01767047533135], -[-0.1627040483409, 0.01785341918016], -[-0.1576120498607, 0.01803022612925], -[-0.1525207601382, 0.01820094353341], -[-0.147430157, 0.01836561728346], -[-0.1423402182407, 0.01852429180266], -[-0.1372509216175, 0.01867701004327], -[-0.1321622448464, 0.01882381348322], -[-0.1270741655984, 0.01896474212279], -[-0.1219866614963, 0.01909983448145], -[-0.1168997101123, 0.01922912759477], -[-0.1118132889658, 0.0193526570114], -[-0.1067273755219, 0.01947045679018], -[-0.1016419471902, 0.01958255949728], -[-0.09655698132441, 0.01968899620352], -[-0.09147245522209, 0.0197897964817], -[-0.08638834612475, 0.01988498840409], -[-0.08130463121861, 0.01997459854001], -[-0.07622128763559, 0.02005865195347], -[-0.07113829245465, 0.02013717220101], -[-0.0660556227035, 0.02021018132957], -[-0.0609732553606, 0.02027769987451], -[-0.05589116735745, 0.02033974685776], -[-0.05080933558121, 0.02039633978605], -[-0.04572773687744, 0.02044749464932], -[-0.04064634805321, 0.02049322591922], -[-0.03556514588034, 0.02053354654778], -[-0.03048410709883, 0.02056846796614], -[-0.02540320842053, 0.02059800008353], -[-0.02032242653279, 0.02062215128627], -[-0.01524173810244, 0.02064092843698], -[-0.01016111977975, 0.02065433687399], -[-0.005080548202474, 0.02066238041072], -[0, 0.02066506133537], -[0.005080548202473, 0.02066238041072], -[0.01016111977975, 0.02065433687399], -[0.01524173810244, 0.02064092843699], -[0.02032242653279, 0.02062215128626], -[0.02540320842052, 0.02059800008353], -[0.03048410709884, 0.02056846796615], -[0.03556514588034, 0.02053354654778], -[0.04064634805321, 0.02049322591922], -[0.04572773687744, 0.02044749464932], -[0.05080933558121, 0.02039633978605], -[0.05589116735745, 0.02033974685776], -[0.06097325536059, 0.02027769987451], -[0.0660556227035, 0.02021018132957], -[0.07113829245465, 0.02013717220101], -[0.07622128763559, 0.02005865195347], -[0.08130463121861, 0.01997459854001], -[0.08638834612475, 0.01988498840409], -[0.09147245522209, 0.0197897964817], -[0.09655698132441, 0.01968899620352], -[0.1016419471902, 0.01958255949728], -[0.1067273755219, 0.01947045679018], -[0.1118132889658, 0.0193526570114], -[0.1168997101123, 0.01922912759477], -[0.1219866614963, 0.01909983448146], -[0.1270741655984, 0.01896474212279], -[0.1321622448464, 0.01882381348322], -[0.1372509216175, 0.01867701004327], -[0.1423402182407, 0.01852429180266], -[0.147430157, 0.01836561728346], -[0.1525207601382, 0.01820094353341], -[0.1576120498607, 0.01803022612925], -[0.1627040483409, 0.01785341918016], -[0.1677967777254, 0.01767047533135], -[0.1728902601401, 0.01748134576767], -[0.1779845176972, 0.01728598021734], -[0.1830795725022, 0.01708432695583], -[0.1881754466624, 0.01687633280979], -[0.1932721622958, 0.01666194316115], -[0.1983697415404, 0.01644110195128], -[0.2034682065646, 0.01621375168538], -[0.2085675795786, 0.01597983343695], -[0.2136678828456, 0.01573928685241], -[0.2187691386953, 0.01549205015596], -[0.2238713695365, 0.01523806015459], -[0.2289745978721, 0.01497725224329], -[0.2340788463138, 0.01470956041059], -[0.2391841375981, 0.01443491724394], -[0.244290494603, 0.0141532539363], -[0.249397940366, 0.01386450029186], -[0.2545064981021, 0.01356858473288], -[0.2596161912236, 0.01326543430668], -[0.2647270433601, 0.01295497469293], -[0.2698390783795, 0.0126371302115], -[0.2749523204103, 0.01231182383065], -[0.2800668160891, 0.01197895942593], -[0.2851825233463, 0.01163849918766], -[0.2902995302739, 0.01129034067233], -[0.2954178497541, 0.01093439283077], -[0.3005375014061, 0.01057057386442], -[0.3056585097678, 0.01019880390759], -[0.3107809033548, 0.009818995794601], -[0.3159047092707, 0.009431062047762], -[0.3210299551144, 0.009034913940211], -[0.3261566690104, 0.008630461511342], -[0.3312848796388, 0.008217613583295], -[0.3364146162669, 0.007796277778533], -[0.3415459087807, 0.007366360538584], -[0.3466787877172, 0.006927767144018], -[0.3518132842973, 0.006480401735722], -[0.3569494304584, 0.006024167337561], -[0.3620872588882, 0.005558965880483], -[0.3672268030581, 0.005084698228146], -[0.3723680972569, 0.004601264204152], -[0.3775111766252, 0.004108562620954], -[0.3826560771884, 0.003606491310504], -[0.3878028358911, 0.00309494715674], -[0.3929514906302, 0.00257382612996], -[0.3981020802884, 0.002043023323174], -[0.4032546447665, 0.001502432990494], -[0.4084092250157, 0.0009519485876321], -[0.4135658630689, 0.0003914628145771], -[0.4187246020713, -0.000179132339501], -[0.4238850248692, -0.0007595781780497], -[-0.421130278865, 0.004011389253714], -[-0.4159683234331, 0.004585818406354], -[-0.4108081196602, 0.005150214760886], -[-0.4056501534991, 0.005704590969381], -[-0.4004943816489, 0.006249053093981], -[-0.395340761831, 0.00678370652448], -[-0.3901892527618, 0.007308655933738], -[-0.3850398141225, 0.00782400523561], -[-0.3798924065298, 0.008329857544931], -[-0.3747469915055, 0.00882631513947], -[-0.3696035314451, 0.009313479423831], -[-0.3644619895868, 0.009791450895196], -[-0.3593223299802, 0.01026032911087], -[-0.3541845174544, 0.01072021265753], -[-0.3490485175869, 0.01117119912218], -[-0.3439142966714, 0.01161338506461], -[-0.3387818216869, 0.01204686599145], -[-0.3336510602662, 0.0124717363316], -[-0.3285219806655, 0.0128880894131], -[-0.3233945517332, 0.01329601744125], -[-0.3182687428804, 0.013695611478], -[-0.3131445240508, 0.01408696142252], -[-0.3080218656921, 0.01447015599282], -[-0.3029007387268, 0.01484528270854], -[-0.2977811145249, 0.01521242787456], -[-0.2926629648762, 0.01557167656571], -[-0.2875462619639, 0.01592311261218], -[-0.2824309783385, 0.01626681858587], -[-0.2773170868928, 0.01660287578746], -[-0.2722045608374, 0.01693136423417], -[-0.2670933736772, 0.0172523626482], -[-0.2619834991882, 0.01756594844579], -[-0.2568749113957, 0.01787219772687], -[-0.251767584553, 0.01817118526517], -[-0.246661493121, 0.01846298449894], -[-0.2415566117483, 0.01874766752199], -[-0.2364529152527, 0.01902530507528], -[-0.2313503786032, 0.01929596653882], -[-0.2262489769025, 0.01955971992393], -[-0.2211486853711, 0.01981663186591], -[-0.2160494793314, 0.0200667676169], -[-0.2109513341931, 0.0203101910391], -[-0.2058542254394, 0.02054696459827], -[-0.2007581286134, 0.02077714935737], -[-0.1956630193064, 0.02100080497054], -[-0.1905688731456, 0.02121798967724], -[-0.1854756657836, 0.02142876029648], -[-0.1803833728883, 0.02163317222144], -[-0.1752919701334, 0.02183127941407], -[-0.1702014331895, 0.02202313439994], -[-0.1651117377167, 0.0222087882632], -[-0.1600228593565, 0.02238829064172], -[-0.1549347737259, 0.02256168972227], -[-0.1498474564108, 0.02272903223598], -[-0.1447608829608, 0.02289036345381], -[-0.1396750288848, 0.02304572718213], -[-0.1345898696462, 0.02319516575851], -[-0.1295053806595, 0.02333872004756], -[-0.1244215372875, 0.02347642943691], -[-0.1193383148385, 0.02360833183324], -[-0.1142556885645, 0.02373446365863], -[-0.1091736336592, 0.02385485984674], -[-0.1040921252576, 0.02396955383931], -[-0.09901113843513, 0.02407857758276], -[-0.09393064820729, 0.02418196152483], -[-0.08885062953026, 0.02427973461145], -[-0.08377105730138, 0.02437192428365], -[-0.07869190636024, 0.02445855647466], -[-0.07361315149004, 0.02453965560714], -[-0.06853476741938, 0.02461524459052], -[-0.06345672882425, 0.02468534481852], -[-0.05837901033041, 0.02474997616682], -[-0.053301586516, 0.02480915699082], -[-0.04822443191438, 0.02486290412364], -[-0.0431475210173, 0.0249112328742], -[-0.03807082827815, 0.02495415702553], -[-0.03299432811552, 0.02499168883318], -[-0.0279179949169, 0.02502383902384], -[-0.02284180304246, 0.0250506167941], -[-0.01776572682909, 0.02507202980942], -[-0.01268974059443, 0.02508808420323], -[-0.007613818641096, 0.02509878457622], -[-0.002537935260889, 0.02510413399582], -[0.002537935260888, 0.02510413399582], -[0.007613818641098, 0.02509878457623], -[0.01268974059443, 0.02508808420323], -[0.01776572682909, 0.02507202980942], -[0.02284180304247, 0.0250506167941], -[0.0279179949169, 0.02502383902384], -[0.03299432811552, 0.02499168883318], -[0.03807082827814, 0.02495415702553], -[0.0431475210173, 0.0249112328742], -[0.04822443191438, 0.02486290412364], -[0.053301586516, 0.02480915699082], -[0.05837901033041, 0.02474997616682], -[0.06345672882425, 0.02468534481852], -[0.06853476741938, 0.02461524459052], -[0.07361315149004, 0.02453965560714], -[0.07869190636024, 0.02445855647466], -[0.08377105730139, 0.02437192428365], -[0.08885062953026, 0.02427973461145], -[0.09393064820729, 0.02418196152483], -[0.09901113843513, 0.02407857758276], -[0.1040921252576, 0.02396955383931], -[0.1091736336592, 0.02385485984673], -[0.1142556885645, 0.02373446365863], -[0.1193383148385, 0.02360833183324], -[0.1244215372875, 0.02347642943689], -[0.1295053806595, 0.02333872004756], -[0.1345898696462, 0.02319516575852], -[0.1396750288848, 0.02304572718213], -[0.1447608829608, 0.02289036345381], -[0.1498474564108, 0.02272903223598], -[0.1549347737259, 0.02256168972227], -[0.1600228593565, 0.02238829064172], -[0.1651117377167, 0.0222087882632], -[0.1702014331895, 0.02202313439994], -[0.1752919701334, 0.02183127941407], -[0.1803833728883, 0.02163317222144], -[0.1854756657836, 0.02142876029648], -[0.1905688731456, 0.02121798967724], -[0.1956630193064, 0.02100080497055], -[0.2007581286134, 0.02077714935737], -[0.2058542254394, 0.02054696459827], -[0.2109513341931, 0.0203101910391], -[0.2160494793314, 0.0200667676169], -[0.2211486853711, 0.01981663186591], -[0.2262489769025, 0.01955971992393], -[0.2313503786032, 0.01929596653882], -[0.2364529152527, 0.01902530507528], -[0.2415566117483, 0.01874766752199], -[0.246661493121, 0.01846298449894], -[0.251767584553, 0.01817118526517], -[0.2568749113957, 0.01787219772687], -[0.2619834991882, 0.01756594844579], -[0.2670933736772, 0.0172523626482], -[0.2722045608374, 0.01693136423417], -[0.2773170868928, 0.01660287578746], -[0.2824309783385, 0.01626681858587], -[0.2875462619639, 0.01592311261218], -[0.2926629648762, 0.01557167656571], -[0.2977811145249, 0.01521242787456], -[0.3029007387268, 0.01484528270854], -[0.3080218656921, 0.01447015599282], -[0.3131445240508, 0.01408696142252], -[0.3182687428804, 0.013695611478], -[0.3233945517332, 0.01329601744125], -[0.3285219806655, 0.0128880894131], -[0.3336510602662, 0.0124717363316], -[0.3387818216869, 0.01204686599145], -[0.3439142966714, 0.01161338506461], -[0.3490485175869, 0.01117119912218], -[0.3541845174544, 0.01072021265753], -[0.3593223299802, 0.01026032911087], -[0.3644619895868, 0.009791450895196], -[0.3696035314451, 0.009313479423831], -[0.3747469915055, 0.00882631513947], -[0.3798924065298, 0.008329857544931], -[0.3850398141225, 0.00782400523561], -[0.3901892527618, 0.007308655933738], -[0.395340761831, 0.00678370652448], -[0.4004943816489, 0.006249053093982], -[0.4056501534991, 0.005704590969381], -[0.4108081196602, 0.005150214760886], -[0.4159683234333, 0.004585818405947], -[0.4211302788704, 0.00401138923993], -[-0.4183726557256, 0.008788557116462], -[-0.4132087628196, 0.009356723373392], -[-0.4080472869111, 0.009914853321563], -[-0.4028881835208, 0.01046305174436], -[-0.3977314091316, 0.01100142283486], -[-0.3925769211629, 0.01153007015032], -[-0.3874246779447, 0.01204909656861], -[-0.3822746386899, 0.01255860424668], -[-0.3771267634667, 0.01305869458098], -[-0.3719810131704, 0.01354946816965], -[-0.3668373494942, 0.01403102477665], -[-0.3616957349007, 0.0145034632976], -[-0.356556132592, 0.01496688172722], -[-0.3514185064807, 0.01542137712858], -[-0.3462828211604, 0.01586704560374], -[-0.3411490418759, 0.01630398226599], -[-0.3360171344945, 0.01673228121348], -[-0.3308870654768, 0.01715203550429], -[-0.3257588018476, 0.01756333713266], -[-0.3206323111677, 0.01796627700664], -[-0.3155075615059, 0.01836094492677], -[-0.3103845214111, 0.01874742956595], -[-0.3052631598855, 0.0191258184504], -[-0.3001434463575, 0.0194961979415], -[-0.2950253506564, 0.0198586532187], -[-0.2899088429861, 0.02021326826323], -[-0.2847938939011, 0.02056012584272], -[-0.2796804742818, 0.02089930749649], -[-0.2745685553112, 0.0212308935217], -[-0.2694581084526, 0.02155496296012], -[-0.2643491054268, 0.02187159358551], -[-0.2592415181915, 0.0221808618917], -[-0.2541353189204, 0.02248284308111], -[-0.2490304799837, 0.02277761105388], -[-0.243926973929, 0.02306523839748], -[-0.2388247734629, 0.02334579637667], -[-0.2337238514341, 0.02361935492402], -[-0.228624180816, 0.02388598263073], -[-0.2235257346915, 0.02414574673781], -[-0.2184284862375, 0.02439871312766], -[-0.2133324087108, 0.02464494631588], -[-0.2082374754342, 0.02488450944344], -[-0.2031436597841, 0.02511746426908], -[-0.1980509351779, 0.02534387116194], -[-0.1929592750633, 0.02556378909452], -[-0.1878686529071, 0.02577727563576], -[-0.1827790421858, 0.02598438694436], -[-0.177690416376, 0.0261851777623], -[-0.172602748946, 0.02637970140857], -[-0.1675160133482, 0.02656800977304], -[-0.1624301830118, 0.0267501533105], -[-0.1573452313362, 0.02692618103485], -[-0.1522611316852, 0.02709614051355], -[-0.1471778573816, 0.02726007786203], -[-0.1420953817028, 0.02741803773843], -[-0.1370136778763, 0.02757006333842], -[-0.1319327190767, 0.0277161963901], -[-0.1268524784221, 0.02785647714917], -[-0.1217729289723, 0.02799094439412], -[-0.1166940437261, 0.02811963542169], -[-0.1116157956205, 0.02824258604232], -[-0.1065381575295, 0.02835983057591], -[-0.1014611022633, 0.02847140184763], -[-0.09638460256864, 0.02857733118387], -[-0.09130863112873, 0.02867764840845], -[-0.08623316056422, 0.02877238183885], -[-0.08115816343419, 0.02886155828273], -[-0.07608361223758, 0.02894520303448], -[-0.07100947941501, 0.02902333987211], -[-0.06593573735086, 0.0290959910541], -[-0.06086235837569, 0.02916317731663], -[-0.05578931476889, 0.02922491787086], -[-0.05071657876166, 0.02928123040042], -[-0.04564412254012, 0.02933213105911], -[-0.04057191824877, 0.02937763446877], -[-0.03549993799408, 0.02941775371736], -[-0.0304281538482, 0.0294525003572], -[-0.02535653785298, 0.02948188440343], -[-0.02028506202398, 0.02950591433269], -[-0.01521369835472, 0.02952459708198], -[-0.01014241882091, 0.0295379380477], -[-0.005071195384887, 0.02954594108494], -[0, 0.02954860850698], -[0.005071195384887, 0.02954594108494], -[0.01014241882091, 0.0295379380477], -[0.01521369835472, 0.02952459708198], -[0.02028506202398, 0.02950591433269], -[0.02535653785297, 0.02948188440343], -[0.0304281538482, 0.0294525003572], -[0.03549993799408, 0.02941775371736], -[0.04057191824878, 0.02937763446877], -[0.04564412254012, 0.02933213105911], -[0.05071657876166, 0.02928123040042], -[0.0557893147689, 0.02922491787086], -[0.06086235837569, 0.02916317731663], -[0.06593573735086, 0.0290959910541], -[0.07100947941501, 0.02902333987211], -[0.07608361223758, 0.02894520303448], -[0.08115816343419, 0.02886155828273], -[0.08623316056422, 0.02877238183885], -[0.09130863112873, 0.02867764840845], -[0.09638460256864, 0.02857733118387], -[0.1014611022633, 0.02847140184763], -[0.1065381575295, 0.02835983057591], -[0.1116157956205, 0.02824258604232], -[0.1166940437261, 0.02811963542169], -[0.1217729289723, 0.02799094439413], -[0.1268524784221, 0.02785647714917], -[0.1319327190767, 0.0277161963901], -[0.1370136778763, 0.02757006333842], -[0.1420953817028, 0.02741803773843], -[0.1471778573816, 0.02726007786203], -[0.1522611316852, 0.02709614051355], -[0.1573452313362, 0.02692618103483], -[0.1624301830118, 0.0267501533105], -[0.1675160133482, 0.02656800977304], -[0.172602748946, 0.02637970140857], -[0.177690416376, 0.0261851777623], -[0.1827790421858, 0.02598438694436], -[0.1878686529071, 0.02577727563576], -[0.1929592750633, 0.02556378909452], -[0.1980509351779, 0.02534387116194], -[0.2031436597841, 0.02511746426907], -[0.2082374754342, 0.02488450944344], -[0.2133324087108, 0.02464494631588], -[0.2184284862375, 0.02439871312766], -[0.2235257346915, 0.02414574673781], -[0.228624180816, 0.02388598263073], -[0.2337238514341, 0.02361935492402], -[0.2388247734629, 0.02334579637667], -[0.243926973929, 0.02306523839748], -[0.2490304799837, 0.02277761105388], -[0.2541353189204, 0.02248284308111], -[0.2592415181915, 0.0221808618917], -[0.2643491054268, 0.02187159358551], -[0.2694581084526, 0.02155496296012], -[0.2745685553112, 0.0212308935217], -[0.2796804742818, 0.02089930749649], -[0.2847938939011, 0.02056012584272], -[0.2899088429861, 0.02021326826323], -[0.2950253506564, 0.0198586532187], -[0.3001434463575, 0.0194961979415], -[0.3052631598855, 0.0191258184504], -[0.3103845214111, 0.01874742956595], -[0.3155075615059, 0.01836094492677], -[0.3206323111677, 0.01796627700664], -[0.3257588018476, 0.01756333713266], -[0.3308870654768, 0.01715203550429], -[0.3360171344945, 0.01673228121348], -[0.3411490418759, 0.01630398226599], -[0.3462828211604, 0.01586704560374], -[0.3514185064807, 0.01542137712858], -[0.356556132592, 0.01496688172722], -[0.3616957349007, 0.0145034632976], -[0.3668373494942, 0.01403102477665], -[0.3719810131704, 0.01354946816965], -[0.3771267634667, 0.01305869458098], -[0.3822746386899, 0.01255860424668], -[0.3874246779447, 0.01204909656861], -[0.3925769211629, 0.01153007015032], -[0.3977314091316, 0.01100142283486], -[0.4028881835208, 0.01046305174436], -[0.4080472869111, 0.009914853321563], -[0.4132087628196, 0.009356723373392], -[0.4183726557256, 0.008788557116462], -[-0.4156111284046, 0.01357166274305], -[-0.4104460205213, 0.01413340655395], -[-0.4052834629931, 0.01468520394198], -[-0.4001234111516, 0.01522715786278], -[-0.3949658212052, 0.01575937071686], -[-0.3898106502159, 0.01628194430463], -[-0.3846578560749, 0.01679497978354], -[-0.379507397477, 0.01729857762691], -[-0.3743592338951, 0.01779283758473], -[-0.3692133255538, 0.01827785864607], -[-0.3640696334027, 0.01875373900336], -[-0.3589281190891, 0.0192205760182], -[-0.3537887449313, 0.01967846618885], -[-0.3486514738907, 0.02012750511922], -[-0.343516269545, 0.02056778748935], -[-0.3383830960603, 0.0209994070273], -[-0.3332519181642, 0.02142245648242], -[-0.3281227011187, 0.02183702759987], -[-0.3229954106935, 0.02224321109648], -[-0.3178700131394, 0.02264109663766], -[-0.3127464751622, 0.02303077281553], -[-0.3076247638971, 0.02341232712805], -[-0.3025048468833, 0.02378584595922], -[-0.2973866920394, 0.02415141456019], -[-0.2922702676391, 0.02450911703126], -[-0.2871555422876, 0.02485903630479], -[-0.2820424848986, 0.02520125412883], -[-0.2769310646716, 0.0255358510516], -[-0.2718212510705, 0.02586290640658], -[-0.2667130138021, 0.02618249829833], -[-0.2616063227962, 0.02649470358889], -[-0.2565011481853, 0.02679959788482], -[-0.2513974602859, 0.02709725552472], -[-0.2462952295802, 0.02738774956729], -[-0.2411944266984, 0.02767115177988], -[-0.2360950224019, 0.02794753262747], -[-0.2309969875672, 0.02821696126208], -[-0.2259002931707, 0.0284795055125], -[-0.2208049102738, 0.02873523187451], -[-0.2157108100091, 0.02898420550133], -[-0.2106179635673, 0.02922649019443], -[-0.2055263421846, 0.02946214839465], -[-0.2004359171312, 0.02969124117355], -[-0.1953466597, 0.02991382822511], -[-0.1902585411965, 0.03012996785756], -[-0.185171532929, 0.03033971698556], -[-0.1800856061998, 0.03054313112255], -[-0.1750007322969, 0.03074026437328], -[-0.1699168824861, 0.0309311694266], -[-0.1648340280047, 0.03111589754844], -[-0.1597521400541, 0.03129449857493], -[-0.1546711897951, 0.03146702090576], -[-0.1495911483422, 0.03163351149768], -[-0.1445119867592, 0.03179401585823], -[-0.1394336760551, 0.03194857803952], -[-0.1343561871808, 0.03209724063237], -[-0.1292794910263, 0.03224004476043], -[-0.1242035584181, 0.03237703007461], -[-0.1191283601173, 0.0325082347476], -[-0.1140538668187, 0.03263369546861], -[-0.1089800491493, 0.03275344743825], -[-0.1039068776682, 0.03286752436359], -[-0.09883432286628, 0.03297595845346], -[-0.09376235516698, 0.03307878041381], -[-0.0886909449267, 0.03317601944337], -[-0.08362006243617, 0.03326770322944], -[-0.07854967792186, 0.0333538579439], -[-0.07347976154788, 0.03343450823939], -[-0.06841028341814, 0.03350967724566], -[-0.0633412135788, 0.03357938656625], -[-0.05827252202106, 0.03364365627522], -[-0.05320417868413, 0.03370250491416], -[-0.04813615345853, 0.03375594948946], -[-0.04306841618954, 0.03380400546971], -[-0.03800093668093, 0.03384668678339], -[-0.0329336846988, 0.03388400581673], -[-0.02786662997561, 0.03391597341185], -[-0.0227997422144, 0.03394259886507], -[-0.01773299109309, 0.03396388992554], -[-0.01266634626888, 0.03397985279398], -[-0.007599777382815, 0.0339904921218], -[-0.002533254064286, 0.03399581101032], -[0.002533254064286, 0.03399581101033], -[0.007599777382816, 0.03399049212181], -[0.01266634626889, 0.03397985279399], -[0.01773299109309, 0.03396388992554], -[0.0227997422144, 0.03394259886507], -[0.02786662997561, 0.03391597341185], -[0.0329336846988, 0.03388400581673], -[0.03800093668094, 0.03384668678339], -[0.04306841618954, 0.03380400546971], -[0.04813615345853, 0.03375594948946], -[0.05320417868413, 0.03370250491416], -[0.05827252202106, 0.03364365627522], -[0.0633412135788, 0.03357938656625], -[0.06841028341814, 0.03350967724566], -[0.07347976154788, 0.03343450823939], -[0.07854967792186, 0.0333538579439], -[0.08362006243617, 0.03326770322944], -[0.0886909449267, 0.03317601944337], -[0.09376235516698, 0.03307878041381], -[0.09883432286628, 0.03297595845346], -[0.1039068776682, 0.03286752436359], -[0.1089800491493, 0.03275344743825], -[0.1140538668187, 0.03263369546861], -[0.1191283601173, 0.03250823474761], -[0.1242035584181, 0.03237703007461], -[0.1292794910263, 0.03224004476043], -[0.1343561871808, 0.03209724063237], -[0.1394336760551, 0.03194857803952], -[0.1445119867592, 0.03179401585823], -[0.1495911483422, 0.03163351149768], -[0.1546711897951, 0.03146702090576], -[0.1597521400541, 0.03129449857493], -[0.1648340280047, 0.03111589754844], -[0.1699168824861, 0.0309311694266], -[0.1750007322969, 0.03074026437328], -[0.1800856061998, 0.03054313112255], -[0.185171532929, 0.03033971698556], -[0.1902585411965, 0.03012996785756], -[0.1953466597, 0.02991382822511], -[0.2004359171312, 0.02969124117355], -[0.2055263421846, 0.02946214839465], -[0.2106179635673, 0.02922649019443], -[0.2157108100091, 0.02898420550133], -[0.2208049102738, 0.02873523187451], -[0.2259002931707, 0.0284795055125], -[0.2309969875672, 0.02821696126208], -[0.2360950224019, 0.02794753262747], -[0.2411944266984, 0.02767115177988], -[0.2462952295802, 0.02738774956729], -[0.2513974602859, 0.02709725552472], -[0.2565011481853, 0.02679959788482], -[0.2616063227962, 0.02649470358889], -[0.2667130138021, 0.02618249829836], -[0.2718212510705, 0.02586290640658], -[0.2769310646716, 0.0255358510516], -[0.2820424848986, 0.02520125412883], -[0.2871555422876, 0.02485903630479], -[0.2922702676391, 0.02450911703126], -[0.2973866920394, 0.02415141456019], -[0.3025048468833, 0.02378584595923], -[0.3076247638971, 0.02341232712805], -[0.3127464751622, 0.02303077281553], -[0.3178700131394, 0.02264109663766], -[0.3229954106935, 0.02224321109648], -[0.3281227011187, 0.02183702759987], -[0.3332519181642, 0.02142245648242], -[0.3383830960603, 0.0209994070273], -[0.343516269545, 0.02056778748935], -[0.3486514738907, 0.02012750511922], -[0.3537887449313, 0.01967846618885], -[0.3589281190891, 0.0192205760182], -[0.3640696334027, 0.01875373900336], -[0.3692133255538, 0.01827785864607], -[0.3743592338951, 0.01779283758473], -[0.379507397477, 0.01729857762691], -[0.3846578560749, 0.01679497978354], -[0.3898106502159, 0.01628194430463], -[0.3949658212052, 0.01575937071686], -[0.4001234111516, 0.01522715786278], -[0.4052834629931, 0.01468520394198], -[0.4104460205212, 0.01413340655396], -[0.4156111284046, 0.01357166274305], -[-0.4128463288668, 0.01836043601527], -[-0.4076801961263, 0.0189156932608], -[-0.4025167454385, 0.0194610933798], -[-0.3973559318855, 0.01999673757619], -[-0.3921977113444, 0.02052272653288], -[-0.3870420404657, 0.02103916036741], -[-0.3818888766502, 0.02154613858951], -[-0.3767381780261, 0.02204376006043], -[-0.371589903425, 0.02253212295389], -[-0.3664440123575, 0.02301132471876], -[-0.3613004649882, 0.02348146204339], -[-0.3561592221112, 0.02394263082139], -[-0.3510202451244, 0.02439492611906], -[-0.3458834960045, 0.02483844214416], -[-0.3407489372811, 0.02527327221615], -[-0.335616532012, 0.02569950873775], -[-0.3304862437572, 0.02611724316775], -[-0.3253580365547, 0.02652656599515], -[-0.3202318748947, 0.02692756671438], -[-0.3151077236957, 0.02732033380169], -[-0.3099855482802, 0.02770495469258], -[-0.3048653143504, 0.02808151576027], -[-0.2997469879652, 0.02845010229514], -[-0.2946305355172, 0.02881079848505], -[-0.28951592371, 0.0291636873965], -[-0.2844031195364, 0.02950885095673], -[-0.2792920902572, 0.02984636993642], -[-0.2741828033802, 0.03017632393324], -[-0.2690752266398, 0.03049879135603], -[-0.2639693279783, 0.03081384940966], -[-0.2588650755258, 0.03112157408042], -[-0.253762437583, 0.03142204012207], -[-0.2486613826032, 0.03171532104237], -[-0.2435618791751, 0.03200148909013], -[-0.2384638960072, 0.03228061524268], -[-0.2333674019119, 0.03255276919389], -[-0.2282723657907, 0.03281801934247], -[-0.2231787566202, 0.03307643278077], -[-0.2180865434387, 0.03332807528388], -[-0.2129956953331, 0.0335730112991], -[-0.2079061814274, 0.03381130393572], -[-0.2028179708711, 0.03404301495512], -[-0.1977310328281, 0.03426820476117], -[-0.1926453364676, 0.03448693239082], -[-0.187560850954, 0.03469925550512], -[-0.1824775454384, 0.03490523038031], -[-0.1773953890508, 0.03510491189925], -[-0.1723143508926, 0.03529835354306], -[-0.1672344000297, 0.03548560738297], -[-0.1621555054863, 0.03566672407241], -[-0.1570776362398, 0.03584175283923], -[-0.1520007612151, 0.03601074147836], -[-0.1469248492808, 0.03617373634421], -[-0.1418498692453, 0.03633078234384], -[-0.136775789853, 0.03648192292989], -[-0.1317025797823, 0.03662720009391], -[-0.1266302076426, 0.03676665435982], -[-0.121558641973, 0.03690032477761], -[-0.1164878512409, 0.03702824891721], -[-0.1114178038411, 0.03715046286255], -[-0.1063484680956, 0.03726700120583], -[-0.1012798122534, 0.03737789704204], -[-0.09621180449128, 0.03748318196363], -[-0.09114441291426, 0.03758288605541], -[-0.08607760555724, 0.03767703788965], -[-0.08101135038636, 0.03776566452147], -[-0.07594561530099, 0.03784879148433], -[-0.07088036813595, 0.03792644278588], -[-0.06581557666413, 0.03799864090391], -[-0.06075120859928, 0.03806540678265], -[-0.05568723159912, 0.03812675982926], -[-0.05062361326873, 0.03818271791052], -[-0.04556032116409, 0.03823329734984], -[-0.0404973227959, 0.03827851292448], -[-0.03543458563356, 0.03831837786302], -[-0.0303720771093, 0.0383529038431], -[-0.02530976462254, 0.03838210098943], -[-0.02024761554426, 0.03840597787205], -[-0.01518559722165, 0.0384245415048], -[-0.01012367698266, 0.03843779734418], -[-0.005061822140834, 0.03844574928836], -[-6.369338240271e-17, 0.03844839967649], -[0.005061822140834, 0.03844574928836], -[0.01012367698267, 0.03843779734419], -[0.01518559722165, 0.03842454150481], -[0.02024761554426, 0.03840597787205], -[0.02530976462254, 0.03838210098943], -[0.03037207710931, 0.0383529038431], -[0.03543458563356, 0.03831837786301], -[0.0404973227959, 0.03827851292448], -[0.04556032116409, 0.03823329734984], -[0.05062361326873, 0.03818271791052], -[0.05568723159912, 0.03812675982926], -[0.06075120859928, 0.03806540678265], -[0.06581557666413, 0.03799864090391], -[0.07088036813595, 0.03792644278588], -[0.07594561530099, 0.03784879148433], -[0.08101135038637, 0.03776566452147], -[0.08607760555724, 0.03767703788965], -[0.09114441291426, 0.03758288605541], -[0.09621180449127, 0.03748318196363], -[0.1012798122534, 0.03737789704204], -[0.1063484680956, 0.03726700120583], -[0.1114178038411, 0.03715046286255], -[0.1164878512409, 0.03702824891721], -[0.121558641973, 0.03690032477761], -[0.1266302076426, 0.03676665435982], -[0.1317025797823, 0.03662720009391], -[0.136775789853, 0.03648192292989], -[0.1418498692453, 0.03633078234384], -[0.1469248492808, 0.03617373634421], -[0.1520007612151, 0.03601074147836], -[0.1570776362398, 0.03584175283923], -[0.1621555054863, 0.03566672407241], -[0.1672344000297, 0.03548560738297], -[0.1723143508926, 0.03529835354306], -[0.1773953890508, 0.03510491189925], -[0.1824775454384, 0.03490523038031], -[0.187560850954, 0.03469925550512], -[0.1926453364676, 0.03448693239083], -[0.1977310328281, 0.03426820476117], -[0.2028179708711, 0.03404301495513], -[0.2079061814274, 0.03381130393572], -[0.2129956953331, 0.0335730112991], -[0.2180865434387, 0.03332807528388], -[0.2231787566202, 0.03307643278077], -[0.2282723657907, 0.03281801934247], -[0.2333674019119, 0.03255276919389], -[0.2384638960072, 0.03228061524268], -[0.2435618791751, 0.03200148909013], -[0.2486613826032, 0.03171532104237], -[0.253762437583, 0.03142204012207], -[0.2588650755258, 0.03112157408042], -[0.2639693279783, 0.03081384940966], -[0.2690752266398, 0.03049879135603], -[0.2741828033802, 0.03017632393324], -[0.2792920902572, 0.02984636993642], -[0.2844031195364, 0.02950885095673], -[0.28951592371, 0.0291636873965], -[0.2946305355172, 0.02881079848505], -[0.2997469879652, 0.02845010229515], -[0.3048653143504, 0.02808151576027], -[0.3099855482802, 0.02770495469258], -[0.3151077236957, 0.02732033380169], -[0.3202318748947, 0.02692756671438], -[0.3253580365547, 0.02652656599515], -[0.3304862437572, 0.02611724316775], -[0.335616532012, 0.02569950873775], -[0.3407489372811, 0.02527327221615], -[0.3458834960045, 0.02483844214416], -[0.3510202451244, 0.02439492611906], -[0.3561592221112, 0.02394263082139], -[0.3613004649882, 0.02348146204339], -[0.3664440123575, 0.02301132471876], -[0.371589903425, 0.02253212295389], -[0.3767381780261, 0.02204376006043], -[0.3818888766502, 0.02154613858951], -[0.3870420404657, 0.02103916036741], -[0.3921977113444, 0.02052272653288], -[0.3973559318855, 0.01999673757619], -[0.4025167454385, 0.0194610933798], -[0.4076801961263, 0.0189156932608], -[0.4128463288668, 0.01836043601527], -[-0.4100783580362, 0.02315470212765], -[-0.4049113885494, 0.0237034100737], -[-0.3997472311675, 0.02424234964997], -[-0.3945858406647, 0.02477162038295], -[-0.389427172531, 0.02529132131119], -[-0.3842711829522, 0.02580155094154], -[-0.3791178287887, 0.02630240720712], -[-0.3739670675544, 0.02679398742691], -[-0.3688188573943, 0.02727638826698], -[-0.3636731570625, 0.02774970570326], -[-0.3585299258986, 0.02821403498592], -[-0.3533891238053, 0.02866947060509], -[-0.3482507112247, 0.02911610625815], -[-0.3431146491149, 0.02955403481829], -[-0.3379808989264, 0.02998334830446], -[-0.332849422579, 0.03040413785255], -[-0.3277201824379, 0.03081649368785], -[-0.322593141291, 0.0312205050986], -[-0.3174682623255, 0.03161626041072], -[-0.3123455091055, 0.03200384696358], -[-0.3072248455491, 0.03238335108679], -[-0.3021062359069, 0.03275485807798], -[-0.2969896447397, 0.03311845218145], -[-0.291875036898, 0.03347421656775], -[-0.2867623775003, 0.03382223331404], -[-0.2816516319137, 0.03416258338528], -[-0.2765427657336, 0.03449534661607], -[-0.2714357447646, 0.03482060169336], -[-0.266330535002, 0.03513842613963], -[-0.2612271026137, 0.03544889629668], -[-0.2561254139227, 0.03575208731046], -[-0.2510254353903, 0.03604807311568], -[-0.2459271335999, 0.03633692642163], -[-0.2408304752416, 0.03661871869809], -[-0.2357354270972, 0.03689352016193], -[-0.2306419560259, 0.03716139976398], -[-0.2255500289508, 0.03742242517643], -[-0.220459612846, 0.03767666278056], -[-0.2153706747242, 0.03792417765486], -[-0.2102831816254, 0.03816503356348], -[-0.2051971006055, 0.03839929294504], -[-0.2001123987264, 0.03862701690172], -[-0.1950290430462, 0.03884826518866], -[-0.18994700061, 0.03906309620369], -[-0.1848662384421, 0.03927156697726], -[-0.1797867235373, 0.03947373316266], -[-0.1747084228549, 0.03966964902655], -[-0.1696313033111, 0.03985936743966], -[-0.1645553317737, 0.04004293986776], -[-0.1594804750568, 0.04022041636289], -[-0.1544066999156, 0.04039184555476], -[-0.1493339730423, 0.04055727464245], -[-0.1442622610626, 0.04071674938629], -[-0.1391915305326, 0.04087031409994], -[-0.1341217479358, 0.04101801164276], -[-0.1290528796814, 0.04115988341237], -[-0.1239848921023, 0.04129596933739], -[-0.1189177514541, 0.04142630787045], -[-0.1138514239144, 0.04155093598149], -[-0.1087858755828, 0.04166988915108], -[-0.1037210724803, 0.04178320136424], -[-0.09865698055074, 0.04189090510429], -[-0.09359356566113, 0.04199303134702], -[-0.0885307936033, 0.04208960955511], -[-0.08346863009549, 0.04218066767275], -[-0.07840704078439, 0.04226623212056], -[-0.07334599124749, 0.04234632779072], -[-0.06828544699572, 0.04242097804239], -[-0.06322537347643, 0.04249020469737], -[-0.05816573607656, 0.04255402803605], -[-0.05310650012614, 0.0426124667936], -[-0.04804763090194, 0.04266553815646], -[-0.04298909363143, 0.04271325775908], -[-0.03793085349683, 0.042755639681], -[-0.03287287563945, 0.04279269644416], -[-0.02781512516409, 0.04282443901047], -[-0.02275756714363, 0.04285087677981], -[-0.01770016662375, 0.04287201758814], -[-0.0126428886277, 0.04288786770603], -[-0.007585698161258, 0.0428984318375], -[-0.002528560217607, 0.04290371311903], -[0.002528560217606, 0.04290371311903], -[0.007585698161258, 0.0428984318375], -[0.0126428886277, 0.04288786770603], -[0.01770016662374, 0.04287201758813], -[0.02275756714363, 0.04285087677981], -[0.02781512516409, 0.04282443901047], -[0.03287287563945, 0.04279269644416], -[0.03793085349683, 0.042755639681], -[0.04298909363143, 0.04271325775908], -[0.04804763090194, 0.04266553815645], -[0.05310650012614, 0.0426124667936], -[0.05816573607656, 0.04255402803605], -[0.06322537347643, 0.04249020469737], -[0.06828544699572, 0.04242097804239], -[0.07334599124749, 0.04234632779072], -[0.07840704078439, 0.04226623212056], -[0.08346863009549, 0.04218066767275], -[0.0885307936033, 0.04208960955511], -[0.09359356566113, 0.04199303134702], -[0.09865698055074, 0.04189090510429], -[0.1037210724803, 0.04178320136424], -[0.1087858755828, 0.04166988915108], -[0.1138514239144, 0.04155093598149], -[0.1189177514541, 0.04142630787045], -[0.1239848921023, 0.04129596933739], -[0.1290528796814, 0.04115988341237], -[0.1341217479358, 0.04101801164276], -[0.1391915305326, 0.04087031409994], -[0.1442622610626, 0.04071674938629], -[0.1493339730423, 0.04055727464245], -[0.1544066999156, 0.04039184555477], -[0.1594804750568, 0.04022041636289], -[0.1645553317737, 0.04004293986776], -[0.1696313033111, 0.03985936743966], -[0.1747084228549, 0.03966964902655], -[0.1797867235373, 0.03947373316266], -[0.1848662384421, 0.03927156697726], -[0.18994700061, 0.03906309620369], -[0.1950290430462, 0.03884826518866], -[0.2001123987264, 0.03862701690172], -[0.2051971006055, 0.03839929294504], -[0.2102831816254, 0.03816503356348], -[0.2153706747242, 0.03792417765486], -[0.220459612846, 0.03767666278056], -[0.2255500289508, 0.03742242517643], -[0.2306419560259, 0.03716139976398], -[0.2357354270972, 0.03689352016193], -[0.2408304752416, 0.03661871869809], -[0.2459271335999, 0.03633692642163], -[0.2510254353903, 0.03604807311568], -[0.2561254139227, 0.03575208731046], -[0.2612271026137, 0.03544889629668], -[0.266330535002, 0.03513842613962], -[0.2714357447646, 0.03482060169336], -[0.2765427657336, 0.03449534661607], -[0.2816516319137, 0.03416258338528], -[0.2867623775003, 0.03382223331404], -[0.291875036898, 0.03347421656775], -[0.2969896447397, 0.03311845218145], -[0.3021062359069, 0.03275485807798], -[0.3072248455491, 0.03238335108679], -[0.3123455091055, 0.03200384696358], -[0.3174682623255, 0.03161626041072], -[0.322593141291, 0.0312205050986], -[0.3277201824379, 0.03081649368785], -[0.332849422579, 0.03040413785255], -[0.3379808989264, 0.02998334830446], -[0.3431146491149, 0.02955403481829], -[0.3482507112247, 0.02911610625815], -[0.3533891238053, 0.02866947060509], -[0.3585299258986, 0.02821403498592], -[0.3636731570625, 0.02774970570326], -[0.3688188573943, 0.02727638826698], -[0.3739670675544, 0.02679398742691], -[0.3791178287887, 0.02630240720712], -[0.3842711829522, 0.02580155094154], -[0.389427172531, 0.02529132131119], -[0.3945858406647, 0.02477162038295], -[0.3997472311675, 0.02424234964997], -[0.4049113885494, 0.0237034100737], -[0.4100783580362, 0.02315470212765], -[-0.4073073161321, 0.02795428749549], -[-0.4021396960606, 0.02849638478543], -[-0.3969750165146, 0.02902880197161], -[-0.3918132319033, 0.02955163697563], -[-0.386654297275, 0.03006498726331], -[-0.3814981682991, 0.03056894980139], -[-0.3763448012464, 0.03106362101582], -[-0.3711941529695, 0.03154909675159], -[-0.366046180883, 0.03202547223416], -[-0.3609008429423, 0.0324928420323], -[-0.3557580976227, 0.03295130002241], -[-0.3506179038982, 0.0334009393542], -[-0.3454802212198, 0.03384185241779], -[-0.3403450094941, 0.03427413081201], -[-0.3352122290615, 0.03469786531406], -[-0.3300818406747, 0.03511314585031], -[-0.3249538054767, 0.03552006146827], -[-0.3198280849801, 0.03591870030968], -[-0.3147046410451, 0.0363091495847], -[-0.3095834358593, 0.03669149554701], -[-0.3044644319161, 0.03706582347], -[-0.2993475919952, 0.03743221762381], -[-0.294232879142, 0.03779076125326], -[-0.2891202566483, 0.03814153655665], -[-0.2840096880328, 0.0384846246653], -[-0.2789011370229, 0.03882010562389], -[-0.2737945675363, 0.03914805837148], -[-0.268689943663, 0.03946856072322], -[-0.2635872296485, 0.03978168935271], -[-0.2584863898772, 0.04008751977495], -[-0.2533873888563, 0.04038612632987], -[-0.2482901912002, 0.04067758216638], -[-0.243194761616, 0.04096195922696], -[-0.238101064889, 0.04123932823274], -[-0.2330090658692, 0.04150975866899], -[-0.2279187294581, 0.04177331877111], -[-0.2228300205967, 0.04203007551096], -[-0.2177429042533, 0.04228009458366], -[-0.2126573454128, 0.04252344039467], -[-0.2075733090658, 0.04276017604731], -[-0.2024907601989, 0.04299036333057], -[-0.1974096637854, 0.04321406270723], -[-0.1923299847768, 0.04343133330236], -[-0.1872516880943, 0.04364223289201], -[-0.182174738622, 0.04384681789229], -[-0.1770991011994, 0.04404514334868], -[-0.1720247406157, 0.04423726292559], -[-0.1669516216035, 0.04442322889624], -[-0.1618797088343, 0.04460309213277], -[-0.1568089669136, 0.04477690209658], -[-0.1517393603767, 0.044944706829], -[-0.1466708536858, 0.045106552942], -[-0.1416034112261, 0.04526248560957], -[-0.1365369973045, 0.04541254855883], -[-0.1314715761465, 0.04555678406177], -[-0.1264071118954, 0.04569523292703], -[-0.1213435686112, 0.04582793449207], -[-0.1162809102699, 0.04595492661546], -[-0.111219100763, 0.04607624566956], -[-0.1061581038985, 0.04619192653329], -[-0.1010978834012, 0.04630200258534], -[-0.09603840291368, 0.04640650569749], -[-0.09097962599789, 0.04650546622832], -[-0.08592151613694, 0.0465989130171], -[-0.08086403673722, 0.04668687337799], -[-0.07580715113085, 0.04676937309457], -[-0.07075082257847, 0.04684643641453], -[-0.06569501427229, 0.0469180860448], -[-0.06063968933942, 0.04698434314685], -[-0.05558481084544, 0.04704522733238], -[-0.05053034179825, 0.04710075665925], -[-0.04547624515205, 0.04715094762771], -[-0.04042248381165, 0.04719581517706], -[-0.03536902063683, 0.04723537268242], -[-0.03031581844697, 0.04726963195204], -[-0.02526284002572, 0.04729860322473], -[-0.02021004812594, 0.04732229516778], -[-0.0151574054746, 0.04734071487509], -[-0.0101048747779, 0.04735386786572], -[-0.005052418726351, 0.04736175808265], -[-6.369338240271e-17, 0.04736438789205], -[0.005052418726351, 0.04736175808265], -[0.0101048747779, 0.04735386786572], -[0.0151574054746, 0.04734071487509], -[0.02021004812594, 0.04732229516777], -[0.02526284002572, 0.04729860322473], -[0.03031581844697, 0.04726963195204], -[0.03536902063683, 0.04723537268242], -[0.04042248381165, 0.04719581517706], -[0.04547624515205, 0.04715094762771], -[0.05053034179824, 0.04710075665924], -[0.05558481084544, 0.04704522733238], -[0.06063968933942, 0.04698434314685], -[0.06569501427229, 0.0469180860448], -[0.07075082257847, 0.04684643641453], -[0.07580715113085, 0.04676937309457], -[0.08086403673722, 0.04668687337799], -[0.08592151613694, 0.0465989130171], -[0.09097962599789, 0.04650546622832], -[0.09603840291368, 0.04640650569749], -[0.1010978834012, 0.04630200258534], -[0.1061581038985, 0.04619192653329], -[0.111219100763, 0.04607624566956], -[0.1162809102698, 0.04595492661547], -[0.1213435686112, 0.04582793449207], -[0.1264071118954, 0.04569523292703], -[0.1314715761464, 0.04555678406177], -[0.1365369973045, 0.04541254855883], -[0.1416034112261, 0.04526248560957], -[0.1466708536858, 0.045106552942], -[0.1517393603768, 0.04494470682897], -[0.1568089669136, 0.04477690209658], -[0.1618797088343, 0.04460309213277], -[0.1669516216035, 0.04442322889624], -[0.1720247406157, 0.04423726292559], -[0.1770991011994, 0.04404514334868], -[0.182174738622, 0.04384681789229], -[0.1872516880943, 0.04364223289201], -[0.1923299847768, 0.04343133330236], -[0.1974096637854, 0.04321406270723], -[0.2024907601989, 0.04299036333057], -[0.2075733090658, 0.04276017604731], -[0.2126573454128, 0.04252344039467], -[0.2177429042533, 0.04228009458366], -[0.2228300205967, 0.04203007551096], -[0.2279187294581, 0.04177331877111], -[0.2330090658692, 0.04150975866899], -[0.238101064889, 0.04123932823274], -[0.243194761616, 0.04096195922696], -[0.2482901912002, 0.04067758216638], -[0.2533873888563, 0.04038612632987], -[0.2584863898772, 0.04008751977495], -[0.2635872296485, 0.03978168935271], -[0.268689943663, 0.03946856072322], -[0.2737945675363, 0.03914805837148], -[0.2789011370229, 0.03882010562389], -[0.2840096880328, 0.0384846246653], -[0.2891202566483, 0.03814153655665], -[0.294232879142, 0.03779076125326], -[0.2993475919952, 0.03743221762381], -[0.3044644319161, 0.03706582347], -[0.3095834358593, 0.03669149554701], -[0.3147046410451, 0.0363091495847], -[0.3198280849801, 0.03591870030968], -[0.3249538054767, 0.03552006146827], -[0.3300818406747, 0.03511314585031], -[0.3352122290615, 0.03469786531406], -[0.3403450094941, 0.03427413081201], -[0.3454802212198, 0.03384185241779], -[0.3506179038982, 0.0334009393542], -[0.3557580976227, 0.03295130002241], -[0.3609008429423, 0.0324928420323], -[0.366046180883, 0.03202547223416], -[0.3711941529695, 0.03154909675159], -[0.3763448012464, 0.03106362101582], -[0.3814981682991, 0.03056894980139], -[0.386654297275, 0.03006498726331], -[0.3918132319033, 0.02955163697563], -[0.3969750165146, 0.02902880197161], -[0.4021396960606, 0.02849638478543], -[0.4073073161321, 0.02795428749549], -[-0.4045333026988, 0.03275901970276], -[-0.3993652163129, 0.03329444635009], -[-0.3942001972542, 0.03382028071665], -[-0.389038199511, 0.03433661919015], -[-0.3838791776369, 0.03484355773376], -[-0.3787230867338, 0.0353411918431], -[-0.3735698824347, 0.03582961650488], -[-0.3684195208858, 0.03630892615692], -[-0.3632719587273, 0.03677921464963], -[-0.3581271530751, 0.03724057520896], -[-0.3529850615013, 0.03769310040055], -[-0.3478456420144, 0.03813688209541], -[-0.34270885304, 0.03857201143671], -[-0.3375746534006, 0.03899857880786], -[-0.3324430022956, 0.03941667380181], -[-0.3273138592819, 0.03982638519144], -[-0.3221871842536, 0.04022780090112], -[-0.3170629374225, 0.04062100797922], -[-0.3119410792985, 0.04100609257174], -[-0.3068215706703, 0.04138313989683], -[-0.3017043725865, 0.04175223422031], -[-0.2965894463367, 0.04211345883196], -[-0.2914767534332, 0.04246689602279], -[-0.2863662555929, 0.04281262706298], -[-0.2812579147197, 0.04315073218066], -[-0.2761516928875, 0.04348129054143], -[-0.2710475523234, 0.04380438022847], -[-0.2659454553912, 0.0441200782234], -[-0.2608453645763, 0.04442846038774], -[-0.2557472424697, 0.0447296014449], -[-0.2506510517542, 0.0450235749628], -[-0.2455567551896, 0.04531045333702], -[-0.2404643155996, 0.04559030777434], -[-0.2353736958584, 0.04586320827693], -[-0.2302848588788, 0.04612922362686], -[-0.2251977676, 0.04638842137107], -[-0.2201123849767, 0.0466408678068], -[-0.2150286739679, 0.04688662796739], -[-0.2099465975277, 0.04712576560837], -[-0.2048661185949, 0.04735834319408], -[-0.1997872000852, 0.04758442188447], -[-0.1947098048818, 0.04780406152231], -[-0.1896338958285, 0.04801732062075], -[-0.1845594357225, 0.04822425635107], -[-0.1794863873073, 0.04842492453091], -[-0.1744147132674, 0.0486193796126], -[-0.1693443762226, 0.04880767467194], -[-0.1642753387231, 0.04898986139716], -[-0.1592075632449, 0.0491659900782], -[-0.1541410121868, 0.04933610959626], -[-0.1490756478661, 0.04950026741359], -[-0.1440114325166, 0.04965850956363], -[-0.138948328286, 0.04981088064132], -[-0.133886297234, 0.04995742379378], -[-0.1288253013313, 0.05009818071116], -[-0.1237653024583, 0.05023319161784], -[-0.118706262405, 0.0503624952639], -[-0.1136481428711, 0.0504861289168], -[-0.1085909054659, 0.05060412835347], -[-0.1035345117096, 0.0507165278525], -[-0.09847892303428, 0.05082336018681], -[-0.0934241007856, 0.05092465661652], -[-0.08837000622459, 0.05102044688206], -[-0.08331660053001, 0.05111075919772], -[-0.07826384480093, 0.05119562024541], -[-0.07321170005958, 0.05127505516874], -[-0.06816012725457, 0.05134908756746], -[-0.06310908726435, 0.05141773949219], -[-0.05805854090092, 0.05148103143944], -[-0.05300844891378, 0.05153898234707], -[-0.0479587719941, 0.05159160958997], -[-0.04290947077912, 0.05163892897614], -[-0.03786050585671, 0.0516809547431], -[-0.0328118377701, 0.05171769955464], -[-0.02776342702278, 0.05174917449796], -[-0.02271523408354, 0.05177538908108], -[-0.01766721939159, 0.05179635123071], -[-0.0126193433618, 0.0518120672904], -[-0.007571566390045, 0.05182254201911], -[-0.002523848858569, 0.05182777859006], -[0.002523848858569, 0.05182777859006], -[0.007571566390044, 0.05182254201911], -[0.0126193433618, 0.05181206729041], -[0.01766721939159, 0.05179635123071], -[0.02271523408354, 0.05177538908108], -[0.02776342702278, 0.05174917449796], -[0.0328118377701, 0.05171769955464], -[0.03786050585671, 0.0516809547431], -[0.04290947077912, 0.05163892897614], -[0.0479587719941, 0.05159160958997], -[0.05300844891378, 0.05153898234707], -[0.05805854090092, 0.05148103143944], -[0.06310908726435, 0.05141773949219], -[0.06816012725457, 0.05134908756746], -[0.07321170005958, 0.05127505516874], -[0.07826384480093, 0.05119562024541], -[0.08331660053001, 0.05111075919772], -[0.08837000622459, 0.05102044688206], -[0.0934241007856, 0.05092465661652], -[0.09847892303429, 0.05082336018682], -[0.1035345117096, 0.0507165278525], -[0.1085909054659, 0.05060412835347], -[0.1136481428711, 0.05048612891681], -[0.118706262405, 0.0503624952639], -[0.1237653024583, 0.05023319161784], -[0.1288253013313, 0.05009818071116], -[0.133886297234, 0.04995742379378], -[0.138948328286, 0.04981088064132], -[0.1440114325166, 0.04965850956363], -[0.1490756478661, 0.04950026741359], -[0.1541410121868, 0.04933610959626], -[0.1592075632449, 0.0491659900782], -[0.1642753387231, 0.04898986139716], -[0.1693443762226, 0.04880767467194], -[0.1744147132674, 0.0486193796126], -[0.1794863873073, 0.04842492453091], -[0.1845594357225, 0.04822425635107], -[0.1896338958285, 0.04801732062074], -[0.1947098048818, 0.04780406152231], -[0.1997872000852, 0.04758442188447], -[0.2048661185949, 0.04735834319408], -[0.2099465975277, 0.04712576560837], -[0.2150286739679, 0.04688662796739], -[0.2201123849767, 0.0466408678068], -[0.2251977676001, 0.04638842137096], -[0.2302848588788, 0.04612922362686], -[0.2353736958584, 0.04586320827693], -[0.2404643155996, 0.04559030777434], -[0.2455567551896, 0.04531045333702], -[0.2506510517542, 0.0450235749628], -[0.2557472424697, 0.0447296014449], -[0.2608453645763, 0.04442846038774], -[0.2659454553912, 0.0441200782234], -[0.2710475523234, 0.04380438022847], -[0.2761516928875, 0.04348129054143], -[0.2812579147197, 0.04315073218066], -[0.2863662555929, 0.04281262706298], -[0.2914767534332, 0.04246689602279], -[0.2965894463367, 0.04211345883196], -[0.3017043725865, 0.04175223422031], -[0.3068215706703, 0.04138313989683], -[0.3119410792985, 0.04100609257174], -[0.3170629374225, 0.04062100797922], -[0.3221871842536, 0.04022780090112], -[0.3273138592819, 0.03982638519144], -[0.3324430022956, 0.03941667380181], -[0.3375746534006, 0.03899857880786], -[0.34270885304, 0.03857201143671], -[0.3478456420144, 0.03813688209541], -[0.3529850615013, 0.03769310040055], -[0.3581271530751, 0.03724057520896], -[0.3632719587273, 0.03677921464964], -[0.3684195208858, 0.03630892615692], -[0.3735698824347, 0.03582961650488], -[0.3787230867338, 0.0353411918431], -[0.3838791776369, 0.03484355773376], -[0.389038199511, 0.03433661919015], -[0.3942001972542, 0.03382028071665], -[0.3993652163129, 0.0332944463501], -[0.4045333026988, 0.03275901970276], -[-0.401755982012, 0.03756907830009], -[-0.3965880463696, 0.03809742483303], -[-0.3914228686256, 0.03861661736017], -[-0.386260836916, 0.03912639995657], -[-0.3811019052476, 0.03962686715126], -[-0.3759460281056, 0.04011811303637], -[-0.3707931604381, 0.04060023122584], -[-0.3656432576393, 0.04107331481567], -[-0.3604962755333, 0.04153745634546], -[-0.3553521703559, 0.04199274776124], -[-0.3502108987378, 0.04243928037966], -[-0.3450724176861, 0.04287714485339], -[-0.3399366845668, 0.04330643113772], -[-0.334803657086, 0.04372722845835], -[-0.3296732932724, 0.04413962528027], -[-0.3245455514584, 0.04454370927783], -[-0.3194203902624, 0.04493956730567], -[-0.3142977685705, 0.04532728537085], -[-0.3091776455189, 0.04570694860582], -[-0.3040599804758, 0.04607864124233], -[-0.2989447330243, 0.04644244658628], -[-0.2938318629452, 0.04679844699334], -[-0.2887213301997, 0.0471467238454], -[-0.2836130949139, 0.04748735752783], -[-0.2785071173615, 0.04782042740741], -[-0.2734033579491, 0.04814601181099], -[-0.2683017772002, 0.04846418800483], -[-0.263202335741, 0.04877503217449], -[-0.2581049942855, 0.04907861940546], -[-0.2530097136221, 0.04937502366424], -[-0.2479164545999, 0.04966431778001], -[-0.2428251781161, 0.04994657342682], -[-0.2377358451038, 0.05022186110629], -[-0.2326484165198, 0.05049025013076], -[-0.2275628533338, 0.05075180860687], -[-0.2224791165177, 0.05100660341961], -[-0.2173971670353, 0.05125470021676], -[-0.2123169658328, 0.05149616339374], -[-0.20723847383, 0.05173105607881], -[-0.2021616519116, 0.05195944011866], -[-0.1970864609196, 0.05218137606437], -[-0.1920128616459, 0.05239692315763], -[-0.1869408148253, 0.05260613931741], -[-0.1818702811297, 0.05280908112683], -[-0.1768012211623, 0.05300580382045], -[-0.1717335954521, 0.05319636127183], -[-0.1666673644499, 0.05338080598133], -[-0.1616024885238, 0.05355918906433], -[-0.1565389279558, 0.05373156023967], -[-0.1514766429387, 0.05389796781835], -[-0.1464155935737, 0.05405845869267], -[-0.141355739868, 0.05421307832547], -[-0.1362970417333, 0.05436187073981], -[-0.131239458985, 0.05450487850891], -[-0.1261829513409, 0.05464214274631], -[-0.1211274784215, 0.05477370309646], -[-0.1160729997499, 0.05489959772553], -[-0.1110194747522, 0.05501986331249], -[-0.1059668627588, 0.05513453504061], -[-0.1009151230056, 0.05524364658919], -[-0.09586421463577, 0.05534723012562], -[-0.0908140967017, 0.05544531629779], -[-0.08576472816751, 0.05553793422682], -[-0.08071606791174, 0.0556251115001], -[-0.07566807473041, 0.05570687416468], -[-0.07062070734034, 0.05578324672104], -[-0.06557392438274, 0.05585425211713], -[-0.06052768442707, 0.05591991174286], -[-0.05548194597517, 0.05598024542485], -[-0.05043666746554, 0.05603527142163], -[-0.04539180727793, 0.05608500641915], -[-0.04034732373803, 0.0561294655267], -[-0.03530317512239, 0.05616866227318], -[-0.03025931966348, 0.05620260860376], -[-0.02521571555489, 0.05623131487692], -[-0.02017232095666, 0.05625478986189], -[-0.01512909400069, 0.05627304073648], -[-0.01008599279629, 0.05628607308529], -[-0.005042975435757, 0.0562938908983], -[-3.184669120136e-17, 0.0562964965699], -[0.005042975435757, 0.0562938908983], -[0.01008599279629, 0.05628607308529], -[0.01512909400069, 0.05627304073648], -[0.02017232095666, 0.05625478986189], -[0.02521571555489, 0.05623131487692], -[0.03025931966348, 0.05620260860376], -[0.03530317512239, 0.05616866227318], -[0.04034732373803, 0.0561294655267], -[0.04539180727793, 0.05608500641915], -[0.05043666746554, 0.05603527142163], -[0.05548194597517, 0.05598024542485], -[0.06052768442707, 0.05591991174286], -[0.06557392438274, 0.05585425211713], -[0.07062070734034, 0.05578324672104], -[0.07566807473041, 0.05570687416468], -[0.08071606791174, 0.0556251115001], -[0.08576472816751, 0.05553793422682], -[0.0908140967017, 0.05544531629779], -[0.09586421463577, 0.05534723012561], -[0.1009151230056, 0.05524364658919], -[0.1059668627588, 0.05513453504061], -[0.1110194747522, 0.05501986331249], -[0.1160729997499, 0.05489959772553], -[0.1211274784215, 0.05477370309646], -[0.1261829513409, 0.05464214274631], -[0.131239458985, 0.05450487850891], -[0.1362970417333, 0.05436187073981], -[0.141355739868, 0.05421307832547], -[0.1464155935737, 0.05405845869267], -[0.1514766429387, 0.05389796781835], -[0.1565389279558, 0.05373156023967], -[0.1616024885238, 0.05355918906433], -[0.1666673644499, 0.05338080598133], -[0.1717335954521, 0.05319636127183], -[0.1768012211623, 0.05300580382045], -[0.1818702811297, 0.05280908112683], -[0.1869408148253, 0.05260613931741], -[0.1920128616459, 0.05239692315763], -[0.1970864609196, 0.05218137606437], -[0.2021616519116, 0.05195944011866], -[0.20723847383, 0.05173105607881], -[0.2123169658328, 0.05149616339374], -[0.2173971670353, 0.05125470021676], -[0.2224791165177, 0.05100660341961], -[0.2275628533338, 0.05075180860687], -[0.2326484165198, 0.05049025013076], -[0.2377358451038, 0.05022186110629], -[0.2428251781161, 0.04994657342682], -[0.2479164545999, 0.04966431778001], -[0.2530097136221, 0.04937502366424], -[0.2581049942855, 0.04907861940546], -[0.263202335741, 0.04877503217449], -[0.2683017772002, 0.04846418800483], -[0.2734033579491, 0.04814601181099], -[0.2785071173615, 0.04782042740741], -[0.2836130949139, 0.04748735752783], -[0.2887213301997, 0.0471467238454], -[0.2938318629452, 0.04679844699334], -[0.2989447330243, 0.04644244658628], -[0.3040599804758, 0.04607864124233], -[0.3091776455189, 0.04570694860582], -[0.3142977685705, 0.04532728537085], -[0.3194203902624, 0.04493956730567], -[0.3245455514584, 0.04454370927783], -[0.3296732932724, 0.04413962528027], -[0.3348036570861, 0.04372722845835], -[0.3399366845668, 0.04330643113772], -[0.3450724176861, 0.04287714485339], -[0.3502108987378, 0.04243928037966], -[0.3553521703559, 0.04199274776124], -[0.3604962755333, 0.04153745634546], -[0.3656432576393, 0.04107331481567], -[0.3707931604381, 0.04060023122584], -[0.3759460281056, 0.04011811303637], -[0.3811019052476, 0.03962686715126], -[0.386260836916, 0.03912639995657], -[0.3914228686256, 0.03861661736017], -[0.3965880463696, 0.03809742483303], -[0.4017559823386, 0.0375690775992], -[-0.3989762480539, 0.04238331484802], -[-0.3938082827296, 0.0429051513624], -[-0.3886431253564, 0.04341764443234], -[-0.3834812370869, 0.04392081325138], -[-0.3783225713299, 0.04441475098163], -[-0.3731670819056, 0.04489955037755], -[-0.3680147230305, 0.04537530374641], -[-0.3628654493039, 0.0458421029055], -[-0.3577192156913, 0.04630003914675], -[-0.3525759775094, 0.046749203198], -[-0.3474356904097, 0.04718968518731], -[-0.3422983103626, 0.04762157460819], -[-0.3371637936409, 0.04804496028592], -[-0.332032096803, 0.04845993034499], -[-0.3269031766765, 0.04886657217766], -[-0.3217769903417, 0.04926497241347], -[-0.3166534951148, 0.04965521688982], -[-0.3115326485316, 0.05003739062344], -[-0.3064144083312, 0.0504115777828], -[-0.3012987324397, 0.05077786166143], -[-0.2961855789544, 0.05113632465205], -[-0.2910749061282, 0.0514870482215], -[-0.2859666723542, 0.05183011288646], -[-0.2808608361507, 0.05216559818994], -[-0.2757573561466, 0.05249358267835], -[-0.2706561910667, 0.05281414387943], -[-0.2655572997185, 0.05312735828064], -[-0.2604606409783, 0.05343330130829], -[-0.255366173778, 0.05373204730725], -[-0.2502738570933, 0.05402366952103], -[-0.2451836499306, 0.05430824007268], -[-0.2400955113163, 0.05458582994604], -[-0.2350094002853, 0.05485650896741], -[-0.2299252758704, 0.05512034578786], -[-0.2248430970922, 0.0553774078659], -[-0.2197628229498, 0.05562776145042], -[-0.2146844124116, 0.05587147156447], -[-0.2096078244068, 0.05610860198892], -[-0.2045330178174, 0.0563392152469], -[-0.199459951471, 0.05656337258835], -[-0.1943885841336, 0.05678113397515], -[-0.1893188745034, 0.05699255806643], -[-0.184250781205, 0.05719770220427], -[-0.1791842627837, 0.05739662239981], -[-0.1741192777014, 0.05758937331958], -[-0.1690557843315, 0.05777600827223], -[-0.1639937409557, 0.05795657919554], -[-0.1589331057604, 0.0581311366438], -[-0.1538738368339, 0.0582997297754], -[-0.1488158921644, 0.05846240634087], -[-0.1437592296377, 0.05861921267116], -[-0.1387038070359, 0.05877019366622], -[-0.1336495820367, 0.05891539278395], -[-0.1285965122129, 0.05905485202941], -[-0.1235445550318, 0.05918861194446], -[-0.1184936678561, 0.05931671159756], -[-0.1134438079446, 0.05943918857405], -[-0.1083949324529, 0.05955607896669], -[-0.1033469984353, 0.05966741736656], -[-0.09829996284672, 0.05977323685429], -[-0.09325378254461, 0.05987356899162], -[-0.08820841429173, 0.05996844381339], -[-0.083163814759, 0.06005788981979], -[-0.07811994052865, 0.06014193396906], -[-0.07307674809775, 0.06022060167049], -[-0.06803419388194, 0.06029391677781], -[-0.06299223421945, 0.06036190158305], -[-0.05795082537534, 0.06042457681064], -[-0.05290992354607, 0.060481961612], -[-0.0478694848641, 0.06053407356051], -[-0.04282946540286, 0.06058092864687], -[-0.0377898211818, 0.06062254127487], -[-0.03275050817165, 0.06065892425756], -[-0.0277114822998, 0.06069008881385], -[-0.02267269945579, 0.06071604456553], -[-0.01763411549698, 0.06073679953469], -[-0.01259568625428, 0.06075236014159], -[-0.007557367537887, 0.0607627312029], -[-0.002519115143219, 0.06076791593049], -[0.002519115143219, 0.06076791593049], -[0.007557367537887, 0.0607627312029], -[0.01259568625428, 0.06075236014159], -[0.01763411549698, 0.06073679953469], -[0.02267269945579, 0.06071604456553], -[0.02771148229979, 0.06069008881385], -[0.03275050817165, 0.06065892425756], -[0.0377898211818, 0.06062254127487], -[0.04282946540286, 0.06058092864687], -[0.0478694848641, 0.06053407356051], -[0.05290992354607, 0.060481961612], -[0.05795082537535, 0.06042457681064], -[0.06299223421945, 0.06036190158305], -[0.06803419388194, 0.06029391677782], -[0.07307674809775, 0.06022060167049], -[0.07811994052865, 0.06014193396906], -[0.083163814759, 0.06005788981979], -[0.08820841429173, 0.05996844381339], -[0.09325378254461, 0.05987356899162], -[0.09829996284672, 0.05977323685429], -[0.1033469984353, 0.05966741736656], -[0.1083949324529, 0.05955607896669], -[0.1134438079446, 0.05943918857405], -[0.1184936678561, 0.05931671159756], -[0.1235445550318, 0.05918861194446], -[0.1285965122129, 0.05905485202942], -[0.1336495820367, 0.05891539278395], -[0.1387038070359, 0.05877019366622], -[0.1437592296377, 0.05861921267116], -[0.1488158921644, 0.05846240634087], -[0.1538738368339, 0.0582997297754], -[0.1589331057604, 0.0581311366438], -[0.1639937409557, 0.05795657919554], -[0.1690557843315, 0.05777600827223], -[0.1741192777014, 0.05758937331958], -[0.1791842627837, 0.05739662239981], -[0.184250781205, 0.05719770220427], -[0.1893188745034, 0.05699255806643], -[0.1943885841336, 0.05678113397515], -[0.199459951471, 0.05656337258835], -[0.2045330178174, 0.0563392152469], -[0.2096078244068, 0.05610860198892], -[0.2146844124116, 0.05587147156447], -[0.2197628229498, 0.05562776145042], -[0.2248430970921, 0.05537740786592], -[0.2299252758704, 0.05512034578786], -[0.2350094002853, 0.05485650896741], -[0.2400955113163, 0.05458582994604], -[0.2451836499306, 0.05430824007268], -[0.2502738570933, 0.05402366952103], -[0.255366173778, 0.05373204730725], -[0.2604606409783, 0.05343330130824], -[0.2655572997185, 0.05312735828064], -[0.2706561910667, 0.05281414387943], -[0.2757573561466, 0.05249358267835], -[0.2808608361507, 0.05216559818994], -[0.2859666723542, 0.05183011288647], -[0.2910749061282, 0.0514870482215], -[0.2961855789544, 0.05113632465205], -[0.3012987324397, 0.05077786166143], -[0.3064144083312, 0.0504115777828], -[0.3115326485316, 0.05003739062344], -[0.3166534951148, 0.04965521688982], -[0.3217769903417, 0.04926497241347], -[0.3269031766765, 0.04886657217766], -[0.332032096803, 0.04845993034499], -[0.3371637936409, 0.04804496028592], -[0.3422983103626, 0.04762157460819], -[0.3474356904097, 0.04718968518731], -[0.3525759775094, 0.046749203198], -[0.3577192156913, 0.04630003914675], -[0.3628654493039, 0.0458421029055], -[0.3680147230305, 0.04537530374641], -[0.3731670819055, 0.04489955037779], -[0.3783225713299, 0.04441475098163], -[0.3834812370869, 0.04392081325138], -[0.3886431253564, 0.04341764443234], -[0.3938082827296, 0.0429051513624], -[0.398976248062, 0.04238331483281], -[-0.3961940543572, 0.04720282079921], -[-0.3910260213538, 0.04771745808226], -[-0.3858610616871, 0.0482231954718], -[-0.3806994925544, 0.04871969405133], -[-0.3755412667173, 0.04920704568193], -[-0.3703863372831, 0.04968534184588], -[-0.3652346576924, 0.05015467360578], -[-0.3600861817056, 0.05061513156479], -[-0.3549408633893, 0.0510668058282], -[-0.349798657102, 0.05150978596609], -[-0.3446595174795, 0.05194416097719], -[-0.3395233994205, 0.05237001925383], -[-0.3343902580716, 0.052787448548], -[-0.3292600488123, 0.05319653593841], -[-0.3241327272401, 0.05359736779865], -[-0.3190082491553, 0.05399002976625], -[-0.3138865705458, 0.0543746067127], -[-0.3087676475726, 0.05475118271443], -[-0.3036514365548, 0.05511984102459], -[-0.2985378939548, 0.05548066404571], -[-0.293426976364, 0.05583373330317], -[-0.2883186404888, 0.05617912941943], -[-0.2832128431363, 0.05651693208901], -[-0.278109541201, 0.05684722005414], -[-0.2730086916515, 0.05717007108117], -[-0.2679102515172, 0.05748556193752], -[-0.2628141778762, 0.05779376836937], -[-0.257720427843, 0.05809476507984], -[-0.2526289585566, 0.05838862570778], -[-0.2475397271696, 0.05867542280717], -[-0.2424526908366, 0.0589552278269], -[-0.2373678067048, 0.05922811109118], -[-0.232285031903, 0.05949414178036], -[-0.2272043235332, 0.05975338791225], -[-0.2221256386607, 0.06000591632384], -[-0.2170489343063, 0.06025179265351], -[-0.2119741674379, 0.06049108132357], -[-0.2069012949634, 0.06072384552331], -[-0.2018302737233, 0.06095014719231], -[-0.1967610604845, 0.06117004700428], -[-0.1916936119345, 0.06138360435109], -[-0.1866278846754, 0.0615908773274], -[-0.1815638352195, 0.06179192271516], -[-0.1765014199844, 0.0619867959694], -[-0.1714405952894, 0.06217555120319], -[-0.1663813173516, 0.06235824117377], -[-0.1613235422834, 0.06253491726877], -[-0.1562672260893, 0.06270562949269], -[-0.1512123246644, 0.06287042645383], -[-0.1461587937926, 0.0630293553515], -[-0.1411065891453, 0.06318246196361], -[-0.1360556662808, 0.06332979063448], -[-0.1310059806442, 0.06347138426319], -[-0.125957487567, 0.06360728429209], -[-0.1209101422681, 0.06373753069577], -[-0.1158638998546, 0.06386216197034], -[-0.1108187153231, 0.06398121512305], -[-0.1057745435614, 0.06409472566233], -[-0.1007313393504, 0.06420272758813], -[-0.0956890573668, 0.06430525338268], -[-0.0906476521856, 0.06440233400161], -[-0.08560707828321, 0.06449399886547], -[-0.08056729004082, 0.06458027585157], -[-0.07552824174805, 0.06466119128636], -[-0.07048988760688, 0.06473676993804], -[-0.06545218173579, 0.06480703500972], -[-0.06041507817428, 0.06487200813291], -[-0.05537853088744, 0.06493170936145], -[-0.05034249377091, 0.06498615716589], -[-0.04530692065592, 0.06503536842827], -[-0.04027176531455, 0.06507935843733], -[-0.03523698146521, 0.06511814088422], -[-0.03020252277816, 0.06515172785853], -[-0.02516834288126, 0.06518012984496], -[-0.02013439536584, 0.06520335572021], -[-0.01510063379256, 0.06522141275052], -[-0.01006701169751, 0.06523430658959], -[-0.00503348259826, 0.0652420412769], -[-1.592334560068e-16, 0.06524461923663], -[0.00503348259826, 0.0652420412769], -[0.01006701169751, 0.06523430658959], -[0.01510063379256, 0.06522141275052], -[0.02013439536584, 0.06520335572021], -[0.02516834288126, 0.06518012984496], -[0.03020252277816, 0.06515172785853], -[0.03523698146521, 0.06511814088421], -[0.04027176531455, 0.06507935843733], -[0.04530692065592, 0.06503536842827], -[0.05034249377091, 0.06498615716589], -[0.05537853088744, 0.06493170936145], -[0.06041507817428, 0.06487200813291], -[0.06545218173579, 0.06480703500972], -[0.07048988760688, 0.06473676993804], -[0.07552824174805, 0.06466119128636], -[0.08056729004082, 0.06458027585157], -[0.0856070782832, 0.06449399886546], -[0.0906476521856, 0.06440233400161], -[0.0956890573668, 0.06430525338268], -[0.1007313393504, 0.06420272758813], -[0.1057745435614, 0.06409472566233], -[0.1108187153231, 0.06398121512305], -[0.1158638998546, 0.06386216197034], -[0.1209101422681, 0.06373753069577], -[0.125957487567, 0.06360728429209], -[0.1310059806442, 0.06347138426319], -[0.1360556662808, 0.06332979063448], -[0.1411065891453, 0.06318246196361], -[0.1461587937926, 0.06302935535153], -[0.1512123246644, 0.06287042645383], -[0.1562672260893, 0.06270562949269], -[0.1613235422834, 0.06253491726877], -[0.1663813173516, 0.06235824117377], -[0.1714405952894, 0.06217555120319], -[0.1765014199844, 0.0619867959694], -[0.1815638352195, 0.06179192271516], -[0.1866278846754, 0.06159087732733], -[0.1916936119345, 0.06138360435109], -[0.1967610604845, 0.06117004700428], -[0.2018302737233, 0.06095014719231], -[0.2069012949634, 0.06072384552331], -[0.2119741674379, 0.06049108132357], -[0.2170489343063, 0.06025179265351], -[0.2221256386607, 0.06000591632384], -[0.2272043235332, 0.05975338791225], -[0.232285031903, 0.05949414178036], -[0.2373678067048, 0.05922811109118], -[0.2424526908366, 0.0589552278269], -[0.2475397271696, 0.05867542280717], -[0.2526289585566, 0.05838862570778], -[0.257720427843, 0.05809476507984], -[0.2628141778762, 0.05779376836937], -[0.2679102515172, 0.05748556193752], -[0.2730086916515, 0.05717007108117], -[0.278109541201, 0.05684722005414], -[0.2832128431363, 0.05651693208901], -[0.2883186404888, 0.05617912941943], -[0.293426976364, 0.05583373330317], -[0.2985378939548, 0.05548066404571], -[0.3036514365548, 0.05511984102459], -[0.3087676475726, 0.05475118271443], -[0.3138865705458, 0.0543746067127], -[0.3190082491553, 0.05399002976625], -[0.3241327272401, 0.05359736779865], -[0.3292600488123, 0.05319653593841], -[0.3343902580716, 0.052787448548], -[0.3395233994205, 0.05237001925384], -[0.3446595174795, 0.05194416097719], -[0.349798657102, 0.05150978596609], -[0.3549408633893, 0.0510668058282], -[0.3600861817056, 0.05061513156479], -[0.3652346576923, 0.05015467360578], -[0.3703863372831, 0.04968534184588], -[0.3755412667173, 0.04920704568193], -[0.3806994925544, 0.04871969405133], -[0.3858610616871, 0.0482231954718], -[0.3910260213538, 0.04771745808226], -[0.3961940547953, 0.04720281997446], -[-0.3934090120609, 0.05202626193306], -[-0.3882413576887, 0.0525341781071], -[-0.3830767713927, 0.05303310498047], -[-0.3779156954328, 0.05352287828862], -[-0.3727580818744, 0.05400358865616], -[-0.3676038830658, 0.05447532635653], -[-0.3624530516272, 0.05493818127119], -[-0.3573055404383, 0.05539224284982], -[-0.3521613026267, 0.0558376000718], -[-0.3470202915546, 0.05627434140874], -[-0.3418824608059, 0.05670255478814], -[-0.3367477641735, 0.05712232755802], -[-0.3316161556455, 0.0575337464527], -[-0.3264875893918, 0.05793689755949], -[-0.3213620197506, 0.05833186628635], -[-0.316239401215, 0.05871873733054], -[-0.311119688419, 0.05909759464807], -[-0.3060028361246, 0.05946852142413], -[-0.300888799208, 0.05983160004425], -[-0.2957775326468, 0.06018691206629], -[-0.2906689915063, 0.06053453819336], -[-0.2855631309278, 0.06087455824706], -[-0.2804599061149, 0.06120705114201], -[-0.275359272322, 0.06153209486054], -[-0.2702611848422, 0.0618497664284], -[-0.2651655989956, 0.06216014189084], -[-0.2600724701177, 0.06246329628948], -[-0.2549817535493, 0.06275930363965], -[-0.2498934046252, 0.06304823690831], -[-0.2448073786646, 0.06333016799253], -[-0.2397236309611, 0.06360516769843], -[-0.2346421167738, 0.06387330572067], -[-0.2295627913179, 0.06413465062238], -[-0.2244856097572, 0.06438926981556], -[-0.2194105271953, 0.06463722954188], -[-0.2143374986689, 0.06487859485402], -[-0.2092664791403, 0.06511342959727], -[-0.2041974234912, 0.06534179639169], -[-0.1991302865167, 0.06556375661455], -[-0.1940650229197, 0.0657793703832], -[-0.1890015873057, 0.06598869653836], -[-0.1839399341783, 0.06619179262767], -[-0.1788800179353, 0.06638871488974], -[-0.1738217928648, 0.06657951823846], -[-0.1687652131423, 0.06676425624771], -[-0.1637102328274, 0.06694298113646], -[-0.1586568058625, 0.06711574375414], -[-0.15360488607, 0.06728259356645], -[-0.1485544271518, 0.06744357864147], -[-0.1435053826877, 0.06759874563619], -[-0.1384577061354, 0.0677481397833], -[-0.1334113508302, 0.06789180487846], -[-0.1283662699853, 0.06802978326784], -[-0.1233224166929, 0.06816211583609], -[-0.1182797439248, 0.06828884199465], -[-0.1132382045342, 0.06840999967045], -[-0.1081977512577, 0.06852562529502], -[-0.1031583367174, 0.06863575379393], -[-0.09811991342342, 0.0687404185767], -[-0.09308243377683, 0.06883965152705], -[-0.08804585007303, 0.06893348299361], -[-0.08301011450517, 0.06902194178098], -[-0.07797517916798, 0.06910505514131], -[-0.07294099606191, 0.06918284876618], -[-0.06790751709749, 0.06925534677904], -[-0.06287469409992, 0.06932257172801], -[-0.05784247881398, 0.06938454457917], -[-0.05281082290903, 0.06944128471025], -[-0.04777967798433, 0.06949280990485], -[-0.04274899557451, 0.06953913634707], -[-0.03771872715516, 0.06958027861662], -[-0.03268882414865, 0.06961624968442], -[-0.02765923793006, 0.0696470609087], -[-0.02262991983322, 0.06967272203148], -[-0.01760082115688, 0.06969324117567], -[-0.01257189317097, 0.06970862484256], -[-0.007543087122923, 0.06971887790989], -[-0.002514354244041, 0.06972400363026], -[0.002514354244041, 0.06972400363026], -[0.007543087122923, 0.06971887790988], -[0.01257189317097, 0.06970862484257], -[0.01760082115688, 0.06969324117567], -[0.02262991983322, 0.06967272203148], -[0.02765923793006, 0.0696470609087], -[0.03268882414865, 0.06961624968442], -[0.03771872715516, 0.06958027861661], -[0.04274899557451, 0.06953913634707], -[0.04777967798433, 0.06949280990485], -[0.05281082290902, 0.06944128471025], -[0.05784247881397, 0.06938454457917], -[0.06287469409992, 0.06932257172802], -[0.06790751709749, 0.06925534677904], -[0.07294099606191, 0.06918284876618], -[0.07797517916798, 0.06910505514131], -[0.08301011450517, 0.06902194178098], -[0.08804585007303, 0.06893348299361], -[0.09308243377683, 0.06883965152705], -[0.09811991342342, 0.0687404185767], -[0.1031583367174, 0.06863575379393], -[0.1081977512577, 0.06852562529502], -[0.1132382045342, 0.06840999967045], -[0.1182797439248, 0.06828884199465], -[0.1233224166929, 0.06816211583609], -[0.1283662699853, 0.06802978326784], -[0.1334113508302, 0.06789180487846], -[0.1384577061354, 0.0677481397833], -[0.1435053826876, 0.0675987456362], -[0.1485544271518, 0.06744357864147], -[0.15360488607, 0.06728259356645], -[0.1586568058625, 0.06711574375414], -[0.1637102328274, 0.06694298113646], -[0.1687652131423, 0.06676425624771], -[0.1738217928648, 0.06657951823846], -[0.1788800179353, 0.06638871488974], -[0.1839399341783, 0.06619179262767], -[0.1890015873057, 0.06598869653836], -[0.1940650229197, 0.0657793703832], -[0.1991302865167, 0.06556375661455], -[0.2041974234912, 0.06534179639169], -[0.2092664791403, 0.06511342959727], -[0.2143374986689, 0.06487859485402], -[0.2194105271953, 0.06463722954188], -[0.2244856097572, 0.06438926981556], -[0.2295627913179, 0.06413465062238], -[0.2346421167738, 0.06387330572067], -[0.2397236309611, 0.06360516769843], -[0.2448073786646, 0.06333016799253], -[0.2498934046252, 0.06304823690831], -[0.2549817535493, 0.06275930363965], -[0.2600724701177, 0.06246329628948], -[0.2651655989956, 0.06216014189084], -[0.2702611848422, 0.0618497664284], -[0.275359272322, 0.06153209486054], -[0.2804599061149, 0.06120705114201], -[0.2855631309278, 0.06087455824706], -[0.2906689915063, 0.06053453819336], -[0.2957775326468, 0.06018691206629], -[0.300888799208, 0.05983160004425], -[0.3060028361246, 0.05946852142413], -[0.311119688419, 0.05909759464807], -[0.316239401215, 0.05871873733054], -[0.3213620197506, 0.05833186628635], -[0.3264875893918, 0.05793689755949], -[0.3316161556455, 0.0575337464527], -[0.3367477641735, 0.05712232755802], -[0.3418824608059, 0.05670255478814], -[0.3470202915546, 0.05627434140874], -[0.3521613026267, 0.0558376000718], -[0.3573055404383, 0.05539224284982], -[0.3624530516272, 0.05493818127119], -[0.3676038830658, 0.05447532635653], -[0.3727580818744, 0.05400358865616], -[0.3779156954328, 0.05352287828862], -[0.3830767713927, 0.05303310498046], -[0.3882413576887, 0.0525341781071], -[0.3934090125065, 0.05202626109275], -[-0.3906221030048, 0.05685392436712], -[-0.3854543866907, 0.05735514547764], -[-0.3802903478058, 0.05784720837971], -[-0.3751299374401, 0.05833020280733], -[-0.3699731069155, 0.05880421821192], -[-0.3648198077758, 0.05926934372093], -[-0.3596699917775, 0.05972566809574], -[-0.3545236108786, 0.06017327969307], -[-0.3493806172281, 0.06061226642573], -[-0.3442409631548, 0.06104271572504], -[-0.3391046011554, 0.06146471450424], -[-0.3339714838832, 0.0618783491229], -[-0.3288415641359, 0.06228370535225], -[-0.3237147948438, 0.06268086834152], -[-0.3185911290573, 0.06306992258514], -[-0.3134705199352, 0.06345095189087], -[-0.3083529207325, 0.06382403934872], -[-0.3032382847879, 0.0641892673008], -[-0.2981265655126, 0.06454671731184], -[-0.2930177163778, 0.06489647014061], -[-0.2879116909035, 0.06523860571192], -[-0.2828084426466, 0.0655732030895], -[-0.2777079251904, 0.06590034044944], -[-0.2726100921328, 0.06622009505433], -[-0.2675148970762, 0.06653254322804], -[-0.2624222936172, 0.0668377603311], -[-0.2573322353359, 0.06713582073665], -[-0.252244675787, 0.06742679780695], -[-0.24715956849, 0.06771076387048], -[-0.2420768669203, 0.0679877901995], -[-0.236996524501, 0.06825794698815], -[-0.2319184945942, 0.06852130333103], -[-0.2268427304938, 0.06877792720221], -[-0.2217691854177, 0.06902788543477], -[-0.2166978125014, 0.06927124370074], -[-0.2116285647912, 0.06950806649143], -[-0.2065613952386, 0.06973841709829], -[-0.2014962566944, 0.06996235759404], -[-0.1964331019037, 0.07017994881432], -[-0.1913718835014, 0.07039125033966], -[-0.1863125540079, 0.0705963204779], -[-0.1812550658256, 0.0707952162469], -[-0.1761993712351, 0.07098799335774], -[-0.171145422393, 0.07117470619821], -[-0.1660931713292, 0.07135540781673], -[-0.1610425699448, 0.07153014990661], -[-0.1559935700109, 0.07169898279069], -[-0.1509461231676, 0.07186195540639], -[-0.1459001809228, 0.07201911529105], -[-0.1408556946526, 0.07217050856781], -[-0.1358126156011, 0.07231617993162], -[-0.130770894881, 0.07245617263594], -[-0.1257304834749, 0.07259052847959], -[-0.1206913322362, 0.07271928779411], -[-0.1156533918911, 0.07284248943146], -[-0.1106166130405, 0.07296017075222], -[-0.1055809461628, 0.07307236761409], -[-0.1005463416162, 0.07317911436091], -[-0.09551274964233, 0.07328044381201], -[-0.09048012036911, 0.07337638725208], -[-0.08544840381492, 0.07346697442145], -[-0.08041754989247, 0.07355223350677], -[-0.07538750841306, 0.0736321911322], -[-0.07035822909122, 0.07370687235106], -[-0.06532966154947, 0.07377630063792], -[-0.06030175532337, 0.07384049788116], -[-0.05527445986683, 0.07389948437607], -[-0.05024772455755, 0.07395327881832], -[-0.04522149870269, 0.07400189829809], -[-0.04019573154474, 0.07404535829451], -[-0.03517037226751, 0.07408367267076], -[-0.03014537000226, 0.0741168536696], -[-0.02512067383403, 0.07414491190943], -[-0.02009623280798, 0.07416785638087], -[-0.01507199593594, 0.07418569444382], -[-0.01004791220292, 0.07419843182516], -[-0.005023930573798, 0.07420607261682], -[-2.866202208122e-15, 0.07420861927449], -[0.005023930573798, 0.07420607261682], -[0.01004791220292, 0.07419843182516], -[0.01507199593594, 0.07418569444382], -[0.02009623280798, 0.07416785638087], -[0.02512067383403, 0.07414491190943], -[0.03014537000226, 0.0741168536696], -[0.03517037226751, 0.07408367267076], -[0.04019573154474, 0.07404535829451], -[0.04522149870269, 0.07400189829809], -[0.05024772455755, 0.07395327881833], -[0.05527445986683, 0.07389948437607], -[0.06030175532337, 0.07384049788116], -[0.06532966154947, 0.07377630063792], -[0.07035822909122, 0.07370687235106], -[0.07538750841306, 0.0736321911322], -[0.08041754989247, 0.07355223350677], -[0.08544840381492, 0.07346697442145], -[0.09048012036911, 0.07337638725208], -[0.09551274964233, 0.07328044381201], -[0.1005463416162, 0.07317911436091], -[0.1055809461628, 0.07307236761409], -[0.1106166130405, 0.07296017075222], -[0.1156533918911, 0.07284248943146], -[0.1206913322362, 0.07271928779411], -[0.1257304834749, 0.07259052847959], -[0.130770894881, 0.07245617263594], -[0.1358126156011, 0.07231617993161], -[0.1408556946526, 0.0721705085678], -[0.1459001809228, 0.07201911529105], -[0.1509461231676, 0.07186195540639], -[0.1559935700109, 0.07169898279069], -[0.1610425699448, 0.07153014990661], -[0.1660931713292, 0.07135540781673], -[0.171145422393, 0.07117470619821], -[0.1761993712351, 0.07098799335774], -[0.1812550658256, 0.0707952162469], -[0.1863125540079, 0.0705963204779], -[0.1913718835014, 0.07039125033966], -[0.1964331019037, 0.07017994881432], -[0.2014962566944, 0.06996235759404], -[0.2065613952386, 0.06973841709829], -[0.2116285647912, 0.06950806649143], -[0.2166978125014, 0.06927124370074], -[0.2217691854177, 0.06902788543477], -[0.2268427304938, 0.06877792720221], -[0.2319184945942, 0.06852130333103], -[0.236996524501, 0.06825794698815], -[0.2420768669203, 0.0679877901995], -[0.24715956849, 0.06771076387048], -[0.252244675787, 0.06742679780695], -[0.2573322353359, 0.06713582073665], -[0.2624222936172, 0.0668377603311], -[0.2675148970762, 0.06653254322804], -[0.2726100921328, 0.06622009505433], -[0.2777079251904, 0.06590034044944], -[0.2828084426466, 0.0655732030895], -[0.2879116909035, 0.06523860571192], -[0.2930177163778, 0.06489647014061], -[0.2981265655126, 0.06454671731184], -[0.3032382847879, 0.0641892673008], -[0.3083529207325, 0.06382403934872], -[0.3134705199352, 0.06345095189087], -[0.3185911290573, 0.06306992258514], -[0.3237147948438, 0.06268086834152], -[0.3288415641359, 0.06228370535225], -[0.3339714838832, 0.0618783491229], -[0.3391046011554, 0.06146471450424], -[0.3442409631548, 0.06104271572504], -[0.3493806172281, 0.06061226642573], -[0.3545236108786, 0.06017327969307], -[0.3596699917775, 0.05972566809574], -[0.3648198077758, 0.05926934372093], -[0.3699731069154, 0.05880421821203], -[0.3751299374401, 0.05833020280733], -[0.3802903478058, 0.05784720837971], -[0.3854543866907, 0.05735514547764], -[0.3906221030048, 0.05685392436712], -[-0.387832316593, 0.06168597617452], -[-0.3826652028495, 0.06218019511801], -[-0.377501883838, 0.06266534196773], -[-0.3723423099188, 0.0631415053212], -[-0.3671864316235, 0.06360877351919], -[-0.3620341996476, 0.06406723460377], -[-0.3568855648412, 0.06451697627733], -[-0.3517404782002, 0.06495808586272], -[-0.3465988908568, 0.06539065026438], -[-0.3414607540697, 0.06581475593047], -[-0.3363260192136, 0.066230488816], -[-0.3311946377691, 0.06663793434683], -[-0.3260665613125, 0.06703717738476], -[-0.3209417415044, 0.06742830219329], -[-0.3158201300797, 0.06781139240445], -[-0.3107016788364, 0.06818653098635], -[-0.3055863396251, 0.06855380021161], -[-0.3004740643381, 0.06891328162654], -[-0.2953648048988, 0.06926505602109], -[-0.2902585132515, 0.06960920339954], -[-0.2851551413508, 0.06994580295188], -[-0.2800546411514, 0.07027493302592], -[-0.2749569645983, 0.07059667109997], -[-0.2698620636172, 0.07091109375624], -[-0.2647698901047, 0.07121827665482], -[-0.2596803959196, 0.07151829450822], -[-0.2545935328736, 0.07181122105647], -[-0.2495092527231, 0.07209712904307], -[-0.244427507161, 0.07237609019062], -[-0.2393482478086, 0.07264817517813], -[-0.2342714262085, 0.07291345361794], -[-0.2291969938173, 0.07317199403348], -[-0.2241249019988, 0.07342386383744], -[-0.2190551020181, 0.07366912931033], -[-0.2139875450355, 0.07390785557963], -[-0.2089221821009, 0.0741401065992], -[-0.203858964149, 0.07436594512922], -[-0.1987978419947, 0.07458543271654], -[-0.1937387663286, 0.07479862967538], -[-0.1886816877137, 0.07500559506848], -[-0.1836265565816, 0.07520638668863], -[-0.1785733232301, 0.07540106104064], -[-0.1735219378201, 0.07558967332357], -[-0.1684723503744, 0.07577227741358], -[-0.1634245107752, 0.07594892584691], -[-0.1583783687635, 0.07611966980346], -[-0.1533338739383, 0.07628455909061], -[-0.1482909757558, 0.0764436421276], -[-0.1432496235298, 0.07659696593011], -[-0.1382097664322, 0.07674457609541], -[-0.1331713534935, 0.07688651678781], -[-0.1281343336042, 0.07702283072463], -[-0.1230986555166, 0.07715355916244], -[-0.1180642678462, 0.07727874188381], -[-0.1130311190745, 0.07739841718453], -[-0.1079991575517, 0.07751262186117], -[-0.102968331499, 0.07762139119912], -[-0.09793858901295, 0.07772475896113], -[-0.09290987806821, 0.07782275737619], -[-0.08788214652188, 0.07791541712901], -[-0.0828553421177, 0.07800276734987], -[-0.07782941249052, 0.07808483560498], -[-0.07280430517103, 0.07816164788736], -[-0.06777996759085, 0.07823322860816], -[-0.06275634708772, 0.0782996005885], -[-0.05773339091102, 0.07836078505186], -[-0.05271104622748, 0.0784168016169], -[-0.047689260127, 0.07846766829091], -[-0.04266797962875, 0.07851340146364], -[-0.03764715168743, 0.07855401590186], -[-0.03262672319962, 0.07858952474425], -[-0.0276066410103, 0.07861993949699], -[-0.02258685191948, 0.07864527002983], -[-0.01756730268895, 0.07866552457273], -[-0.01254794004912, 0.07868070971301], -[-0.007528710705911, 0.07869083039317], -[-0.002509561347692, 0.07869588990913], -[0.002509561347691, 0.07869588990913], -[0.007528710705911, 0.07869083039317], -[0.01254794004912, 0.07868070971301], -[0.01756730268895, 0.07866552457273], -[0.02258685191948, 0.07864527002983], -[0.0276066410103, 0.07861993949699], -[0.03262672319962, 0.07858952474424], -[0.03764715168743, 0.07855401590186], -[0.04266797962875, 0.07851340146364], -[0.047689260127, 0.07846766829091], -[0.05271104622748, 0.0784168016169], -[0.05773339091103, 0.07836078505186], -[0.06275634708772, 0.0782996005885], -[0.06777996759084, 0.07823322860816], -[0.07280430517103, 0.07816164788736], -[0.07782941249052, 0.07808483560498], -[0.0828553421177, 0.07800276734987], -[0.08788214652188, 0.07791541712901], -[0.09290987806821, 0.07782275737619], -[0.09793858901296, 0.07772475896113], -[0.102968331499, 0.07762139119912], -[0.1079991575517, 0.07751262186117], -[0.1130311190745, 0.07739841718453], -[0.1180642678462, 0.07727874188381], -[0.1230986555166, 0.07715355916244], -[0.1281343336042, 0.07702283072463], -[0.1331713534935, 0.07688651678781], -[0.1382097664322, 0.0767445760954], -[0.1432496235298, 0.07659696593011], -[0.1482909757558, 0.0764436421276], -[0.1533338739383, 0.07628455909062], -[0.1583783687635, 0.07611966980346], -[0.1634245107752, 0.07594892584691], -[0.1684723503744, 0.07577227741358], -[0.1735219378201, 0.07558967332357], -[0.1785733232301, 0.07540106104065], -[0.1836265565816, 0.07520638668863], -[0.1886816877137, 0.07500559506848], -[0.1937387663286, 0.07479862967538], -[0.1987978419947, 0.07458543271654], -[0.203858964149, 0.07436594512922], -[0.2089221821009, 0.0741401065992], -[0.2139875450355, 0.07390785557963], -[0.2190551020181, 0.07366912931033], -[0.2241249019988, 0.07342386383744], -[0.2291969938173, 0.07317199403348], -[0.2342714262085, 0.07291345361794], -[0.2393482478086, 0.07264817517813], -[0.244427507161, 0.07237609019062], -[0.2495092527231, 0.07209712904307], -[0.2545935328737, 0.07181122105641], -[0.2596803959196, 0.07151829450822], -[0.2647698901047, 0.07121827665482], -[0.2698620636172, 0.07091109375624], -[0.2749569645983, 0.07059667109996], -[0.2800546411514, 0.07027493302592], -[0.2851551413508, 0.06994580295188], -[0.2902585132515, 0.06960920339954], -[0.2953648048988, 0.06926505602109], -[0.3004740643381, 0.06891328162654], -[0.3055863396251, 0.06855380021161], -[0.3107016788364, 0.06818653098635], -[0.3158201300797, 0.06781139240445], -[0.3209417415044, 0.06742830219329], -[0.3260665613125, 0.06703717738476], -[0.3311946377691, 0.06663793434685], -[0.3363260192136, 0.066230488816], -[0.3414607540697, 0.06581475593047], -[0.3465988908568, 0.06539065026438], -[0.3517404782002, 0.06495808586272], -[0.3568855648412, 0.06451697627733], -[0.3620341996476, 0.06406723460377], -[0.3671864316235, 0.06360877351919], -[0.3723423099188, 0.0631415053212], -[0.377501883838, 0.06266534196773], -[0.3826652028495, 0.06218019511801], -[0.387832316593, 0.06168597617452], -[-0.3850402389003, 0.06652199659704], -[-0.3798739002105, 0.06700916279399], -[-0.3747114720012, 0.06748734287807], -[-0.3695529038552, 0.0679566243724], -[-0.3643981454687, 0.06841709456824], -[-0.3592471466452, 0.06886884048289], -[-0.3540998572872, 0.06931194881871], -[-0.3489562273891, 0.06974650592308], -[-0.3438162070285, 0.0701725977493], -[-0.3386797463581, 0.0705903098185], -[-0.3335467955964, 0.07099972718243], -[-0.3284173050194, 0.07140093438714], -[-0.3232912249506, 0.07179401543759], -[-0.3181685057522, 0.07217905376304], -[-0.3130490978157, 0.07255613218335], -[-0.3079329515524, 0.07292533287599], -[-0.3028200173835, 0.07328673734389], -[-0.2977102457317, 0.07364042638404], -[-0.2926035870109, 0.07398648005678], -[-0.2874999916176, 0.07432497765581], -[-0.2823994099215, 0.0746559976789], -[-0.2773017922567, 0.0749796177992], -[-0.272207088913, 0.07529591483727], -[-0.2671152501276, 0.07560496473364], -[-0.2620262260762, 0.07590684252198], -[-0.256939966866, 0.07620162230288], -[-0.2518564225269, 0.07648937721814], -[-0.2467755430051, 0.07677017942564], -[-0.2416972781551, 0.07704410007463], -[-0.2366215777339, 0.07731120928167], -[-0.2315483913937, 0.07757157610694], -[-0.2264776686764, 0.07782526853105], -[-0.2214093590078, 0.07807235343236], -[-0.2163434116923, 0.07831289656471], -[-0.2112797759079, 0.07854696253558], -[-0.2062184007017, 0.07877461478475], -[-0.2011592349859, 0.0789959155633], -[-0.1961022275341, 0.07921092591312], -[-0.1910473269776, 0.07941970564675], -[-0.185994481803, 0.07962231332768], -[-0.1809436403496, 0.07981880625108], -[-0.1758947508068, 0.08000924042488], -[-0.1708477612133, 0.08019367055134], -[-0.165802619455, 0.08037215000883], -[-0.1607592732646, 0.08054473083436], -[-0.155717670221, 0.08071146370615], -[-0.1506777577492, 0.08087239792689], -[-0.1456394831209, 0.08102758140723], -[-0.1406027934546, 0.08117706064982], -[-0.1355676357174, 0.0813208807337], -[-0.130533956726, 0.08145908529914], -[-0.1255017031486, 0.08159171653289], -[-0.1204708215074, 0.08171881515396], -[-0.1154412581806, 0.08184042039972], -[-0.110412959406, 0.08195657001257], -[-0.1053858712834, 0.08206730022701], -[-0.1003599397787, 0.08217264575717], -[-0.09533511072783, 0.08227263978491], -[-0.0903113298404, 0.08236731394827], -[-0.08528854270454, 0.08245669833056], -[-0.08026669479149, 0.08254082144983], -[-0.07524573146058, 0.08261971024894], -[-0.0702255979645, 0.08269339008608], -[-0.06520623945476, 0.08276188472588], -[-0.06018760098738, 0.08282521633102], -[-0.05516962752881, 0.08288340545441], -[-0.05015226396205, 0.08293647103183], -[-0.04513545509293, 0.08298443037528], -[-0.04011914565663, 0.08302729916677], -[-0.03510328032422, 0.08306509145271], -[-0.03008780370947, 0.0830978196389], -[-0.02507266037576, 0.08312549448606], -[-0.02005779484301, 0.08314812510599], -[-0.01504315159484, 0.08316571895829], -[-0.01002867508571, 0.08317828184764], -[-0.005014309748132, 0.08318581792175], -[-5.095470592217e-16, 0.08318832966984], -[0.005014309748132, 0.08318581792175], -[0.01002867508571, 0.08317828184764], -[0.01504315159484, 0.08316571895829], -[0.02005779484301, 0.08314812510599], -[0.02507266037576, 0.08312549448606], -[0.03008780370947, 0.0830978196389], -[0.03510328032422, 0.08306509145271], -[0.04011914565663, 0.08302729916677], -[0.04513545509294, 0.08298443037528], -[0.05015226396205, 0.08293647103183], -[0.05516962752881, 0.08288340545441], -[0.06018760098738, 0.08282521633103], -[0.06520623945476, 0.08276188472588], -[0.0702255979645, 0.08269339008608], -[0.07524573146058, 0.08261971024894], -[0.08026669479149, 0.08254082144983], -[0.08528854270454, 0.08245669833056], -[0.0903113298404, 0.08236731394827], -[0.09533511072785, 0.0822726397849], -[0.1003599397787, 0.08217264575717], -[0.1053858712834, 0.08206730022701], -[0.110412959406, 0.08195657001257], -[0.1154412581806, 0.08184042039972], -[0.1204708215074, 0.08171881515396], -[0.1255017031486, 0.08159171653289], -[0.130533956726, 0.08145908529914], -[0.1355676357174, 0.0813208807337], -[0.1406027934546, 0.08117706064982], -[0.1456394831209, 0.08102758140723], -[0.1506777577492, 0.08087239792688], -[0.155717670221, 0.08071146370615], -[0.1607592732646, 0.08054473083436], -[0.165802619455, 0.08037215000883], -[0.1708477612133, 0.08019367055134], -[0.1758947508069, 0.08000924042487], -[0.1809436403496, 0.07981880625109], -[0.185994481803, 0.07962231332768], -[0.1910473269776, 0.07941970564675], -[0.1961022275341, 0.07921092591312], -[0.2011592349859, 0.0789959155633], -[0.2062184007017, 0.07877461478475], -[0.2112797759079, 0.07854696253558], -[0.2163434116923, 0.07831289656471], -[0.2214093590078, 0.07807235343236], -[0.2264776686764, 0.07782526853105], -[0.2315483913937, 0.07757157610694], -[0.2366215777339, 0.07731120928167], -[0.2416972781551, 0.07704410007463], -[0.2467755430051, 0.07677017942563], -[0.2518564225269, 0.07648937721814], -[0.256939966866, 0.07620162230288], -[0.2620262260762, 0.07590684252198], -[0.2671152501276, 0.07560496473364], -[0.272207088913, 0.07529591483727], -[0.2773017922567, 0.0749796177992], -[0.2823994099215, 0.0746559976789], -[0.2874999916176, 0.07432497765581], -[0.2926035870109, 0.07398648005678], -[0.2977102457317, 0.07364042638404], -[0.3028200173835, 0.07328673734389], -[0.3079329515524, 0.07292533287599], -[0.3130490978157, 0.07255613218335], -[0.3181685057522, 0.07217905376304], -[0.3232912249506, 0.07179401543759], -[0.3284173050194, 0.07140093438714], -[0.3335467955964, 0.07099972718243], -[0.3386797463581, 0.0705903098185], -[0.3438162070285, 0.0701725977493], -[0.3489562273891, 0.06974650592308], -[0.3540998572872, 0.06931194881871], -[0.3592471466452, 0.06886884048289], -[0.3643981454687, 0.06841709456824], -[0.3695529038552, 0.0679566243724], -[0.3747114720012, 0.06748734287807], -[0.3798739002105, 0.06700916279399], -[0.3850402389003, 0.06652199659704], -[-0.382245965047, 0.07136182088126], -[-0.3770805723972, 0.07184188507251], -[-0.3719192044281, 0.07231304903934], -[-0.3667618098989, 0.07277539929162], -[-0.3616083376263, 0.07322902213117], -[-0.3564587364789, 0.07367400360995], -[-0.3513129553716, 0.07411042948855], -[-0.3461709432581, 0.07453838519618], -[-0.3410326491248, 0.07495795579126], -[-0.3358980219833, 0.07536922592306], -[-0.3307670108625, 0.07577227979414], -[-0.3256395648016, 0.07616720112365], -[-0.3205156328415, 0.0765540731115], -[-0.3153951640173, 0.07693297840328], -[-0.3102781073498, 0.07730399905603], -[-0.3051644118377, 0.07766721650476], -[-0.3000540264491, 0.07802271152962], -[-0.2949469001135, 0.07837056422394], -[-0.2898429817137, 0.07871085396286], -[-0.284742220078, 0.07904365937265], -[-0.2796445639719, 0.07936905830069], -[-0.2745499620907, 0.07968712778611], -[-0.2694583630522, 0.07999794403099], -[-0.2643697153888, 0.08030158237218], -[-0.2592839675406, 0.08059811725368], -[-0.2542010678488, 0.08088762219961], -[-0.2491209645487, 0.08117016978765], -[-0.2440436057637, 0.08144583162307], -[-0.238968939499, 0.08171467831326], -[-0.2338969136361, 0.08197677944268], -[-0.2288274759274, 0.0822322035484], -[-0.2237605739909, 0.08248101809606], -[-0.2186961553057, 0.08272328945624], -[-0.2136341672077, 0.08295908288139], -[-0.2085745568856, 0.08318846248312], -[-0.203517271377, 0.08341149120997], -[-0.1984622575655, 0.08362823082556], -[-0.1934094621778, 0.08383874188727], -[-0.1883588317812, 0.08404308372523], -[-0.1833103127813, 0.08424131442176], -[-0.1782638514206, 0.08443349079133], -[-0.173219393777, 0.0846196683608], -[-0.1681768857632, 0.08479990135013], -[-0.1631362731257, 0.08497424265359], -[-0.1580975014451, 0.08514274382127], -[-0.1530605161361, 0.08530545504109], -[-0.1480252624481, 0.08546242512126], -[-0.1429916854663, 0.08561370147309], -[-0.1379597301132, 0.08575933009434], -[-0.1329293411501, 0.08589935555295], -[-0.1279004631792, 0.0860338209713], -[-0.1228730406462, 0.08616276801078], -[-0.1178470178432, 0.08628623685702], -[-0.1128223389114, 0.08640426620546], -[-0.1077989478449, 0.08651689324748], -[-0.1027767884944, 0.08662415365694], -[-0.09775580457121, 0.08672608157733], -[-0.0927359396518, 0.08682270960934], -[-0.08771713718228, 0.08691406879899], -[-0.08269934048339, 0.08700018862628], -[-0.0776824927558, 0.08708109699438], -[-0.07266653708549, 0.08715682021937], -[-0.06765141644949, 0.08722738302047], -[-0.0626370737218, 0.08729280851099], -[-0.05762345167953, 0.08735311818964], -[-0.05261049300928, 0.08740833193258], -[-0.04759814031365, 0.087458467986], -[-0.04258633611797, 0.08750354295926], -[-0.03757502287714, 0.08754357181872], -[-0.03256414298271, 0.08757856788203], -[-0.02755363876995, 0.08760854281319], -[-0.02254345252516, 0.08763350661809], -[-0.01753352649305, 0.0876534676408], -[-0.01252380288414, 0.08766843256036], -[-0.007514223882304, 0.08767840638824], -[-0.002504731652356, 0.08768339246651], -[0.002504731652356, 0.08768339246651], -[0.007514223882304, 0.08767840638824], -[0.01252380288414, 0.08766843256035], -[0.01753352649305, 0.0876534676408], -[0.02254345252516, 0.08763350661809], -[0.02755363876995, 0.08760854281319], -[0.03256414298271, 0.08757856788203], -[0.03757502287714, 0.08754357181872], -[0.04258633611797, 0.08750354295926], -[0.04759814031365, 0.08745846798599], -[0.05261049300928, 0.08740833193258], -[0.05762345167953, 0.08735311818964], -[0.0626370737218, 0.08729280851099], -[0.06765141644949, 0.08722738302048], -[0.07266653708549, 0.08715682021937], -[0.0776824927558, 0.08708109699438], -[0.08269934048339, 0.08700018862628], -[0.08771713718226, 0.08691406879899], -[0.0927359396518, 0.08682270960934], -[0.0977558045712, 0.08672608157733], -[0.1027767884944, 0.08662415365694], -[0.1077989478449, 0.08651689324748], -[0.1128223389114, 0.08640426620546], -[0.1178470178432, 0.08628623685702], -[0.1228730406462, 0.08616276801078], -[0.1279004631792, 0.0860338209713], -[0.1329293411501, 0.08589935555295], -[0.1379597301132, 0.08575933009434], -[0.1429916854663, 0.08561370147309], -[0.1480252624481, 0.08546242512126], -[0.1530605161361, 0.08530545504109], -[0.1580975014451, 0.08514274382127], -[0.1631362731257, 0.08497424265359], -[0.1681768857632, 0.08479990135013], -[0.173219393777, 0.0846196683608], -[0.1782638514206, 0.08443349079133], -[0.1833103127813, 0.08424131442176], -[0.1883588317812, 0.08404308372523], -[0.1934094621778, 0.08383874188728], -[0.1984622575655, 0.08362823082556], -[0.203517271377, 0.08341149120997], -[0.2085745568856, 0.08318846248312], -[0.2136341672077, 0.08295908288139], -[0.2186961553057, 0.08272328945624], -[0.2237605739909, 0.08248101809606], -[0.2288274759274, 0.0822322035484], -[0.2338969136361, 0.08197677944268], -[0.238968939499, 0.08171467831326], -[0.2440436057637, 0.08144583162307], -[0.2491209645487, 0.08117016978765], -[0.2542010678488, 0.08088762219961], -[0.2592839675406, 0.08059811725368], -[0.2643697153888, 0.08030158237218], -[0.2694583630522, 0.07999794403099], -[0.2745499620907, 0.07968712778611], -[0.2796445639719, 0.07936905830069], -[0.284742220078, 0.07904365937265], -[0.2898429817137, 0.07871085396286], -[0.2949469001135, 0.07837056422394], -[0.3000540264491, 0.07802271152962], -[0.3051644118377, 0.07766721650476], -[0.3102781073498, 0.07730399905603], -[0.3153951640173, 0.07693297840328], -[0.3205156328415, 0.0765540731115], -[0.3256395648016, 0.07616720112365], -[0.3307670108625, 0.07577227979414], -[0.3358980219833, 0.07536922592306], -[0.3410326491248, 0.07495795579126], -[0.3461709432581, 0.07453838519618], -[0.3513129553716, 0.07411042948855], -[0.3564587364789, 0.07367400360995], -[0.3616083376263, 0.07322902213117], -[0.3667618098989, 0.07277539929165], -[0.3719192044281, 0.07231304903934], -[0.3770805723972, 0.07184188507251], -[0.382245965047, 0.07136182088126], -[-0.3794495897107, 0.07620528504065], -[-0.3742853126323, 0.07667819928207], -[-0.3691251728927, 0.07714229913588], -[-0.3639691183821, 0.07759767015878], -[-0.3588170969944, 0.0780443977226], -[-0.3536690566222, 0.07848256697207], -[-0.3485249451525, 0.07891226278347], -[-0.3433847104611, 0.07933356972418], -[-0.3382483004068, 0.07974657201312], -[-0.3331156628256, 0.08015135348195], -[-0.3279867455241, 0.08054799753721], -[-0.3228614962735, 0.08093658712321], -[-0.3177398628026, 0.0813172046857], -[-0.3126217927908, 0.08168993213636], -[-0.307507233862, 0.08205485081799], -[-0.3023961335767, 0.08241204147043], -[-0.2972884394257, 0.08276158419723], -[-0.292184098823, 0.08310355843295], -[-0.2870830590988, 0.08343804291121], -[-0.2819852674927, 0.08376511563323], -[-0.2768906711472, 0.08408485383722], -[-0.2717992171009, 0.08439733396813], -[-0.2667108522823, 0.08470263164822], -[-0.2616255235034, 0.08500082164802], -[-0.2565431774536, 0.08529197785796], -[-0.2514637606942, 0.0855761732605], -[-0.2463872196528, 0.08585347990276], -[-0.2413135006178, 0.08612396886974], -[-0.2362425497334, 0.08638771025792], -[-0.2311743129953, 0.08664477314949], -[-0.2261087362457, 0.08689522558693], -[-0.2210457651696, 0.08713913454814], -[-0.215985345291, 0.08737656592198], -[-0.2109274219693, 0.08760758448434], -[-0.2058719403963, 0.08783225387443], -[-0.2008188455936, 0.08805063657201], -[-0.1957680824099, 0.08826279387437], -[-0.1907195955193, 0.08846878587435], -[-0.1856733294195, 0.08866867143841], -[-0.1806292284306, 0.08886250818536], -[-0.1755872366942, 0.08905035246538], -[-0.1705472981726, 0.08923225933956], -[-0.1655093566489, 0.0894082825598], -[-0.1604733557273, 0.08957847454924], -[-0.1554392388333, 0.08974288638304], -[-0.150406949215, 0.08990156776967], -[-0.1453764299443, 0.09005456703266], -[-0.1403476239182, 0.0902019310927], -[-0.1353204738615, 0.09034370545037], -[-0.1302949223287, 0.09047993416922], -[-0.1252709117068, 0.09061065985938], -[-0.1202483842182, 0.09073592366157], -[-0.1152272819246, 0.09085576523181], -[-0.11020754673, 0.09097022272639], -[-0.1051891203854, 0.09107933278752], -[-0.1001719444926, 0.09118313052944], -[-0.09515596050905, 0.09128164952506], -[-0.09014110975273, 0.09137492179317], -[-0.08512733340736, 0.09146297778616], -[-0.08011457252783, 0.09154584637837], -[-0.07510276804583, 0.0916235548549], -[-0.07009186077591, 0.09169612890112], -[-0.06508179142158, 0.09176359259268], -[-0.06007250058172, 0.09182596838615], -[-0.05506392875719, 0.0918832771103], -[-0.0500560163576, 0.09193553795789], -[-0.04504870370828, 0.09198276847822], -[-0.04004193105742, 0.09202498457017], -[-0.03503563858334, 0.092062200476], -[-0.03002976640192, 0.09209442877569], -[-0.02502425457412, 0.09212168038201], -[-0.02001904311365, 0.09214396453615], -[-0.01501407199467, 0.0921612888041], -[-0.01000928115964, 0.09217365907365], -[-0.005004610527186, 0.09218107955202], -[0, 0.09218355276422], -[0.005004610527186, 0.09218107955202], -[0.01000928115964, 0.09217365907365], -[0.01501407199467, 0.0921612888041], -[0.02001904311365, 0.09214396453615], -[0.02502425457412, 0.09212168038201], -[0.03002976640192, 0.09209442877569], -[0.03503563858334, 0.092062200476], -[0.04004193105742, 0.09202498457017], -[0.04504870370828, 0.09198276847822], -[0.0500560163576, 0.09193553795789], -[0.05506392875719, 0.0918832771103], -[0.06007250058172, 0.09182596838615], -[0.06508179142158, 0.09176359259268], -[0.07009186077591, 0.09169612890112], -[0.07510276804583, 0.0916235548549], -[0.08011457252783, 0.09154584637837], -[0.08512733340737, 0.09146297778616], -[0.09014110975273, 0.09137492179317], -[0.09515596050905, 0.09128164952506], -[0.1001719444926, 0.09118313052944], -[0.1051891203854, 0.09107933278752], -[0.11020754673, 0.09097022272639], -[0.1152272819246, 0.09085576523181], -[0.1202483842182, 0.09073592366157], -[0.1252709117068, 0.09061065985938], -[0.1302949223287, 0.09047993416924], -[0.1353204738615, 0.09034370545037], -[0.1403476239182, 0.0902019310927], -[0.1453764299443, 0.09005456703265], -[0.150406949215, 0.08990156776967], -[0.1554392388333, 0.08974288638304], -[0.1604733557273, 0.08957847454924], -[0.1655093566489, 0.0894082825598], -[0.1705472981726, 0.08923225933956], -[0.1755872366942, 0.08905035246538], -[0.1806292284306, 0.08886250818536], -[0.1856733294195, 0.08866867143841], -[0.1907195955193, 0.08846878587435], -[0.1957680824099, 0.08826279387437], -[0.2008188455936, 0.08805063657201], -[0.2058719403963, 0.08783225387443], -[0.2109274219693, 0.0876075844843], -[0.215985345291, 0.08737656592198], -[0.2210457651696, 0.08713913454814], -[0.2261087362457, 0.08689522558693], -[0.2311743129953, 0.08664477314949], -[0.2362425497334, 0.08638771025792], -[0.2413135006178, 0.08612396886974], -[0.2463872196528, 0.08585347990276], -[0.2514637606942, 0.0855761732605], -[0.2565431774536, 0.08529197785796], -[0.2616255235034, 0.08500082164802], -[0.2667108522823, 0.08470263164822], -[0.2717992171009, 0.08439733396813], -[0.2768906711472, 0.08408485383722], -[0.2819852674927, 0.08376511563324], -[0.2870830590988, 0.08343804291121], -[0.292184098823, 0.08310355843295], -[0.2972884394257, 0.08276158419723], -[0.3023961335767, 0.08241204147043], -[0.307507233862, 0.08205485081799], -[0.3126217927908, 0.08168993213636], -[0.3177398628026, 0.0813172046857], -[0.3228614962735, 0.08093658712321], -[0.3279867455241, 0.08054799753721], -[0.3331156628256, 0.08015135348195], -[0.3382483004068, 0.07974657201312], -[0.3433847104611, 0.07933356972418], -[0.3485249451525, 0.07891226278347], -[0.3536690566222, 0.07848256697207], -[0.3588170969944, 0.0780443977226], -[0.3639691183821, 0.07759767015878], -[0.3691251728927, 0.07714229913588], -[0.3742853126323, 0.07667819928207], -[0.3794495897107, 0.07620528504065], -[-0.3766512071488, 0.08105222581688], -[-0.3714882137592, 0.08151794347422], -[-0.3663294688299, 0.08197493256945], -[-0.361174919338, 0.08242327776533], -[-0.3560245122118, 0.08286306356196], -[-0.3508781943278, 0.08329437425435], -[-0.3457359125063, 0.08371729389092], -[-0.3405976135079, 0.08413190623273], -[-0.3354632440287, 0.08453829471361], -[-0.3303327506952, 0.08493654240106], -[-0.3252060800596, 0.08532673195792], -[-0.3200831785946, 0.08570894560487], -[-0.3149639926875, 0.08608326508364], -[-0.3098484686349, 0.08644977162088], -[-0.3047365526368, 0.08680854589294], -[-0.2996281907911, 0.0871596679911], -[-0.2945233290876, 0.08750321738767], -[-0.2894219134023, 0.08783927290265], -[-0.2843238894916, 0.08816791267104], -[-0.2792292029867, 0.08848921411081], -[-0.2741377993881, 0.08880325389139], -[-0.2690496240597, 0.08911010790285], -[-0.263964622224, 0.08940985122559], -[-0.2588827389568, 0.08970255810058], -[-0.2538039191821, 0.08998830190014], -[-0.2487281076675, 0.09026715509921], -[-0.2436552490193, 0.09053918924761], -[-0.2385852876788, 0.09080447494147], -[-0.233518167918, 0.09106308179699], -[-0.2284538338357, 0.09131507842326], -[-0.2233922293541, 0.09156053239616], -[-0.2183332982159, 0.09179951023261], -[-0.213276983981, 0.09203207736525], -[-0.2082232300244, 0.09225829811765], -[-0.2031719795336, 0.09247823567987], -[-0.1981231755069, 0.09269195208455], -[-0.1930767607519, 0.09289950818342], -[-0.1880326778843, 0.0931009636242], -[-0.1829908693266, 0.09329637682804], -[-0.1779512773086, 0.09348580496732], -[-0.172913843866, 0.09366930394393], -[-0.1678785108416, 0.093846928368], -[-0.1628452198854, 0.09401873153707], -[-0.1578139124555, 0.09418476541574], -[-0.1527845298197, 0.09434508061571], -[-0.1477570130566, 0.0944997263764], -[-0.1427313030581, 0.09464875054595], -[-0.1377073405314, 0.09479219956272], -[-0.1326850660015, 0.09493011843733], -[-0.1276644198149, 0.0950625507351], -[-0.1226453421419, 0.09518953855912], -[-0.1176277729812, 0.09531112253368], -[-0.1126116521633, 0.09542734178838], -[-0.1075969193548, 0.09553823394269], -[-0.1025835140633, 0.09564383509103], -[-0.09757137564196, 0.09574417978845], -[-0.09256044329484, 0.09583930103691], -[-0.08755065608219, 0.09592923027201], -[-0.08254195292625, 0.09601399735043], -[-0.07753427261716, 0.09609363053791], -[-0.07252755381913, 0.09616815649781], -[-0.06752173507694, 0.09623760028034], -[-0.06251675482251, 0.09630198531239], -[-0.05751255138179, 0.09636133338794], -[-0.05250906298179, 0.09641566465922], -[-0.04750622775784, 0.09646499762841], -[-0.04250398376096, 0.09650934914008], -[-0.0375022689654, 0.09654873437425], -[-0.0325010212764, 0.09658316684012], -[-0.02750017853794, 0.09661265837051], -[-0.02249967854072, 0.09663721911698], -[-0.01749945903016, 0.09665685754559], -[-0.01249945771455, 0.0966715804334], -[-0.007499612273214, 0.0966813928657], -[-0.002499860364736, 0.09668629823383], -[0.002499860364736, 0.09668629823384], -[0.007499612273214, 0.0966813928657], -[0.01249945771455, 0.0966715804334], -[0.01749945903016, 0.09665685754559], -[0.02249967854072, 0.09663721911698], -[0.02750017853794, 0.09661265837051], -[0.0325010212764, 0.09658316684012], -[0.0375022689654, 0.09654873437425], -[0.04250398376096, 0.09650934914008], -[0.04750622775784, 0.09646499762841], -[0.05250906298179, 0.09641566465922], -[0.05751255138179, 0.09636133338794], -[0.06251675482251, 0.09630198531239], -[0.06752173507694, 0.09623760028034], -[0.07252755381913, 0.09616815649781], -[0.07753427261714, 0.0960936305379], -[0.08254195292626, 0.09601399735043], -[0.08755065608219, 0.09592923027201], -[0.09256044329484, 0.09583930103691], -[0.09757137564196, 0.09574417978845], -[0.1025835140633, 0.09564383509102], -[0.1075969193548, 0.09553823394269], -[0.1126116521633, 0.09542734178838], -[0.1176277729812, 0.09531112253368], -[0.1226453421419, 0.09518953855912], -[0.1276644198148, 0.09506255073512], -[0.1326850660015, 0.09493011843733], -[0.1377073405314, 0.09479219956272], -[0.1427313030581, 0.09464875054595], -[0.1477570130566, 0.0944997263764], -[0.1527845298197, 0.09434508061571], -[0.1578139124555, 0.09418476541574], -[0.1628452198854, 0.09401873153707], -[0.1678785108416, 0.093846928368], -[0.172913843866, 0.09366930394393], -[0.1779512773086, 0.09348580496732], -[0.1829908693266, 0.09329637682804], -[0.1880326778843, 0.0931009636242], -[0.1930767607519, 0.09289950818342], -[0.1981231755069, 0.09269195208455], -[0.2031719795336, 0.09247823567987], -[0.2082232300244, 0.09225829811765], -[0.213276983981, 0.09203207736525], -[0.2183332982159, 0.09179951023261], -[0.2233922293541, 0.09156053239616], -[0.2284538338357, 0.09131507842326], -[0.233518167918, 0.09106308179699], -[0.2385852876788, 0.09080447494147], -[0.2436552490193, 0.09053918924761], -[0.2487281076674, 0.09026715509936], -[0.2538039191821, 0.08998830190014], -[0.2588827389568, 0.08970255810058], -[0.263964622224, 0.08940985122559], -[0.2690496240597, 0.08911010790285], -[0.2741377993881, 0.08880325389139], -[0.2792292029867, 0.08848921411081], -[0.2843238894916, 0.08816791267104], -[0.2894219134023, 0.08783927290265], -[0.2945233290876, 0.08750321738767], -[0.2996281907911, 0.0871596679911], -[0.3047365526368, 0.08680854589294], -[0.3098484686349, 0.08644977162088], -[0.3149639926875, 0.08608326508364], -[0.3200831785946, 0.08570894560488], -[0.3252060800596, 0.08532673195792], -[0.3303327506952, 0.08493654240106], -[0.3354632440287, 0.08453829471361], -[0.3405976135079, 0.08413190623273], -[0.3457359125063, 0.08371729389092], -[0.3508781943278, 0.08329437425435], -[0.3560245122118, 0.08286306356196], -[0.361174919338, 0.08242327776533], -[0.3663294688299, 0.08197493256945], -[0.3714882137592, 0.08151794347422], -[0.3766512071488, 0.08105222581688], -[-0.3738509112199, 0.08590248064207], -[-0.3686893682625, 0.086360956386], -[-0.3635321833549, 0.08681078942224], -[-0.3583793025189, 0.08725206357679], -[-0.3532306716751, 0.08768486253667], -[-0.3480862366443, 0.08810926980337], -[-0.3429459431424, 0.08852536865306], -[-0.3378097367785, 0.08893324209512], -[-0.3326775630511, 0.08933297283194], -[-0.3275493673446, 0.08972464321943], -[-0.3224250949253, 0.09010833522829], -[-0.317304690937, 0.09048413040598], -[-0.3121881003972, 0.09085210983949], -[-0.3070752681922, 0.09121235411869], -[-0.3019661390729, 0.09156494330046], -[-0.2968606576496, 0.09190995687338], -[-0.2917587683879, 0.09224747372321], -[-0.2866604156038, 0.09257757209898], -[-0.2815655434594, 0.09290032957896], -[-0.2764740959573, 0.09321582303928], -[-0.2713860169372, 0.09352412862034], -[-0.266301250071, 0.09382532169592], -[-0.2612197388587, 0.09411947684191], -[-0.256141426624, 0.09440666780583], -[-0.2510662565107, 0.09468696747681], -[-0.2459941714785, 0.09496044785608], -[-0.2409251142999, 0.09522718002802], -[-0.2358590275567, 0.09548723413162], -[-0.2307958536369, 0.09574067933249], -[-0.2257355347318, 0.09598758379534], -[-0.2206780128336, 0.0962280146569], -[-0.2156232297329, 0.09646203799933], -[-0.2105711270171, 0.09668971882405], -[-0.2055216460682, 0.09691112102612], -[-0.200474728062, 0.09712630736893], -[-0.1954303139664, 0.09733533945949], -[-0.1903883445411, 0.09753827772405], -[-0.1853487603373, 0.09773518138428], -[-0.180311501697, 0.09792610843378], -[-0.1752765087538, 0.09811111561515], -[-0.1702437214335, 0.09829025839749], -[-0.1652130794546, 0.09846359095433], -[-0.16018452233, 0.09863116614206], -[-0.1551579893682, 0.09879303547881], -[-0.1501334196758, 0.09894924912386], -[-0.1451107521592, 0.09909985585744], -[-0.1400899255277, 0.09924490306116], -[-0.135070878296, 0.09938443669881], -[-0.130053548788, 0.09951850129775], -[-0.1250378751398, 0.0996471399308], -[-0.1200237953041, 0.09977039419868], -[-0.1150112470545, 0.09988830421296], -[-0.1100001679894, 0.1000009085796], -[-0.1049904955375, 0.1001082443829], -[-0.0999821669627, 0.1002103471705], -[-0.09497511936943, 0.100307250938], -[-0.08996928970845, 0.1003989881157], -[-0.08496461478274, 0.1004855895541], -[-0.07996103125373, 0.1005670845115], -[-0.07495847564779, 0.1006435006416], -[-0.06995688436284, 0.1007148639818], -[-0.06495619367532, 0.1007811989422], -[-0.05995633974728, 0.100842528295], -[-0.05495725863369, 0.1008988731654], -[-0.04995888628998, 0.1009502530218], -[-0.04496115857968, 0.100996685668], -[-0.03996401128226, 0.1010381872356], -[-0.03496738010114, 0.1010747721767], -[-0.02997120067177, 0.1011064532579], -[-0.02497540856988, 0.1011332415548], -[-0.0199799393198, 0.1011551464472], -[-0.01498472840294, 0.1011721756151], -[-0.009989711266212, 0.1011843350351], -[-0.004994823330651, 0.1011916289782], -[-1.751568016075e-15, 0.1011940600077], -[0.004994823330651, 0.1011916289782], -[0.009989711266212, 0.1011843350351], -[0.01498472840294, 0.1011721756151], -[0.0199799393198, 0.1011551464472], -[0.02497540856988, 0.1011332415548], -[0.02997120067177, 0.1011064532579], -[0.03496738010114, 0.1010747721767], -[0.03996401128226, 0.1010381872356], -[0.04496115857968, 0.100996685668], -[0.04995888628998, 0.1009502530218], -[0.05495725863369, 0.1008988731654], -[0.05995633974728, 0.100842528295], -[0.06495619367532, 0.1007811989422], -[0.06995688436284, 0.1007148639818], -[0.07495847564779, 0.1006435006416], -[0.07996103125373, 0.1005670845115], -[0.08496461478273, 0.1004855895541], -[0.08996928970845, 0.1003989881157], -[0.09497511936943, 0.100307250938], -[0.0999821669627, 0.1002103471704], -[0.1049904955375, 0.1001082443829], -[0.1100001679894, 0.1000009085796], -[0.1150112470545, 0.09988830421296], -[0.1200237953041, 0.09977039419868], -[0.1250378751398, 0.0996471399308], -[0.130053548788, 0.09951850129775], -[0.135070878296, 0.09938443669881], -[0.1400899255277, 0.09924490306116], -[0.1451107521592, 0.09909985585744], -[0.1501334196758, 0.09894924912386], -[0.1551579893682, 0.09879303547881], -[0.16018452233, 0.09863116614206], -[0.1652130794546, 0.09846359095433], -[0.1702437214335, 0.09829025839749], -[0.1752765087538, 0.09811111561515], -[0.180311501697, 0.09792610843378], -[0.1853487603373, 0.09773518138428], -[0.1903883445411, 0.09753827772406], -[0.1954303139664, 0.09733533945949], -[0.200474728062, 0.09712630736893], -[0.2055216460682, 0.09691112102612], -[0.2105711270171, 0.09668971882405], -[0.2156232297329, 0.09646203799933], -[0.2206780128336, 0.0962280146569], -[0.2257355347318, 0.09598758379534], -[0.2307958536369, 0.09574067933249], -[0.2358590275567, 0.09548723413162], -[0.2409251142999, 0.09522718002802], -[0.2459941714785, 0.09496044785608], -[0.2510662565107, 0.09468696747681], -[0.256141426624, 0.09440666780583], -[0.2612197388587, 0.09411947684191], -[0.266301250071, 0.09382532169592], -[0.2713860169372, 0.09352412862034], -[0.2764740959573, 0.09321582303928], -[0.2815655434594, 0.09290032957896], -[0.2866604156039, 0.09257757209889], -[0.2917587683879, 0.09224747372321], -[0.2968606576496, 0.09190995687338], -[0.3019661390729, 0.09156494330046], -[0.3070752681922, 0.09121235411869], -[0.3121881003972, 0.09085210983949], -[0.317304690937, 0.09048413040598], -[0.3224250949253, 0.09010833522829], -[0.3275493673446, 0.08972464321943], -[0.3326775630511, 0.08933297283194], -[0.3378097367785, 0.08893324209512], -[0.3429459431424, 0.08852536865306], -[0.3480862366443, 0.08810926980337], -[0.3532306716751, 0.08768486253667], -[0.3583793025189, 0.08725206357679], -[0.3635321833553, 0.08681078942169], -[0.3686893682625, 0.086360956386], -[0.3738509112199, 0.08590248064207], -[-0.3710487954051, 0.09075588760191], -[-0.3658888682879, 0.09120707740314], -[-0.3607334072837, 0.09164971041832], -[-0.3555823574148, 0.09208386969654], -[-0.3504356635559, 0.09250963816605], -[-0.3452932704322, 0.09292709859139], -[-0.3401551226187, 0.09333633353126], -[-0.3350211645372, 0.09373742529724], -[-0.3298913404551, 0.09413045591312], -[-0.324765594482, 0.09451550707504], -[-0.3196438705672, 0.09489266011227], -[-0.3145261124969, 0.0952619959488], -[-0.3094122638902, 0.09562359506542], -[-0.3043022681968, 0.09597753746265], -[-0.2991960686926, 0.09632390262424], -[-0.2940936084767, 0.09666276948124], -[-0.2889948304676, 0.09699421637681], -[-0.2838996773995, 0.09731832103157], -[-0.278808091819, 0.0976351605095], -[-0.2737200160813, 0.09794481118446], -[-0.268635392347, 0.09824734870733], -[-0.2635541625781, 0.09854284797352], -[-0.2584762685357, 0.09883138309124], -[-0.2534016517758, 0.09911302735009], -[-0.2483302536473, 0.09938785319029], -[-0.2432620152885, 0.09965593217238], -[-0.2381968776248, 0.09991733494738], -[-0.233134781366, 0.1001721312275], -[-0.2280756670049, 0.1004203897573], -[-0.2230194748143, 0.1006621782852], -[-0.2179661448462, 0.1008975635357], -[-0.2129156169298, 0.1011266111819], -[-0.2078678306708, 0.1013493858186], -[-0.2028227254501, 0.1015659509356], -[-0.1977802404236, 0.1017763688916], -[-0.1927403145219, 0.101980700889], -[-0.18770288645, 0.1021790069481], -[-0.182667894688, 0.1023713458831], -[-0.1776352774916, 0.1025577752774], -[-0.1726049728933, 0.1027383514599], -[-0.1675769187032, 0.102913129482], -[-0.1625510525114, 0.1030821630945], -[-0.1575273116892, 0.1032455047252], -[-0.1525056333919, 0.1034032054576], -[-0.1474859545612, 0.1035553150089], -[-0.142468211928, 0.1037018817096], -[-0.1374523420162, 0.1038429524831], -[-0.1324382811456, 0.1039785728259], -[-0.1274259654362, 0.1041087867883], -[-0.1224153308124, 0.1042336369558], -[-0.1174063130073, 0.1043531644309], -[-0.1123988475678, 0.1044674088156], -[-0.1073928698594, 0.1045764081945], -[-0.1023883150718, 0.104680199118], -[-0.09738511822457, 0.104778816587], -[-0.09238321417317, 0.1048722940376], -[-0.08738253761494, 0.1049606633263], -[-0.08238302309576, 0.1050439547165], -[-0.07738460501671, 0.1051221968649], -[-0.07238721764104, 0.1051954168091], -[-0.06739079510135, 0.1052636399556], -[-0.06239527140696, 0.1053268900689], -[-0.05740058045154, 0.1053851892604], -[-0.05240665602087, 0.105438557979], -[-0.0474134318008, 0.1054870150019], -[-0.04242084138539, 0.1055305774263], -[-0.03742881828518, 0.1055692606614], -[-0.03243729593561, 0.1056030784221], -[-0.02744620770555, 0.1056320427221], -[-0.02245548690597, 0.1056561638694], -[-0.01746506679867, 0.1056754504607], -[-0.01247488060509, 0.1056899093782], -[-0.007484861515251, 0.1056995457862], -[-0.002494942696666, 0.105704363129], -[0.002494942696666, 0.105704363129], -[0.007484861515251, 0.1056995457862], -[0.01247488060509, 0.1056899093782], -[0.01746506679867, 0.1056754504607], -[0.02245548690597, 0.1056561638694], -[0.02744620770555, 0.1056320427221], -[0.03243729593561, 0.1056030784221], -[0.03742881828518, 0.1055692606614], -[0.04242084138539, 0.1055305774263], -[0.0474134318008, 0.1054870150019], -[0.05240665602087, 0.105438557979], -[0.05740058045154, 0.1053851892604], -[0.06239527140696, 0.1053268900689], -[0.06739079510134, 0.1052636399556], -[0.07238721764104, 0.1051954168091], -[0.07738460501671, 0.1051221968649], -[0.08238302309576, 0.1050439547165], -[0.08738253761494, 0.1049606633263], -[0.09238321417317, 0.1048722940376], -[0.09738511822457, 0.104778816587], -[0.1023883150718, 0.104680199118], -[0.1073928698594, 0.1045764081945], -[0.1123988475678, 0.1044674088156], -[0.1174063130073, 0.1043531644309], -[0.1224153308124, 0.1042336369558], -[0.1274259654362, 0.1041087867883], -[0.1324382811456, 0.1039785728259], -[0.1374523420162, 0.1038429524831], -[0.142468211928, 0.1037018817096], -[0.1474859545612, 0.1035553150089], -[0.1525056333919, 0.1034032054576], -[0.1575273116892, 0.1032455047252], -[0.1625510525114, 0.1030821630945], -[0.1675769187032, 0.102913129482], -[0.1726049728933, 0.1027383514599], -[0.1776352774916, 0.1025577752774], -[0.182667894688, 0.1023713458831], -[0.18770288645, 0.1021790069481], -[0.1927403145219, 0.101980700889], -[0.1977802404236, 0.1017763688916], -[0.2028227254501, 0.1015659509356], -[0.2078678306708, 0.1013493858186], -[0.2129156169298, 0.1011266111819], -[0.2179661448462, 0.1008975635357], -[0.2230194748143, 0.1006621782852], -[0.2280756670049, 0.1004203897573], -[0.233134781366, 0.1001721312275], -[0.2381968776248, 0.09991733494738], -[0.2432620152885, 0.09965593217238], -[0.2483302536473, 0.09938785319029], -[0.2534016517758, 0.09911302735009], -[0.2584762685357, 0.09883138309124], -[0.2635541625781, 0.09854284797352], -[0.268635392347, 0.09824734870733], -[0.2737200160813, 0.09794481118446], -[0.278808091819, 0.0976351605095], -[0.2838996773995, 0.09731832103157], -[0.2889948304676, 0.09699421637681], -[0.2940936084767, 0.09666276948124], -[0.2991960686926, 0.09632390262424], -[0.3043022681968, 0.09597753746265], -[0.3094122638902, 0.09562359506542], -[0.3145261124969, 0.0952619959488], -[0.3196438705672, 0.09489266011227], -[0.324765594482, 0.09451550707504], -[0.3298913404551, 0.09413045591312], -[0.3350211645372, 0.09373742529724], -[0.3401551226187, 0.09333633353126], -[0.3452932704322, 0.09292709859139], -[0.3504356635559, 0.09250963816605], -[0.3555823574148, 0.09208386969654], -[0.3607334072837, 0.09164971041832], -[0.3658888682879, 0.09120707740314], -[0.3710487954051, 0.09075588760191], -[-0.3682449528293, 0.09561228539963], -[-0.3630868056625, 0.09605614652421], -[-0.3579332311487, 0.09649153689184], -[-0.352784173271, 0.09691853883028], -[-0.3476395758172, 0.09733723456607], -[-0.3424993823801, 0.09774770618135], -[-0.3373635363567, 0.09815003557148], -[-0.3322319809476, 0.09854430440328], -[-0.3271046591554, 0.09893059407405], -[-0.3219815137835, 0.09930898567123], -[-0.3168624874341, 0.09967955993272], -[-0.3117475225064, 0.1000423972079], -[-0.3066365611943, 0.1003975774194], -[-0.3015295454841, 0.100745180025], -[-0.2964264171524, 0.101085283981], -[-0.2913271177628, 0.1014179677054], -[-0.2862315886644, 0.1017433090421], -[-0.2811397709884, 0.1020613852256], -[-0.2760516056454, 0.1023722728463], -[-0.2709670333241, 0.1026760478158], -[-0.2658859944874, 0.102972785334], -[-0.2608084293707, 0.1032625598554], -[-0.2557342779793, 0.1035454450566], -[-0.2506634800865, 0.1038215138043], -[-0.2455959752315, 0.1040908381235], -[-0.2405317027173, 0.1043534891667], -[-0.2354706016091, 0.1046095371829], -[-0.230412610733, 0.1048590514874], -[-0.2253576686745, 0.1051021004327], -[-0.2203057137772, 0.1053387513786], -[-0.2152566841426, 0.1055690706638], -[-0.2102105176289, 0.1057931235776], -[-0.2051671518511, 0.1060109743319], -[-0.2001265241805, 0.1062226860342], -[-0.1950885717453, 0.1064283206602], -[-0.190053231431, 0.1066279390278], -[-0.1850204398811, 0.1068216007709], -[-0.1799901334983, 0.1070093643141], -[-0.1749622484459, 0.1071912868472], -[-0.1699367206492, 0.1073674243015], -[-0.1649134857981, 0.1075378313248], -[-0.1598924793488, 0.1077025612586], -[-0.1548736365268, 0.1078616661147], -[-0.1498568923299, 0.1080151965527], -[-0.1448421815313, 0.1081632018578], -[-0.1398294386829, 0.1083057299198], -[-0.13481859812, 0.1084428272115], -[-0.1298095939646, 0.1085745387689], -[-0.1248023601304, 0.1087009081711], -[-0.1197968303276, 0.1088219775207], -[-0.1147929380679, 0.1089377874258], -[-0.1097906166698, 0.1090483769814], -[-0.1047897992643, 0.1091537837523], -[-0.09979041880116, 0.1092540437557], -[-0.09479240805478, 0.1093491914458], -[-0.08979569963082, 0.1094392596975], -[-0.08480022597295, 0.1095242797919], -[-0.07980591936985, 0.1096042814021], -[-0.07481271196242, 0.1096792925793], -[-0.06982053575128, 0.1097493397406], -[-0.06482932260439, 0.1098144476563], -[-0.05983900426495, 0.1098746394388], -[-0.05484951235953, 0.1099299365318], -[-0.04986077840626, 0.1099803587004], -[-0.04487273382325, 0.1100259240223], -[-0.03988530993723, 0.1100666488788], -[-0.03489843799223, 0.1101025479475], -[-0.02991204915844, 0.1101336341955], -[-0.0249260745412, 0.1101599188733], -[-0.01994044519006, 0.1101814115094], -[-0.01495509210795, 0.1101981199061], -[-0.009969946260397, 0.1102100501354], -[-0.004984938584851, 0.1102172065367], -[-3.856634304484e-14, 0.1102195917143], -[0.004984938584851, 0.1102172065367], -[0.009969946260397, 0.1102100501354], -[0.01495509210795, 0.1101981199061], -[0.01994044519006, 0.1101814115094], -[0.0249260745412, 0.1101599188733], -[0.02991204915844, 0.1101336341955], -[0.03489843799223, 0.1101025479475], -[0.03988530993723, 0.1100666488788], -[0.04487273382325, 0.1100259240223], -[0.04986077840626, 0.1099803587004], -[0.05484951235953, 0.1099299365318], -[0.05983900426494, 0.1098746394388], -[0.06482932260438, 0.1098144476563], -[0.06982053575128, 0.1097493397406], -[0.07481271196242, 0.1096792925793], -[0.07980591936985, 0.1096042814021], -[0.08480022597295, 0.1095242797919], -[0.08979569963082, 0.1094392596975], -[0.09479240805478, 0.1093491914458], -[0.09979041880116, 0.1092540437557], -[0.1047897992643, 0.1091537837523], -[0.1097906166698, 0.1090483769814], -[0.1147929380679, 0.1089377874258], -[0.1197968303276, 0.1088219775207], -[0.1248023601304, 0.1087009081711], -[0.1298095939646, 0.1085745387689], -[0.13481859812, 0.1084428272115], -[0.1398294386829, 0.1083057299198], -[0.1448421815313, 0.1081632018578], -[0.14985689233, 0.1080151965527], -[0.1548736365268, 0.1078616661147], -[0.1598924793488, 0.1077025612586], -[0.1649134857981, 0.1075378313248], -[0.1699367206492, 0.1073674243015], -[0.1749622484459, 0.1071912868472], -[0.1799901334983, 0.1070093643141], -[0.1850204398811, 0.1068216007709], -[0.190053231431, 0.1066279390278], -[0.1950885717453, 0.1064283206602], -[0.2001265241805, 0.1062226860342], -[0.2051671518511, 0.1060109743319], -[0.2102105176289, 0.1057931235776], -[0.2152566841426, 0.1055690706638], -[0.2203057137772, 0.1053387513786], -[0.2253576686745, 0.1051021004327], -[0.230412610733, 0.1048590514874], -[0.2354706016091, 0.1046095371829], -[0.2405317027173, 0.1043534891667], -[0.2455959752315, 0.1040908381235], -[0.2506634800865, 0.1038215138043], -[0.2557342779793, 0.1035454450566], -[0.2608084293707, 0.1032625598554], -[0.2658859944874, 0.102972785334], -[0.2709670333241, 0.1026760478158], -[0.2760516056454, 0.1023722728463], -[0.2811397709883, 0.1020613852256], -[0.2862315886644, 0.1017433090421], -[0.2913271177628, 0.1014179677054], -[0.2964264171524, 0.101085283981], -[0.3015295454841, 0.100745180025], -[0.3066365611943, 0.1003975774194], -[0.3117475225064, 0.1000423972079], -[0.3168624874341, 0.09967955993272], -[0.3219815137835, 0.09930898567123], -[0.3271046591554, 0.09893059407405], -[0.3322319809476, 0.09854430440328], -[0.3373635363567, 0.09815003557148], -[0.3424993823801, 0.09774770618135], -[0.3476395758172, 0.09733723456607], -[0.352784173271, 0.09691853883028], -[0.3579332311487, 0.09649153689184], -[0.3630868056625, 0.09605614652421], -[0.3682449528293, 0.09561228539963], -[-0.365439476281, 0.1004715133207], -[-0.3602832719135, 0.1009080043254], -[-0.3551317452205, 0.1013361107481], -[-0.3499848391053, 0.1017559142513], -[-0.3448424962308, 0.1021674964148], -[-0.3397046590199, 0.1025709386927], -[-0.3345712696568, 0.1029663223703], -[-0.3294422700863, 0.1033537285221], -[-0.3243176020143, 0.1037332379703], -[-0.3191972069068, 0.1041049312438], -[-0.314081025989, 0.1044688885389], -[-0.3089690002454, 0.1048251896783], -[-0.3038610704173, 0.1051739140736], -[-0.2987571770023, 0.1055151406863], -[-0.2936572602526, 0.1058489479899], -[-0.2885612601738, 0.1061754139334], -[-0.2834691165227, 0.1064946159041], -[-0.2783807688066, 0.1068066306919], -[-0.2732961562808, 0.1071115344538], -[-0.2682152179477, 0.1074094026787], -[-0.2631378925547, 0.1077003101534], -[-0.2580641185934, 0.1079843309282], -[-0.2529938342974, 0.1082615382839], -[-0.2479269776418, 0.1085320046986], -[-0.2428634863416, 0.1087958018155], -[-0.2378032978507, 0.1090530004108], -[-0.2327463493613, 0.1093036703621], -[-0.2276925778033, 0.1095478806179], -[-0.2226419198433, 0.1097856991666], -[-0.2175943118852, 0.1100171930065], -[-0.2125496900693, 0.1102424281166], -[-0.2075079902733, 0.1104614694269], -[-0.202469148112, 0.1106743807903], -[-0.1974330989389, 0.1108812249538], -[-0.1923997778462, 0.1110820635315], -[-0.1873691196668, 0.1112769569766], -[-0.1823410589755, 0.1114659645553], -[-0.1773155300909, 0.1116491443199], -[-0.1722924670775, 0.1118265530835], -[-0.1672718037478, 0.1119982463942], -[-0.1622534736658, 0.112164278511], -[-0.1572374101488, 0.1123247023786], -[-0.152223546272, 0.1124795696044], -[-0.1472118148711, 0.1126289304347], -[-0.1422021485464, 0.1127728337324], -[-0.1371944796676, 0.1129113269548], -[-0.1321887403776, 0.1130444561315], -[-0.1271848625977, 0.1131722658442], -[-0.1221827780324, 0.1132947992056], -[-0.1171824181752, 0.1134120978401], -[-0.1121837143139, 0.113524201864], -[-0.1071865975369, 0.1136311498676], -[-0.102190998739, 0.1137329788968], -[-0.09719684862846, 0.113829724436], -[-0.09220407773328, 0.1139214203915], -[-0.08721261640857, 0.1140080990753], -[-0.08222239484367, 0.1140897911906], -[-0.07723334306969, 0.1141665258165], -[-0.07224539096731, 0.1142383303945], -[-0.06725846827467, 0.1143052307157], -[-0.06227250459561, 0.1143672509081], -[-0.057287429408, 0.1144244134254], -[-0.05230317207229, 0.1144767390359], -[-0.04731966184034, 0.1145242468128], -[-0.04233682786417, 0.1145669541249], -[-0.0373545992051, 0.1146048766283], -[-0.03237290484291, 0.1146380282586], -[-0.0273916736851, 0.1146664212244], -[-0.02241083457639, 0.1146900660012], -[-0.01743031630812, 0.1147089713266], -[-0.01245004762791, 0.1147231441954], -[-0.007469957249275, 0.114732589857], -[-0.002489973861358, 0.1147373118124], -[0.002489973861358, 0.1147373118124], -[0.007469957249274, 0.114732589857], -[0.01245004762791, 0.1147231441954], -[0.01743031630812, 0.1147089713266], -[0.02241083457639, 0.1146900660012], -[0.0273916736851, 0.1146664212244], -[0.03237290484291, 0.1146380282586], -[0.0373545992051, 0.1146048766283], -[0.04233682786417, 0.1145669541249], -[0.04731966184034, 0.1145242468128], -[0.05230317207229, 0.1144767390359], -[0.05728742940799, 0.1144244134254], -[0.0622725045956, 0.1143672509081], -[0.06725846827467, 0.1143052307157], -[0.07224539096731, 0.1142383303946], -[0.07723334306969, 0.1141665258165], -[0.08222239484367, 0.1140897911906], -[0.08721261640857, 0.1140080990753], -[0.09220407773328, 0.1139214203915], -[0.09719684862846, 0.113829724436], -[0.102190998739, 0.1137329788968], -[0.1071865975369, 0.1136311498676], -[0.1121837143139, 0.113524201864], -[0.1171824181752, 0.1134120978401], -[0.1221827780324, 0.1132947992056], -[0.1271848625977, 0.1131722658442], -[0.1321887403776, 0.1130444561315], -[0.1371944796676, 0.1129113269548], -[0.1422021485464, 0.1127728337324], -[0.1472118148711, 0.1126289304347], -[0.152223546272, 0.1124795696044], -[0.1572374101489, 0.1123247023786], -[0.1622534736658, 0.112164278511], -[0.1672718037478, 0.1119982463942], -[0.1722924670775, 0.1118265530835], -[0.1773155300909, 0.1116491443199], -[0.1823410589755, 0.1114659645553], -[0.1873691196668, 0.1112769569766], -[0.1923997778462, 0.1110820635315], -[0.1974330989389, 0.1108812249538], -[0.202469148112, 0.1106743807903], -[0.2075079902733, 0.1104614694269], -[0.2125496900693, 0.1102424281166], -[0.2175943118852, 0.1100171930065], -[0.2226419198433, 0.1097856991666], -[0.2276925778033, 0.1095478806179], -[0.2327463493613, 0.1093036703621], -[0.2378032978507, 0.1090530004108], -[0.2428634863416, 0.1087958018155], -[0.2479269776418, 0.1085320046986], -[0.2529938342974, 0.1082615382839], -[0.2580641185934, 0.1079843309282], -[0.2631378925547, 0.1077003101534], -[0.2682152179477, 0.1074094026787], -[0.2732961562808, 0.1071115344538], -[0.2783807688066, 0.1068066306919], -[0.2834691165227, 0.1064946159041], -[0.2885612601738, 0.1061754139334], -[0.2936572602526, 0.1058489479899], -[0.2987571770023, 0.1055151406863], -[0.3038610704173, 0.1051739140736], -[0.3089690002454, 0.1048251896783], -[0.314081025989, 0.1044688885389], -[0.3191972069068, 0.1041049312439], -[0.3243176020143, 0.1037332379703], -[0.3294422700863, 0.1033537285221], -[0.3345712696568, 0.1029663223703], -[0.3397046590199, 0.1025709386927], -[0.3448424962308, 0.1021674964148], -[0.3499848391053, 0.1017559142513], -[0.3551317452205, 0.1013361107481], -[0.3602832719135, 0.1009080043254], -[0.365439476281, 0.1004715133207], -[-0.3626324582327, 0.1053334111982], -[-0.3574783582878, 0.1057624919262], -[-0.352329039524, 0.1061832744314], -[-0.3471844437259, 0.1065958397662], -[-0.3420445123932, 0.1070002689184], -[-0.3369091867434, 0.1073966427676], -[-0.3317784077128, 0.1077850420417], -[-0.3266521159577, 0.1081655472743], -[-0.3215302518551, 0.1085382387634], -[-0.3164127555035, 0.1089031965293], -[-0.3112995667225, 0.1092605002746], -[-0.3061906250535, 0.1096102293438], -[-0.3010858697591, 0.1099524626838], -[-0.2959852398229, 0.1102872788048], -[-0.2908886739489, 0.1106147557426], -[-0.2857961105613, 0.1109349710199], -[-0.2807074878035, 0.1112480016098], -[-0.2756227435377, 0.1115539238985], -[-0.270541815344, 0.1118528136493], -[-0.2654646405201, 0.1121447459672], -[-0.2603911560802, 0.1124297952631], -[-0.2553212987548, 0.1127080352197], -[-0.2502550049901, 0.1129795387568], -[-0.2451922109475, 0.113244377998], -[-0.2401328525034, 0.1135026242371], -[-0.2350768652492, 0.1137543479056], -[-0.2300241844911, 0.1139996185404], -[-0.2249747452501, 0.1142385047516], -[-0.219928482263, 0.1144710741916], -[-0.2148853299823, 0.1146973935241], -[-0.2098452225773, 0.1149175283934], -[-0.2048080939349, 0.1151315433948], -[-0.1997738776611, 0.1153395020447], -[-0.1947425070822, 0.115541466752], -[-0.1897139152465, 0.1157374987893], -[-0.1846880349265, 0.1159276582649], -[-0.179664798621, 0.1161120040951], -[-0.1746441385575, 0.1162905939773], -[-0.1696259866952, 0.1164634843633], -[-0.1646102747281, 0.1166307304334], -[-0.159596934088, 0.1167923860704], -[-0.1545858959485, 0.1169485038351], -[-0.149577091229, 0.1170991349416], -[-0.1445704505986, 0.1172443292331], -[-0.139565904481, 0.1173841351589], -[-0.1345633830588, 0.1175185997517], -[-0.1295628162793, 0.1176477686047], -[-0.1245641338594, 0.1177716858509], -[-0.1195672652915, 0.1178903941414], -[-0.1145721398495, 0.1180039346254], -[-0.1095786865948, 0.1181123469304], -[-0.1045868343834, 0.1182156691433], -[-0.09959651187184, 0.1183139377916], -[-0.09460764752518, 0.1184071878262], -[-0.08962016962368, 0.1184954526042], -[-0.08463400627067, 0.1185787638727], -[-0.07964908540027, 0.1186571517531], -[-0.07466533478543, 0.1187306447265], -[-0.06968268204623, 0.1187992696197], -[-0.06470105465833, 0.1188630515919], -[-0.05972037996165, 0.118922014122], -[-0.05474058516926, 0.1189761789975], -[-0.04976159737638, 0.1190255663032], -[-0.04478334356966, 0.1190701944113], -[-0.03980575063649, 0.1191100799722], -[-0.03482874537455, 0.1191452379063], -[-0.02985225450142, 0.1191756813963], -[-0.02487620466437, 0.1192014218807], -[-0.01990052245018, 0.119222469048], -[-0.01492513439511, 0.1192388308319], -[-0.009949966994898, 0.1192505134071], -[-0.004974946714864, 0.1192575211866], -[-4.649616915398e-15, 0.1192598568187], -[0.004974946714864, 0.1192575211866], -[0.009949966994898, 0.1192505134071], -[0.01492513439511, 0.1192388308319], -[0.01990052245018, 0.119222469048], -[0.02487620466437, 0.1192014218807], -[0.02985225450142, 0.1191756813963], -[0.03482874537455, 0.1191452379063], -[0.03980575063649, 0.1191100799722], -[0.04478334356966, 0.1190701944113], -[0.04976159737638, 0.1190255663032], -[0.05474058516926, 0.1189761789975], -[0.05972037996165, 0.118922014122], -[0.06470105465833, 0.1188630515919], -[0.06968268204623, 0.1187992696197], -[0.07466533478543, 0.1187306447265], -[0.07964908540027, 0.1186571517531], -[0.08463400627067, 0.1185787638727], -[0.08962016962368, 0.1184954526042], -[0.09460764752518, 0.1184071878262], -[0.09959651187184, 0.1183139377916], -[0.1045868343834, 0.1182156691433], -[0.1095786865948, 0.1181123469304], -[0.1145721398495, 0.1180039346254], -[0.1195672652915, 0.1178903941414], -[0.1245641338594, 0.1177716858509], -[0.1295628162793, 0.1176477686047], -[0.1345633830588, 0.1175185997517], -[0.139565904481, 0.1173841351589], -[0.1445704505986, 0.1172443292331], -[0.149577091229, 0.1170991349416], -[0.1545858959485, 0.1169485038351], -[0.159596934088, 0.1167923860704], -[0.1646102747281, 0.1166307304334], -[0.1696259866952, 0.1164634843633], -[0.1746441385575, 0.1162905939773], -[0.179664798621, 0.1161120040951], -[0.1846880349265, 0.1159276582649], -[0.1897139152465, 0.1157374987893], -[0.1947425070822, 0.115541466752], -[0.1997738776611, 0.1153395020447], -[0.2048080939349, 0.1151315433948], -[0.2098452225773, 0.1149175283934], -[0.2148853299823, 0.1146973935241], -[0.219928482263, 0.1144710741916], -[0.2249747452501, 0.1142385047516], -[0.2300241844911, 0.1139996185404], -[0.2350768652492, 0.1137543479056], -[0.2401328525034, 0.1135026242371], -[0.2451922109475, 0.113244377998], -[0.2502550049901, 0.1129795387568], -[0.2553212987548, 0.1127080352197], -[0.2603911560802, 0.1124297952631], -[0.2654646405201, 0.1121447459672], -[0.270541815344, 0.1118528136493], -[0.2756227435377, 0.1115539238985], -[0.2807074878035, 0.1112480016098], -[0.2857961105613, 0.1109349710199], -[0.2908886739489, 0.1106147557426], -[0.2959852398229, 0.1102872788048], -[0.3010858697591, 0.1099524626838], -[0.3061906250535, 0.1096102293438], -[0.3112995667225, 0.1092605002746], -[0.3164127555035, 0.1089031965293], -[0.3215302518551, 0.1085382387634], -[0.3266521159577, 0.1081655472743], -[0.3317784077128, 0.1077850420417], -[0.3369091867434, 0.1073966427676], -[0.3420445123932, 0.1070002689184], -[0.3471844437259, 0.1065958397662], -[0.352329039524, 0.1061832744314], -[0.3574783582878, 0.1057624919262], -[0.3626324582327, 0.1053334111982], -[-0.35982399086, 0.1101978193791], -[-0.3546721557704, 0.1106194509555], -[-0.3495252038573, 0.1110328708906], -[-0.3443830757478, 0.1114381596818], -[-0.3392457117424, 0.1118353977784], -[-0.3341130518173, 0.1122246655383], -[-0.3289850356274, 0.1126060431841], -[-0.3238616025079, 0.1129796107598], -[-0.3187426914763, 0.1133454480889], -[-0.3136282412335, 0.1137036347321], -[-0.3085181901649, 0.1140542499472], -[-0.3034124763423, 0.1143973726464], -[-0.2983110375232, 0.1147330813583], -[-0.2932138111526, 0.1150614541871], -[-0.2881207343627, 0.1153825687738], -[-0.283031743974, 0.1156965022582], -[-0.2779467764947, 0.1160033312403], -[-0.2728657681217, 0.1163031317431], -[-0.2677886547405, 0.1165959791758], -[-0.2627153719254, 0.1168819482971], -[-0.2576458549399, 0.1171611131792], -[-0.2525800387368, 0.1174335471727], -[-0.2475178579587, 0.1176993228713], -[-0.2424592469385, 0.1179585120772], -[-0.2374041396996, 0.1182111857671], -[-0.2323524699572, 0.1184574140588], -[-0.2273041711184, 0.118697266178], -[-0.2222591762836, 0.1189308104253], -[-0.2172174182475, 0.1191581141444], -[-0.2121788295007, 0.1193792436903], -[-0.2071433422308, 0.1195942643978], -[-0.2021108883243, 0.1198032405509], -[-0.1970813993685, 0.1200062353525], -[-0.1920548066541, 0.1202033108943], -[-0.1870310411769, 0.1203945281276], -[-0.1820100336411, 0.1205799468347], -[-0.1769917144619, 0.1207596255999], -[-0.1719760137688, 0.120933621782], -[-0.166962861409, 0.1211019914871], -[-0.1619521869514, 0.1212647895413], -[-0.15694391969, 0.1214220694648], -[-0.151937988649, 0.1215738834461], -[-0.1469343225868, 0.1217202823165], -[-0.1419328500009, 0.1218613155258], -[-0.1369334991335, 0.1219970311182], -[-0.1319361979763, 0.1221274757088], -[-0.1269408742769, 0.1222526944609], -[-0.121947455544, 0.1223727310635], -[-0.1169558690546, 0.1224876277104], -[-0.1119660418596, 0.1225974250785], -[-0.1069779007916, 0.1227021623083], -[-0.1019913724712, 0.1228018769841], -[-0.09700638331473, 0.1228966051151], -[-0.09202285954187, 0.1229863811175], -[-0.08704072718345, 0.1230712377971], -[-0.08205991208958, 0.1231512063327], -[-0.07708033993799, 0.1232263162603], -[-0.07210193624259, 0.1232965954583], -[-0.06712462636228, 0.1233620701327], -[-0.06214833550992, 0.1234227648042], -[-0.05717298876154, 0.1234787022957], -[-0.05219851106565, 0.1235299037199], -[-0.04722482725288, 0.1235763884692], -[-0.0422518620456, 0.1236181742051], -[-0.03727954006779, 0.1236552768493], -[-0.03230778585505, 0.1236877105754], -[-0.0273365238647, 0.1237154878015], -[-0.02236567848599, 0.1237386191838], -[-0.01739517405037, 0.123757113611], -[-0.01242493484198, 0.1237709781995], -[-0.007454885108019, 0.1237802182901], -[-0.002484949069283, 0.1237848374446], -[0.002484949069283, 0.1237848374446], -[0.00745488510802, 0.1237802182901], -[0.01242493484198, 0.1237709781995], -[0.01739517405037, 0.123757113611], -[0.02236567848598, 0.1237386191838], -[0.0273365238647, 0.1237154878015], -[0.03230778585505, 0.1236877105754], -[0.03727954006779, 0.1236552768493], -[0.0422518620456, 0.1236181742051], -[0.04722482725288, 0.1235763884692], -[0.05219851106565, 0.1235299037199], -[0.05717298876154, 0.1234787022957], -[0.06214833550992, 0.1234227648042], -[0.06712462636228, 0.1233620701327], -[0.07210193624259, 0.1232965954583], -[0.07708033993799, 0.1232263162603], -[0.08205991208958, 0.1231512063327], -[0.08704072718345, 0.1230712377971], -[0.09202285954187, 0.1229863811175], -[0.09700638331472, 0.1228966051151], -[0.1019913724712, 0.1228018769841], -[0.1069779007916, 0.1227021623083], -[0.1119660418596, 0.1225974250785], -[0.1169558690546, 0.1224876277104], -[0.121947455544, 0.1223727310635], -[0.1269408742769, 0.1222526944609], -[0.1319361979763, 0.1221274757088], -[0.1369334991335, 0.1219970311182], -[0.1419328500009, 0.1218613155258], -[0.1469343225868, 0.1217202823165], -[0.151937988649, 0.1215738834461], -[0.15694391969, 0.1214220694648], -[0.1619521869514, 0.1212647895413], -[0.166962861409, 0.1211019914871], -[0.1719760137688, 0.120933621782], -[0.1769917144619, 0.1207596255999], -[0.1820100336411, 0.1205799468347], -[0.1870310411769, 0.1203945281276], -[0.1920548066541, 0.1202033108943], -[0.1970813993685, 0.1200062353525], -[0.2021108883243, 0.1198032405509], -[0.2071433422308, 0.1195942643978], -[0.2121788295007, 0.1193792436903], -[0.2172174182475, 0.1191581141444], -[0.2222591762836, 0.1189308104253], -[0.2273041711184, 0.118697266178], -[0.2323524699572, 0.1184574140588], -[0.2374041396996, 0.1182111857671], -[0.2424592469385, 0.1179585120772], -[0.2475178579587, 0.1176993228713], -[0.2525800387368, 0.1174335471727], -[0.2576458549399, 0.1171611131792], -[0.2627153719254, 0.1168819482971], -[0.2677886547405, 0.1165959791758], -[0.2728657681217, 0.1163031317431], -[0.2779467764947, 0.1160033312403], -[0.283031743974, 0.1156965022582], -[0.2881207343627, 0.1153825687738], -[0.2932138111526, 0.1150614541871], -[0.2983110375232, 0.1147330813583], -[0.3034124763423, 0.1143973726464], -[0.3085181901649, 0.1140542499472], -[0.3136282412336, 0.113703634732], -[0.3187426914763, 0.1133454480889], -[0.3238616025079, 0.1129796107598], -[0.3289850356274, 0.1126060431841], -[0.3341130518173, 0.1122246655383], -[0.3392457117424, 0.1118353977784], -[0.3443830757478, 0.1114381596818], -[0.3495252038573, 0.1110328708906], -[0.3546721557704, 0.1106194509555], -[0.35982399086, 0.1101978193791], -[-0.3570141660612, 0.1150645786909], -[-0.351864755103, 0.1154787235183], -[-0.3467203278086, 0.1158847435467], -[-0.3415808236105, 0.1162827187719], -[-0.3364461815737, 0.1166727291583], -[-0.3313163403991, 0.1170548545945], -[-0.326191238427, 0.1174291748487], -[-0.3210708136398, 0.1177957695259], -[-0.315955003665, 0.1181547180248], -[-0.3108437457769, 0.1185060994951], -[-0.3057369768995, 0.1188499927963], -[-0.3006346336076, 0.1191864764558], -[-0.2955366521287, 0.1195156286288], -[-0.2904429683447, 0.1198375270577], -[-0.285353517793, 0.1201522490323], -[-0.280268235668, 0.1204598713512], -[-0.2751870568219, 0.1207604702825], -[-0.2701099157662, 0.1210541215259], -[-0.2650367466724, 0.1213409001749], -[-0.2599674833734, 0.1216208806797], -[-0.2549020593644, 0.1218941368103], -[-0.2498404078041, 0.1221607416205], -[-0.2447824615158, 0.1224207674115], -[-0.2397281529886, 0.1226742856973], -[-0.2346774143791, 0.1229213671692], -[-0.2296301775122, 0.1231620816617], -[-0.2245863738834, 0.1233964981185], -[-0.2195459346601, 0.1236246845588], -[-0.2145087906834, 0.1238467080446], -[-0.2094748724707, 0.1240626346477], -[-0.2044441102175, 0.124272529418], -[-0.1994164337997, 0.1244764563514], -[-0.1943917727769, 0.1246744783592], -[-0.1893700563948, 0.1248666572368], -[-0.1843512135883, 0.125053053634], -[-0.179335172985, 0.1252337270251], -[-0.1743218629091, 0.1254087356799], -[-0.1693112113846, 0.1255781366347], -[-0.1643031461399, 0.1257419856643], -[-0.1592975946121, 0.1259003372548], -[-0.1542944839515, 0.1260532445759], -[-0.1492937410267, 0.126200759455], -[-0.1442952924298, 0.126342932351], -[-0.1392990644815, 0.1264798123292], -[-0.1343049832377, 0.1266114470364], -[-0.1293129744945, 0.1267378826771], -[-0.1243229637953, 0.1268591639898], -[-0.1193348764371, 0.1269753342246], -[-0.1143486374772, 0.1270864351209], -[-0.1093641717408, 0.1271925068859], -[-0.1043814038279, 0.1272935881744], -[-0.09940025812129, 0.1273897160681], -[-0.09442065879424, 0.1274809260573], -[-0.08944252981891, 0.1275672520215], -[-0.08446579497463, 0.1276487262127], -[-0.07949037785657, 0.1277253792377], -[-0.0745162018846, 0.1277972400425], -[-0.06954319031247, 0.1278643358967], -[-0.06457126623702, 0.1279266923796], -[-0.05960035260777, 0.1279843333662], -[-0.05463037223656, 0.1280372810146], -[-0.04966124780748, 0.1280855557545], -[-0.04469290188689, 0.1281291762759], -[-0.03972525693359, 0.1281681595192], -[-0.03475823530921, 0.1282025206663], -[-0.02979175928866, 0.1282322731323], -[-0.0248257510707, 0.1282574285581], -[-0.01986013278864, 0.1282779968048], -[-0.0148948265211, 0.1282939859473], -[-0.009929754302901, 0.128305402271], -[-0.004964838135902, 0.1283122502678], -[3.184669120136e-17, 0.1283145326338], -[0.004964838135903, 0.1283122502678], -[0.009929754302903, 0.128305402271], -[0.0148948265211, 0.1282939859473], -[0.01986013278864, 0.1282779968048], -[0.0248257510707, 0.1282574285581], -[0.02979175928866, 0.1282322731323], -[0.03475823530921, 0.1282025206663], -[0.03972525693359, 0.1281681595192], -[0.04469290188689, 0.1281291762759], -[0.04966124780748, 0.1280855557545], -[0.05463037223656, 0.1280372810146], -[0.05960035260777, 0.1279843333662], -[0.06457126623702, 0.1279266923796], -[0.06954319031247, 0.1278643358967], -[0.0745162018846, 0.1277972400425], -[0.07949037785657, 0.1277253792377], -[0.08446579497463, 0.1276487262127], -[0.08944252981891, 0.1275672520215], -[0.09442065879424, 0.1274809260573], -[0.09940025812128, 0.1273897160681], -[0.1043814038279, 0.1272935881744], -[0.1093641717408, 0.1271925068859], -[0.1143486374772, 0.1270864351209], -[0.1193348764371, 0.1269753342246], -[0.1243229637953, 0.1268591639898], -[0.1293129744945, 0.1267378826771], -[0.1343049832377, 0.1266114470364], -[0.1392990644815, 0.1264798123292], -[0.1442952924298, 0.126342932351], -[0.1492937410267, 0.126200759455], -[0.1542944839515, 0.1260532445759], -[0.1592975946121, 0.1259003372548], -[0.1643031461399, 0.1257419856643], -[0.1693112113846, 0.1255781366347], -[0.1743218629091, 0.1254087356799], -[0.179335172985, 0.1252337270252], -[0.1843512135883, 0.125053053634], -[0.1893700563948, 0.1248666572368], -[0.1943917727769, 0.1246744783592], -[0.1994164337997, 0.1244764563514], -[0.2044441102175, 0.124272529418], -[0.2094748724707, 0.1240626346477], -[0.2145087906834, 0.1238467080446], -[0.2195459346601, 0.1236246845588], -[0.2245863738834, 0.1233964981185], -[0.2296301775122, 0.1231620816617], -[0.2346774143791, 0.1229213671692], -[0.2397281529886, 0.1226742856973], -[0.2447824615158, 0.1224207674115], -[0.2498404078041, 0.1221607416205], -[0.2549020593644, 0.1218941368103], -[0.2599674833734, 0.1216208806797], -[0.2650367466724, 0.1213409001749], -[0.2701099157662, 0.1210541215259], -[0.2751870568219, 0.1207604702825], -[0.280268235668, 0.1204598713512], -[0.285353517793, 0.1201522490323], -[0.2904429683447, 0.1198375270577], -[0.2955366521287, 0.1195156286288], -[0.3006346336076, 0.1191864764558], -[0.3057369768995, 0.1188499927963], -[0.3108437457769, 0.1185060994951], -[0.315955003665, 0.1181547180248], -[0.3210708136398, 0.1177957695259], -[0.326191238427, 0.1174291748487], -[0.3313163403991, 0.1170548545945], -[0.3364461815737, 0.1166727291583], -[0.3415808236105, 0.1162827187719], -[0.3467203278086, 0.1158847435467], -[0.351864755103, 0.1154787235183], -[0.3570141660612, 0.1150645786909], -[-0.3542032204846, 0.1199330194022], -[-0.349056246802, 0.1203401521635], -[-0.3439145007741, 0.1207387362597], -[-0.338777775594, 0.1211293622454], -[-0.3336460090562, 0.1215121096523], -[-0.3285191385525, 0.1218870579513], -[-0.3233971010764, 0.1222542865075], -[-0.3182798332267, 0.1226138745365], -[-0.313167271211, 0.1229659010608], -[-0.308059350849, 0.1233104448673], -[-0.3029560075754, 0.1236475844641], -[-0.2978571764425, 0.1239773980396], -[-0.2927627921227, 0.1242999634204], -[-0.2876727889112, 0.1246153580308], -[-0.2825871007278, 0.1249236588523], -[-0.2775056611189, 0.1252249423836], -[-0.2724284032602, 0.1255192846014], -[-0.2673552599575, 0.1258067609217], -[-0.26228616365, 0.1260874461603], -[-0.2572210464109, 0.126361414496], -[-0.2521598399501, 0.1266287394325], -[-0.2471024756155, 0.1268894937613], -[-0.2420488843957, 0.1271437495252], -[-0.2369989969213, 0.1273915779819], -[-0.2319527434673, 0.1276330495688], -[-0.2269100539556, 0.1278682338668], -[-0.2218708579568, 0.1280971995667], -[-0.2168350846928, 0.1283200144338], -[-0.2118026630399, 0.1285367452746], -[-0.2067735215309, 0.1287474579032], -[-0.2017475883585, 0.1289522171082], -[-0.1967247913784, 0.1291510866205], -[-0.1917050581123, 0.1293441290811], -[-0.186688315752, 0.1295314060096], -[-0.1816744911627, 0.1297129777733], -[-0.1766635108875, 0.1298889035567], -[-0.1716553011512, 0.1300592413314], -[-0.1666497878651, 0.1302240478266], -[-0.1616468966315, 0.1303833785008], -[-0.156646552749, 0.1305372875124], -[-0.1516486812177, 0.1306858276931], -[-0.1466532067446, 0.1308290505198], -[-0.1416600537495, 0.1309670060885], -[-0.1366691463712, 0.1310997430884], -[-0.1316804084737, 0.1312273087761], -[-0.126693763653, 0.1313497489518], -[-0.1217091352436, 0.1314671079342], -[-0.1167264463264, 0.1315794285381], -[-0.1117456197353, 0.1316867520516], -[-0.1067665780656, 0.1317891182137], -[-0.1017892436815, 0.131886565194], -[-0.09681353872487, 0.1319791295717], -[-0.091839385123, 0.1320668463161], -[-0.08686670459794, 0.1321497487682], -[-0.08189541867517, 0.1322278686222], -[-0.07692544869292, 0.1323012359086], -[-0.07195671581151, 0.1323698789779], -[-0.06698914102304, 0.1324338244852], -[-0.0620226451612, 0.1324930973754], -[-0.05705714891132, 0.1325477208699], -[-0.05209257282061, 0.1325977164534], -[-0.04712883730851, 0.1326431038625], -[-0.04216586267726, 0.1326839010745], -[-0.03720356912262, 0.1327201242976], -[-0.03224187674469, 0.1327517879619], -[-0.02728070555886, 0.1327789047114], -[-0.0223199755069, 0.132801485397], -[-0.01735960646813, 0.1328195390701], -[-0.01239951827064, 0.1328330729782], -[-0.007439630702599, 0.1328420925603], -[-0.002479863523664, 0.1328466014442], -[0.002479863523664, 0.1328466014442], -[0.007439630702599, 0.1328420925603], -[0.01239951827064, 0.1328330729782], -[0.01735960646813, 0.1328195390701], -[0.0223199755069, 0.132801485397], -[0.02728070555886, 0.1327789047114], -[0.03224187674469, 0.1327517879619], -[0.03720356912262, 0.1327201242976], -[0.04216586267726, 0.1326839010745], -[0.04712883730851, 0.1326431038625], -[0.05209257282061, 0.1325977164534], -[0.05705714891132, 0.1325477208699], -[0.06202264516119, 0.1324930973754], -[0.06698914102304, 0.1324338244852], -[0.07195671581151, 0.1323698789779], -[0.07692544869292, 0.1323012359086], -[0.08189541867517, 0.1322278686222], -[0.08686670459793, 0.1321497487682], -[0.091839385123, 0.1320668463161], -[0.09681353872486, 0.1319791295717], -[0.1017892436815, 0.131886565194], -[0.1067665780656, 0.1317891182137], -[0.1117456197353, 0.1316867520516], -[0.1167264463264, 0.1315794285381], -[0.1217091352436, 0.1314671079342], -[0.126693763653, 0.1313497489518], -[0.1316804084737, 0.1312273087761], -[0.1366691463712, 0.1310997430884], -[0.1416600537495, 0.1309670060885], -[0.1466532067446, 0.1308290505198], -[0.1516486812177, 0.1306858276931], -[0.156646552749, 0.1305372875124], -[0.1616468966315, 0.1303833785008], -[0.1666497878651, 0.1302240478266], -[0.1716553011512, 0.1300592413314], -[0.1766635108875, 0.1298889035567], -[0.1816744911627, 0.1297129777733], -[0.186688315752, 0.1295314060096], -[0.1917050581123, 0.1293441290811], -[0.1967247913784, 0.1291510866205], -[0.2017475883585, 0.1289522171082], -[0.2067735215309, 0.1287474579032], -[0.2118026630399, 0.1285367452746], -[0.2168350846928, 0.1283200144338], -[0.2218708579568, 0.1280971995667], -[0.2269100539556, 0.1278682338668], -[0.2319527434674, 0.1276330495687], -[0.2369989969213, 0.1273915779819], -[0.2420488843957, 0.1271437495252], -[0.2471024756155, 0.1268894937613], -[0.2521598399501, 0.1266287394325], -[0.2572210464109, 0.126361414496], -[0.26228616365, 0.1260874461603], -[0.2673552599575, 0.1258067609217], -[0.2724284032602, 0.1255192846014], -[0.2775056611189, 0.1252249423836], -[0.2825871007278, 0.1249236588523], -[0.2876727889112, 0.1246153580308], -[0.2927627921227, 0.1242999634204], -[0.2978571764425, 0.1239773980396], -[0.3029560075754, 0.1236475844641], -[0.308059350849, 0.1233104448673], -[0.313167271211, 0.1229659010608], -[0.3182798332267, 0.1226138745365], -[0.3233971010764, 0.1222542865075], -[0.3285191385525, 0.1218870579513], -[0.3336460090562, 0.1215121096523], -[0.338777775594, 0.1211293622454], -[0.3439145007741, 0.1207387362597], -[0.349056246802, 0.1203401521635], -[0.3542032210401, 0.1199330187799], -[-0.3513908105047, 0.1248045162238], -[-0.3462467211764, 0.1252035798516], -[-0.3411078119752, 0.1255946932974], -[-0.335974019836, 0.1259779357141], -[-0.3308452812487, 0.126353386253], -[-0.3257215322631, 0.1267211240184], -[-0.3206027084944, 0.1270812280224], -[-0.3154887451274, 0.1274337771405], -[-0.3103795769212, 0.1277788500676], -[-0.3052751382127, 0.1281165252747], -[-0.3001753629209, 0.1284468809654], -[-0.2950801845501, 0.1287699950339], -[-0.2899895361932, 0.1290859450229], -[-0.2849033505353, 0.1293948080817], -[-0.279821559856, 0.1296966609254], -[-0.274744096033, 0.1299915797943], -[-0.2696708905445, 0.1302796404137], -[-0.2646018744718, 0.130560917954], -[-0.2595369785024, 0.1308354869919], -[-0.2544761329325, 0.131103421471], -[-0.2494192676693, 0.1313647946641], -[-0.2443663122343, 0.1316196791347], -[-0.2393171957654, 0.1318681467002], -[-0.23427184702, 0.1321102683942], -[-0.2292301943778, 0.1323461144304], -[-0.2241921658435, 0.1325757541663], -[-0.2191576890503, 0.1327992560676], -[-0.2141266912627, 0.1330166876731], -[-0.2090990993799, 0.1332281155597], -[-0.2040748399393, 0.1334336053083], -[-0.1990538391201, 0.13363322147], -[-0.1940360227471, 0.1338270275327], -[-0.1890213162949, 0.1340150858883], -[-0.184009644892, 0.1341974578004], -[-0.1790009333251, 0.1343742033724], -[-0.1739951060439, 0.1345453815164], -[-0.168992087166, 0.134711049922], -[-0.1639918004821, 0.1348712650267], -[-0.1589941694613, 0.1350260819856], -[-0.1539991172567, 0.1351755546429], -[-0.1490065667111, 0.1353197355029], -[-0.1440164403639, 0.1354586757026], -[-0.1390286604565, 0.1355924249842], -[-0.1340431489399, 0.1357210316682], -[-0.1290598274808, 0.1358445426283], -[-0.1240786174697, 0.1359630032652], -[-0.1190994400278, 0.1360764574826], -[-0.1141222160147, 0.1361849476633], -[-0.1091468660371, 0.1362885146459], -[-0.1041733104561, 0.1363871977027], -[-0.09920146939658, 0.1364810345177], -[-0.09423126275569, 0.1365700611663], -[-0.08926261021176, 0.1366543120953], -[-0.08429543123376, 0.1367338201034], -[-0.07932964509075, 0.1368086163231], -[-0.07436517086167, 0.1368787302035], -[-0.06940192744527, 0.1369441894936], -[-0.06443983357031, 0.1370050202266], -[-0.05947880780592, 0.1370612467053], -[-0.05451876857219, 0.1371128914885], -[-0.04955963415089, 0.1371599753781], -[-0.04460132269642, 0.1372025174069], -[-0.03964375224684, 0.1372405348286], -[-0.03468684073512, 0.1372740431069], -[-0.02973050600046, 0.1373030559075], -[-0.02477466579976, 0.13732758509], -[-0.01981923781918, 0.1373476407007], -[-0.0148641396858, 0.1373632309675], -[-0.009909288979336, 0.1373743622947], -[-0.004954603243933, 0.1373810392595], -[-1.321637684856e-14, 0.1373832646091], -[0.004954603243933, 0.1373810392595], -[0.009909288979336, 0.1373743622947], -[0.0148641396858, 0.1373632309675], -[0.01981923781918, 0.1373476407007], -[0.02477466579976, 0.13732758509], -[0.02973050600046, 0.1373030559075], -[0.03468684073513, 0.1372740431069], -[0.03964375224684, 0.1372405348286], -[0.04460132269642, 0.1372025174069], -[0.04955963415089, 0.1371599753781], -[0.05451876857219, 0.1371128914885], -[0.05947880780592, 0.1370612467053], -[0.06443983357031, 0.1370050202266], -[0.06940192744527, 0.1369441894936], -[0.07436517086167, 0.1368787302035], -[0.07932964509075, 0.1368086163231], -[0.08429543123378, 0.1367338201034], -[0.08926261021176, 0.1366543120953], -[0.09423126275569, 0.1365700611663], -[0.09920146939658, 0.1364810345177], -[0.1041733104561, 0.1363871977027], -[0.1091468660371, 0.1362885146459], -[0.1141222160147, 0.1361849476633], -[0.1190994400278, 0.1360764574826], -[0.1240786174697, 0.1359630032652], -[0.1290598274808, 0.1358445426283], -[0.1340431489399, 0.1357210316682], -[0.1390286604565, 0.1355924249842], -[0.1440164403639, 0.1354586757026], -[0.1490065667111, 0.1353197355029], -[0.1539991172567, 0.1351755546429], -[0.1589941694613, 0.1350260819856], -[0.1639918004821, 0.1348712650267], -[0.168992087166, 0.134711049922], -[0.1739951060439, 0.1345453815164], -[0.1790009333251, 0.1343742033724], -[0.184009644892, 0.1341974578004], -[0.1890213162949, 0.1340150858883], -[0.1940360227471, 0.1338270275327], -[0.1990538391201, 0.13363322147], -[0.2040748399393, 0.1334336053083], -[0.2090990993799, 0.1332281155597], -[0.2141266912627, 0.1330166876731], -[0.2191576890503, 0.1327992560676], -[0.2241921658435, 0.1325757541663], -[0.2292301943778, 0.1323461144304], -[0.23427184702, 0.1321102683942], -[0.2393171957654, 0.1318681467002], -[0.2443663122343, 0.1316196791347], -[0.2494192676693, 0.1313647946641], -[0.2544761329325, 0.131103421471], -[0.2595369785024, 0.1308354869919], -[0.2646018744718, 0.130560917954], -[0.2696708905445, 0.1302796404137], -[0.274744096033, 0.1299915797943], -[0.279821559856, 0.1296966609254], -[0.2849033505353, 0.1293948080817], -[0.2899895361932, 0.1290859450229], -[0.2950801845501, 0.1287699950339], -[0.3001753629209, 0.1284468809654], -[0.3052751382127, 0.1281165252747], -[0.3103795769212, 0.1277788500676], -[0.3154887451274, 0.1274337771405], -[0.3206027084944, 0.1270812280224], -[0.3257215322631, 0.1267211240184], -[0.3308452812487, 0.126353386253], -[0.335974019836, 0.1259779357141], -[0.3411078119752, 0.1255946932974], -[0.3462467211764, 0.1252035798516], -[0.3513908105047, 0.1248045162238], -[-0.3485775351512, 0.1296768786871], -[-0.3434362683455, 0.1300688499231], -[-0.3383003504753, 0.1304524593033], -[-0.333169644348, 0.1308282851619], -[-0.3280440851153, 0.1311964063209], -[-0.3229236074533, 0.1315569015689], -[-0.3178081455678, 0.1319098496146], -[-0.3126976332004, 0.1322553290422], -[-0.3075920036329, 0.1325934182669], -[-0.3024911896927, 0.1329241954905], -[-0.2973951237567, 0.133247738658], -[-0.2923037377564, 0.1335641254144], -[-0.2872169631814, 0.133873433062], -[-0.2821347310834, 0.1341757385181], -[-0.2770569720805, 0.134471118273], -[-0.2719836163601, 0.1347596483492], -[-0.2669145936832, 0.1350414042598], -[-0.2618498333871, 0.1353164609687], -[-0.2567892643898, 0.1355848928499], -[-0.2517328151923, 0.1358467736484], -[-0.2466804138829, 0.1361021764409], -[-0.2416319881401, 0.136351173597], -[-0.236587465236, 0.1365938367409], -[-0.2315467720402, 0.1368302367137], -[-0.2265098350227, 0.1370604435359], -[-0.2214765802581, 0.1372845263703], -[-0.2164469334291, 0.1375025534857], -[-0.2114208198303, 0.1377145922207], -[-0.2063981643722, 0.1379207089484], -[-0.2013788915854, 0.1381209690406], -[-0.196362925625, 0.1383154368339], -[-0.1913501902747, 0.1385041755951], -[-0.1863406089519, 0.1386872474875], -[-0.1813341047123, 0.138864713538], -[-0.1763306002549, 0.1390366336044], -[-0.1713300179278, 0.1392030663431], -[-0.1663322797329, 0.1393640691776], -[-0.1613373073323, 0.1395196982678], -[-0.1563450220541, 0.1396700084791], -[-0.1513553448987, 0.139815053353], -[-0.146368196545, 0.1399548850778], -[-0.1413834973576, 0.1400895544598], -[-0.1364011673935, 0.1402191108957], -[-0.1314211264095, 0.1403436023452], -[-0.1264432938698, 0.1404630753043], -[-0.1214675889535, 0.1405775747797], -[-0.1164939305631, 0.1406871442637], -[-0.1115222373327, 0.1407918257095], -[-0.1065524276364, 0.1408916595079], -[-0.1015844195972, 0.1409866844644], -[-0.09661813109644, 0.1410769377773], -[-0.0916534797828, 0.1411624550162], -[-0.08669038308207, 0.1412432701022], -[-0.08172875820699, 0.141319415288], -[-0.0767685221672, 0.1413909211395], -[-0.07180959177983, 0.1414578165185], -[-0.0668518836797, 0.1415201285654], -[-0.06189531433024, 0.141577882684], -[-0.05693980003434, 0.1416311025261], -[-0.0519852569455, 0.1416798099784], -[-0.04703160107905, 0.1417240251492], -[-0.04207874832368, 0.1417637663567], -[-0.03712661445297, 0.1417990501183], -[-0.03217511513714, 0.1418298911409], -[-0.02722416595494, 0.1418563023121], -[-0.02227368240558, 0.1418782946926], -[-0.01732357992082, 0.1418958775097], -[-0.01237377387713, 0.1419090581519], -[-0.007424179607866, 0.1419178421643], -[-0.002474712415603, 0.1419222332456], -[0.002474712415603, 0.1419222332456], -[0.007424179607866, 0.1419178421643], -[0.01237377387713, 0.1419090581519], -[0.01732357992082, 0.1418958775097], -[0.02227368240558, 0.1418782946926], -[0.02722416595494, 0.1418563023121], -[0.03217511513714, 0.1418298911409], -[0.03712661445297, 0.1417990501183], -[0.04207874832368, 0.1417637663567], -[0.04703160107905, 0.1417240251492], -[0.0519852569455, 0.1416798099784], -[0.05693980003434, 0.1416311025261], -[0.06189531433024, 0.141577882684], -[0.06685188367971, 0.1415201285654], -[0.07180959177983, 0.1414578165185], -[0.07676852216719, 0.1413909211395], -[0.08172875820696, 0.1413194152879], -[0.08669038308207, 0.1412432701022], -[0.0916534797828, 0.1411624550162], -[0.09661813109644, 0.1410769377773], -[0.1015844195972, 0.1409866844644], -[0.1065524276364, 0.1408916595079], -[0.1115222373327, 0.1407918257095], -[0.1164939305631, 0.1406871442637], -[0.1214675889535, 0.1405775747797], -[0.1264432938698, 0.1404630753043], -[0.1314211264095, 0.1403436023452], -[0.1364011673935, 0.1402191108957], -[0.1413834973576, 0.1400895544598], -[0.146368196545, 0.1399548850778], -[0.1513553448987, 0.139815053353], -[0.1563450220541, 0.1396700084791], -[0.1613373073323, 0.1395196982678], -[0.1663322797329, 0.1393640691776], -[0.1713300179278, 0.1392030663431], -[0.1763306002549, 0.1390366336044], -[0.1813341047123, 0.138864713538], -[0.1863406089519, 0.1386872474875], -[0.1913501902747, 0.1385041755951], -[0.196362925625, 0.1383154368339], -[0.2013788915854, 0.1381209690406], -[0.2063981643722, 0.1379207089484], -[0.2114208198303, 0.1377145922207], -[0.2164469334291, 0.1375025534857], -[0.2214765802581, 0.1372845263703], -[0.2265098350227, 0.1370604435359], -[0.2315467720402, 0.1368302367137], -[0.236587465236, 0.1365938367409], -[0.2416319881401, 0.136351173597], -[0.2466804138829, 0.1361021764409], -[0.2517328151923, 0.1358467736484], -[0.2567892643898, 0.1355848928499], -[0.2618498333871, 0.1353164609687], -[0.2669145936832, 0.1350414042599], -[0.2719836163601, 0.1347596483492], -[0.2770569720805, 0.134471118273], -[0.2821347310834, 0.1341757385181], -[0.2872169631814, 0.133873433062], -[0.2923037377564, 0.1335641254144], -[0.2973951237567, 0.133247738658], -[0.3024911896927, 0.1329241954905], -[0.3075920036329, 0.1325934182669], -[0.3126976332004, 0.1322553290422], -[0.3178081455678, 0.1319098496146], -[0.3229236074533, 0.1315569015689], -[0.3280440851153, 0.1311964063209], -[0.333169644348, 0.1308282851619], -[0.3383003504753, 0.1304524593033], -[0.3434362683455, 0.1300688499231], -[0.3485775366746, 0.1296768771348], -[-0.3457631219108, 0.1345519587977], -[-0.3406249782562, 0.1349358060674], -[-0.335492205197, 0.1353118792661], -[-0.3303647370319, 0.1356802569134], -[-0.3252425075421, 0.1360410175535], -[-0.3201254499983, 0.1363942397089], -[-0.3150134971675, 0.1367400018343], -[-0.3099065813187, 0.1370783822711], -[-0.304804634229, 0.1374094592017], -[-0.2997075871896, 0.1377333106055], -[-0.29461537101, 0.1380500142141], -[-0.2895279160242, 0.1383596474677], -[-0.284445152095, 0.1386622874715], -[-0.2793670086188, 0.1389580109529], -[-0.27429341453, 0.139246894219], -[-0.2692242983056, 0.1395290131142], -[-0.2641595879694, 0.1398044429789], -[-0.259099211096, 0.1400732586078], -[-0.2540430948154, 0.1403355342097], -[-0.2489911658165, 0.1405913433662], -[-0.2439433503518, 0.1408407589926], -[-0.2388995742409, 0.1410838532978], -[-0.2338597628751, 0.1413206977452], -[-0.2288238412212, 0.1415513630143], -[-0.2237917338259, 0.1417759189622], -[-0.2187633648202, 0.1419944345856], -[-0.2137386579232, 0.1422069779839], -[-0.2087175364475, 0.1424136163219], -[-0.2036999233031, 0.1426144157934], -[-0.1986857410024, 0.1428094415853], -[-0.1936749116654, 0.1429987578421], -[-0.1886673570244, 0.1431824276307], -[-0.1836629984294, 0.1433605129062], -[-0.1786617568538, 0.1435330744775], -[-0.1736635528999, 0.1437001719743], -[-0.1686683068046, 0.1438618638139], -[-0.1636759384461, 0.1440182071687], -[-0.1586863673497, 0.1441692579349], -[-0.1536995126946, 0.144315070701], -[-0.1487152933207, 0.1444556987173], -[-0.143733627736, 0.1445911938662], -[-0.1387544341233, 0.1447216066324], -[-0.1337776303484, 0.144846986075], -[-0.1288031339679, 0.1449673797991], -[-0.1238308622368, 0.145082833929], -[-0.1188607321176, 0.1451933930814], -[-0.1138926602885, 0.1452991003401], -[-0.1089265631524, 0.1453999972309], -[-0.1039623568461, 0.1454961236974], -[-0.09899995724996, 0.1455875180781], -[-0.09403927999713, 0.1456742170839], -[-0.08908024048386, 0.1457562557761], -[-0.0841227538795, 0.1458336675466], -[-0.079166735137, 0.1459064840973], -[-0.07421209900349, 0.145974735422], -[-0.06925876003118, 0.1460384497882], -[-0.06430663258844, 0.1460976537202], -[-0.05935563087105, 0.1461523719834], -[-0.05440566891372, 0.1462026275695], -[-0.04945666060173, 0.1462484416825], -[-0.04450851968272, 0.1462898337256], -[-0.03956115977874, 0.1463268212904], -[-0.03461449439834, 0.1463594201452], -[-0.02966843694886, 0.146387644226], -[-0.0247229007488, 0.146411505628], -[-0.01977779904031, 0.146431014598], -[-0.0148330450018, 0.1464461795284], -[-0.00988855176057, 0.1464570069519], -[-0.004944232405532, 0.1464635015376], -[2.756012656565e-13, 0.146465666088], -[0.004944232405532, 0.1464635015376], -[0.00988855176057, 0.1464570069519], -[0.0148330450018, 0.1464461795284], -[0.01977779904031, 0.146431014598], -[0.0247229007488, 0.146411505628], -[0.02966843694886, 0.146387644226], -[0.03461449439834, 0.1463594201452], -[0.03956115977874, 0.1463268212904], -[0.04450851968272, 0.1462898337256], -[0.04945666060173, 0.1462484416825], -[0.05440566891372, 0.1462026275695], -[0.05935563087105, 0.1461523719834], -[0.06430663258844, 0.1460976537202], -[0.06925876003118, 0.1460384497882], -[0.07421209900349, 0.145974735422], -[0.079166735137, 0.1459064840973], -[0.0841227538795, 0.1458336675466], -[0.08908024048386, 0.1457562557761], -[0.09403927999713, 0.1456742170839], -[0.09899995724996, 0.1455875180781], -[0.1039623568461, 0.1454961236974], -[0.1089265631524, 0.1453999972309], -[0.1138926602885, 0.1452991003401], -[0.1188607321176, 0.1451933930814], -[0.1238308622368, 0.145082833929], -[0.1288031339679, 0.1449673797991], -[0.1337776303484, 0.144846986075], -[0.1387544341233, 0.1447216066324], -[0.143733627736, 0.1445911938662], -[0.1487152933207, 0.1444556987173], -[0.1536995126946, 0.144315070701], -[0.1586863673497, 0.1441692579349], -[0.1636759384461, 0.1440182071687], -[0.1686683068046, 0.1438618638139], -[0.1736635528999, 0.1437001719743], -[0.1786617568538, 0.1435330744775], -[0.1836629984294, 0.1433605129062], -[0.1886673570244, 0.1431824276307], -[0.1936749116654, 0.1429987578421], -[0.1986857410024, 0.1428094415853], -[0.2036999233031, 0.1426144157934], -[0.2087175364475, 0.1424136163219], -[0.2137386579232, 0.1422069779839], -[0.2187633648202, 0.1419944345856], -[0.2237917338259, 0.1417759189622], -[0.2288238412212, 0.1415513630143], -[0.2338597628751, 0.1413206977452], -[0.2388995742409, 0.1410838532978], -[0.2439433503518, 0.1408407589926], -[0.2489911658165, 0.1405913433662], -[0.2540430948154, 0.1403355342097], -[0.259099211096, 0.1400732586078], -[0.2641595879694, 0.1398044429789], -[0.2692242983056, 0.1395290131142], -[0.27429341453, 0.139246894219], -[0.2793670086188, 0.1389580109529], -[0.284445152095, 0.1386622874715], -[0.2895279160242, 0.1383596474677], -[0.29461537101, 0.1380500142141], -[0.2997075871896, 0.1377333106055], -[0.3048046342289, 0.1374094592019], -[0.3099065813187, 0.1370783822711], -[0.3150134971675, 0.1367400018343], -[0.3201254499983, 0.1363942397089], -[0.3252425075421, 0.1360410175535], -[0.3303647370319, 0.1356802569134], -[0.335492205197, 0.1353118792661], -[0.3406249782562, 0.1349358060674], -[0.3457631219108, 0.1345519587977], -[-0.342947880051, 0.1394281007342], -[-0.3378129407005, 0.1398042922921], -[-0.3326834649386, 0.1401727984888], -[-0.3275593856961, 0.1405336976041], -[-0.322440635352, 0.1408870679548], -[-0.3173271457414, 0.1412329878474], -[-0.3122188481626, 0.1415715355311], -[-0.3071156733843, 0.1419027891521], -[-0.3020175516518, 0.1422268267074], -[-0.2969244126938, 0.1425437259995], -[-0.2918361857277, 0.1428535645917], -[-0.2867527994661, 0.1431564197631], -[-0.281674182122, 0.143452368465], -[-0.2766002614143, 0.1437414872766], -[-0.2715309645728, 0.1440238523625], -[-0.2664662183438, 0.1442995394288], -[-0.2614059489944, 0.1445686236816], -[-0.2563500823178, 0.1448311797844], -[-0.2512985436383, 0.1450872818165], -[-0.2462512578156, 0.1453370032319], -[-0.2412081492497, 0.1455804168182], -[-0.2361691418858, 0.1458175946567], -[-0.2311341592191, 0.1460486080818], -[-0.2261031242993, 0.1462735276419], -[-0.2210759597356, 0.1464924230599], -[-0.2160525877018, 0.146705363195], -[-0.2110329299411, 0.146912416004], -[-0.2060169077714, 0.1471136485034], -[-0.2010044420902, 0.1473091267327], -[-0.1959954533805, 0.1474989157169], -[-0.1909898617162, 0.1476830794306], -[-0.1859875867673, 0.1478616807618], -[-0.1809885478066, 0.1480347814766], -[-0.1759926637151, 0.1482024421846], -[-0.1709998529889, 0.1483647223044], -[-0.1660100337451, 0.1485216800299], -[-0.1610231237289, 0.1486733722974], -[-0.1560390403204, 0.1488198547526], -[-0.1510577005418, 0.1489611817191], -[-0.146079021065, 0.1490974061671], -[-0.1411029182189, 0.1492285796825], -[-0.1361293079979, 0.1493547524371], -[-0.1311581060694, 0.1494759731594], -[-0.1261892277829, 0.1495922891061], -[-0.1212225881781, 0.1497037460343], -[-0.1162581019945, 0.1498103881745], -[-0.1112956836802, 0.1499122582042], -[-0.1063352474014, 0.1500093972229], -[-0.1013767070525, 0.1501018447275], -[-0.09641997626564, 0.150189638588], -[-0.09146496842145, 0.1502728150258], -[-0.08651159665915, 0.1503514085907], -[-0.08155977388753, 0.1504254521407], -[-0.07660941279587, 0.1504949768218], -[-0.07166042586517, 0.1505600120487], -[-0.06671272537957, 0.1506205854874], -[-0.06176622343801, 0.1506767230374], -[-0.05682083196607, 0.1507284488166], -[-0.05187646272801, 0.1507757851456], -[-0.046933027339, 0.1508187525345], -[-0.04199043727745, 0.1508573696695], -[-0.03704860389763, 0.1508916534021], -[-0.03210743844227, 0.1509216187378], -[-0.02716685205544, 0.1509472788273], -[-0.02222675579542, 0.1509686449577], -[-0.01728706064775, 0.1509857265461], -[-0.01234767753833, 0.1509985311331], -[-0.00740851734661, 0.1510070643783], -[-0.002469490918806, 0.1510113300568], -[0.002469490918807, 0.1510113300568], -[0.00740851734661, 0.1510070643783], -[0.01234767753833, 0.1509985311331], -[0.01728706064775, 0.1509857265461], -[0.02222675579542, 0.1509686449577], -[0.02716685205544, 0.1509472788273], -[0.03210743844227, 0.1509216187378], -[0.03704860389763, 0.1508916534021], -[0.04199043727745, 0.1508573696695], -[0.046933027339, 0.1508187525345], -[0.05187646272801, 0.1507757851456], -[0.05682083196607, 0.1507284488166], -[0.06176622343801, 0.1506767230374], -[0.06671272537957, 0.1506205854874], -[0.07166042586517, 0.1505600120487], -[0.07660941279587, 0.1504949768218], -[0.08155977388753, 0.1504254521407], -[0.08651159665915, 0.1503514085907], -[0.09146496842145, 0.1502728150258], -[0.09641997626564, 0.150189638588], -[0.1013767070525, 0.1501018447275], -[0.1063352474014, 0.1500093972229], -[0.1112956836802, 0.1499122582042], -[0.1162581019945, 0.1498103881745], -[0.1212225881781, 0.1497037460343], -[0.1261892277828, 0.1495922891061], -[0.1311581060694, 0.1494759731594], -[0.1361293079979, 0.1493547524371], -[0.1411029182189, 0.1492285796825], -[0.146079021065, 0.1490974061671], -[0.1510577005418, 0.1489611817191], -[0.1560390403204, 0.1488198547526], -[0.1610231237289, 0.1486733722974], -[0.1660100337451, 0.1485216800299], -[0.1709998529889, 0.1483647223044], -[0.1759926637151, 0.1482024421846], -[0.1809885478066, 0.1480347814766], -[0.1859875867673, 0.1478616807618], -[0.1909898617162, 0.1476830794306], -[0.1959954533805, 0.1474989157169], -[0.2010044420902, 0.1473091267327], -[0.2060169077714, 0.1471136485034], -[0.2110329299411, 0.146912416004], -[0.2160525877018, 0.146705363195], -[0.2210759597356, 0.1464924230599], -[0.2261031242993, 0.1462735276419], -[0.2311341592191, 0.1460486080818], -[0.2361691418858, 0.1458175946567], -[0.2412081492497, 0.1455804168182], -[0.2462512578156, 0.1453370032319], -[0.2512985436383, 0.1450872818165], -[0.2563500823178, 0.1448311797844], -[0.2614059489943, 0.1445686236816], -[0.2664662183438, 0.1442995394288], -[0.2715309645728, 0.1440238523625], -[0.2766002614143, 0.1437414872766], -[0.281674182122, 0.143452368465], -[0.2867527994661, 0.1431564197631], -[0.2918361857277, 0.1428535645917], -[0.2969244126938, 0.1425437259995], -[0.3020175516518, 0.1422268267074], -[0.3071156733843, 0.1419027891521], -[0.3122188481626, 0.1415715355311], -[0.3173271457414, 0.1412329878474], -[0.322440635352, 0.1408870679548], -[0.3275593856961, 0.1405336976041], -[0.3326834649386, 0.1401727984888], -[0.3378129407005, 0.1398042922921], -[0.342947880051, 0.1394281007342], -[-0.3401320138294, 0.1443051478201], -[-0.3350002453323, 0.1446741528928], -[-0.3298742183907, 0.1450350625584], -[-0.3247536780718, 0.1453884541497], -[-0.3196385553215, 0.1457344058059], -[-0.3145287805092, 0.1460729956666], -[-0.3094242834363, 0.1464043018241], -[-0.3043249933434, 0.1467284022767], -[-0.2992308389176, 0.1470453748824], -[-0.2941417482998, 0.1473552973124], -[-0.289057649091, 0.1476582470059], -[-0.2839784683587, 0.1479543011249], -[-0.2789041326439, 0.1482435365087], -[-0.2738345679661, 0.1485260296303], -[-0.26876969983, 0.1488018565515], -[-0.263709453231, 0.14907109288], -[-0.2586537526606, 0.1493338137255], -[-0.2536025221123, 0.1495900936572], -[-0.2485556850869, 0.1498400066613], -[-0.2435131645978, 0.1500836260985], -[-0.2384748831767, 0.1503210246629], -[-0.2334407628784, 0.1505522743404], -[-0.2284107252871, 0.1507774463678], -[-0.2233846915207, 0.1509966111926], -[-0.2183625822372, 0.1512098384327], -[-0.21334431764, 0.151417196837], -[-0.2083298174831, 0.1516187542465], -[-0.2033190010773, 0.151814577555], -[-0.198311787296, 0.1520047326714], -[-0.193308094581, 0.152189284482], -[-0.1883078409487, 0.1523682968129], -[-0.1833109439966, 0.1525418323935], -[-0.1783173209096, 0.1527099528202], -[-0.1733268884665, 0.1528727185211], -[-0.1683395630473, 0.1530301887203], -[-0.1633552606399, 0.1531824214038], -[-0.1583738968476, 0.1533294732855], -[-0.1533953868966, 0.1534713997738], -[-0.1484196456438, 0.1536082549389], -[-0.1434465875847, 0.1537400914809], -[-0.1384761268616, 0.1538669606986], -[-0.1335081772725, 0.1539889124584], -[-0.1285426522793, 0.1541059951651], -[-0.1235794650174, 0.1542182557321], -[-0.1186185283045, 0.1543257395534], -[-0.1136597546505, 0.154428490476], -[-0.1087030562672, 0.1545265507732], -[-0.1037483450783, 0.1546199611186], -[-0.09879553272982, 0.1547087605613], -[-0.09384453060071, 0.1547929865014], -[-0.08889524981366, 0.1548726746674], -[-0.08394760124617, 0.1549478590937], -[-0.07900149554194, 0.1550185720993], -[-0.07405684312239, 0.1550848442675], -[-0.06911355419849, 0.1551467044272], -[-0.06417153878274, 0.1552041796339], -[-0.05923070670144, 0.1552572951532], -[-0.05429096760705, 0.1553060744448], -[-0.04935223099086, 0.1553505391472], -[-0.04441440619574, 0.155390709064], -[-0.03947740242908, 0.1554266021516], -[-0.03454112877595, 0.1554582345071], -[-0.02960549421225, 0.1554856203586], -[-0.02467040761818, 0.1555087720557], -[-0.0197357777916, 0.1555277000614], -[-0.0148015134617, 0.1555424129456], -[-0.009867523302564, 0.1555529173798], -[-0.004933715946951, 0.1555592181321], -[3.554090738071e-14, 0.1555613180647], -[0.004933715946951, 0.1555592181321], -[0.009867523302564, 0.1555529173798], -[0.0148015134617, 0.1555424129456], -[0.0197357777916, 0.1555277000614], -[0.02467040761818, 0.1555087720557], -[0.02960549421225, 0.1554856203586], -[0.03454112877595, 0.1554582345071], -[0.03947740242908, 0.1554266021516], -[0.04441440619574, 0.155390709064], -[0.04935223099088, 0.1553505391472], -[0.05429096760705, 0.1553060744448], -[0.05923070670144, 0.1552572951532], -[0.06417153878274, 0.1552041796339], -[0.06911355419849, 0.1551467044272], -[0.07405684312239, 0.1550848442675], -[0.07900149554194, 0.1550185720993], -[0.08394760124617, 0.1549478590937], -[0.08889524981366, 0.1548726746674], -[0.09384453060071, 0.1547929865014], -[0.09879553272982, 0.1547087605613], -[0.1037483450783, 0.1546199611186], -[0.1087030562672, 0.1545265507732], -[0.1136597546505, 0.154428490476], -[0.1186185283045, 0.1543257395534], -[0.1235794650174, 0.1542182557321], -[0.1285426522793, 0.1541059951651], -[0.1335081772725, 0.1539889124584], -[0.1384761268616, 0.1538669606986], -[0.1434465875847, 0.1537400914809], -[0.1484196456438, 0.1536082549389], -[0.1533953868966, 0.1534713997738], -[0.1583738968476, 0.1533294732855], -[0.1633552606399, 0.1531824214038], -[0.1683395630473, 0.1530301887203], -[0.1733268884665, 0.1528727185211], -[0.1783173209096, 0.1527099528202], -[0.1833109439966, 0.1525418323935], -[0.1883078409487, 0.1523682968129], -[0.193308094581, 0.152189284482], -[0.198311787296, 0.1520047326714], -[0.2033190010773, 0.151814577555], -[0.2083298174831, 0.1516187542465], -[0.21334431764, 0.151417196837], -[0.2183625822372, 0.1512098384327], -[0.2233846915207, 0.1509966111926], -[0.2284107252871, 0.1507774463678], -[0.2334407628784, 0.1505522743404], -[0.2384748831767, 0.1503210246629], -[0.2435131645978, 0.1500836260985], -[0.2485556850869, 0.1498400066613], -[0.2536025221123, 0.1495900936572], -[0.2586537526606, 0.1493338137255], -[0.263709453231, 0.14907109288], -[0.26876969983, 0.1488018565515], -[0.2738345679661, 0.1485260296303], -[0.2789041326439, 0.1482435365087], -[0.2839784683587, 0.1479543011249], -[0.289057649091, 0.1476582470059], -[0.2941417482998, 0.1473552973124], -[0.2992308389176, 0.1470453748824], -[0.3043249933434, 0.1467284022767], -[0.3094242834363, 0.1464043018241], -[0.3145287805092, 0.1460729956666], -[0.3196385553215, 0.1457344058059], -[0.3247536780718, 0.1453884541497], -[0.3298742183907, 0.1450350625584], -[0.3350002453323, 0.1446741528928], -[0.3401320138275, 0.1443051478218], -[-0.3373152763169, 0.1491839753526], -[-0.3321869816846, 0.1495452324229], -[-0.3270645541531, 0.1498985173166], -[-0.3219477018293, 0.1502443737167], -[-0.3168363541957, 0.150582879635], -[-0.3117304401273, 0.1509141130927], -[-0.3066298879004, 0.1512381520732], -[-0.3015346252008, 0.151555074474], -[-0.2964445791316, 0.1518649580598], -[-0.291359676221, 0.1521678804159], -[-0.2862798424294, 0.1524639189017], -[-0.2812050031569, 0.1527531506045], -[-0.2761350832499, 0.1530356522944], -[-0.2710700070076, 0.1533115003785], -[-0.2660096981892, 0.1535807708566], -[-0.2609540800194, 0.1538435392761], -[-0.2559030751956, 0.1540998806887], -[-0.2508566058933, 0.1543498696057], -[-0.2458145937723, 0.1545935799557], -[-0.2407769599832, 0.1548310850409], -[-0.2357436251728, 0.1550624574947], -[-0.2307145094905, 0.15528776924], -[-0.2256895325941, 0.1555070914469], -[-0.2206686136558, 0.1557204944916], -[-0.2156516713681, 0.1559280479157], -[-0.2106386239506, 0.1561298203853], -[-0.2056293891552, 0.1563258796515], -[-0.2006238842735, 0.1565162925102], -[-0.1956220261421, 0.1567011247637], -[-0.1906237311502, 0.1568804411816], -[-0.1856289152458, 0.1570543054628], -[-0.1806374939424, 0.1572227801981], -[-0.1756493823266, 0.1573859268329], -[-0.1706644950649, 0.1575438056309], -[-0.1656827464112, 0.1576964756379], -[-0.1607040502146, 0.1578439946469], -[-0.1557283199274, 0.1579864191627], -[-0.1507554686128, 0.1581238043688], -[-0.1457854089535, 0.1582562040929], -[-0.1408180532602, 0.1583836707749], -[-0.1358533134805, 0.1585062554347], -[-0.1308911012081, 0.1586240076408], -[-0.1259313276918, 0.1587369754797], -[-0.1209739038454, 0.1588452055264], -[-0.1160187402576, 0.1589487428152], -[-0.1110657472019, 0.1590476308119], -[-0.106114834647, 0.1591419113863], -[-0.101165912268, 0.1592316247858], -[-0.09621888945644, 0.1593168096103], -[-0.09127367533227, 0.1593975027874], -[-0.08633017875487, 0.1594737395491], -[-0.08138830833483, 0.1595455534089], -[-0.07644797244587, 0.159612976141], -[-0.07150907923701, 0.159676037759], -[-0.06657153664497, 0.1597347664971], -[-0.06163525240671, 0.1597891887916], -[-0.05670013407232, 0.1598393292637], -[-0.05176608901795, 0.1598852107035], -[-0.04683302445907, 0.159926854055], -[-0.04190084746381, 0.1599642784025], -[-0.03696946496644, 0.1599975009578], -[-0.03203878378117, 0.1600265370493], -[-0.02710871061584, 0.1600514001115], -[-0.02217915208592, 0.1600721016763], -[-0.01725001472849, 0.1600886513653], -[-0.01232120501642, 0.1601010568835], -[-0.007392629372549, 0.1601093240141], -[-0.002464194183916, 0.1601134566147], -[0.002464194183916, 0.1601134566147], -[0.007392629372549, 0.1601093240141], -[0.01232120501642, 0.1601010568835], -[0.01725001472849, 0.1600886513653], -[0.02217915208592, 0.1600721016763], -[0.02710871061584, 0.1600514001115], -[0.03203878378117, 0.1600265370493], -[0.03696946496645, 0.1599975009579], -[0.04190084746379, 0.1599642784025], -[0.04683302445907, 0.159926854055], -[0.05176608901795, 0.1598852107035], -[0.05670013407232, 0.1598393292637], -[0.06163525240671, 0.1597891887916], -[0.06657153664497, 0.1597347664971], -[0.07150907923701, 0.159676037759], -[0.07644797244587, 0.159612976141], -[0.08138830833483, 0.1595455534089], -[0.08633017875487, 0.1594737395491], -[0.09127367533227, 0.1593975027874], -[0.09621888945644, 0.1593168096103], -[0.101165912268, 0.1592316247858], -[0.106114834647, 0.1591419113863], -[0.1110657472019, 0.159047630812], -[0.1160187402576, 0.1589487428152], -[0.1209739038454, 0.1588452055264], -[0.1259313276918, 0.1587369754797], -[0.1308911012081, 0.1586240076408], -[0.1358533134805, 0.1585062554347], -[0.1408180532602, 0.1583836707749], -[0.1457854089535, 0.1582562040929], -[0.1507554686128, 0.1581238043688], -[0.1557283199274, 0.1579864191627], -[0.1607040502146, 0.1578439946469], -[0.1656827464112, 0.1576964756379], -[0.1706644950649, 0.1575438056309], -[0.1756493823266, 0.1573859268329], -[0.1806374939424, 0.1572227801981], -[0.1856289152458, 0.1570543054628], -[0.1906237311502, 0.1568804411816], -[0.1956220261421, 0.1567011247637], -[0.2006238842735, 0.1565162925102], -[0.2056293891552, 0.1563258796515], -[0.2106386239506, 0.1561298203853], -[0.2156516713681, 0.1559280479157], -[0.2206686136558, 0.1557204944916], -[0.2256895325941, 0.1555070914469], -[0.2307145094905, 0.15528776924], -[0.2357436251728, 0.1550624574947], -[0.2407769599832, 0.1548310850409], -[0.2458145937723, 0.1545935799557], -[0.2508566058933, 0.1543498696057], -[0.2559030751956, 0.1540998806887], -[0.2609540800194, 0.1538435392761], -[0.2660096981892, 0.1535807708566], -[0.2710700070076, 0.1533115003785], -[0.2761350832499, 0.1530356522944], -[0.2812050031569, 0.1527531506045], -[0.2862798424294, 0.1524639189017], -[0.291359676221, 0.1521678804159], -[0.2964445791316, 0.1518649580598], -[0.3015346252008, 0.151555074474], -[0.3066298879004, 0.1512381520732], -[0.3117304401273, 0.1509141130927], -[0.3168363541957, 0.150582879635], -[0.3219477018293, 0.1502443737167], -[0.3270645541531, 0.1498985173166], -[0.3321869816846, 0.1495452324229], -[0.3373152763146, 0.1491839753546], -[-0.3344978943899, 0.154063850114], -[-0.3293732391862, 0.1544173756639], -[-0.3242545607509, 0.1547630088293], -[-0.3191415445938, 0.155101303693], -[-0.3140341187046, 0.1554323381882], -[-0.3089322104357, 0.1557561902667], -[-0.3038357465111, 0.1560729378501], -[-0.2987446530354, 0.1563826587818], -[-0.2936588555025, 0.1566854307792], -[-0.2885782788037, 0.156981331386], -[-0.2835028472356, 0.1572704379255], -[-0.2784324845081, 0.1575528274534], -[-0.2733671137514, 0.157828576712], -[-0.2683066575239, 0.1580977620834], -[-0.2632510378189, 0.1583604595446], -[-0.2582001760716, 0.1586167446217], -[-0.2531539931663, 0.1588666923453], -[-0.2481124094427, 0.1591103772056], -[-0.2430753447027, 0.1593478731086], -[-0.2380427182171, 0.1595792533319], -[-0.2330144487323, 0.1598045904814], -[-0.2279904544765, 0.1600239564485], -[-0.2229706531663, 0.1602374223672], -[-0.2179549620136, 0.160445058572], -[-0.212943297732, 0.1606469345559], -[-0.2079355765434, 0.1608431189295], -[-0.202931714185, 0.1610336793794], -[-0.197931625916, 0.1612186826283], -[-0.1929352265248, 0.161398194395], -[-0.1879424303359, 0.1615722793543], -[-0.182953151217, 0.1617410010989], -[-0.1779673025872, 0.1619044221], -[-0.1729847974236, 0.1620626036703], -[-0.16800554827, 0.162215605926], -[-0.1630294672442, 0.1623634877501], -[-0.1580564660466, 0.1625063067567], -[-0.1530864559687, 0.162644119255], -[-0.1481193479015, 0.1627769802146], -[-0.1431550523445, 0.1629049432315], -[-0.1381934794149, 0.1630280604944], -[-0.1332345388571, 0.1631463827521], -[-0.1282781400521, 0.1632599592814], -[-0.1233241920277, 0.1633688378562], -[-0.1183726034684, 0.1634730647168], -[-0.1134232827262, 0.1635726845405], -[-0.108476137831, 0.1636677404132], -[-0.1035310765019, 0.1637582738014], -[-0.09858800615808, 0.1638443245254], -[-0.09364683393062, 0.1639259307336], -[-0.08870746667418, 0.1640031288773], -[-0.083769810979, 0.1640759536875], -[-0.07883377318323, 0.1641444381511], -[-0.07389925938541, 0.1642086134904], -[-0.06896617545723, 0.1642685091411], -[-0.06403442705657, 0.1643241527338], -[-0.05910391964062, 0.1643755700751], -[-0.05417455847937, 0.1644227851306], -[-0.04924624866915, 0.1644658200083], -[-0.04431889514646, 0.1645046949447], -[-0.03939240270194, 0.1645394282902], -[-0.03446667599443, 0.1645700364973], -[-0.02954161956532, 0.1645965341093], -[-0.02461713785288, 0.1646189337504], -[-0.01969313520682, 0.1646372461174], -[-0.01476951590284, 0.1646514799719], -[-0.009846184157379, 0.1646616421347], -[-0.004923044142361, 0.1646677374813], -[0, 0.1646697689383], -[0.004923044142361, 0.1646677374813], -[0.009846184157378, 0.1646616421347], -[0.01476951590283, 0.1646514799718], -[0.01969313520681, 0.1646372461174], -[0.02461713785288, 0.1646189337504], -[0.02954161956532, 0.1645965341093], -[0.03446667599443, 0.1645700364973], -[0.03939240270194, 0.1645394282902], -[0.04431889514646, 0.1645046949447], -[0.04924624866915, 0.1644658200083], -[0.05417455847937, 0.1644227851306], -[0.05910391964062, 0.1643755700751], -[0.06403442705657, 0.1643241527338], -[0.06896617545723, 0.1642685091411], -[0.07389925938541, 0.1642086134904], -[0.07883377318323, 0.1641444381511], -[0.083769810979, 0.1640759536875], -[0.08870746667418, 0.1640031288773], -[0.09364683393062, 0.1639259307336], -[0.09858800615808, 0.1638443245254], -[0.1035310765019, 0.1637582738014], -[0.1084761378311, 0.1636677404132], -[0.1134232827262, 0.1635726845405], -[0.1183726034684, 0.1634730647168], -[0.1233241920277, 0.1633688378562], -[0.1282781400521, 0.1632599592814], -[0.1332345388571, 0.1631463827521], -[0.1381934794149, 0.1630280604944], -[0.1431550523445, 0.1629049432315], -[0.1481193479015, 0.1627769802146], -[0.1530864559687, 0.162644119255], -[0.1580564660466, 0.1625063067567], -[0.1630294672442, 0.1623634877501], -[0.16800554827, 0.162215605926], -[0.1729847974236, 0.1620626036703], -[0.1779673025872, 0.1619044221], -[0.182953151217, 0.1617410010989], -[0.1879424303359, 0.1615722793543], -[0.1929352265248, 0.161398194395], -[0.197931625916, 0.1612186826283], -[0.202931714185, 0.1610336793794], -[0.2079355765434, 0.1608431189295], -[0.212943297732, 0.1606469345559], -[0.2179549620136, 0.160445058572], -[0.2229706531663, 0.1602374223672], -[0.2279904544765, 0.1600239564485], -[0.2330144487323, 0.1598045904814], -[0.2380427182171, 0.1595792533319], -[0.2430753447027, 0.1593478731086], -[0.2481124094427, 0.1591103772056], -[0.2531539931663, 0.1588666923453], -[0.2582001760716, 0.1586167446217], -[0.2632510378189, 0.1583604595446], -[0.2683066575239, 0.1580977620834], -[0.2733671137514, 0.157828576712], -[0.2784324845081, 0.1575528274534], -[0.2835028472356, 0.1572704379255], -[0.2885782788037, 0.156981331386], -[0.2936588555025, 0.1566854307792], -[0.2987446530354, 0.1563826587818], -[0.3038357465111, 0.1560729378501], -[0.3089322104357, 0.1557561902667], -[0.3140341187046, 0.1554323381882], -[0.3191415445938, 0.155101303693], -[0.3242545607509, 0.1547630088293], -[0.3293732391862, 0.1544173756639], -[0.3344978943873, 0.1540638501162], -[-0.3316799514195, 0.1589446857552], -[-0.3265591071783, 0.159290427596], -[-0.3214443266508, 0.1596283833581], -[-0.3163352939616, 0.1599590916585], -[-0.311231935579, 0.1602826304009], -[-0.3061341773048, 0.1605990775156], -[-0.3010419442842, 0.1609085109097], -[-0.2959551610153, 0.1612110084189], -[-0.2908737513578, 0.1615066477584], -[-0.2857976385429, 0.1617955064746], -[-0.2807267451799, 0.1620776618984], -[-0.2756609932668, 0.1623531910961], -[-0.2706003041966, 0.1626221708233], -[-0.2655445987661, 0.1628846774778], -[-0.2604937971832, 0.163140787053], -[-0.2554478190747, 0.1633905750916], -[-0.2504065834933, 0.1636341166405], -[-0.2453700089255, 0.1638714862045], -[-0.2403380132981, 0.1641027577019], -[-0.235310513986, 0.1643280044194], -[-0.2302874278188, 0.1645472989681], -[-0.2252686710883, 0.1647607132391], -[-0.2202541595554, 0.1649683183604], -[-0.2152438084571, 0.1651701846538], -[-0.2102375325141, 0.1653663815917], -[-0.2052352459373, 0.1655569777552], -[-0.2002368624361, 0.1657420407923], -[-0.1952422952248, 0.1659216373763], -[-0.1902514570309, 0.1660958331649], -[-0.1852642601022, 0.1662646927603], -[-0.1802806162151, 0.1664282796684], -[-0.1753004366822, 0.1665866562606], -[-0.1703236323608, 0.1667398837338], -[-0.1653501136608, 0.1668880220733], -[-0.1603797905537, 0.1670311300145], -[-0.155412572581, 0.1671692650061], -[-0.1504483688636, 0.167302483174], -[-0.1454870881105, 0.1674308392854], -[-0.1405286386288, 0.1675543867139], -[-0.1355729283331, 0.1676731774056], -[-0.1306198647555, 0.1677872618454], -[-0.1256693550558, 0.1678966890243], -[-0.1207213060324, 0.1680015064077], -[-0.1157756241325, 0.1681017599048], -[-0.1108322154635, 0.1681974938377], -[-0.105890985804, 0.1682887509131], -[-0.100951840616, 0.1683755721935], -[-0.09601468505603, 0.1684579970702], -[-0.09107942398766, 0.1685360632369], -[-0.08614596199382, 0.1686098066645], -[-0.0812142033894, 0.168679261577], -[-0.07628405223415, 0.1687444604286], -[-0.07135541234582, 0.1688054338811], -[-0.06642818731353, 0.1688622107837], -[-0.06150228051134, 0.1689148181531], -[-0.05657759511213, 0.1689632811549], -[-0.05165403410152, 0.1690076230866], -[-0.04673150029221, 0.1690478653614], -[-0.04180989633827, 0.1690840274933], -[-0.0368891247498, 0.169116127084], -[-0.03196908790758, 0.1691441798102], -[-0.027049688078, 0.1691681994132], -[-0.02213082742804, 0.169188197689], -[-0.01721240804035, 0.1692041844803], -[-0.01229433192846, 0.1692161676695], -[-0.007376501052083, 0.1692241531731], -[-0.002458817332425, 0.1692281449379], -[0.002458817332425, 0.1692281449379], -[0.007376501052083, 0.1692241531731], -[0.01229433192846, 0.1692161676695], -[0.01721240804035, 0.1692041844803], -[0.02213082742804, 0.169188197689], -[0.027049688078, 0.1691681994132], -[0.03196908790758, 0.1691441798102], -[0.0368891247498, 0.169116127084], -[0.04180989633827, 0.1690840274933], -[0.04673150029221, 0.1690478653614], -[0.05165403410152, 0.1690076230866], -[0.05657759511213, 0.1689632811549], -[0.06150228051134, 0.1689148181531], -[0.06642818731353, 0.1688622107837], -[0.07135541234582, 0.1688054338811], -[0.07628405223415, 0.1687444604286], -[0.0812142033894, 0.168679261577], -[0.08614596199382, 0.1686098066645], -[0.09107942398766, 0.1685360632369], -[0.09601468505603, 0.1684579970702], -[0.100951840616, 0.1683755721935], -[0.1058909858041, 0.1682887509131], -[0.1108322154635, 0.1681974938377], -[0.1157756241325, 0.1681017599048], -[0.1207213060324, 0.1680015064077], -[0.1256693550558, 0.1678966890243], -[0.1306198647555, 0.1677872618454], -[0.1355729283331, 0.1676731774056], -[0.1405286386288, 0.1675543867139], -[0.1454870881105, 0.1674308392854], -[0.1504483688636, 0.167302483174], -[0.155412572581, 0.1671692650061], -[0.1603797905536, 0.1670311300145], -[0.1653501136608, 0.1668880220733], -[0.1703236323608, 0.1667398837338], -[0.1753004366822, 0.1665866562606], -[0.1802806162151, 0.1664282796684], -[0.1852642601022, 0.1662646927603], -[0.1902514570309, 0.1660958331649], -[0.1952422952248, 0.1659216373763], -[0.2002368624361, 0.1657420407923], -[0.2052352459373, 0.1655569777552], -[0.2102375325141, 0.1653663815917], -[0.2152438084571, 0.1651701846538], -[0.2202541595554, 0.1649683183604], -[0.2252686710883, 0.1647607132391], -[0.2302874278188, 0.1645472989681], -[0.235310513986, 0.1643280044194], -[0.2403380132981, 0.1641027577019], -[0.2453700089255, 0.1638714862045], -[0.2504065834933, 0.1636341166405], -[0.2554478190747, 0.1633905750916], -[0.2604937971832, 0.163140787053], -[0.2655445987661, 0.1628846774778], -[0.2706003041966, 0.1626221708233], -[0.2756609932668, 0.1623531910961], -[0.2807267451799, 0.1620776618984], -[0.2857976385429, 0.1617955064746], -[0.2908737513579, 0.1615066477583], -[0.2959551610153, 0.1612110084189], -[0.3010419442842, 0.1609085109097], -[0.3061341773048, 0.1605990775156], -[0.311231935579, 0.1602826304009], -[0.3163352939616, 0.1599590916585], -[0.3214443266508, 0.1596283833581], -[0.3265591071783, 0.159290427596], -[0.3316799514169, 0.1589446857574], -[-0.3288615553113, 0.163826300127], -[-0.3237446749312, 0.164164233369], -[-0.3186339402781, 0.1644944873307], -[-0.3135290375166, 0.1648175853561], -[-0.3084298915658, 0.1651336053683], -[-0.3033364266503, 0.1654426253235], -[-0.2982485663106, 0.1657447231617], -[-0.293166233413, 0.1660399767562], -[-0.2880893501594, 0.1663284638652], -[-0.2830178380966, 0.1666102620824], -[-0.2779516181256, 0.1668854487885], -[-0.2728906105101, 0.1671541011029], -[-0.2678347348853, 0.1674162958357], -[-0.2627839102665, 0.1676721094399], -[-0.2577380550567, 0.1679216179643], -[-0.2526970870555, 0.1681648970064], -[-0.2476609234664, 0.1684020216658], -[-0.2426294809048, 0.1686330664977], -[-0.2376026754057, 0.1688581054672], -[-0.2325804224318, 0.1690772119035], -[-0.2275626368802, 0.1692904584547], -[-0.2225492330912, 0.169497917043], -[-0.2175401248548, 0.1696996588202], -[-0.2125352254191, 0.1698957541238], -[-0.2075344474976, 0.1700862724329], -[-0.202537703277, 0.1702712823256], -[-0.1975449044255, 0.1704508514358], -[-0.1925559620998, 0.170625046411], -[-0.1875707869539, 0.1707939328706], -[-0.1825892891472, 0.1709575753645], -[-0.1776113783524, 0.1711160373324], -[-0.1726369637647, 0.1712693810635], -[-0.1676659541097, 0.1714176676567], -[-0.1626982576529, 0.171560956982], -[-0.1577337822085, 0.1716993076413], -[-0.1527724351488, 0.1718327769316], -[-0.1478141234138, 0.1719614208071], -[-0.1428587535208, 0.1720852938428], -[-0.1379062315744, 0.1722044491995], -[-0.1329564632772, 0.1723189385881], -[-0.1280093539399, 0.1724288122361], -[-0.1230648084921, 0.1725341188539], -[-0.1181227314939, 0.1726349056024], -[-0.1131830271467, 0.1727312180617], -[-0.1082455993049, 0.1728231002002], -[-0.1033103514882, 0.172910594345], -[-0.09837718689332, 0.1729937411533], -[-0.09344600840678, 0.1730725795844], -[-0.08851671861746, 0.1731471468737], -[-0.08358921982959, 0.1732174785061], -[-0.0786634140761, 0.1732836081925], -[-0.07373920313203, 0.1733455678459], -[-0.06881648852835, 0.1734033875597], -[-0.06389517156592, 0.1734570955859], -[-0.05897515332972, 0.1735067183164], -[-0.05405633470332, 0.1735522802635], -[-0.04913861638348, 0.1735938040433], -[-0.04422189889501, 0.1736313103594], -[-0.03930608260585, 0.1736648179884], -[-0.03439106774219, 0.1736943437667], -[-0.02947675440385, 0.1737199025779], -[-0.02456304257978, 0.1737415073432], -[-0.01964983216366, 0.1737591690114], -[-0.01473702296961, 0.1737728965511], -[-0.009824514747981, 0.1737826969449], -[-0.004912207201266, 0.1737885751838], -[-5.477630886633e-14, 0.1737905342638], -[0.004912207201267, 0.1737885751838], -[0.009824514747981, 0.1737826969449], -[0.01473702296961, 0.1737728965511], -[0.01964983216366, 0.1737591690114], -[0.02456304257978, 0.1737415073432], -[0.02947675440385, 0.1737199025779], -[0.03439106774219, 0.1736943437667], -[0.03930608260585, 0.1736648179884], -[0.04422189889501, 0.1736313103594], -[0.04913861638348, 0.1735938040433], -[0.05405633470332, 0.1735522802635], -[0.05897515332972, 0.1735067183164], -[0.06389517156592, 0.1734570955859], -[0.06881648852835, 0.1734033875597], -[0.07373920313203, 0.1733455678459], -[0.0786634140761, 0.1732836081925], -[0.08358921982959, 0.1732174785061], -[0.08851671861746, 0.1731471468737], -[0.09344600840678, 0.1730725795844], -[0.09837718689328, 0.1729937411532], -[0.1033103514882, 0.172910594345], -[0.1082455993049, 0.1728231002002], -[0.1131830271467, 0.1727312180617], -[0.1181227314939, 0.1726349056024], -[0.1230648084921, 0.1725341188539], -[0.1280093539399, 0.1724288122361], -[0.1329564632772, 0.1723189385881], -[0.1379062315744, 0.1722044491995], -[0.1428587535208, 0.1720852938428], -[0.1478141234138, 0.1719614208071], -[0.1527724351489, 0.1718327769317], -[0.1577337822085, 0.1716993076413], -[0.1626982576529, 0.171560956982], -[0.1676659541097, 0.1714176676567], -[0.1726369637647, 0.1712693810635], -[0.1776113783524, 0.1711160373324], -[0.1825892891472, 0.1709575753645], -[0.1875707869539, 0.1707939328706], -[0.1925559620998, 0.170625046411], -[0.1975449044255, 0.1704508514358], -[0.2025377032769, 0.1702712823256], -[0.2075344474976, 0.1700862724329], -[0.2125352254191, 0.1698957541238], -[0.2175401248548, 0.1696996588202], -[0.2225492330912, 0.169497917043], -[0.2275626368802, 0.1692904584547], -[0.2325804224318, 0.1690772119035], -[0.2376026754057, 0.1688581054672], -[0.2426294809048, 0.1686330664977], -[0.2476609234664, 0.1684020216658], -[0.2526970870555, 0.1681648970064], -[0.2577380550567, 0.1679216179643], -[0.2627839102665, 0.1676721094399], -[0.2678347348853, 0.1674162958357], -[0.2728906105101, 0.1671541011029], -[0.2779516181256, 0.1668854487885], -[0.2830178380966, 0.1666102620824], -[0.2880893501594, 0.1663284638652], -[0.293166233413, 0.1660399767562], -[0.2982485663106, 0.1657447231617], -[0.3033364266503, 0.1654426253235], -[0.3084298915658, 0.1651336053683], -[0.3135290375166, 0.1648175853561], -[0.3186339402781, 0.1644944873307], -[0.3237446749312, 0.164164233369], -[0.3288615553087, 0.1638263001291], -[-0.3260428195966, 0.1687084973728], -[-0.320930031661, 0.1690386382729], -[-0.315823490032, 0.1693611673119], -[-0.3107228628456, 0.1696766326631], -[-0.3056280734446, 0.1699851123171], -[-0.3005390444499, 0.1702866843039], -[-0.295455697772, 0.1705814266423], -[-0.2903779546211, 0.1708694172894], -[-0.2853057355179, 0.1711507340908], -[-0.2802389603021, 0.1714254547314], -[-0.2751775481441, 0.1716936566844], -[-0.2701214175527, 0.171955417164], -[-0.2650704863847, 0.1722108130754], -[-0.260024671854, 0.1724599209667], -[-0.25498389054, 0.1727028169808], -[-0.2499480583965, 0.1729395768072], -[-0.2449170907596, 0.173170275635], -[-0.2398909023573, 0.1733949881047], -[-0.2348694073156, 0.1736137882626], -[-0.2298525191686, 0.1738267495133], -[-0.2248401508657, 0.174033944574], -[-0.2198322147799, 0.1742354454284], -[-0.214828622716, 0.1744313232817], -[-0.2098292859185, 0.1746216485151], -[-0.20483411508, 0.1748064906417], -[-0.1998430203494, 0.1749859182621], -[-0.1948559113399, 0.1751599990206], -[-0.1898726971382, 0.1753287995623], -[-0.1848932863122, 0.1754923854898], -[-0.1799175869201, 0.1756508213218], -[-0.1749455065194, 0.1758041704506], -[-0.1699769521755, 0.1759524951013], -[-0.1650118304714, 0.1760958562915], -[-0.1600500475166, 0.176234313791], -[-0.1550915089571, 0.1763679260825], -[-0.1501361199852, 0.1764967503234], -[-0.1451837853494, 0.1766208423075], -[-0.1402344093648, 0.1767402564277], -[-0.1352878959239, 0.1768550456402], -[-0.130344148507, 0.176965261428], -[-0.1254030701938, 0.1770709537669], -[-0.1204645636744, 0.1771721710909], -[-0.1155285312614, 0.1772689602596], -[-0.1105948749014, 0.1773613665257], -[-0.1056634961872, 0.177449433504], -[-0.1007342963709, 0.1775332031412], -[-0.09580717637614, 0.1776127156868], -[-0.09088203681124, 0.1776880096647], -[-0.08595877798279, 0.1777591218466], -[-0.08103729990896, 0.1778260872255], -[-0.07611750233372, 0.1778889389917], -[-0.07119928474066, 0.1779477085086], -[-0.06628254636759, 0.1780024252906], -[-0.06136718622105, 0.1780531169822], -[-0.05645310309126, 0.1780998093377], -[-0.05154019556717, 0.1781425262029], -[-0.04662836205173, 0.1781812894982], -[-0.04171750077742, 0.1782161192021], -[-0.03680750982189, 0.1782470333373], -[-0.03189828712382, 0.178274047957], -[-0.02698973049887, 0.1782971771338], -[-0.02208173765584, 0.178316432949], -[-0.01717420621288, 0.178331825484], -[-0.01226703371386, 0.1783433628127], -[-0.007360117644749, 0.1783510509959], -[-0.00245335545016, 0.1783548940764], -[0.00245335545016, 0.1783548940764], -[0.00736011764475, 0.1783510509959], -[0.01226703371386, 0.1783433628127], -[0.01717420621288, 0.178331825484], -[0.02208173765584, 0.178316432949], -[0.02698973049887, 0.1782971771338], -[0.03189828712382, 0.178274047957], -[0.03680750982189, 0.1782470333373], -[0.04171750077742, 0.1782161192021], -[0.04662836205173, 0.1781812894982], -[0.05154019556717, 0.1781425262029], -[0.05645310309126, 0.1780998093377], -[0.06136718622105, 0.1780531169822], -[0.06628254636759, 0.1780024252906], -[0.07119928474066, 0.1779477085086], -[0.07611750233372, 0.1778889389917], -[0.08103729990896, 0.1778260872255], -[0.08595877798275, 0.1777591218465], -[0.09088203681124, 0.1776880096647], -[0.09580717637614, 0.1776127156868], -[0.1007342963709, 0.1775332031412], -[0.1056634961872, 0.177449433504], -[0.1105948749014, 0.1773613665257], -[0.1155285312614, 0.1772689602596], -[0.1204645636744, 0.1771721710909], -[0.1254030701938, 0.1770709537669], -[0.130344148507, 0.176965261428], -[0.1352878959239, 0.1768550456402], -[0.1402344093648, 0.1767402564277], -[0.1451837853494, 0.1766208423075], -[0.1501361199852, 0.1764967503234], -[0.1550915089571, 0.1763679260825], -[0.1600500475166, 0.176234313791], -[0.1650118304714, 0.1760958562915], -[0.1699769521755, 0.1759524951013], -[0.1749455065194, 0.1758041704506], -[0.1799175869201, 0.1756508213218], -[0.1848932863122, 0.1754923854898], -[0.1898726971382, 0.1753287995623], -[0.1948559113399, 0.1751599990206], -[0.1998430203494, 0.1749859182621], -[0.20483411508, 0.1748064906417], -[0.2098292859185, 0.1746216485151], -[0.214828622716, 0.1744313232817], -[0.2198322147799, 0.1742354454284], -[0.2248401508657, 0.174033944574], -[0.2298525191686, 0.1738267495133], -[0.2348694073156, 0.1736137882626], -[0.2398909023573, 0.1733949881047], -[0.2449170907598, 0.1731702756349], -[0.2499480583965, 0.1729395768072], -[0.25498389054, 0.1727028169808], -[0.260024671854, 0.1724599209667], -[0.2650704863847, 0.1722108130754], -[0.2701214175527, 0.171955417164], -[0.2751775481441, 0.1716936566844], -[0.2802389603021, 0.1714254547314], -[0.2853057355177, 0.1711507340909], -[0.2903779546211, 0.1708694172894], -[0.295455697772, 0.1705814266423], -[0.3005390444499, 0.1702866843039], -[0.3056280734446, 0.1699851123171], -[0.3107228628456, 0.1696766326631], -[0.315823490032, 0.1693611673119], -[0.320930031661, 0.1690386382729], -[0.3260428195937, 0.168708497375], -[-0.3232235417858, 0.1735916567555], -[-0.3181152665459, 0.1739134877097], -[-0.3130130643027, 0.1742282699755], -[-0.3079168575553, 0.1745360815627], -[-0.3028265680432, 0.1748370005775], -[-0.2977421167584, 0.1751311051707], -[-0.2926634239565, 0.1754184734865], -[-0.2875904091681, 0.1756991836109], -[-0.282522991209, 0.1759733135218], -[-0.2774610881907, 0.1762409410378], -[-0.2724046175309, 0.176502143768], -[-0.2673534959627, 0.1767569990624], -[-0.2623076395447, 0.1770055839619], -[-0.2572669636699, 0.1772479751491], -[-0.2522313830754, 0.1774842488992], -[-0.2472008118511, 0.1777144810311], -[-0.2421751634486, 0.1779387468592], -[-0.2371543506901, 0.178157121145], -[-0.2321382857771, 0.1783696780492], -[-0.2271268802989, 0.1785764910849], -[-0.2221200452414, 0.1787776330696], -[-0.2171176909954, 0.178973176079], -[-0.2121197273654, 0.1791631914006], -[-0.207126063578, 0.1793477494876], -[-0.2021366082908, 0.1795269199134], -[-0.197151269601, 0.1797007713264], -[-0.192169955054, 0.1798693714055], -[-0.1871925716528, 0.180032786816], -[-0.1822190258665, 0.1801910831655], -[-0.1772492236398, 0.1803443249612], -[-0.1722830704023, 0.180492575567], -[-0.1673204710781, 0.1806358971615], -[-0.1623613300953, 0.1807743506969], -[-0.1574055513961, 0.1809079958575], -[-0.1524530384469, 0.1810368910203], -[-0.1475036942487, 0.181161093215], -[-0.1425574213478, 0.1812806580855], -[-0.1376141218464, 0.1813956398519], -[-0.132673697414, 0.1815060912735], -[-0.1277360492989, 0.1816120636119], -[-0.1228010783394, 0.1817136065962], -[-0.1178686849764, 0.1818107683876], -[-0.1129387692652, 0.1819035955465], -[-0.1080112308882, 0.1819921329992], -[-0.1030859691678, 0.1820764240065], -[-0.09816288307923, 0.1821565101327], -[-0.09324187126446, 0.1822324312163], -[-0.08832283204541, 0.1823042253412], -[-0.08340566343819, 0.1823719288097], -[-0.07849026316726, 0.1824355761157], -[-0.07357652868001, 0.1824951999203], -[-0.06866435716149, 0.1825508310276], -[-0.06375364554952, 0.1826024983623], -[-0.05884429054989, 0.1826502289488], -[-0.05393618865198, 0.1826940478908], -[-0.04902923614444, 0.1827339783532], -[-0.04412332913113, 0.1827700415448], -[-0.03921836354734, 0.1828022567026], -[-0.03431423517604, 0.1828306410773], -[-0.02941083966442, 0.1828552099208], -[-0.02450807254054, 0.1828759764746], -[-0.01960582923003, 0.1828929519598], -[-0.01470400507308, 0.1829061455688], -[-0.009802495341338, 0.1829155644586], -[-0.00490119525502, 0.1829212137451], -[-5.280181401185e-13, 0.1829230964992], -[0.00490119525502, 0.1829212137451], -[0.009802495341338, 0.1829155644586], -[0.01470400507308, 0.1829061455688], -[0.01960582923003, 0.1828929519598], -[0.02450807254054, 0.1828759764746], -[0.02941083966442, 0.1828552099208], -[0.03431423517604, 0.1828306410773], -[0.03921836354734, 0.1828022567026], -[0.04412332913113, 0.1827700415448], -[0.04902923614444, 0.1827339783532], -[0.05393618865198, 0.1826940478908], -[0.05884429054989, 0.1826502289488], -[0.06375364554952, 0.1826024983623], -[0.06866435716149, 0.1825508310276], -[0.07357652868001, 0.1824951999203], -[0.07849026316726, 0.1824355761157], -[0.08340566343819, 0.1823719288097], -[0.08832283204541, 0.1823042253412], -[0.09324187126446, 0.1822324312163], -[0.09816288307923, 0.1821565101327], -[0.1030859691678, 0.1820764240065], -[0.1080112308882, 0.1819921329992], -[0.1129387692652, 0.1819035955465], -[0.1178686849764, 0.1818107683876], -[0.1228010783394, 0.1817136065962], -[0.1277360492989, 0.1816120636119], -[0.132673697414, 0.1815060912735], -[0.1376141218464, 0.1813956398519], -[0.1425574213478, 0.1812806580855], -[0.1475036942487, 0.181161093215], -[0.1524530384469, 0.1810368910203], -[0.1574055513961, 0.1809079958575], -[0.1623613300953, 0.1807743506969], -[0.1673204710781, 0.1806358971615], -[0.1722830704023, 0.180492575567], -[0.1772492236398, 0.1803443249612], -[0.1822190258665, 0.1801910831655], -[0.1871925716528, 0.180032786816], -[0.192169955054, 0.1798693714055], -[0.197151269601, 0.1797007713264], -[0.2021366082908, 0.1795269199134], -[0.207126063578, 0.1793477494876], -[0.2121197273654, 0.1791631914006], -[0.2171176909954, 0.178973176079], -[0.2221200452414, 0.1787776330696], -[0.2271268802989, 0.1785764910849], -[0.2321382857771, 0.1783696780492], -[0.2371543506901, 0.178157121145], -[0.2421751634486, 0.1779387468592], -[0.2472008118511, 0.1777144810311], -[0.2522313830754, 0.1774842488992], -[0.2572669636699, 0.1772479751491], -[0.2623076395447, 0.1770055839619], -[0.2673534959627, 0.1767569990624], -[0.2724046175309, 0.176502143768], -[0.2774610881907, 0.1762409410378], -[0.282522991209, 0.1759733135218], -[0.2875904091681, 0.1756991836109], -[0.2926634239565, 0.1754184734865], -[0.2977421167584, 0.1751311051707], -[0.3028265680432, 0.1748370005775], -[0.3079168575553, 0.1745360815627], -[0.3130130643027, 0.1742282699755], -[0.3181152665459, 0.1739134877097], -[0.3232235417858, 0.1735916567555], -[-0.3204043394824, 0.1784746568726], -[-0.3153004687426, 0.1787886271639], -[-0.3102027514877, 0.1790956420748], -[-0.3051111092879, 0.179395780115], -[-0.3000254622541, 0.1796891195541], -[-0.2949457297241, 0.1799757387106], -[-0.289871830275, 0.1802557158999], -[-0.2848036817341, 0.1805291293825], -[-0.2797412011902, 0.1807960573122], -[-0.2746843050046, 0.181056577685], -[-0.2696329088214, 0.1813107682879], -[-0.2645869275778, 0.1815587066479], -[-0.2595462755142, 0.1818004699819], -[-0.2545108661842, 0.182036135146], -[-0.2494806124637, 0.1822657785859], -[-0.2444554265608, 0.1824894762867], -[-0.2394352200251, 0.1827073037242], -[-0.2344199037568, 0.1829193358152], -[-0.2294093880157, 0.1831256468689], -[-0.2244035824308, 0.1833263105389], -[-0.2194023960085, 0.1835213997744], -[-0.2144057371424, 0.1837109867731], -[-0.209413513622, 0.1838951429336], -[-0.2044256326414, 0.1840739388083], -[-0.1994420008092, 0.1842474440573], -[-0.1944625241569, 0.184415727402], -[-0.1894871081484, 0.1845788565795], -[-0.1845156576901, 0.1847368982974], -[-0.179548077139, 0.1848899181895], -[-0.1745842703136, 0.1850379807711], -[-0.1696241405031, 0.1851811493961], -[-0.1646675904777, 0.1853194862136], -[-0.1597145224987, 0.1854530521257], -[-0.1547648383291, 0.1855819067457], -[-0.1498184392439, 0.1857061083572], -[-0.1448752260414, 0.1858257138739], -[-0.1399350990542, 0.1859407787998], -[-0.1349979581605, 0.1860513571907], -[-0.1300637027963, 0.1861575016158], -[-0.1251322319665, 0.1862592631213], -[-0.1202034442581, 0.1863566911936], -[-0.1152772378521, 0.1864498337243], -[-0.1103535105367, 0.1865387369757], -[-0.1054321597202, 0.1866234455479], -[-0.1005130824446, 0.186704002346], -[-0.09559617539957, 0.1867804485493], -[-0.09068133493587, 0.1868528235813], -[-0.08576845708026, 0.1869211650803], -[-0.08085743754987, 0.1869855088721], -[-0.07594817176715, 0.1870458889435], -[-0.07104055487505, 0.1871023374168], -[-0.0661344817525, 0.187154884526], -[-0.06122984703007, 0.1872035585941], -[-0.05632654510597, 0.1872483860121], -[-0.05142447016224, 0.1872893912186], -[-0.04652351618116, 0.1873265966819], -[-0.04162357696189, 0.1873600228826], -[-0.03672454613728, 0.1873896882979], -[-0.03182631719092, 0.1874156093882], -[-0.02692878347425, 0.1874378005838], -[-0.02203183822392, 0.1874562742741], -[-0.0171353745792, 0.1874710407984], -[-0.01223928559957, 0.1874821084374], -[-0.00734346428233, 0.1874894834075], -[-0.002447803580318, 0.1874931698554], -[0.002447803580318, 0.1874931698554], -[0.00734346428233, 0.1874894834075], -[0.01223928559957, 0.1874821084374], -[0.0171353745792, 0.1874710407984], -[0.02203183822392, 0.1874562742741], -[0.02692878347425, 0.1874378005838], -[0.03182631719092, 0.1874156093882], -[0.03672454613728, 0.1873896882979], -[0.04162357696189, 0.1873600228826], -[0.04652351618116, 0.1873265966819], -[0.05142447016224, 0.1872893912186], -[0.05632654510597, 0.1872483860121], -[0.06122984703007, 0.1872035585941], -[0.0661344817525, 0.187154884526], -[0.07104055487505, 0.1871023374168], -[0.07594817176715, 0.1870458889435], -[0.08085743754987, 0.1869855088721], -[0.08576845708026, 0.1869211650803], -[0.09068133493587, 0.1868528235813], -[0.09559617539957, 0.1867804485493], -[0.1005130824446, 0.186704002346], -[0.1054321597202, 0.1866234455479], -[0.1103535105367, 0.1865387369757], -[0.1152772378521, 0.1864498337243], -[0.1202034442581, 0.1863566911936], -[0.1251322319665, 0.1862592631213], -[0.1300637027963, 0.1861575016158], -[0.1349979581605, 0.1860513571907], -[0.1399350990542, 0.1859407787998], -[0.1448752260414, 0.1858257138739], -[0.1498184392439, 0.1857061083572], -[0.1547648383291, 0.1855819067457], -[0.1597145224987, 0.1854530521257], -[0.1646675904777, 0.1853194862136], -[0.1696241405031, 0.1851811493961], -[0.1745842703136, 0.1850379807711], -[0.179548077139, 0.1848899181895], -[0.1845156576901, 0.1847368982974], -[0.1894871081486, 0.1845788565795], -[0.1944625241569, 0.184415727402], -[0.1994420008092, 0.1842474440573], -[0.2044256326414, 0.1840739388083], -[0.209413513622, 0.1838951429336], -[0.2144057371424, 0.1837109867731], -[0.2194023960085, 0.1835213997744], -[0.2244035824308, 0.1833263105389], -[0.2294093880157, 0.1831256468689], -[0.2344199037568, 0.1829193358152], -[0.2394352200251, 0.1827073037242], -[0.2444554265608, 0.1824894762867], -[0.2494806124637, 0.1822657785859], -[0.2545108661842, 0.182036135146], -[0.2595462755142, 0.1818004699819], -[0.2645869275778, 0.1815587066479], -[0.2696329088214, 0.1813107682879], -[0.2746843050046, 0.181056577685], -[0.2797412011902, 0.1807960573122], -[0.2848036817341, 0.1805291293825], -[0.289871830275, 0.1802557158999], -[0.2949457297241, 0.1799757387106], -[0.3000254622541, 0.1796891195541], -[0.3051111092879, 0.179395780115], -[0.3102027514877, 0.1790956420748], -[0.3153004687426, 0.1787886271639], -[0.3204043397259, 0.1784746567062], -[-0.317585048657, 0.1833578133327], -[-0.3124857274029, 0.1836639021743], -[-0.3073926400075, 0.1839631304149], -[-0.3023057057377, 0.1842555764294], -[-0.2972248430503, 0.1845413186983], -[-0.2921499696052, 0.1848204357548], -[-0.287081002277, 0.1850930061314], -[-0.2820178571673, 0.1853591083075], -[-0.2769604496159, 0.1856188206572], -[-0.2719086942125, 0.1858722213968], -[-0.2668625048072, 0.186119388533], -[-0.2618217945214, 0.186360399811], -[-0.256786475758, 0.1865953326636], -[-0.251756460212, 0.1868242641592], -[-0.2467316588803, 0.1870472709519], -[-0.2417119820716, 0.1872644292298], -[-0.2366973394161, 0.1874758146655], -[-0.2316876398751, 0.1876815023656], -[-0.2266827917507, 0.1878815668213], -[-0.2216827026953, 0.1880760818585], -[-0.2166872797206, 0.1882651205893], -[-0.2116964292077, 0.1884487553629], -[-0.2067100569159, 0.1886270577174], -[-0.2017280679928, 0.1888000983319], -[-0.1967503669832, 0.1889679469788], -[-0.1917768578393, 0.1891306724771], -[-0.1868074439298, 0.1892883426452], -[-0.1818420280504, 0.1894410242554], -[-0.1768805124333, 0.1895887829878], -[-0.1719227987575, 0.1897316833854], -[-0.166968788159, 0.1898697888097], -[-0.1620183812417, 0.1900031613966], -[-0.1570714780873, 0.1901318620133], -[-0.1521279782674, 0.1902559502157], -[-0.1471877808535, 0.1903754842063], -[-0.1422507844294, 0.1904905207933], -[-0.1373168871022, 0.1906011153502], -[-0.1323859865148, 0.1907073217761], -[-0.1274579798577, 0.190809192457], -[-0.1225327638819, 0.190906778228], -[-0.1176102349116, 0.1910001283368], -[-0.1126902888575, 0.1910892904069], -[-0.1077728212299, 0.1911743104036], -[-0.1028577271528, 0.1912552325995], -[-0.09794490137797, 0.191332099542], -[-0.09303423829902, 0.1914049520217], -[-0.08812563196642, 0.1914738290415], -[-0.0832189761023, 0.1915387677878], -[-0.07831416411582, 0.1915998036023], -[-0.07341108911871, 0.191656969955], -[-0.06850964394111, 0.1917102984189], -[-0.06360972114776, 0.191759818646], -[-0.05871121305435, 0.1918055583445], -[-0.0538140117442, 0.1918475432574], -[-0.04891800908514, 0.1918857971426], -[-0.04402309674663, 0.1919203417548], -[-0.03912916621707, 0.1919511968284], -[-0.03423610882137, 0.191978380062], -[-0.02934381573861, 0.192001907105], -[-0.02445217801994, 0.192021791545], -[-0.01956108660654, 0.1920380448974], -[-0.01467043234782, 0.1920506765962], -[-0.009780106019593, 0.1920596939866], -[-0.004889998342421, 0.1920651023194], -[1.984048861845e-13, 0.1920669047466], -[0.004889998342421, 0.1920651023194], -[0.009780106019593, 0.1920596939866], -[0.01467043234782, 0.1920506765962], -[0.01956108660654, 0.1920380448974], -[0.02445217801994, 0.192021791545], -[0.02934381573861, 0.192001907105], -[0.03423610882137, 0.191978380062], -[0.03912916621707, 0.1919511968284], -[0.04402309674663, 0.1919203417548], -[0.04891800908514, 0.1918857971426], -[0.0538140117442, 0.1918475432574], -[0.05871121305435, 0.1918055583445], -[0.06360972114776, 0.191759818646], -[0.06850964394111, 0.1917102984189], -[0.07341108911871, 0.191656969955], -[0.07831416411582, 0.1915998036023], -[0.0832189761023, 0.1915387677878], -[0.08812563196642, 0.1914738290415], -[0.09303423829902, 0.1914049520217], -[0.09794490137797, 0.191332099542], -[0.1028577271528, 0.1912552325995], -[0.1077728212299, 0.1911743104036], -[0.1126902888575, 0.1910892904069], -[0.1176102349116, 0.1910001283368], -[0.1225327638819, 0.190906778228], -[0.1274579798577, 0.190809192457], -[0.1323859865148, 0.1907073217761], -[0.1373168871022, 0.1906011153502], -[0.1422507844294, 0.1904905207933], -[0.1471877808535, 0.1903754842063], -[0.1521279782674, 0.1902559502157], -[0.1570714780873, 0.1901318620133], -[0.1620183812417, 0.1900031613966], -[0.166968788159, 0.1898697888097], -[0.1719227987575, 0.1897316833854], -[0.1768805124333, 0.1895887829878], -[0.1818420280504, 0.1894410242554], -[0.1868074439298, 0.1892883426452], -[0.1917768578393, 0.1891306724771], -[0.1967503669832, 0.1889679469788], -[0.2017280679928, 0.1888000983319], -[0.2067100569159, 0.1886270577174], -[0.2116964292077, 0.1884487553629], -[0.2166872797206, 0.1882651205893], -[0.2216827026953, 0.1880760818585], -[0.2266827917507, 0.1878815668213], -[0.2316876398751, 0.1876815023656], -[0.2366973394161, 0.1874758146655], -[0.2417119820716, 0.1872644292298], -[0.2467316588803, 0.1870472709519], -[0.251756460212, 0.1868242641592], -[0.256786475758, 0.1865953326636], -[0.2618217945214, 0.186360399811], -[0.2668625048072, 0.186119388533], -[0.2719086942125, 0.1858722213968], -[0.2769604496159, 0.1856188206572], -[0.2820178571673, 0.1853591083075], -[0.287081002277, 0.1850930061314], -[0.2921499696052, 0.1848204357548], -[0.2972248430503, 0.1845413186983], -[0.3023057057377, 0.1842555764294], -[0.3073926400075, 0.1839631304149], -[0.3124857274029, 0.1836639021743], -[0.317585048657, 0.1833578133327], -[-0.3147657564635, 0.1882409691324], -[-0.3096711316903, 0.1885391583056], -[-0.3045828183227, 0.1888305818236], -[-0.2995007346671, 0.1891153186354], -[-0.2944247975021, 0.1893934474799], -[-0.2893549227855, 0.1896650471513], -[-0.284291025667, 0.1899301964447], -[-0.2792330205, 0.1901889741035], -[-0.2741808208541, 0.1904414587656], -[-0.2691343395265, 0.1906877289104], -[-0.264093488553, 0.190927862806], -[-0.2590581792196, 0.1911619384568], -[-0.2540283220729, 0.1913900335509], -[-0.249003826931, 0.1916122254082], -[-0.2439846028934, 0.1918285909282], -[-0.238970558352, 0.1920392065389], -[-0.2339616010006, 0.192244148145], -[-0.2289576378448, 0.1924434910772], -[-0.2239585752133, 0.1926373100412], -[-0.2189643187653, 0.1928256790677], -[-0.2139747735027, 0.1930086714619], -[-0.2089898437786, 0.1931863597541], -[-0.2040094333075, 0.1933588156499], -[-0.1990334451753, 0.1935261099819], -[-0.1940617818492, 0.1936883126605], -[-0.1890943451874, 0.1938454926263], -[-0.1841310364497, 0.1939977178022], -[-0.1791717563075, 0.1941450550463], -[-0.1742164048544, 0.1942875701054], -[-0.1692648816167, 0.1944253275688], -[-0.1643170855641, 0.194558390823], -[-0.1593729151207, 0.1946868220067], -[-0.1544322681765, 0.1948106819666], -[-0.1494950420985, 0.194930030214], -[-0.1445611337425, 0.1950449248821], -[-0.1396304394652, 0.1951554226836], -[-0.1347028551363, 0.1952615788701], -[-0.129778276151, 0.1953634471911], -[-0.1248565974428, 0.1954610798549], -[-0.1199377134971, 0.1955545274902], -[-0.115021518364, 0.1956438391079], -[-0.1101079056721, 0.1957290620652], -[-0.1051967686433, 0.1958102420296], -[-0.1002880001062, 0.1958874229447], -[-0.09538149251149, 0.1959606469969], -[-0.09047713794683, 0.1960299545831], -[-0.08557482815204, 0.1960953842798], -[-0.0806744545349, 0.1961569728139], -[-0.07577590818704, 0.1962147550336], -[-0.07087907990028, 0.196268763882], -[-0.06598386018313, 0.1963190303711], -[-0.06109013927761, 0.1963655835577], -[-0.05619780717643, 0.1964084505207], -[-0.05130675364029, 0.1964476563394], -[-0.0464168682155, 0.1964832240742], -[-0.04152804025185, 0.1965151747481], -[-0.03664015892055, 0.1965435273297], -[-0.03175311323271, 0.1965682987188], -[-0.02686679205746, 0.1965895037322], -[-0.02198108414075, 0.1966071550922], -[-0.017095878124, 0.1966212634166], -[-0.01221106256293, 0.1966318372095], -[-0.007326525946517, 0.1966388828554], -[-0.00244215671601, 0.1966424046131], -[0.00244215671601, 0.1966424046131], -[0.007326525946517, 0.1966388828554], -[0.01221106256293, 0.1966318372095], -[0.017095878124, 0.1966212634166], -[0.02198108414075, 0.1966071550922], -[0.02686679205746, 0.1965895037322], -[0.03175311323271, 0.1965682987188], -[0.03664015892055, 0.1965435273297], -[0.04152804025185, 0.1965151747481], -[0.0464168682155, 0.1964832240742], -[0.05130675364029, 0.1964476563394], -[0.05619780717643, 0.1964084505207], -[0.06109013927761, 0.1963655835577], -[0.06598386018313, 0.1963190303711], -[0.07087907990028, 0.196268763882], -[0.07577590818704, 0.1962147550336], -[0.0806744545349, 0.1961569728139], -[0.08557482815204, 0.1960953842798], -[0.09047713794683, 0.1960299545831], -[0.09538149251149, 0.1959606469969], -[0.1002880001062, 0.1958874229447], -[0.1051967686433, 0.1958102420296], -[0.1101079056721, 0.1957290620652], -[0.115021518364, 0.1956438391079], -[0.1199377134971, 0.1955545274902], -[0.1248565974428, 0.1954610798549], -[0.1297782761509, 0.1953634471911], -[0.1347028551363, 0.1952615788701], -[0.1396304394652, 0.1951554226836], -[0.1445611337425, 0.1950449248821], -[0.1494950420985, 0.194930030214], -[0.1544322681765, 0.1948106819666], -[0.1593729151207, 0.1946868220067], -[0.1643170855641, 0.194558390823], -[0.1692648816167, 0.1944253275688], -[0.1742164048544, 0.1942875701054], -[0.1791717563075, 0.1941450550463], -[0.1841310364497, 0.1939977178022], -[0.1890943451874, 0.1938454926263], -[0.1940617818492, 0.1936883126605], -[0.1990334451753, 0.1935261099819], -[0.2040094333075, 0.1933588156499], -[0.2089898437786, 0.1931863597541], -[0.2139747735027, 0.1930086714619], -[0.2189643187653, 0.1928256790677], -[0.2239585752133, 0.1926373100412], -[0.228957637845, 0.1924434910771], -[0.2339616010006, 0.192244148145], -[0.238970558352, 0.1920392065389], -[0.2439846028934, 0.1918285909282], -[0.249003826931, 0.1916122254082], -[0.2540283220729, 0.1913900335509], -[0.2590581792196, 0.1911619384568], -[0.264093488553, 0.190927862806], -[0.2691343395265, 0.1906877289104], -[0.2741808208541, 0.1904414587656], -[0.2792330205, 0.1901889741035], -[0.284291025667, 0.1899301964447], -[0.2893549227855, 0.1896650471513], -[0.2944247975021, 0.1893934474799], -[0.2995007346671, 0.1891153186354], -[0.3045828183227, 0.1888305818236], -[0.3096711316903, 0.1885391583056], -[0.3147657571573, 0.1882409694514], -[-0.3119465552465, 0.1931239691695], -[-0.306856770796, 0.1934142411193], -[-0.3017733749499, 0.1936978431234], -[-0.2966962839234, 0.1939748548551], -[-0.291625412793, 0.1942453553592], -[-0.2865606757915, 0.1945094237368], -[-0.2815019863211, 0.1947671390916], -[-0.2764492569657, 0.1950185804751], -[-0.2714023995036, 0.1952638268327], -[-0.2663613249187, 0.1955029569496], -[-0.2613259434133, 0.195736049397], -[-0.2562961644186, 0.1959631824789], -[-0.2512718966062, 0.1961844341784], -[-0.2462530478987, 0.196399882105], -[-0.241239525481, 0.1966096034416], -[-0.2362312358105, 0.1968136748918], -[-0.2312280846278, 0.1970121726279], -[-0.2262299769667, 0.1972051722384], -[-0.221236817165, 0.1973927486767], -[-0.2162485088742, 0.1975749762096], -[-0.2112649550701, 0.1977519283658], -[-0.2062860580628, 0.1979236778856], -[-0.2013117195068, 0.1980902966702], -[-0.1963418404116, 0.1982518557321], -[-0.191376321152, 0.1984084251448], -[-0.1864150614781, 0.1985600739945], -[-0.1814579605264, 0.1987068703308], -[-0.1765049168301, 0.198848881119], -[-0.1715558283306, 0.1989861721922], -[-0.1666105923873, 0.1991188082041], -[-0.1616691057903, 0.1992468525832], -[-0.1567312647708, 0.1993703674862], -[-0.1517969650135, 0.1994894137533], -[-0.1468661016679, 0.1996040508638], -[-0.1419385693611, 0.199714336892], -[-0.1370142622099, 0.1998203284651], -[-0.1320930738338, 0.1999220807203], -[-0.1271748973681, 0.2000196472641], -[-0.1222596254771, 0.200113080132], -[-0.1173471503679, 0.2002024297491], -[-0.1124373638045, 0.2002877448921], -[-0.1075301571224, 0.2003690726516], -[-0.1026254212426, 0.2004464583963], -[-0.09772304668737, 0.2005199457381], -[-0.0928229235953, 0.2005895764979], -[-0.08792494173693, 0.2006553906733], -[-0.08302899053092, 0.2007174264073], -[-0.07813495906033, 0.2007757199582], -[-0.07324273608929, 0.200830305671], -[-0.06835221007999, 0.20088121595], -[-0.06346326920993, 0.2009284812334], -[-0.05857580138949, 0.2009721299685], -[-0.05368969427978, 0.2010121885889], -[-0.04880483531071, 0.2010486814938], -[-0.04392111169935, 0.2010816310274], -[-0.03903841046852, 0.2011110574615], -[-0.03415661846556, 0.2011369789786], -[-0.02927562238132, 0.2011594116574], -[-0.02439530876938, 0.2011783694596], -[-0.01951556406521, 0.201193864218], -[-0.01463627460586, 0.2012059056276], -[-0.009757326649324, 0.2012145012372], -[-0.004878606394328, 0.2012196564432], -[-2.802508825719e-15, 0.2012213744851], -[0.004878606394332, 0.2012196564433], -[0.009757326649324, 0.2012145012372], -[0.01463627460586, 0.2012059056276], -[0.01951556406521, 0.201193864218], -[0.02439530876937, 0.2011783694595], -[0.02927562238132, 0.2011594116574], -[0.03415661846556, 0.2011369789786], -[0.03903841046852, 0.2011110574615], -[0.04392111169935, 0.2010816310274], -[0.04880483531071, 0.2010486814938], -[0.05368969427978, 0.2010121885889], -[0.05857580138949, 0.2009721299685], -[0.06346326920993, 0.2009284812334], -[0.06835221007999, 0.20088121595], -[0.07324273608929, 0.200830305671], -[0.07813495906033, 0.2007757199582], -[0.08302899053092, 0.2007174264073], -[0.08792494173693, 0.2006553906733], -[0.09282292359529, 0.2005895764979], -[0.09772304668737, 0.2005199457381], -[0.1026254212426, 0.2004464583963], -[0.1075301571224, 0.2003690726516], -[0.1124373638045, 0.2002877448921], -[0.1173471503679, 0.2002024297491], -[0.122259625477, 0.2001130801319], -[0.1271748973681, 0.2000196472641], -[0.1320930738338, 0.1999220807203], -[0.1370142622099, 0.1998203284651], -[0.1419385693611, 0.199714336892], -[0.1468661016679, 0.1996040508638], -[0.1517969650135, 0.1994894137533], -[0.1567312647708, 0.1993703674862], -[0.1616691057903, 0.1992468525832], -[0.1666105923873, 0.1991188082041], -[0.1715558283305, 0.1989861721922], -[0.1765049168303, 0.198848881119], -[0.1814579605264, 0.1987068703308], -[0.1864150614781, 0.1985600739945], -[0.191376321152, 0.1984084251448], -[0.1963418404116, 0.1982518557321], -[0.2013117195068, 0.1980902966702], -[0.2062860580628, 0.1979236778856], -[0.2112649550701, 0.1977519283658], -[0.2162485088742, 0.1975749762096], -[0.221236817165, 0.1973927486767], -[0.2262299769667, 0.1972051722384], -[0.2312280846278, 0.1970121726279], -[0.2362312358105, 0.1968136748918], -[0.241239525481, 0.1966096034416], -[0.2462530478987, 0.196399882105], -[0.2512718966062, 0.1961844341784], -[0.2562961644186, 0.1959631824789], -[0.2613259434133, 0.195736049397], -[0.2663613249187, 0.1955029569496], -[0.2714023995033, 0.1952638268328], -[0.2764492569657, 0.1950185804751], -[0.2815019863211, 0.1947671390916], -[0.2865606757915, 0.1945094237368], -[0.291625412793, 0.1942453553592], -[0.2966962839234, 0.1939748548551], -[0.3017733749499, 0.1936978431234], -[0.306856770796, 0.1934142411193], -[0.311946555452, 0.1931239690465], -[-0.3091275336564, 0.1980066590195], -[-0.3040427339559, 0.1982889961459], -[-0.2989643984786, 0.1985647611029], -[-0.2938924414551, 0.1988340331747], -[-0.2888267762367, 0.1990968917584], -[-0.2837673153087, 0.199353416309], -[-0.278713970304, 0.1996036862836], -[-0.2736666520157, 0.1998477810864], -[-0.2686252704102, 0.2000857800136], -[-0.2635897346388, 0.2003177621987], -[-0.2585599530502, 0.2005438065574], -[-0.2535358332021, 0.2007639917337], -[-0.2485172818724, 0.2009783960452], -[-0.2435042050707, 0.2011870974294], -[-0.2384965080494, 0.2013901733896], -[-0.2334940953145, 0.2015877009412], -[-0.2284968706363, 0.2017797565589], -[-0.2235047370604, 0.2019664161229], -[-0.2185175969176, 0.202147754867], -[-0.2135353518357, 0.202323847325], -[-0.2085579027488, 0.2024947672795], -[-0.2035851499085, 0.2026605877096], -[-0.1986169928943, 0.2028213807396], -[-0.1936533306245, 0.2029772175878], -[-0.1886940613663, 0.2031281685161], -[-0.1837390827473, 0.2032743027794], -[-0.1787882917663, 0.2034156885763], -[-0.173841584804, 0.2035523929999], -[-0.1688988576349, 0.2036844819886], -[-0.1639600054384, 0.2038120202787], -[-0.1590249228105, 0.2039350713567], -[-0.154093503776, 0.2040536974121], -[-0.1491656418002, 0.2041679592922], -[-0.1442412298021, 0.2042779164556], -[-0.1393201601662, 0.2043836269287], -[-0.1344023247566, 0.2044851472611], -[-0.1294876149292, 0.2045825324834], -[-0.1245759215462, 0.2046758360644], -[-0.1196671349899, 0.2047651098709], -[-0.1147611451765, 0.2048504041271], -[-0.1098578415718, 0.2049317673761], -[-0.1049571132049, 0.2050092464414], -[-0.1000588486846, 0.2050828863908], -[-0.09516293621443, 0.2051527305005], -[-0.09026926360926, 0.2052188202207], -[-0.08537771831119, 0.2052811951431], -[-0.08048818740648, 0.2053398929684], -[-0.07560055764261, 0.2053949494768], -[-0.07071471544564, 0.2054463984986], -[-0.06583054693791, 0.2054942718868], -[-0.06094793795607, 0.2055385994911], -[-0.05606677406937, 0.2055794091338], -[-0.05118694059826, 0.2056167265868], -[-0.04630832263324, 0.20565057555], -[-0.04143080505398, 0.2056809776322], -[-0.03655427254863, 0.2057079523333], -[-0.03167860963344, 0.2057315170273], -[-0.02680370067244, 0.2057516869487], -[-0.02192942989744, 0.2057684751794], -[-0.01705568142804, 0.2057818926377], -[-0.01218233929191, 0.2057919480693], -[-0.007309287445072, 0.2057986480398], -[-0.002436409792319, 0.2058019969296], -[0.002436409792319, 0.2058019969296], -[0.007309287445072, 0.2057986480398], -[0.01218233929191, 0.2057919480693], -[0.01705568142804, 0.2057818926377], -[0.02192942989744, 0.2057684751794], -[0.02680370067244, 0.2057516869487], -[0.03167860963344, 0.2057315170273], -[0.03655427254863, 0.2057079523333], -[0.04143080505398, 0.2056809776322], -[0.04630832263324, 0.20565057555], -[0.05118694059826, 0.2056167265868], -[0.05606677406937, 0.2055794091338], -[0.06094793795607, 0.2055385994911], -[0.06583054693791, 0.2054942718868], -[0.07071471544564, 0.2054463984986], -[0.07560055764261, 0.2053949494768], -[0.08048818740648, 0.2053398929684], -[0.08537771831119, 0.2052811951431], -[0.09026926360926, 0.2052188202207], -[0.09516293621443, 0.2051527305005], -[0.1000588486846, 0.2050828863908], -[0.1049571132049, 0.2050092464414], -[0.1098578415718, 0.2049317673761], -[0.1147611451766, 0.2048504041271], -[0.1196671349899, 0.2047651098709], -[0.1245759215462, 0.2046758360644], -[0.1294876149292, 0.2045825324834], -[0.1344023247566, 0.2044851472611], -[0.1393201601662, 0.2043836269287], -[0.1442412298021, 0.2042779164556], -[0.1491656418002, 0.2041679592922], -[0.154093503776, 0.2040536974121], -[0.1590249228105, 0.2039350713567], -[0.1639600054384, 0.2038120202787], -[0.1688988576349, 0.2036844819886], -[0.173841584804, 0.2035523929999], -[0.1787882917663, 0.2034156885763], -[0.1837390827473, 0.2032743027794], -[0.1886940613663, 0.2031281685161], -[0.1936533306245, 0.2029772175878], -[0.1986169928943, 0.2028213807396], -[0.2035851499085, 0.2026605877096], -[0.2085579027488, 0.2024947672795], -[0.2135353518357, 0.202323847325], -[0.2185175969176, 0.202147754867], -[0.2235047370603, 0.201966416123], -[0.2284968706363, 0.2017797565589], -[0.2334940953145, 0.2015877009412], -[0.2384965080494, 0.2013901733896], -[0.2435042050707, 0.2011870974294], -[0.2485172818724, 0.2009783960452], -[0.2535358332021, 0.2007639917337], -[0.2585599530502, 0.2005438065574], -[0.2635897346388, 0.2003177621987], -[0.2686252704102, 0.2000857800136], -[0.2736666520157, 0.1998477810864], -[0.278713970304, 0.1996036862836], -[0.2837673153087, 0.199353416309], -[0.2888267762367, 0.1990968917584], -[0.2938924414551, 0.1988340331747], -[0.2989643984786, 0.1985647611029], -[0.304042733956, 0.1982889961459], -[0.3091275336564, 0.1980066590195], -[-0.3063087814621, 0.2028888810339], -[-0.301229110467, 0.2031632688555], -[-0.2961559775878, 0.2034311824885], -[-0.291089295329, 0.2036927016158], -[-0.2860289752941, 0.2039479060344], -[-0.2809749281989, 0.2041968755988], -[-0.2759270638858, 0.2044396901648], -[-0.2708852913366, 0.2046764295337], -[-0.2658495186855, 0.2049071733958], -[-0.2608196532315, 0.205132001275], -[-0.2557956014509, 0.2053509924731], -[-0.2507772690091, 0.2055642260143], -[-0.2457645607724, 0.2057717805901], -[-0.2407573808193, 0.2059737345038], -[-0.2357556324525, 0.2061701656163], -[-0.2307592182093, 0.2063611512909], -[-0.2257680398732, 0.2065467683392], -[-0.2207819984848, 0.2067270929669], -[-0.2158009943525, 0.2069022007201], -[-0.2108249270638, 0.2070721664312], -[-0.2058536954955, 0.2072370641663], -[-0.2008871978254, 0.2073969671719], -[-0.1959253315424, 0.2075519478224], -[-0.1909679934583, 0.2077020775682], -[-0.1860150797182, 0.2078474268835], -[-0.1810664858121, 0.2079880652156], -[-0.1761221065861, 0.2081240609335], -[-0.171181836254, 0.2082554812781], -[-0.1662455684091, 0.2083823923124], -[-0.1613131960359, 0.2085048588722], -[-0.1563846115223, 0.2086229445177], -[-0.1514597066721, 0.208736711486], -[-0.1465383727177, 0.2088462206434], -[-0.141620500333, 0.2089515314398], -[-0.1367059796465, 0.2090527018626], -[-0.1317965984414, 0.2091513950023], -[-0.126887851337, 0.2092420058374], -[-0.1219813332919, 0.2093309706396], -[-0.1170791981398, 0.2094170859127], -[-0.1121797697577, 0.2094983700261], -[-0.107283023178, 0.2095758285481], -[-0.1023888451115, 0.2096495080337], -[-0.09749712184142, 0.2097194532465], -[-0.09260773924048, 0.2097857071222], -[-0.08772058278729, 0.2098483107341], -[-0.08283553758349, 0.2099073032596], -[-0.07795248837126, 0.2099627219481], -[-0.07307131955105, 0.2100146020903], -[-0.06819191519972, 0.2100629769893], -[-0.06331415908902, 0.2101078779325], -[-0.05843793470436, 0.2101493341661], -[-0.05356312526387, 0.2101873728701], -[-0.0486896137378, 0.2102220191361], -[-0.04381728286814, 0.2102532959455], -[-0.03894601518851, 0.2102812241504], -[-0.03407569304434, 0.2103058224562], -[-0.02920619861314, 0.2103271074051], -[-0.02433741392515, 0.2103450933627], -[-0.01946922088396, 0.2103597925051], -[-0.01460150128744, 0.210371214809], -[-0.009734136848703, 0.2103793680428], -[-0.004867009217225, 0.2103842577604], -[-1.464310861438e-13, 0.2103858872956], -[0.004867009217225, 0.2103842577604], -[0.009734136848703, 0.2103793680428], -[0.01460150128744, 0.210371214809], -[0.01946922088396, 0.2103597925051], -[0.02433741392515, 0.2103450933627], -[0.02920619861314, 0.2103271074051], -[0.03407569304433, 0.2103058224562], -[0.03894601518851, 0.2102812241504], -[0.04381728286814, 0.2102532959455], -[0.0486896137378, 0.2102220191361], -[0.05356312526387, 0.2101873728701], -[0.05843793470436, 0.2101493341661], -[0.06331415908902, 0.2101078779325], -[0.06819191519972, 0.2100629769893], -[0.07307131955105, 0.2100146020903], -[0.07795248837126, 0.2099627219481], -[0.08283553758349, 0.2099073032596], -[0.08772058278729, 0.2098483107341], -[0.09260773924048, 0.2097857071222], -[0.09749712184142, 0.2097194532465], -[0.1023888451115, 0.2096495080337], -[0.107283023178, 0.2095758285481], -[0.1121797697577, 0.2094983700261], -[0.1170791981398, 0.2094170859127], -[0.1219813331228, 0.2093309688373], -[0.126887851337, 0.2092420058374], -[0.1317965984414, 0.2091513950023], -[0.1367059796465, 0.2090527018626], -[0.141620500333, 0.2089515314398], -[0.1465383727177, 0.2088462206434], -[0.1514597066721, 0.208736711486], -[0.1563846115223, 0.2086229445177], -[0.1613131960359, 0.2085048588722], -[0.1662455684091, 0.2083823923124], -[0.171181836254, 0.2082554812781], -[0.1761221065861, 0.2081240609335], -[0.1810664858121, 0.2079880652156], -[0.1860150797182, 0.2078474268835], -[0.1909679934583, 0.2077020775682], -[0.1959253315424, 0.2075519478224], -[0.2008871978254, 0.2073969671719], -[0.2058536954955, 0.2072370641663], -[0.2108249270638, 0.2070721664312], -[0.2158009943525, 0.2069022007201], -[0.2207819984848, 0.2067270929669], -[0.2257680398732, 0.2065467683392], -[0.2307592182093, 0.2063611512909], -[0.2357556324525, 0.2061701656163], -[0.2407573808193, 0.2059737345038], -[0.2457645607724, 0.2057717805901], -[0.2507772690091, 0.2055642260143], -[0.2557956014509, 0.2053509924731], -[0.2608196532315, 0.205132001275], -[0.2658495186855, 0.2049071733958], -[0.2708852913366, 0.2046764295337], -[0.2759270638858, 0.2044396901648], -[0.2809749281989, 0.2041968755988], -[0.2860289752941, 0.2039479060344], -[0.291089295329, 0.2036927016159], -[0.2961559775878, 0.2034311824885], -[0.301229110467, 0.2031632688555], -[0.3063087814621, 0.2028888810339], -[-0.3034903889149, 0.2077704801213], -[-0.2984159897038, 0.2080369046301], -[-0.2933482010624, 0.2082969539157], -[-0.2882869337465, 0.2085507081078], -[-0.2832320975896, 0.2087982474498], -[-0.2781836015169, 0.209039652242], -[-0.2731413535595, 0.209275002784], -[-0.2681052608676, 0.2095043793182], -[-0.2630752297234, 0.2097278619722], -[-0.2580511655547, 0.2099455307028], -[-0.2530329729463, 0.2101574652388], -[-0.2480205556532, 0.2103637450251], -[-0.2430138166119, 0.2105644491657], -[-0.2380126579525, 0.2107596563684], -[-0.2330169810106, 0.2109494448881], -[-0.2280266863379, 0.211133892472], -[-0.2230416737144, 0.2113130763032], -[-0.2180618421593, 0.2114870729461], -[-0.2130870899423, 0.2116559582913], -[-0.2081173145944, 0.2118198075008], -[-0.2031524129198, 0.2119786949536], -[-0.1981922810063, 0.2121326941919], -[-0.1932368142371, 0.2122818778675], -[-0.1882859073019, 0.2124263176879], -[-0.1833394542084, 0.2125660843642], -[-0.1783973482938, 0.2127012475584], -[-0.1734594822366, 0.2128318758314], -[-0.1685257480686, 0.2129580365919], -[-0.163596037187, 0.2130797960455], -[-0.1586702403663, 0.2131972191443], -[-0.1537482477718, 0.2133103695377], -[-0.1488299489718, 0.2134193095236], -[-0.1439152329508, 0.2135241000001], -[-0.1390039881231, 0.2136248004182], -[-0.1340959183522, 0.2137226722406], -[-0.1291920490009, 0.2138145016849], -[-0.1242902861874, 0.2139026405728], -[-0.1193914070882, 0.2139875720861], -[-0.1144958882399, 0.2140689253548], -[-0.1096030971226, 0.2141462471268], -[-0.1047129813347, 0.2142198506984], -[-0.09982542525436, 0.2142897823533], -[-0.09494031282635, 0.2143560865466], -[-0.09005752757916, 0.2144188058677], -[-0.0851769526424, 0.2144779810053], -[-0.08029847076463, 0.2145336507136], -[-0.07542196433157, 0.2145858517797], -[-0.07054731538461, 0.2146346189926], -[-0.06567440563976, 0.2146799851144], -[-0.06080311650684, 0.2147219808515], -[-0.05593332910909, 0.2147606348294], -[-0.05106492430302, 0.2147959735679], -[-0.04619778269863, 0.214828021458], -[-0.04133178467981, 0.2148568007416], -[-0.03646681042507, 0.2148823314916], -[-0.03160273992854, 0.214904631595], -[-0.02673945302107, 0.2149237167371], -[-0.02187682939164, 0.2149396003882], -[-0.01701474860889, 0.2149522937912], -[-0.01215309014276, 0.2149618059526], -[-0.007291733386362, 0.2149681436339], -[-0.002430557677804, 0.2149713113463], -[0.002430557677804, 0.2149713113463], -[0.007291733386362, 0.2149681436339], -[0.01215309014276, 0.2149618059526], -[0.01701474860889, 0.2149522937912], -[0.02187682939164, 0.2149396003882], -[0.02673945302107, 0.2149237167371], -[0.03160273992854, 0.214904631595], -[0.03646681042507, 0.2148823314916], -[0.04133178467981, 0.2148568007416], -[0.04619778269863, 0.214828021458], -[0.05106492430302, 0.2147959735679], -[0.05593332910909, 0.2147606348294], -[0.06080311650684, 0.2147219808515], -[0.06567440563976, 0.2146799851144], -[0.07054731538461, 0.2146346189926], -[0.07542196433157, 0.2145858517797], -[0.08029847076463, 0.2145336507136], -[0.0851769526424, 0.2144779810053], -[0.09005752757916, 0.2144188058677], -[0.09494031282627, 0.2143560865465], -[0.09982542525436, 0.2142897823533], -[0.1047129813347, 0.2142198506984], -[0.1096030971226, 0.2141462471268], -[0.1144958882399, 0.2140689253548], -[0.1193914070882, 0.2139875720861], -[0.1242902861874, 0.2139026405728], -[0.1291920490009, 0.2138145016849], -[0.1340959183522, 0.2137226722406], -[0.1390039881231, 0.2136248004182], -[0.1439152329508, 0.2135241000001], -[0.1488299489718, 0.2134193095236], -[0.1537482477718, 0.2133103695377], -[0.1586702403663, 0.2131972191443], -[0.1635960371869, 0.2130797960455], -[0.1685257480686, 0.2129580365919], -[0.1734594822366, 0.2128318758314], -[0.1783973482938, 0.2127012475584], -[0.1833394542084, 0.2125660843642], -[0.1882859073019, 0.2124263176879], -[0.1932368142371, 0.2122818778675], -[0.1981922810063, 0.2121326941919], -[0.2031524129198, 0.2119786949536], -[0.2081173145944, 0.2118198075008], -[0.2130870899423, 0.2116559582913], -[0.2180618421593, 0.2114870729461], -[0.2230416737144, 0.2113130763032], -[0.2280266863379, 0.211133892472], -[0.2330169810106, 0.2109494448881], -[0.2380126579525, 0.2107596563684], -[0.2430138166119, 0.2105644491657], -[0.2480205556532, 0.2103637450251], -[0.2530329729463, 0.2101574652388], -[0.2580511655547, 0.2099455307028], -[0.2630752297234, 0.2097278619722], -[0.2681052608676, 0.2095043793182], -[0.2731413535595, 0.209275002784], -[0.2781836015169, 0.209039652242], -[0.2832320975896, 0.2087982474498], -[0.2882869337465, 0.2085507081078], -[0.2933482010624, 0.2082969539157], -[0.2984159897038, 0.2080369046301], -[0.3034903889149, 0.2077704801213], -[-0.3006724460509, 0.2126513003346], -[-0.2956034611354, 0.2129097487339], -[-0.2905411578104, 0.2131619219007], -[-0.2854854450609, 0.2134079004588], -[-0.280436230929, 0.2136477651453], -[-0.2753934225285, 0.2138815967518], -[-0.2703569260587, 0.214109476067], -[-0.2653266468184, 0.2143314838184], -[-0.2603024892189, 0.2145477006143], -[-0.2552843567972, 0.2147582068863], -[-0.2502721522293, 0.2149630828315], -[-0.2452657773407, 0.2151624083553], -[-0.2402651331207, 0.2153562630137], -[-0.2352701197337, 0.2155447259563], -[-0.2302806365307, 0.2157278758696], -[-0.2252965820613, 0.2159057909195], -[-0.2203178540851, 0.2160785486955], -[-0.2153443495836, 0.2162462261538], -[-0.2103759647712, 0.2164088995615], -[-0.205412595107, 0.2165666444407], -[-0.2004541353057, 0.216719535513], -[-0.19550047935, 0.2168676466441], -[-0.1905515205012, 0.2170110507896], -[-0.1856071513115, 0.2171498199397], -[-0.1806672636354, 0.2172840250661], -[-0.175731748642, 0.217413736068], -[-0.1708004968267, 0.2175390217189], -[-0.1658733980238, 0.2176599496146], -[-0.160950341419, 0.2177765861211], -[-0.156031215562, 0.2178889963234], -[-0.1511159083797, 0.2179972439746], -[-0.1462043071897, 0.2181013914464], -[-0.1412962987136, 0.2182014996801], -[-0.1363913098371, 0.2182978519], -[-0.1314906097302, 0.2183901672902], -[-0.1265928663429, 0.2184782377367], -[-0.1216979866427, 0.2185626074955], -[-0.116806112513, 0.2186434068338], -[-0.1119172797842, 0.2187205455503], -[-0.1070312014869, 0.2187939553898], -[-0.1021477899792, 0.2188637564213], -[-0.0972669272928, 0.2189299946538], -[-0.09238849501979, 0.2189927142282], -[-0.08751237433076, 0.2190519573808], -[-0.08263844599277, 0.2191077644069], -[-0.07776659038806, 0.2191601736271], -[-0.07289668753291, 0.2192092213542], -[-0.06802861709706, 0.2192549418619], -[-0.06316225842333, 0.2192973673558], -[-0.05829749054776, 0.2193365279449], -[-0.05343419221992, 0.2193724516154], -[-0.04857224192366, 0.2194051642069], -[-0.04371151789815, 0.2194346893889], -[-0.0388518981591, 0.2194610486407], -[-0.0339932605204, 0.219484261232], -[-0.02913548261588, 0.2195043442059], -[-0.02427844192132, 0.2195213123642], -[-0.01942201577669, 0.2195351782537], -[-0.01456608140853, 0.2195459521552], -[-0.009710515952423, 0.2195536420746], -[-0.004855196475671, 0.2195582537353], -[0, 0.2195597905737], -[0.004855196475671, 0.2195582537353], -[0.009710515952422, 0.2195536420746], -[0.01456608140853, 0.2195459521552], -[0.01942201577669, 0.2195351782537], -[0.02427844192132, 0.2195213123642], -[0.02913548261587, 0.2195043442059], -[0.0339932605204, 0.219484261232], -[0.0388518981591, 0.2194610486407], -[0.04371151789815, 0.2194346893889], -[0.04857224192366, 0.2194051642069], -[0.05343419221992, 0.2193724516154], -[0.05829749054776, 0.2193365279449], -[0.06316225842333, 0.2192973673558], -[0.06802861709706, 0.2192549418619], -[0.07289668753291, 0.2192092213541], -[0.07776659038806, 0.2191601736271], -[0.08263844599277, 0.2191077644069], -[0.08751237433074, 0.2190519573807], -[0.09238849501979, 0.2189927142282], -[0.0972669272928, 0.2189299946538], -[0.1021477899792, 0.2188637564213], -[0.1070312014869, 0.2187939553898], -[0.1119172797842, 0.2187205455503], -[0.116806112513, 0.2186434068338], -[0.1216979866427, 0.2185626074955], -[0.1265928663429, 0.2184782377367], -[0.1314906097302, 0.2183901672902], -[0.1363913098371, 0.2182978519], -[0.1412962987136, 0.2182014996801], -[0.1462043071897, 0.2181013914464], -[0.1511159083797, 0.2179972439746], -[0.1560312155619, 0.2178889963234], -[0.160950341419, 0.2177765861211], -[0.1658733980238, 0.2176599496146], -[0.1708004968267, 0.2175390217189], -[0.175731748642, 0.217413736068], -[0.1806672636354, 0.2172840250661], -[0.1856071513115, 0.2171498199397], -[0.1905515205012, 0.2170110507896], -[0.19550047935, 0.2168676466441], -[0.2004541353057, 0.216719535513], -[0.205412595107, 0.2165666444407], -[0.2103759647712, 0.2164088995615], -[0.2153443495836, 0.2162462261538], -[0.2203178540851, 0.2160785486955], -[0.2252965820613, 0.2159057909195], -[0.2302806365307, 0.2157278758696], -[0.2352701197337, 0.2155447259563], -[0.2402651331207, 0.2153562630137], -[0.2452657773407, 0.2151624083553], -[0.2502721522293, 0.2149630828315], -[0.2552843567977, 0.2147582068862], -[0.2603024892189, 0.2145477006143], -[0.2653266468184, 0.2143314838184], -[0.2703569260587, 0.214109476067], -[0.2753934225285, 0.2138815967518], -[0.280436230929, 0.2136477651453], -[0.2854854450609, 0.2134079004588], -[0.2905411578104, 0.2131619219007], -[0.2956034611354, 0.2129097487339], -[0.3006724460509, 0.2126513003346], -[-0.2978550429889, 0.2175311855834], -[-0.2927916143423, 0.2177816462854], -[-0.2877349368801, 0.2180259328115], -[-0.282684917795, 0.2182641263275], -[-0.2776414633168, 0.2184963081106], -[-0.2726044787276, 0.2187225594902], -[-0.2675738683752, 0.2189429617887], -[-0.2625495356877, 0.2191575962628], -[-0.2575313831864, 0.2193665440447], -[-0.2525193124994, 0.2195698860828], -[-0.2475132243743, 0.2197677030838], -[-0.2425130186908, 0.2199600754534], -[-0.237518594473, 0.2201470832387], -[-0.2325298499019, 0.220328806069], -[-0.2275466823273, 0.2205053230987], -[-0.2225689882795, 0.2206767129484], -[-0.2175966634814, 0.2208430536479], -[-0.21262960286, 0.2210044225786], -[-0.2076677005582, 0.2211608964156], -[-0.2027108499466, 0.2213125510718], -[-0.197758943635, 0.2214594616402], -[-0.1928118734841, 0.2216017023382], -[-0.1878695306178, 0.2217393464512], -[-0.1829318054346, 0.2218724662774], -[-0.1779985876202, 0.2220011330724], -[-0.1730697661594, 0.2221254169943], -[-0.1681452293487, 0.22224538705], -[-0.1632248648091, 0.2223611110414], -[-0.158308559499, 0.2224726555122], -[-0.1533961997274, 0.2225800856956], -[-0.1484876711672, 0.2226834654629], -[-0.1435828588695, 0.2227828572721], -[-0.1386814750481, 0.2228781916561], -[-0.1337838065188, 0.2229700069109], -[-0.1288895791308, 0.2230577972459], -[-0.1239985054921, 0.2231417486862], -[-0.1191104945644, 0.2232220454061], -[-0.1142255147035, 0.2232987681742], -[-0.1093434484757, 0.2233718641082], -[-0.1044641582975, 0.2234414150566], -[-0.09958752430232, 0.223507468618], -[-0.09471342616042, 0.2235700705216], -[-0.08984174309667, 0.2236292645879], -[-0.08497235390925, 0.2236850926917], -[-0.08010513698852, 0.223737594725], -[-0.07523997033644, 0.223786808563], -[-0.07037673158629, 0.2238327700309], -[-0.06551529802284, 0.2238755128722], -[-0.06065554660289, 0.2239150687192], -[-0.05579735397615, 0.223951467065], -[-0.05094059650649, 0.223984735237], -[-0.0460851502935, 0.224014898373], -[-0.04123089119441, 0.2240419793982], -[-0.03637769484619, 0.2240659990049], -[-0.03152543668808, 0.2240869756338], -[-0.02667399198419, 0.2241049254572], -[-0.02182323584644, 0.2241198623646], -[-0.01697304325763, 0.2241317979499], -[-0.01212328909472, 0.2241407415009], -[-0.007273848152156, 0.2241466999909], -[-0.002424595165425, 0.2241496780723], -[0.002424595165425, 0.2241496780723], -[0.007273848152156, 0.2241466999909], -[0.01212328909472, 0.2241407415009], -[0.01697304325763, 0.2241317979499], -[0.02182323584644, 0.2241198623646], -[0.02667399198419, 0.2241049254572], -[0.03152543668808, 0.2240869756338], -[0.03637769484619, 0.2240659990049], -[0.04123089119441, 0.2240419793982], -[0.0460851502935, 0.224014898373], -[0.05094059650649, 0.223984735237], -[0.05579735397615, 0.223951467065], -[0.06065554660289, 0.2239150687192], -[0.06551529802284, 0.2238755128722], -[0.07037673158629, 0.2238327700309], -[0.07523997033644, 0.223786808563], -[0.08010513698851, 0.223737594725], -[0.08497235390925, 0.2236850926917], -[0.08984174309667, 0.2236292645879], -[0.09471342616042, 0.2235700705216], -[0.09958752430232, 0.223507468618], -[0.1044641582975, 0.2234414150566], -[0.1093434484757, 0.2233718641082], -[0.1142255147035, 0.2232987681742], -[0.1191104945644, 0.2232220454061], -[0.1239985054921, 0.2231417486862], -[0.1288895791308, 0.2230577972459], -[0.1337838065188, 0.2229700069109], -[0.1386814750481, 0.2228781916561], -[0.1435828588695, 0.2227828572721], -[0.1484876711672, 0.2226834654629], -[0.1533961997274, 0.2225800856956], -[0.158308559499, 0.2224726555122], -[0.1632248648091, 0.2223611110414], -[0.1681452293487, 0.22224538705], -[0.1730697661594, 0.2221254169943], -[0.1779985876202, 0.2220011330724], -[0.1829318054346, 0.2218724662774], -[0.1878695306178, 0.2217393464512], -[0.1928118734841, 0.2216017023382], -[0.197758943635, 0.2214594616402], -[0.2027108499466, 0.2213125510718], -[0.2076677005582, 0.2211608964156], -[0.21262960286, 0.2210044225786], -[0.2175966634814, 0.2208430536479], -[0.2225689882795, 0.2206767129484], -[0.2275466823273, 0.2205053230987], -[0.2325298499019, 0.220328806069], -[0.237518594473, 0.2201470832387], -[0.2425130186908, 0.2199600754534], -[0.2475132243743, 0.2197677030838], -[0.2525193124994, 0.2195698860828], -[0.2575313831864, 0.2193665440447], -[0.2625495356877, 0.2191575962628], -[0.2675738683752, 0.2189429617887], -[0.2726044787276, 0.2187225594902], -[0.2776414633168, 0.2184963081106], -[0.282684917795, 0.2182641263275], -[0.2877349368801, 0.2180259328115], -[0.2927916143423, 0.2177816462854], -[0.2978550429889, 0.2175311855834], -[-0.2950382699477, 0.2224099796042], -[-0.2899805390333, 0.2226524422277], -[-0.2849296274768, 0.2228888328392], -[-0.2798854406577, 0.2231192331943], -[-0.2748478829736, 0.223343725157], -[-0.2698168578546, 0.2235623906402], -[-0.2647922677779, 0.2237753115453], -[-0.2597740142816, 0.2239825697023], -[-0.2547619979787, 0.2241842468101], -[-0.2497561185696, 0.2243804243763], -[-0.2447562748568, 0.2245711836579], -[-0.2397623647553, 0.2247566056014], -[-0.234774285307, 0.2249367707834], -[-0.2297919326925, 0.2251117593511], -[-0.2248152022431, 0.225281650963], -[-0.2198439884532, 0.2254465247301], -[-0.2148781849921, 0.2256064591566], -[-0.2099176847158, 0.2257615320818], -[-0.2049623796793, 0.225911820621], -[-0.2000121611481, 0.2260574011076], -[-0.1950669196107, 0.2261983490353], -[-0.1901265447898, 0.2263347390004], -[-0.1851909256552, 0.2264666446447], -[-0.1802599504357, 0.2265941385986], -[-0.1753335066317, 0.2267172924246], -[-0.1704114810274, 0.226836176562], -[-0.1654937597043, 0.2269508602706], -[-0.1605802280537, 0.2270614115769], -[-0.1556707707905, 0.2271678972191], -[-0.1507652719662, 0.2272703825941], -[-0.1458636149838, 0.2273689317047], -[-0.1409656902261, 0.2274635055644], -[-0.1360713028973, 0.2275544463315], -[-0.1311804929693, 0.2276416103118], -[-0.126293061415, 0.2277250174272], -[-0.1214088486487, 0.2278047679185], -[-0.1165277442266, 0.2278809603582], -[-0.1116496639933, 0.2279536198713], -[-0.1067744712544, 0.2280227988944], -[-0.1019020442611, 0.2280885466524], -[-0.09703226077646, 0.2281509105002], -[-0.09216499809354, 0.2282099358814], -[-0.08730013305463, 0.2282656662885], -[-0.08243754207035, 0.228318143225], -[-0.0775771011395, 0.2283674061685], -[-0.07271868586915, 0.2284134925358], -[-0.0678621714953, 0.2284564376497], -[-0.06300743290387, 0.2284962747068], -[-0.05815434465206, 0.2285330347482], -[-0.05330278099018, 0.2285667466311], -[-0.04845261588372, 0.2285974370029], -[-0.04360372303586, 0.2286251302763], -[-0.03875597591023, 0.2286498486078], -[-0.033909247754, 0.2286716118767], -[-0.02906341162125, 0.2286904376671], -[-0.02421834039651, 0.2287063412517], -[-0.01937390681861, 0.2287193355776], -[-0.01452998350466, 0.2287294312543], -[-0.009686442974225, 0.2287366365438], -[-0.004843157673553, 0.2287409573532], -[9.112293753444e-13, 0.2287423972288], -[0.004843157673553, 0.2287409573532], -[0.009686442974224, 0.2287366365438], -[0.01452998350466, 0.2287294312543], -[0.01937390681861, 0.2287193355776], -[0.02421834039651, 0.2287063412517], -[0.02906341162125, 0.2286904376671], -[0.033909247754, 0.2286716118767], -[0.03875597591023, 0.2286498486078], -[0.04360372303586, 0.2286251302763], -[0.04845261588372, 0.2285974370029], -[0.05330278099018, 0.2285667466311], -[0.05815434465206, 0.2285330347482], -[0.06300743290387, 0.2284962747068], -[0.0678621714953, 0.2284564376497], -[0.07271868586915, 0.2284134925358], -[0.0775771011395, 0.2283674061685], -[0.08243754207035, 0.228318143225], -[0.08730013305463, 0.2282656662885], -[0.09216499809354, 0.2282099358814], -[0.09703226077646, 0.2281509105002], -[0.1019020442611, 0.2280885466524], -[0.1067744712544, 0.2280227988944], -[0.1116496639933, 0.2279536198713], -[0.1165277442266, 0.2278809603582], -[0.1214088486487, 0.2278047679185], -[0.126293061415, 0.2277250174272], -[0.1311804929693, 0.2276416103118], -[0.1360713028973, 0.2275544463315], -[0.1409656902261, 0.2274635055644], -[0.1458636149838, 0.2273689317047], -[0.1507652719662, 0.2272703825941], -[0.1556707707905, 0.2271678972191], -[0.1605802280537, 0.2270614115769], -[0.1654937597043, 0.2269508602706], -[0.1704114810274, 0.226836176562], -[0.1753335066317, 0.2267172924246], -[0.1802599504357, 0.2265941385986], -[0.1851909256552, 0.2264666446447], -[0.1901265447898, 0.2263347390004], -[0.1950669196107, 0.2261983490353], -[0.2000121611482, 0.2260574011076], -[0.2049623796793, 0.225911820621], -[0.2099176847158, 0.2257615320818], -[0.2148781849921, 0.2256064591566], -[0.2198439884532, 0.2254465247301], -[0.2248152022431, 0.225281650963], -[0.2297919326925, 0.2251117593511], -[0.234774285307, 0.2249367707834], -[0.2397623647553, 0.2247566056014], -[0.2447562748568, 0.2245711836579], -[0.2497561185698, 0.2243804243763], -[0.2547619979787, 0.2241842468101], -[0.2597740142816, 0.2239825697023], -[0.2647922677779, 0.2237753115453], -[0.2698168578546, 0.2235623906402], -[0.2748478829736, 0.223343725157], -[0.2798854406577, 0.2231192331943], -[0.2849296274768, 0.2228888328392], -[0.2899805390333, 0.2226524422277], -[0.2950382699477, 0.2224099796042], -[-0.2922222465471, 0.2272874315366], -[-0.2871703250626, 0.2275219812997], -[-0.2821253189805, 0.2277504679691], -[-0.2770871025627, 0.2279730683325], -[-0.2720555783544, 0.2281898648878], -[-0.2670306479146, 0.2284009401773], -[-0.2620122118308, 0.2286063767262], -[-0.2570001697326, 0.2288062569821], -[-0.2519944203062, 0.2290006632537], -[-0.2469948613071, 0.2291896776499], -[-0.2420013895735, 0.2293733820191], -[-0.2370139010394, 0.2295518578884], -[-0.2320322907469, 0.229725186403], -[-0.2270564528589, 0.2298934482653], -[-0.2220862806716, 0.2300567236751], -[-0.2171216666262, 0.2302150922687], -[-0.2121625023218, 0.230368633059], -[-0.2072086785268, 0.230517424376], -[-0.2022600851914, 0.2306615438062], -[-0.1973166114598, 0.2308010681343], -[-0.192378145682, 0.2309360732831], -[-0.1874445754265, 0.2310666342551], -[-0.1825157874922, 0.2311928250744], -[-0.1775916679216, 0.2313147187278], -[-0.1726721020128, 0.2314323871079], -[-0.1677569743332, 0.2315459009557], -[-0.1628461687321, 0.2316553298043], -[-0.1579395683543, 0.2317607419222], -[-0.1530370556542, 0.2318622042589], -[-0.1481385124094, 0.2319597823895], -[-0.1432438548408, 0.2320535177694], -[-0.1383528542661, 0.2321435135861], -[-0.1334654910947, 0.2322298428729], -[-0.1285816409488, 0.2323125234495], -[-0.1237011547219, 0.2323916021609], -[-0.1188239095167, 0.232467168489], -[-0.1139497885264, 0.2325392667381], -[-0.1090786686682, 0.2326079496234], -[-0.104210426327, 0.2326732680341], -[-0.09934493737414, 0.2327352709895], -[-0.09448207718536, 0.2327940055954], -[-0.08962172066053, 0.2328495170026], -[-0.08476374224314, 0.2329018483666], -[-0.07990801594042, 0.2329510408089], -[-0.07505441534394, 0.2329971333798], -[-0.0702028136506, 0.2330401630236], -[-0.06535308368417, 0.233080164544], -[-0.06050509791707, 0.233117170573], -[-0.05565872849277, 0.2331512115407], -[-0.05081384724839, 0.2331823156471], -[-0.04597032573781, 0.2332105088361], -[-0.04112803525503, 0.2332358147711], -[-0.03628684685792, 0.2332582548131], -[-0.03144663139222, 0.233277848001], -[-0.02660725951587, 0.2332946110328], -[-0.0217686017235, 0.2333085582511], -[-0.01693052837123, 0.2333197016284], -[-0.01209290970159, 0.2333280507566], -[-0.007255615868559, 0.2333336128375], -[-0.002418516962853, 0.2333363926761], -[0.002418516962853, 0.2333363926761], -[0.007255615868559, 0.2333336128375], -[0.01209290970159, 0.2333280507566], -[0.01693052837123, 0.2333197016284], -[0.0217686017235, 0.2333085582511], -[0.02660725951587, 0.2332946110328], -[0.03144663139222, 0.233277848001], -[0.03628684685792, 0.2332582548131], -[0.04112803525503, 0.2332358147711], -[0.04597032573781, 0.2332105088361], -[0.0508138472484, 0.2331823156472], -[0.05565872849277, 0.2331512115407], -[0.06050509791707, 0.233117170573], -[0.06535308368417, 0.233080164544], -[0.0702028136506, 0.2330401630236], -[0.07505441534394, 0.2329971333798], -[0.07990801594042, 0.2329510408089], -[0.08476374224314, 0.2329018483666], -[0.08962172066053, 0.2328495170026], -[0.09448207718536, 0.2327940055954], -[0.09934493737414, 0.2327352709895], -[0.104210426327, 0.2326732680341], -[0.1090786686682, 0.2326079496234], -[0.1139497885264, 0.2325392667381], -[0.1188239095167, 0.232467168489], -[0.1237011547219, 0.2323916021609], -[0.1285816409488, 0.2323125234495], -[0.1334654910947, 0.2322298428729], -[0.1383528542661, 0.2321435135861], -[0.1432438548408, 0.2320535177694], -[0.1481385124094, 0.2319597823895], -[0.1530370556542, 0.2318622042589], -[0.1579395683543, 0.2317607419222], -[0.1628461687321, 0.2316553298043], -[0.1677569743332, 0.2315459009557], -[0.1726721020128, 0.2314323871079], -[0.1775916679216, 0.2313147187278], -[0.1825157874922, 0.2311928250744], -[0.1874445754265, 0.2310666342551], -[0.192378145682, 0.2309360732831], -[0.1973166114598, 0.2308010681343], -[0.2022600851914, 0.2306615438062], -[0.2072086785268, 0.230517424376], -[0.2121625023218, 0.230368633059], -[0.2171216666262, 0.2302150922687], -[0.2220862806716, 0.2300567236751], -[0.2270564528589, 0.2298934482653], -[0.2320322907469, 0.229725186403], -[0.2370139010394, 0.2295518578884], -[0.2420013895735, 0.2293733820191], -[0.2469948613071, 0.2291896776499], -[0.2519944203062, 0.2290006632537], -[0.2570001697326, 0.2288062569821], -[0.2620122118308, 0.2286063767262], -[0.2670306479146, 0.2284009401773], -[0.2720555783544, 0.2281898648878], -[0.2770871025627, 0.2279730683325], -[0.2821253189805, 0.2277504679691], -[0.2871703250626, 0.2275219812997], -[0.2922222480991, 0.2272874308789], -[-0.2894071690384, 0.2321631964006], -[-0.2843610624472, 0.2323901080066], -[-0.2793221009637, 0.2326106839511], -[-0.2742899926457, 0.2328254787793], -[-0.2692646381668, 0.2330345756699], -[-0.2642459371961, 0.2332380578405], -[-0.2592337884125, 0.2334360084856], -[-0.2542280895192, 0.2336285107141], -[-0.2492287372573, 0.2338156474878], -[-0.2442356274195, 0.2339975015591], -[-0.2392486548631, 0.2341741554087], -[-0.2342677135227, 0.2343456911846], -[-0.2292926964238, 0.2345121906391], -[-0.2243234956947, 0.2346737350681], -[-0.219360002579, 0.2348304052486], -[-0.2144021074483, 0.2349822813777], -[-0.2094496998144, 0.2351294430111], -[-0.2045026683411, 0.2352719690019], -[-0.1995609008573, 0.2354099374398], -[-0.1946242843685, 0.2355434255901], -[-0.1896927050698, 0.2356725098335], -[-0.1847660483581, 0.235797265606], -[-0.1798441988447, 0.235917767339], -[-0.1749270403684, 0.2360340884003], -[-0.1700144560084, 0.2361463010347], -[-0.1651063280974, 0.2362544763062], -[-0.1602025382353, 0.2363586840397], -[-0.1553029673034, 0.2364589927639], -[-0.1504074912183, 0.2365554977772], -[-0.1455160171163, 0.2366481883807], -[-0.1406283746287, 0.2367371809502], -[-0.1357444634409, 0.2368225524965], -[-0.1308641742463, 0.2369043523626], -[-0.1259873816414, 0.2369826261069], -[-0.1211139505665, 0.2370574400033], -[-0.1162437613677, 0.2371288498332], -[-0.1113766891396, 0.2371969100117], -[-0.1065126084179, 0.2372616731313], -[-0.1016513931978, 0.2373231899154], -[-0.09679291695278, 0.2373815091726], -[-0.09193705265441, 0.2374366777533], -[-0.08708367279211, 0.2374887405072], -[-0.08223264939369, 0.2375377402423], -[-0.07738385404633, 0.237583717686], -[-0.07253715791803, 0.2376267114473], -[-0.06769243177949, 0.2376667579816], -[-0.0628495460265, 0.2377038915563], -[-0.05800837070275, 0.2377381442188], -[-0.05316877552307, 0.237769545767], -[-0.04833062989702, 0.2377981237203], -[-0.04349380295295, 0.2378239032945], -[-0.03865816356236, 0.2378469073771], -[-0.03382358036457, 0.2378671565057], -[-0.02898992179186, 0.237884668849], -[-0.02415705609445, 0.2378994601879], -[-0.01932485136636, 0.237911543902], -[-0.01449317557094, 0.2379209309556], -[-0.009661896566838, 0.2379276298876], -[-0.004830882134027, 0.2379316468031], -[-2.566843310829e-14, 0.2379329853676], -[0.004830882134027, 0.2379316468031], -[0.009661896566837, 0.2379276298876], -[0.01449317557094, 0.2379209309556], -[0.01932485136636, 0.2379115439019], -[0.02415705609445, 0.2378994601879], -[0.02898992179186, 0.237884668849], -[0.03382358036462, 0.2378671565059], -[0.03865816356236, 0.2378469073771], -[0.04349380295295, 0.2378239032945], -[0.04833062989702, 0.2377981237203], -[0.05316877552307, 0.237769545767], -[0.05800837070276, 0.2377381442188], -[0.0628495460265, 0.2377038915563], -[0.06769243177949, 0.2376667579816], -[0.07253715791803, 0.2376267114473], -[0.07738385404633, 0.237583717686], -[0.08223264939369, 0.2375377402423], -[0.08708367279211, 0.2374887405072], -[0.09193705265441, 0.2374366777533], -[0.09679291695278, 0.2373815091726], -[0.1016513931978, 0.2373231899154], -[0.1065126084179, 0.2372616731313], -[0.1113766891396, 0.2371969100117], -[0.1162437613677, 0.2371288498332], -[0.1211139505665, 0.2370574400033], -[0.1259873816414, 0.2369826261069], -[0.1308641742463, 0.2369043523626], -[0.1357444634409, 0.2368225524965], -[0.1406283746287, 0.2367371809502], -[0.1455160171163, 0.2366481883807], -[0.1504074912183, 0.2365554977772], -[0.1553029673034, 0.2364589927639], -[0.1602025382353, 0.2363586840397], -[0.1651063280974, 0.2362544763062], -[0.1700144560084, 0.2361463010347], -[0.1749270403684, 0.2360340884003], -[0.1798441988447, 0.235917767339], -[0.1847660483581, 0.235797265606], -[0.1896927050698, 0.2356725098335], -[0.1946242843685, 0.2355434255901], -[0.1995609008573, 0.2354099374398], -[0.2045026683411, 0.2352719690019], -[0.2094496998144, 0.2351294430111], -[0.2144021074483, 0.2349822813777], -[0.219360002579, 0.2348304052486], -[0.2243234956947, 0.2346737350681], -[0.2292926964238, 0.2345121906391], -[0.2342677135227, 0.2343456911846], -[0.2392486548631, 0.2341741554087], -[0.2442356274195, 0.2339975015591], -[0.2492287372573, 0.2338156474878], -[0.2542280895192, 0.2336285107141], -[0.2592337884125, 0.2334360084856], -[0.2642459371961, 0.2332380578405], -[0.2692646381668, 0.2330345756699], -[0.2742899926457, 0.2328254787793], -[0.2793221009637, 0.2326106839511], -[0.2843610624472, 0.2323901080066], -[0.289407169036, 0.2321631964015], -[-0.2865926349891, 0.2370382484546], -[-0.2815528413845, 0.23725666659], -[-0.2765200632088, 0.2374693262703], -[-0.2714942002828, 0.2376763113064], -[-0.2664751513896, 0.2378777056046], -[-0.2614628142896, 0.2380735931043], -[-0.2564570857353, 0.238264057714], -[-0.2514578614853, 0.2384491832486], -[-0.2464650363181, 0.2386290533661], -[-0.2414785040458, 0.2388037515043], -[-0.2364981575273, 0.2389733608178], -[-0.2315238886811, 0.2391379641151], -[-0.2265555884985, 0.239297643795], -[-0.221593147056, 0.239452481784], -[-0.2166364535281, 0.2396025594733], -[-0.2116853961994, 0.239747957656], -[-0.2067398624773, 0.2398887564643], -[-0.2017997389043, 0.2400250353074], -[-0.1968649111704, 0.240156872809], -[-0.1919352641256, 0.2402843467451], -[-0.1870106817928, 0.2404075339826], -[-0.1820910473798, 0.2405265104177], -[-0.177176243293, 0.2406413509148], -[-0.17226615115, 0.240752129246], -[-0.167360651793, 0.2408589180307], -[-0.1624596253025, 0.2409617886761], -[-0.1575629510114, 0.2410608113179], -[-0.1526704976316, 0.2411560603394], -[-0.1477821733584, 0.2412475942097], -[-0.142897828319, 0.2413354732682], -[-0.1380173388618, 0.2414197738921], -[-0.1331405874856, 0.2415005611756], -[-0.1282674535232, 0.2415778918989], -[-0.1233978062111, 0.2416518234119], -[-0.1185315206275, 0.2417224153719], -[-0.113668470063, 0.2417897239329], -[-0.1088085272212, 0.2418538034304], -[-0.1039515642379, 0.2419147063327], -[-0.09909745269992, 0.2419724831932], -[-0.09424606366504, 0.2420271826043], -[-0.08939726768228, 0.2420788511533], -[-0.08455093481274, 0.2421275333788], -[-0.07970693465088, 0.2421732717297], -[-0.07486513634638, 0.2422161065256], -[-0.0700254086265, 0.2422560759187], -[-0.06518761981894, 0.2422932158578], -[-0.06035163787509, 0.2423275600546], -[-0.05551733039385, 0.2423591399508], -[-0.05068456464585, 0.2423879846886], -[-0.04585320759804, 0.2424141210824], -[-0.04102312593872, 0.2424375735929], -[-0.03619418610293, 0.2424583643035], -[-0.03136625429816, 0.2424765128985], -[-0.0265391965304, 0.2424920366443], -[-0.02171287863039, 0.2425049503722], -[-0.01688716628021, 0.242515266464], -[-0.01206192504, 0.2425229948399], -[-0.00723702037491, 0.2425281429486], -[-0.002412317682093, 0.2425307157599], -[0.002412317682093, 0.2425307157599], -[0.00723702037491, 0.2425281429486], -[0.01206192504, 0.2425229948399], -[0.01688716628021, 0.242515266464], -[0.02171287863039, 0.2425049503722], -[0.0265391965304, 0.2424920366443], -[0.03136625429816, 0.2424765128985], -[0.03619418610293, 0.2424583643035], -[0.04102312593872, 0.2424375735929], -[0.04585320759804, 0.2424141210824], -[0.05068456464585, 0.2423879846886], -[0.05551733039385, 0.2423591399508], -[0.06035163787508, 0.2423275600546], -[0.06518761981894, 0.2422932158578], -[0.0700254086265, 0.2422560759187], -[0.07486513634638, 0.2422161065256], -[0.07970693465088, 0.2421732717297], -[0.08455093481274, 0.2421275333788], -[0.08939726768228, 0.2420788511533], -[0.09424606366504, 0.2420271826043], -[0.09909745269992, 0.2419724831932], -[0.1039515642379, 0.2419147063327], -[0.1088085272212, 0.2418538034304], -[0.113668470063, 0.2417897239329], -[0.1185315206275, 0.2417224153719], -[0.1233978062111, 0.2416518234119], -[0.1282674535232, 0.2415778918989], -[0.1331405874856, 0.2415005611756], -[0.1380173388618, 0.2414197738921], -[0.142897828319, 0.2413354732682], -[0.1477821733584, 0.2412475942097], -[0.1526704976316, 0.2411560603394], -[0.1575629510114, 0.2410608113179], -[0.1624596253025, 0.2409617886761], -[0.167360651793, 0.2408589180307], -[0.17226615115, 0.240752129246], -[0.177176243293, 0.2406413509148], -[0.1820910473798, 0.2405265104177], -[0.1870106817928, 0.2404075339826], -[0.1919352641256, 0.2402843467451], -[0.1968649111704, 0.240156872809], -[0.2017997389043, 0.2400250353074], -[0.2067398624773, 0.2398887564643], -[0.2116853961994, 0.239747957656], -[0.2166364535281, 0.2396025594733], -[0.221593147056, 0.239452481784], -[0.2265555884985, 0.239297643795], -[0.2315238886811, 0.2391379641151], -[0.2364981575273, 0.2389733608178], -[0.2414785040458, 0.2388037515043], -[0.2464650363181, 0.2386290533661], -[0.2514578614853, 0.2384491832486], -[0.2564570857353, 0.238264057714], -[0.2614628142896, 0.2380735931043], -[0.2664751513896, 0.2378777056046], -[0.2714942002828, 0.2376763113064], -[0.2765200632088, 0.2374693262703], -[0.2815528413845, 0.23725666659], -[0.2865926349891, 0.2370382484546], -[-0.2837792294221, 0.2419106210856], -[-0.2787457522699, 0.2421215009984], -[-0.2737192957268, 0.2423262401173], -[-0.2686998151093, 0.2425254123902], -[-0.2636872072917, 0.2427191024983], -[-0.2586813681078, 0.2429073951488], -[-0.2536821923656, 0.2430903750097], -[-0.2486895738614, 0.2432681266461], -[-0.2437034053936, 0.2434407344554], -[-0.2387235787765, 0.2436082826035], -[-0.2337499848532, 0.2437708549599], -[-0.228782513509, 0.2439285350336], -[-0.2238210536839, 0.244081405909], -[-0.2188654933857, 0.244229550181], -[-0.2139157197021, 0.2443730498914], -[-0.2089716188139, 0.2445119864645], -[-0.2040330760069, 0.2446464406431], -[-0.1990999756848, 0.2447764924249], -[-0.1941722013816, 0.2449022209987], -[-0.1892496357742, 0.2450237046811], -[-0.1843321606953, 0.2451410208532], -[-0.1794196571463, 0.2452542458981], -[-0.1745120053105, 0.2453634551382], -[-0.1696090845661, 0.2454687227734], -[-0.1647107735005, 0.2455701218195], -[-0.1598169499235, 0.2456677240468], -[-0.1549274869766, 0.2457615975877], -[-0.1500422703293, 0.2458518208062], -[-0.1451611715487, 0.2459384496064], -[-0.1402840616296, 0.2460215531452], -[-0.1354108151363, 0.2461012001438], -[-0.1305413088182, 0.2461774513752], -[-0.125675414142, 0.246250368325], -[-0.1208130032466, 0.246320010687], -[-0.1159539476373, 0.2463864363937], -[-0.1110981182042, 0.2464497015649], -[-0.1062453852403, 0.2465098604553], -[-0.101395618462, 0.2465669654061], -[-0.09654868702872, 0.2466210667956], -[-0.09170445956336, 0.2466722129931], -[-0.08686280417349, 0.2467204503135], -[-0.08202358847306, 0.2467658229733], -[-0.07718667960463, 0.2468083730491], -[-0.07235194426212, 0.2468481404374], -[-0.0675192487141, 0.2468851628163], -[-0.06268845882761, 0.2469194756093], -[-0.05785944009246, 0.2469511119508], -[-0.05303205764599, 0.2469801026538], -[-0.04820617629834, 0.2470064761802], -[-0.04338166055808, 0.2470302586122], -[-0.03855837465827, 0.2470514736272], -[-0.03373618258294, 0.2470701424739], -[-0.02891494809383, 0.2470862839514], -[-0.0240945347575, 0.2470999143905], -[-0.01927480597266, 0.2471110476374], -[-0.01445562499784, 0.2471196950397], -[-0.009636854979096, 0.2471258654354], -[-0.004818358978069, 0.2471295651433], -[-2.488500450474e-13, 0.2471307979576], -[0.004818358978068, 0.2471295651433], -[0.009636854979096, 0.2471258654354], -[0.01445562499784, 0.2471196950397], -[0.01927480597266, 0.2471110476374], -[0.0240945347575, 0.2470999143905], -[0.02891494809383, 0.2470862839514], -[0.03373618258294, 0.2470701424739], -[0.03855837465827, 0.2470514736272], -[0.04338166055808, 0.2470302586122], -[0.04820617629834, 0.2470064761802], -[0.05303205764599, 0.2469801026538], -[0.05785944009246, 0.2469511119508], -[0.06268845882761, 0.2469194756093], -[0.0675192487141, 0.2468851628163], -[0.07235194426212, 0.2468481404374], -[0.07718667960463, 0.2468083730491], -[0.08202358847306, 0.2467658229733], -[0.08686280417349, 0.2467204503135], -[0.09170445956336, 0.2466722129931], -[0.09654868702872, 0.2466210667956], -[0.101395618462, 0.2465669654061], -[0.1062453852403, 0.2465098604553], -[0.1110981182042, 0.2464497015649], -[0.1159539476375, 0.2463864363938], -[0.1208130032466, 0.246320010687], -[0.125675414142, 0.246250368325], -[0.1305413088182, 0.2461774513752], -[0.1354108151363, 0.2461012001438], -[0.1402840616296, 0.2460215531452], -[0.1451611715487, 0.2459384496064], -[0.1500422703293, 0.2458518208062], -[0.1549274869766, 0.2457615975877], -[0.1598169499235, 0.2456677240468], -[0.1647107735005, 0.2455701218195], -[0.1696090845661, 0.2454687227734], -[0.1745120053105, 0.2453634551382], -[0.1794196571463, 0.2452542458981], -[0.1843321606953, 0.2451410208532], -[0.1892496357742, 0.2450237046811], -[0.1941722013816, 0.2449022209987], -[0.1990999756848, 0.2447764924249], -[0.2040330760069, 0.2446464406431], -[0.2089716188139, 0.2445119864645], -[0.2139157197021, 0.2443730498914], -[0.2188654933857, 0.244229550181], -[0.2238210536839, 0.244081405909], -[0.228782513509, 0.2439285350336], -[0.2337499848532, 0.2437708549599], -[0.2387235787765, 0.2436082826035], -[0.2437034053936, 0.2434407344554], -[0.2486895738614, 0.2432681266461], -[0.2536821923656, 0.2430903750097], -[0.2586813681078, 0.2429073951488], -[0.2636872072917, 0.2427191024983], -[0.2686998151093, 0.2425254123902], -[0.2737192957268, 0.2423262401173], -[0.2787457522699, 0.2421215009984], -[0.2837792294237, 0.2419106210851], -[-0.2809670218377, 0.2467820962566], -[-0.2759398857149, 0.2469844548564], -[-0.2709198887751, 0.247181270358], -[-0.2659069270382, 0.2473726281823], -[-0.2609008954516, 0.2475586138329], -[-0.2559016879047, 0.2477393128309], -[-0.2509091972435, 0.2479148106495], -[-0.2459233152845, 0.2480851926483], -[-0.2409439328289, 0.248250544008], -[-0.2359709396759, 0.2484109496645], -[-0.2310042246356, 0.2485664942437], -[-0.2260436755429, 0.2487172619956], -[-0.2210891792694, 0.2488633367289], -[-0.2161406217369, 0.2490048017448], -[-0.2111978879294, 0.2491417397723], -[-0.2062608619063, 0.2492742329021], -[-0.2013294268144, 0.2494023625216], -[-0.196403464901, 0.2495262092494], -[-0.1914828575263, 0.2496458528705], -[-0.1865674851762, 0.2497613722715], -[-0.1816572274754, 0.2498728453759], -[-0.1767519632004, 0.24998034908], -[-0.1718515702928, 0.2500839591892], -[-0.1669559258733, 0.2501837503543], -[-0.1620649062551, 0.2502797960085], -[-0.1571783868435, 0.250372166203], -[-0.1522962414926, 0.2504609377471], -[-0.1474183470358, 0.2505461754636], -[-0.1425445749349, 0.2506279465867], -[-0.1376747964686, 0.2507063187505], -[-0.132808884876, 0.2507813574776], -[-0.1279467109222, 0.2508531254778], -[-0.1230881450102, 0.2509216842556], -[-0.1182330568796, 0.2509870935629], -[-0.113381315625, 0.251049411345], -[-0.1085327897155, 0.2511086936867], -[-0.1036873470137, 0.2511649947606], -[-0.09884485479646, 0.2512183667761], -[-0.09400517977541, 0.2512688599305], -[-0.08916818811855, 0.2513165223615], -[-0.08433374547215, 0.2513614001009], -[-0.07950171698337, 0.2514035370306], -[-0.07467196732342, 0.2514429748403], -[-0.06984436071131, 0.2514797529865], -[-0.0650187609381, 0.2515139086544], -[-0.06019503139176, 0.251545476721], -[-0.05537303508246, 0.2515744897207], -[-0.05055263466846, 0.251600977813], -[-0.04573369248237, 0.2516249687523], -[-0.04091607055793, 0.2516464878603], -[-0.03609963065712, 0.2516655580002], -[-0.03128423429775, 0.2516821995538], -[-0.02646974278131, 0.2516964304009], -[-0.0216560172212, 0.2517082659012], -[-0.01684291857116, 0.2517177188783], -[-0.01203030765399, 0.2517247996068], -[-0.007218045190478, 0.2517295158022], -[-0.002405991828377, 0.2517318726122], -[0.002405991828377, 0.2517318726122], -[0.007218045190478, 0.2517295158022], -[0.01203030765399, 0.2517247996068], -[0.01684291857116, 0.2517177188783], -[0.0216560172212, 0.2517082659012], -[0.02646974278131, 0.2516964304009], -[0.03128423429775, 0.2516821995538], -[0.03609963065712, 0.2516655580002], -[0.04091607055793, 0.2516464878603], -[0.04573369248237, 0.2516249687523], -[0.05055263466846, 0.251600977813], -[0.05537303508246, 0.2515744897207], -[0.06019503139176, 0.251545476721], -[0.0650187609381, 0.2515139086544], -[0.06984436071131, 0.2514797529865], -[0.07467196732342, 0.2514429748403], -[0.07950171698337, 0.2514035370306], -[0.08433374547215, 0.2513614001009], -[0.08916818811855, 0.2513165223615], -[0.09400517977541, 0.2512688599305], -[0.09884485479646, 0.2512183667761], -[0.1036873470137, 0.2511649947606], -[0.1085327897155, 0.2511086936867], -[0.113381315625, 0.251049411345], -[0.1182330568796, 0.2509870935629], -[0.1230881450102, 0.2509216842556], -[0.1279467109222, 0.2508531254778], -[0.132808884876, 0.2507813574776], -[0.1376747964686, 0.2507063187505], -[0.1425445749349, 0.2506279465867], -[0.1474183470358, 0.2505461754636], -[0.1522962414926, 0.2504609377471], -[0.1571783868435, 0.250372166203], -[0.1620649062551, 0.2502797960085], -[0.1669559258733, 0.2501837503543], -[0.1718515702928, 0.2500839591892], -[0.1767519632004, 0.24998034908], -[0.1816572274754, 0.2498728453759], -[0.1865674851762, 0.2497613722715], -[0.1914828575263, 0.2496458528705], -[0.196403464901, 0.2495262092494], -[0.2013294268144, 0.2494023625216], -[0.2062608619063, 0.2492742329021], -[0.2111978879294, 0.2491417397723], -[0.2161406217369, 0.2490048017448], -[0.2210891792694, 0.2488633367289], -[0.2260436755429, 0.2487172619956], -[0.2310042246356, 0.2485664942437], -[0.2359709396759, 0.2484109496645], -[0.2409439328289, 0.248250544008], -[0.2459233152845, 0.2480851926483], -[0.2509091972435, 0.2479148106495], -[0.2559016879047, 0.2477393128309], -[0.2609008954516, 0.2475586138329], -[0.2659069270382, 0.2473726281823], -[0.2709198887751, 0.247181270358], -[0.2759398857149, 0.2469844548564], -[0.2809670218377, 0.2467820962566], -[-0.2781556841947, 0.2516506254689], -[-0.2731353325653, 0.2518453714344], -[-0.2681219328766, 0.2520342615031], -[-0.2631156262796, 0.252217804479], -[-0.2581163057769, 0.2523960867355], -[-0.2531238632962, 0.2525691946544], -[-0.2481381897041, 0.2527372145596], -[-0.2431591748203, 0.2529002326499], -[-0.2381867074315, 0.2530583349327], -[-0.2332206753046, 0.2532116071569], -[-0.2282609652, 0.2533601347462], -[-0.2233074628846, 0.2535040027318], -[-0.2183600531448, 0.2536432956858], -[-0.2134186197988, 0.2537780976539], -[-0.2084830457097, 0.2539084920886], -[-0.2035532127976, 0.2540345617824], -[-0.198629002053, 0.2541563888011], -[-0.1937102935486, 0.2542740544168], -[-0.1887969664527, 0.2543876390416], -[-0.183888899042, 0.2544972221616], -[-0.1789859687146, 0.2546028822704], -[-0.1740880520032, 0.2547046968041], -[-0.1691950245889, 0.2548027420751], -[-0.1643067613154, 0.2548970932082], -[-0.1594231362022, 0.2549878240754], -[-0.154544022288, 0.2550750066774], -[-0.1496692921456, 0.2551587138704], -[-0.144798817894, 0.2552390139299], -[-0.1399324697557, 0.25531597493], -[-0.1350701179631, 0.2553896642766], -[-0.1302116320026, 0.2554601467572], -[-0.1253568805623, 0.2555274857273], -[-0.1205057316368, 0.2555917427999], -[-0.1156580525451, 0.2556529777887], -[-0.1108137099501, 0.2557112486523], -[-0.1059725698788, 0.25576661144], -[-0.1011344977419, 0.2558191202386], -[-0.0962993583554, 0.2558688271204], -[-0.09146701596238, 0.2559157820943], -[-0.08663733425482, 0.2559600330564], -[-0.08181017639688, 0.2560016257435], -[-0.0769854050483, 0.2560406036889], -[-0.07216288238861, 0.2560770081787], -[-0.06734247014183, 0.2561108782111], -[-0.06252402960183, 0.2561422504576], -[-0.05770742165819, 0.2561711592262], -[-0.05289250682264, 0.2561976364263], -[-0.04807914525598, 0.256221711537], -[-0.04326719679554, 0.2562434115767], -[-0.03845652098301, 0.2562627610753], -[-0.03364697709276, 0.2562797820496], -[-0.02883842416056, 0.2562944939799], -[-0.02403072101257, 0.2563069137906], -[-0.01922372629473, 0.2563170558319], -[-0.01441729850236, 0.2563249318656], -[-0.009611296009997, 0.2563305510524], -[-0.004805577101465, 0.2563339199425], -[0, 0.2563350424687], -[0.004805577101465, 0.2563339199425], -[0.009611296009997, 0.2563305510524], -[0.01441729850236, 0.2563249318656], -[0.01922372629473, 0.2563170558319], -[0.02403072101257, 0.2563069137906], -[0.02883842416056, 0.2562944939799], -[0.03364697709276, 0.2562797820496], -[0.03845652098301, 0.2562627610753], -[0.04326719679554, 0.2562434115767], -[0.04807914525598, 0.256221711537], -[0.05289250682264, 0.2561976364263], -[0.05770742165819, 0.2561711592262], -[0.06252402960183, 0.2561422504576], -[0.06734247014183, 0.2561108782111], -[0.07216288238861, 0.2560770081787], -[0.0769854050483, 0.2560406036889], -[0.08181017639688, 0.2560016257435], -[0.08663733425482, 0.2559600330564], -[0.09146701596238, 0.2559157820943], -[0.0962993583554, 0.2558688271204], -[0.1011344977418, 0.2558191202384], -[0.1059725698788, 0.25576661144], -[0.1108137099501, 0.2557112486523], -[0.1156580525451, 0.2556529777887], -[0.1205057316368, 0.2555917427999], -[0.1253568805623, 0.2555274857273], -[0.1302116320026, 0.2554601467572], -[0.1350701179631, 0.2553896642766], -[0.1399324697557, 0.25531597493], -[0.144798817894, 0.2552390139299], -[0.1496692921456, 0.2551587138704], -[0.154544022288, 0.2550750066774], -[0.1594231362022, 0.2549878240754], -[0.1643067613154, 0.2548970932082], -[0.1691950245889, 0.2548027420751], -[0.1740880520032, 0.2547046968041], -[0.1789859687146, 0.2546028822704], -[0.183888899042, 0.2544972221616], -[0.1887969664527, 0.2543876390416], -[0.1937102935486, 0.2542740544168], -[0.198629002053, 0.2541563888011], -[0.2035532127976, 0.2540345617824], -[0.2084830457097, 0.2539084920886], -[0.2134186197988, 0.2537780976539], -[0.2183600531448, 0.2536432956858], -[0.2233074628846, 0.2535040027318], -[0.2282609652, 0.2533601347462], -[0.2332206753046, 0.2532116071569], -[0.2381867074315, 0.2530583349327], -[0.2431591748203, 0.2529002326499], -[0.2481381897041, 0.2527372145596], -[0.2531238632962, 0.2525691946544], -[0.2581163057769, 0.2523960867355], -[0.2631156262796, 0.252217804479], -[0.2681219328766, 0.2520342615031], -[0.2731353325653, 0.2518453714344], -[0.2781556875344, 0.2516506244738], -[-0.2753460498322, 0.2565173050864], -[-0.2703321839195, 0.2567040936172], -[-0.2653255188388, 0.2568850576772], -[-0.2603260033602, 0.2570607866906], -[-0.2553335285246, 0.2572313679484], -[-0.2503479842808, 0.25739688874], -[-0.2453692594988, 0.2575574362856], -[-0.2403972419846, 0.2577130976684], -[-0.2354318184934, 0.2578639597664], -[-0.2304728747429, 0.2580101091841], -[-0.2255202954265, 0.2581516321846], -[-0.2205739642263, 0.258288614621], -[-0.2156337638257, 0.258421141868], -[-0.2106995759222, 0.2585492987536], -[-0.20577128124, 0.2586731694908], -[-0.2008487595426, 0.2587928376093], -[-0.1959318896456, 0.2589083858869], -[-0.1910205494291, 0.2590198962816], -[-0.1861146158511, 0.2591274498639], -[-0.18121396496, 0.2592311267484], -[-0.1763184719082, 0.2593310060268], -[-0.1714280109653, 0.2594271657005], -[-0.1665424555325, 0.259519682614], -[-0.1616616781561, 0.259608632388], -[-0.1567855505422, 0.2596940893541], -[-0.1519139434874, 0.2597761263533], -[-0.1470467273162, 0.2598548153496], -[-0.1421837710525, 0.2599302260101], -[-0.1373249432801, 0.2600024269974], -[-0.1324701117381, 0.2600714852294], -[-0.1276191434219, 0.2601374659535], -[-0.1227719046018, 0.2602004326861], -[-0.1179282608417, 0.2602604471531], -[-0.1130880770181, 0.2603175692322], -[-0.1082512173401, 0.2603718568955], -[-0.10341754537, 0.2604233661544], -[-0.09858692404464, 0.2604721510053], -[-0.09375921569717, 0.2605182633774], -[-0.0889342820796, 0.2605617530814], -[-0.08411198438602, 0.2606026677606], -[-0.07929218327683, 0.2606410528438], -[-0.07447473890259, 0.2606769514992], -[-0.06965951092985, 0.2607104045915], -[-0.0648463585667, 0.2607414506405], -[-0.06003514058918, 0.2607701257814], -[-0.05522571536832, 0.2607964637284], -[-0.05041794089768, 0.2608204957393], -[-0.04561167482148, 0.2608422505838], -[-0.04080677446315, 0.2608617545131], -[-0.03600309685444, 0.260879031233], -[-0.03120049876489, 0.2608941018785], -[-0.02639883673174, 0.260906984992], -[-0.02159796709015, 0.2609176965036], -[-0.01679774600376, 0.2609262497143], -[-0.01199802949553, 0.2609326552818], -[-0.00719867347875, 0.2609369212095], -[-0.00239953378825, 0.2609390528376], -[0.00239953378825, 0.2609390528376], -[0.00719867347875, 0.2609369212095], -[0.01199802949553, 0.2609326552818], -[0.01679774600376, 0.2609262497143], -[0.02159796709015, 0.2609176965036], -[0.02639883673174, 0.260906984992], -[0.03120049876489, 0.2608941018785], -[0.03600309685444, 0.260879031233], -[0.04080677446315, 0.2608617545131], -[0.04561167482148, 0.2608422505838], -[0.05041794089768, 0.2608204957393], -[0.05522571536832, 0.2607964637284], -[0.06003514058918, 0.2607701257814], -[0.0648463585667, 0.2607414506405], -[0.06965951092985, 0.2607104045915], -[0.07447473890259, 0.2606769514992], -[0.07929218327683, 0.2606410528438], -[0.08411198438603, 0.2606026677606], -[0.0889342820796, 0.2605617530814], -[0.09375921569717, 0.2605182633774], -[0.09858692404464, 0.2604721510053], -[0.10341754537, 0.2604233661544], -[0.1082512173401, 0.2603718568955], -[0.1130880770181, 0.2603175692322], -[0.1179282608417, 0.2602604471531], -[0.1227719046018, 0.2602004326861], -[0.1276191434219, 0.2601374659535], -[0.1324701117381, 0.2600714852294], -[0.1373249432801, 0.2600024269974], -[0.1421837710525, 0.2599302260101], -[0.1470467273162, 0.2598548153496], -[0.1519139434874, 0.2597761263533], -[0.1567855505422, 0.2596940893541], -[0.1616616781561, 0.259608632388], -[0.1665424555325, 0.259519682614], -[0.1714280109653, 0.2594271657005], -[0.1763184719082, 0.2593310060268], -[0.18121396496, 0.2592311267484], -[0.1861146158511, 0.2591274498639], -[0.1910205494291, 0.2590198962816], -[0.1959318896456, 0.2589083858869], -[0.2008487595426, 0.2587928376093], -[0.20577128124, 0.2586731694908], -[0.2106995759222, 0.2585492987536], -[0.2156337638257, 0.258421141868], -[0.2205739642263, 0.258288614621], -[0.2255202954265, 0.2581516321846], -[0.2304728747429, 0.2580101091841], -[0.2354318184934, 0.2578639597664], -[0.2403972419846, 0.2577130976684], -[0.2453692594988, 0.2575574362856], -[0.2503479842808, 0.25739688874], -[0.2553335285246, 0.2572313679484], -[0.2603260033602, 0.2570607866906], -[0.2653255188388, 0.2568850576772], -[0.2703321839195, 0.2567040936172], -[0.275346049834, 0.2565173050859], -[-0.2725376390812, 0.2613822154672], -[-0.2675305311478, 0.2615604638729], -[-0.2625307377729, 0.2617335025875], -[-0.2575381491434, 0.2619014198105], -[-0.2525526543217, 0.2620643037982], -[-0.2475741412605, 0.2622222427947], -[-0.2426024968169, 0.2623753249629], -[-0.237637606766, 0.2625236383154], -[-0.2326793558147, 0.2626672706449], -[-0.2277276276145, 0.2628063094545], -[-0.2227823047747, 0.2629408418887], -[-0.2178432688753, 0.2630709546628], -[-0.2129104004793, 0.263196733994], -[-0.2079835791459, 0.2633182655307], -[-0.2030626834424, 0.263435634283], -[-0.1981475909577, 0.2635489245532], -[-0.1932381783138, 0.2636582198651], -[-0.1883343211799, 0.2637636028953], -[-0.1834358942841, 0.2638651554031], -[-0.1785427714275, 0.2639629581612], -[-0.173654825497, 0.2640570908868], -[-0.1687719284794, 0.2641476321727], -[-0.1638939514752, 0.264234659419], -[-0.1590207647128, 0.2643182487651], -[-0.1541522375639, 0.2643984750219], -[-0.1492882385583, 0.2644754116058], -[-0.1444286353996, 0.2645491304713], -[-0.139573294982, 0.2646197020466], -[-0.1347220834066, 0.264687195168], -[-0.1298748659992, 0.2647516770167], -[-0.1250315073281, 0.2648132130556], -[-0.1201918712229, 0.2648718669678], -[-0.1153558207936, 0.2649277005958], -[-0.1105232184512, 0.2649807738821], -[-0.1056939259275, 0.2650311448114], -[-0.1008678042972, 0.2650788693536], -[-0.09604471399981, 0.2651240014094], -[-0.0912245148622, 0.2651665927559], -[-0.08640706612234, 0.2652066929957], -[-0.08159222645347, 0.2652443495066], -[-0.07677985398896, 0.2652796073935], -[-0.07196980634797, 0.2653125094426], -[-0.06716194066167, 0.2653430960773], -[-0.0623561136002, 0.2653714053165], -[-0.05755218140023, 0.2653974727349], -[-0.05274999989312, 0.265421331426], -[-0.0479494245337, 0.2654430119674], -[-0.04315031042959, 0.2654625423881], -[-0.038352512371, 0.2654799481393], -[-0.03355588486103, 0.2654952520671], -[-0.02876028214646, 0.2655084743877], -[-0.02396555824887, 0.2655196326665], -[-0.01917156699614, 0.2655287417985], -[-0.01437816205426, 0.2655358139927], -[-0.009585196959392, 0.2655408587585], -[-0.004792525150144, 0.265543882896], -[0, 0.265544890488], -[0.004792525150144, 0.265543882896], -[0.009585196959392, 0.2655408587585], -[0.01437816205426, 0.2655358139927], -[0.01917156699614, 0.2655287417985], -[0.02396555824887, 0.2655196326665], -[0.02876028214646, 0.2655084743877], -[0.03355588486103, 0.2654952520671], -[0.038352512371, 0.2654799481393], -[0.04315031042959, 0.2654625423881], -[0.0479494245337, 0.2654430119674], -[0.05274999989312, 0.265421331426], -[0.05755218140023, 0.2653974727349], -[0.0623561136002, 0.2653714053165], -[0.06716194066167, 0.2653430960773], -[0.07196980634797, 0.2653125094426], -[0.07677985398896, 0.2652796073935], -[0.08159222645347, 0.2652443495066], -[0.08640706612234, 0.2652066929957], -[0.0912245148622, 0.2651665927559], -[0.09604471399981, 0.2651240014094], -[0.1008678042972, 0.2650788693536], -[0.1056939259275, 0.2650311448114], -[0.1105232184512, 0.2649807738821], -[0.1153558207936, 0.2649277005958], -[0.1201918712229, 0.2648718669678], -[0.1250315073281, 0.2648132130556], -[0.1298748659992, 0.2647516770167], -[0.1347220834066, 0.264687195168], -[0.139573294982, 0.2646197020466], -[0.1444286353996, 0.2645491304713], -[0.1492882385583, 0.2644754116058], -[0.1541522375639, 0.2643984750219], -[0.1590207647128, 0.2643182487651], -[0.1638939514752, 0.264234659419], -[0.1687719284794, 0.2641476321727], -[0.173654825497, 0.2640570908868], -[0.1785427714275, 0.2639629581612], -[0.1834358942841, 0.2638651554031], -[0.1883343211799, 0.2637636028953], -[0.1932381783138, 0.2636582198651], -[0.1981475909577, 0.2635489245532], -[0.2030626834424, 0.263435634283], -[0.2079835791459, 0.2633182655307], -[0.2129104004793, 0.263196733994], -[0.2178432688753, 0.2630709546628], -[0.2227823047747, 0.2629408418887], -[0.2277276276145, 0.2628063094545], -[0.2326793558147, 0.2626672706449], -[0.237637606766, 0.2625236383154], -[0.2426024968169, 0.2623753249629], -[0.2475741412605, 0.2622222427947], -[0.2525526543217, 0.2620643037982], -[0.2575381491434, 0.2619014198105], -[0.2625307377729, 0.2617335025875], -[0.2675305311478, 0.2615604638729], -[0.2725376390812, 0.2613822154672], -[-0.2697306870981, 0.2662435940612], -[-0.2647304659109, 0.2664143242205], -[-0.2597376811136, 0.2665794394922], -[-0.2547521548495, 0.2667395483835], -[-0.249773774186, 0.2668947401644], -[-0.2448024250631, 0.2670451040813], -[-0.2398379923082, 0.2671907292861], -[-0.2348803596491, 0.2673317047662], -[-0.2299294097274, 0.2674681192733], -[-0.2249850241113, 0.2676000612528], -[-0.220047083309, 0.2677276187722], -[-0.2151154667807, 0.2678508794504], -[-0.2101900529519, 0.2679699303864], -[-0.205270719225, 0.2680848580873], -[-0.2003573419929, 0.2681957483975], -[-0.1954497966505, 0.268302686427], -[-0.1905479576082, 0.2684057564802], -[-0.1856516983043, 0.2685050419842], -[-0.1807608912181, 0.2686006254182], -[-0.175875407883, 0.268692588242], -[-0.1709951189005, 0.2687810108259], -[-0.1661198939534, 0.2688659723797], -[-0.1612496018205, 0.2689475508828], -[-0.1563841103912, 0.269025823015], -[-0.1515232866805, 0.2691008640871], -[-0.1466669968448, 0.2691727479724], -[-0.141815106198, 0.269241547039], -[-0.136967479228, 0.2693073320828], -[-0.1321239796146, 0.2693701722612], -[-0.1272844702468, 0.2694301350278], -[-0.122448813242, 0.2694872860682], -[-0.1176168699652, 0.2695416892369], -[-0.1127885010487, 0.2695934064953], -[-0.1079635664132, 0.269642497851], -[-0.1031419252894, 0.2696890212988], -[-0.09832343623974, 0.2697330327625], -[-0.09350795718185, 0.2697745860395], -[-0.0886953454121, 0.2698137327457], -[-0.08388545763011, 0.2698505222634], -[-0.07907814996404, 0.2698850016902], -[-0.07427327799652, 0.2699172157906], -[-0.06947069679141, 0.2699472069492], -[-0.06467026092119, 0.2699750151262], -[-0.05987182449508, 0.2700006778155], -[-0.05507524118784, 0.2700242300049], -[-0.05028036426912, 0.2700457041385], -[-0.04548704663354, 0.2700651300823], -[-0.04069514083124, 0.2700825350916], -[-0.03590449909901, 0.2700979437819], -[-0.0311149733919, 0.2701113781021], -[-0.02632641541528, 0.2701228573103], -[-0.02153867665728, 0.2701323979529], -[-0.01675160842162, 0.2701400138467], -[-0.01196506186073, 0.2701457160633], -[-0.007178888009083, 0.2701495129171], -[-0.002392937816778, 0.2701514099562], -[0.002392937816778, 0.2701514099562], -[0.007178888009083, 0.2701495129171], -[0.01196506186073, 0.2701457160633], -[0.01675160842162, 0.2701400138467], -[0.02153867665728, 0.2701323979529], -[0.02632641541528, 0.2701228573103], -[0.0311149733919, 0.2701113781021], -[0.03590449909901, 0.2700979437819], -[0.04069514083124, 0.2700825350916], -[0.04548704663354, 0.2700651300823], -[0.05028036426912, 0.2700457041385], -[0.05507524118784, 0.2700242300049], -[0.05987182449508, 0.2700006778155], -[0.06467026092119, 0.2699750151262], -[0.06947069679141, 0.2699472069492], -[0.07427327799652, 0.2699172157906], -[0.07907814996404, 0.2698850016902], -[0.08388545763011, 0.2698505222634], -[0.0886953454121, 0.2698137327457], -[0.09350795718185, 0.2697745860395], -[0.09832343623974, 0.2697330327625], -[0.1031419252894, 0.2696890212988], -[0.1079635664132, 0.269642497851], -[0.1127885010487, 0.2695934064953], -[0.1176168699652, 0.2695416892369], -[0.122448813242, 0.2694872860682], -[0.1272844702468, 0.2694301350278], -[0.1321239796146, 0.2693701722612], -[0.136967479228, 0.2693073320828], -[0.141815106198, 0.269241547039], -[0.1466669968448, 0.2691727479724], -[0.1515232866805, 0.2691008640871], -[0.1563841103912, 0.269025823015], -[0.1612496018205, 0.2689475508828], -[0.1661198939534, 0.2688659723797], -[0.1709951189005, 0.2687810108259], -[0.175875407883, 0.268692588242], -[0.1807608912181, 0.2686006254182], -[0.1856516983043, 0.2685050419842], -[0.1905479576082, 0.2684057564802], -[0.1954497966505, 0.268302686427], -[0.2003573419929, 0.2681957483975], -[0.205270719225, 0.2680848580873], -[0.2101900529519, 0.2679699303864], -[0.2151154667807, 0.2678508794504], -[0.220047083309, 0.2677276187722], -[0.2249850241113, 0.2676000612528], -[0.2299294097274, 0.2674681192733], -[0.2348803596491, 0.2673317047662], -[0.2398379923082, 0.2671907292861], -[0.2448024250631, 0.2670451040813], -[0.249773774186, 0.2668947401644], -[0.2547521548495, 0.2667395483835], -[0.2597376811136, 0.2665794394922], -[0.2647304659109, 0.2664143242205], -[0.2697306885764, 0.2662435937137], -[-0.2669250759764, 0.2711028322317], -[-0.26193208018, 0.2712655161977], -[-0.2569464406398, 0.2714227111678], -[-0.2519681120769, 0.2715750164738], -[-0.246996979548, 0.271722522448], -[-0.2420329269642, 0.2718653193867], -[-0.2370758371064, 0.2720034974778], -[-0.2321255916384, 0.2721371467293], -[-0.2271820711197, 0.2722663568966], -[-0.2222451550185, 0.2723912174106], -[-0.2173147217242, 0.2725118173047], -[-0.2123906485602, 0.2726282451424], -[-0.2074728117959, 0.2727405889442], -[-0.2025610866594, 0.2728489361147], -[-0.1976553473498, 0.2729533733695], -[-0.19275546705, 0.2730539866621], -[-0.1878613179387, 0.2731508611112], -[-0.182972771204, 0.2732440809273], -[-0.1780896970559, 0.2733337293401], -[-0.1732119647399, 0.2734198885258], -[-0.1683394425504, 0.2735026395348], -[-0.1634719978453, 0.2735820622193], -[-0.1586094970596, 0.273658235162], -[-0.1537518057213, 0.2737312356044], -[-0.1488987884661, 0.2738011393763], -[-0.1440503090538, 0.2738680208259], -[-0.1392062303846, 0.2739319527499], -[-0.1343664145169, 0.273993006325], -[-0.1295307226843, 0.2740512510404], -[-0.124699015315, 0.2741067546307], -[-0.1198711520505, 0.2741595830104], -[-0.115046991766, 0.2742098002091], -[-0.1102263925908, 0.2742574683084], -[-0.1054092119303, 0.27430264738], -[-0.1005953064879, 0.2743453954248], -[-0.09578453228867, 0.2743857683149], -[-0.09097674470268, 0.2744238197357], -[-0.08617179847019, 0.2744596011306], -[-0.08136954772703, 0.2744931616478], -[-0.07656984603097, 0.2745245480887], -[-0.07177254638884, 0.2745538048584], -[-0.0669775012844, 0.2745809739186], -[-0.062184562707, 0.2746060947428], -[-0.05739358218093, 0.2746292042736], -[-0.05260441079544, 0.2746503368831], -[-0.04781689923547, 0.274669524335], -[-0.043030897813, 0.2746867957503], -[-0.03824625649896, 0.2747021775749], -[-0.03346282495571, 0.2747156935509], -[-0.02868045257002, 0.2747273646897], -[-0.02389898848648, 0.274737209249], -[-0.01911828164135, 0.2747452427126], -[-0.01433818079671, 0.2747514777726], -[-0.009558534575, 0.2747559243155], -[-0.004779191493643, 0.2747585894111], -[-1.182467644306e-13, 0.2747594773045], -[0.004779191493643, 0.2747585894111], -[0.009558534575, 0.2747559243155], -[0.01433818079671, 0.2747514777726], -[0.01911828164134, 0.2747452427126], -[0.02389898848648, 0.274737209249], -[0.02868045257002, 0.2747273646897], -[0.03346282495571, 0.2747156935509], -[0.03824625649896, 0.2747021775749], -[0.043030897813, 0.2746867957503], -[0.04781689923547, 0.274669524335], -[0.05260441079544, 0.2746503368831], -[0.05739358218093, 0.2746292042736], -[0.06218456270701, 0.2746060947428], -[0.0669775012844, 0.2745809739186], -[0.07177254638884, 0.2745538048584], -[0.07656984603097, 0.2745245480887], -[0.08136954772703, 0.2744931616478], -[0.08617179847019, 0.2744596011306], -[0.09097674470268, 0.2744238197357], -[0.09578453228867, 0.2743857683149], -[0.1005953064879, 0.2743453954248], -[0.1054092119303, 0.27430264738], -[0.1102263925908, 0.2742574683084], -[0.115046991766, 0.2742098002091], -[0.1198711520505, 0.2741595830104], -[0.124699015315, 0.2741067546307], -[0.1295307226843, 0.2740512510404], -[0.1343664145169, 0.273993006325], -[0.1392062303846, 0.2739319527499], -[0.1440503090538, 0.2738680208259], -[0.1488987884661, 0.2738011393763], -[0.1537518057213, 0.2737312356044], -[0.1586094970596, 0.273658235162], -[0.1634719978453, 0.2735820622193], -[0.1683394425504, 0.2735026395348], -[0.1732119647399, 0.2734198885258], -[0.1780896970559, 0.2733337293401], -[0.182972771204, 0.2732440809273], -[0.1878613179387, 0.2731508611112], -[0.19275546705, 0.2730539866621], -[0.1976553473498, 0.2729533733695], -[0.2025610866594, 0.2728489361147], -[0.2074728117959, 0.2727405889442], -[0.2123906485602, 0.2726282451424], -[0.2173147217242, 0.2725118173047], -[0.2222451550185, 0.2723912174106], -[0.2271820711197, 0.2722663568966], -[0.2321255916384, 0.2721371467293], -[0.2370758371064, 0.2720034974778], -[0.2420329269642, 0.2718653193867], -[0.246996979548, 0.271722522448], -[0.2519681120769, 0.2715750164738], -[0.2569464406399, 0.2714227111678], -[0.26193208018, 0.2712655161977], -[0.2669250759787, 0.2711028322312], -[-0.2641210853023, 0.2759593173505], -[-0.2591354662566, 0.2761138808276], -[-0.2541571084936, 0.2762631598768], -[-0.2491861128231, 0.2764076676326], -[-0.244222362273, 0.276547495539], -[-0.23926573871, 0.2766827349904], -[-0.2343161228521, 0.2768134772577], -[-0.2293733942825, 0.2769398134157], -[-0.2244374314619, 0.2770618342687], -[-0.2195081117411, 0.277179630277], -[-0.2145853113736, 0.2772932914825], -[-0.2096689055279, 0.2774029074348], -[-0.2047587682993, 0.2775085671162], -[-0.1998547727229, 0.2776103588671], -[-0.1949567907854, 0.2777083703119], -[-0.1900646934376, 0.2778026882835], -[-0.1851783506073, 0.2778933987489], -[-0.1802976312117, 0.2779805867344], -[-0.1754224031707, 0.2780643362513], -[-0.1705525334204, 0.2781447302211], -[-0.1656878879267, 0.2782218504013], -[-0.1608283316997, 0.2782957773121], -[-0.1559737288084, 0.2783665901623], -[-0.1511239423956, 0.2784343667766], -[-0.1462788346941, 0.278499183523], -[-0.141438267043, 0.2785611152413], -[-0.1366020999045, 0.2786202351714], -[-0.1317701928818, 0.2786766148834], -[-0.1269424047375, 0.2787303242082], -[-0.122118593413, 0.2787814311693], -[-0.1172986160479, 0.2788300019148], -[-0.1124823290014, 0.2788761006526], -[-0.1076695878733, 0.2789197895844], -[-0.102860247527, 0.2789611288436], -[-0.0980541621121, 0.2790001764328], -[-0.09325118508902, 0.2790369881642], -[-0.08845116925367, 0.2790716176012], -[-0.08365396676338, 0.2791041160019], -[-0.0788594291635, 0.2791345322652], -[-0.07406740741492, 0.2791629128779], -[-0.0692777519224, 0.2791893018653], -[-0.06449031256367, 0.2792137407427], -[-0.05970493871937, 0.279236268471], -[-0.05492147930371, 0.2792569214132], -[-0.05013978279585, 0.2792757332945], -[-0.04535969727199, 0.2792927351651], -[-0.0405810704381, 0.2793079553649], -[-0.03580374966326, 0.2793214194925], -[-0.03102758201352, 0.2793331503756], -[-0.02625241428637, 0.279343168046], -[-0.02147809304556, 0.2793514897162], -[-0.01670446465635, 0.27935812976], -[-0.01193137532116, 0.2793630996965], -[-0.007158671115436, 0.2793664081763], -[-0.002386198023782, 0.2793680609723], -[0.002386198023782, 0.2793680609723], -[0.007158671115436, 0.2793664081763], -[0.01193137532116, 0.2793630996965], -[0.01670446465635, 0.27935812976], -[0.02147809304556, 0.2793514897162], -[0.02625241428637, 0.279343168046], -[0.03102758201352, 0.2793331503756], -[0.03580374966326, 0.2793214194925], -[0.0405810704381, 0.2793079553649], -[0.04535969727199, 0.2792927351651], -[0.05013978279585, 0.2792757332945], -[0.05492147930371, 0.2792569214132], -[0.05970493871937, 0.279236268471], -[0.06449031256367, 0.2792137407427], -[0.0692777519224, 0.2791893018653], -[0.07406740741492, 0.2791629128779], -[0.0788594291635, 0.2791345322652], -[0.08365396676338, 0.2791041160019], -[0.08845116925367, 0.2790716176012], -[0.09325118508902, 0.2790369881642], -[0.0980541621121, 0.2790001764328], -[0.102860247527, 0.2789611288436], -[0.1076695878733, 0.2789197895844], -[0.1124823290014, 0.2788761006526], -[0.1172986160479, 0.2788300019148], -[0.122118593413, 0.2787814311693], -[0.1269424047375, 0.2787303242082], -[0.1317701928817, 0.2786766148833], -[0.1366020999045, 0.2786202351714], -[0.141438267043, 0.2785611152413], -[0.1462788346941, 0.278499183523], -[0.1511239423956, 0.2784343667766], -[0.1559737288084, 0.2783665901623], -[0.1608283316997, 0.2782957773121], -[0.1656878879267, 0.2782218504013], -[0.1705525334204, 0.2781447302211], -[0.1754224031707, 0.2780643362513], -[0.1802976312117, 0.2779805867344], -[0.1851783506073, 0.2778933987489], -[0.1900646934376, 0.2778026882835], -[0.1949567907854, 0.2777083703119], -[0.1998547727229, 0.2776103588671], -[0.2047587682993, 0.2775085671162], -[0.2096689055279, 0.2774029074348], -[0.2145853113736, 0.2772932914825], -[0.2195081117411, 0.277179630277], -[0.2244374314619, 0.2770618342687], -[0.2293733942825, 0.2769398134157], -[0.2343161228521, 0.2768134772577], -[0.23926573871, 0.2766827349904], -[0.244222362273, 0.276547495539], -[0.2491861128231, 0.2764076676326], -[0.2541571084936, 0.2762631598768], -[0.2591354662566, 0.2761138808276], -[0.2641210724705, 0.27595928896], -[-0.2613193906592, 0.280812637883], -[-0.2563407167925, 0.2809592585849], -[-0.2513697772044, 0.2811006273335], -[-0.2464062495066, 0.2812373448646], -[-0.2414500146836, 0.2813695037837], -[-0.2365009525409, 0.2814971966317], -[-0.2315589417176, 0.2816205158104], -[-0.2266238596997, 0.2817395535076], -[-0.221695582832, 0.2818544016222], -[-0.2167739863308, 0.2819651516883], -[-0.211858944296, 0.2820718947993], -[-0.206950329723, 0.2821747215325], -[-0.2020480145148, 0.2822737218725], -[-0.1971518694944, 0.2823689851349], -[-0.1922617644165, 0.2824605998899], -[-0.1873775679802, 0.2825486538858], -[-0.1824991478414, 0.2826332339724], -[-0.1776263706256, 0.2827144260244], -[-0.172759101941, 0.2827923148652], -[-0.1678972063922, 0.2828669841907], -[-0.1630405475939, 0.2829385164929], -[-0.1581889881853, 0.2830069929845], -[-0.1533423898452, 0.2830724935239], -[-0.1485006133074, 0.2831350965395], -[-0.1436635183769, 0.2831948789563], -[-0.1388309639467, 0.2832519161219], -[-0.1340028080151, 0.2833062817337], -[-0.1291789077043, 0.2833580477668], -[-0.1243591192791, 0.2834072844031], -[-0.119543298167, 0.2834540599614], -[-0.1147312989787, 0.2834984408282], -[-0.1099229755297, 0.2835404913907], -[-0.1051181808626, 0.2835802739702], -[-0.1003167672706, 0.2836178487577], -[-0.09551858632161, 0.2836532737513], -[-0.09072348888329, 0.2836866046942], -[-0.08593132514918, 0.283717895016], -[-0.08114194466557, 0.2837471957751], -[-0.07635519635939, 0.2837745556035], -[-0.0715709285669, 0.2838000206537], -[-0.06678898906328, 0.2838236345481], -[-0.06200922509308, 0.2838454383306], -[-0.05723148340151, 0.283865470421], -[-0.05245561026643, 0.2838837665721], -[-0.04768145153124, 0.283900359829], -[-0.04290885263832, 0.283915280492], -[-0.03813765866329, 0.2839285560821], -[-0.03336771434979, 0.2839402113093], -[-0.02859886414488, 0.2839502680443], -[-0.02383095223497, 0.2839587452933], -[-0.01906382258212, 0.283965659176], -[-0.01429731896088, 0.283971022907], -[-0.009531284995351, 0.2839748467802], -[-0.004765564196548, 0.2839771381572], -[-1.666855817479e-13, 0.2839779014582], -[0.004765564196548, 0.2839771381572], -[0.009531284995352, 0.2839748467802], -[0.01429731896088, 0.283971022907], -[0.01906382258212, 0.283965659176], -[0.02383095223497, 0.2839587452933], -[0.02859886414488, 0.2839502680443], -[0.03336771434979, 0.2839402113093], -[0.03813765866329, 0.2839285560821], -[0.04290885263832, 0.283915280492], -[0.04768145153124, 0.283900359829], -[0.05245561026643, 0.2838837665721], -[0.05723148340151, 0.283865470421], -[0.06200922509308, 0.2838454383306], -[0.06678898906328, 0.2838236345481], -[0.0715709285669, 0.2838000206537], -[0.07635519635939, 0.2837745556035], -[0.08114194466557, 0.2837471957751], -[0.08593132514918, 0.283717895016], -[0.09072348888329, 0.2836866046942], -[0.09551858632161, 0.2836532737513], -[0.1003167672706, 0.2836178487577], -[0.1051181808626, 0.2835802739702], -[0.1099229755297, 0.2835404913907], -[0.1147312989787, 0.2834984408282], -[0.119543298167, 0.2834540599614], -[0.1243591192791, 0.2834072844031], -[0.1291789077043, 0.2833580477668], -[0.1340028080151, 0.2833062817337], -[0.1388309639467, 0.2832519161219], -[0.1436635183769, 0.2831948789563], -[0.1485006133074, 0.2831350965395], -[0.1533423898452, 0.2830724935239], -[0.1581889881853, 0.2830069929845], -[0.1630405475939, 0.2829385164929], -[0.1678972063922, 0.2828669841907], -[0.172759101941, 0.2827923148652], -[0.1776263706256, 0.2827144260244], -[0.1824991478414, 0.2826332339724], -[0.1873775679802, 0.2825486538858], -[0.1922617644165, 0.2824605998899], -[0.1971518694944, 0.2823689851349], -[0.2020480145148, 0.2822737218725], -[0.206950329723, 0.2821747215325], -[0.211858944296, 0.2820718947993], -[0.2167739863308, 0.2819651516883], -[0.221695582832, 0.2818544016222], -[0.2266238596997, 0.2817395535076], -[0.2315589417176, 0.2816205158104], -[0.2365009525409, 0.2814971966317], -[0.2414500146836, 0.2813695037837], -[0.2464062495065, 0.2812373448646], -[0.2513697772044, 0.2811006273335], -[0.2563407167925, 0.2809592585849], -[0.2613193915206, 0.2808126377354], -[-0.2585188901651, 0.2856634008485], -[-0.2535479248109, 0.2858014893619], -[-0.2485845397072, 0.2859349546704], -[-0.2436286149895, 0.2860638905947], -[-0.238680029583, 0.2861883909513], -[-0.2337386612158, 0.2863085494771], -[-0.2288043864321, 0.2864244597527], -[-0.2238770806038, 0.2865362151264], -[-0.218956617943, 0.2866439086372], -[-0.2140428715139, 0.2867476329375], -[-0.2091357132449, 0.2868474802162], -[-0.2042350139401, 0.2869435421204], -[-0.1993406432912, 0.2870359096775], -[-0.1944524698895, 0.2871246732176], -[-0.1895703612379, 0.2872099222946], -[-0.1846941837631, 0.2872917456082], -[-0.179823802828, 0.2873702309255], -[-0.1749590827446, 0.2874454650022], -[-0.1700998867871, 0.287517533505], -[-0.1652460772054, 0.2875865209326], -[-0.1603975152395, 0.2876525105386], -[-0.1555540611334, 0.2877155842533], -[-0.1507155741512, 0.2877758226069], -[-0.145881912592, 0.2878333046525], -[-0.1410529338072, 0.2878881078899], -[-0.1362284942172, 0.2879403081907], -[-0.1314084493294, 0.2879899797229], -[-0.1265926537576, 0.2880371948778], -[-0.1217809612409, 0.2880820241965], -[-0.1169732246647, 0.2881245362989], -[-0.1121692960821, 0.2881647978131], -[-0.1073690267359, 0.288202873306], -[-0.1025722670825, 0.288238825216], -[-0.09777886681566, 0.2882727137872], -[-0.09298867489187, 0.2883045970047], -[-0.08820153955664, 0.2883345305324], -[-0.08341730837155, 0.2883625676524], -[-0.07863582824248, 0.288388759207], -[-0.0738569454486, 0.2884131535421], -[-0.06908050567246, 0.2884357964538], -[-0.06430635403091, 0.2884567311367], -[-0.0595343351069, 0.2884759981355], -[-0.05476429298225, 0.2884936352988], -[-0.04999607127109, 0.2885096777354], -[-0.04522951315421, 0.2885241577748], -[-0.04046446141408, 0.288537104929], -[-0.03570075847061, 0.2885485458585], -[-0.03093824641751, 0.2885585043415], -[-0.02617676705925, 0.2885670012454], -[-0.02141616194855, 0.2885740545028], -[-0.0166562724243, 0.28857967909], -[-0.0118969396499, 0.2885838870094], -[-0.007138004651916, 0.2885866872755], -[-0.002379308359006, 0.2885880859038], -[0.002379308359006, 0.2885880859038], -[0.007138004651916, 0.2885866872755], -[0.0118969396499, 0.2885838870094], -[0.0166562724243, 0.28857967909], -[0.02141616194855, 0.2885740545028], -[0.02617676705925, 0.2885670012454], -[0.03093824641751, 0.2885585043415], -[0.03570075847061, 0.2885485458585], -[0.04046446141408, 0.288537104929], -[0.04522951315421, 0.2885241577748], -[0.04999607127109, 0.2885096777354], -[0.05476429298225, 0.2884936352988], -[0.0595343351069, 0.2884759981355], -[0.06430635403091, 0.2884567311367], -[0.06908050567246, 0.2884357964538], -[0.0738569454486, 0.2884131535421], -[0.07863582824248, 0.288388759207], -[0.08341730837155, 0.2883625676524], -[0.08820153955664, 0.2883345305324], -[0.09298867489187, 0.2883045970047], -[0.09777886681567, 0.2882727137872], -[0.1025722670825, 0.288238825216], -[0.1073690267359, 0.288202873306], -[0.1121692960821, 0.2881647978131], -[0.1169732246647, 0.2881245362989], -[0.1217809612409, 0.2880820241965], -[0.1265926537576, 0.2880371948778], -[0.1314084493294, 0.2879899797229], -[0.1362284942172, 0.2879403081907], -[0.1410529338072, 0.2878881078899], -[0.145881912592, 0.2878333046525], -[0.1507155741512, 0.2877758226069], -[0.1555540611334, 0.2877155842533], -[0.1603975152395, 0.2876525105386], -[0.1652460772054, 0.2875865209326], -[0.1700998867871, 0.287517533505], -[0.1749590827446, 0.2874454650022], -[0.179823802828, 0.2873702309255], -[0.1846941837631, 0.2872917456082], -[0.1895703612379, 0.2872099222946], -[0.1944524698895, 0.2871246732176], -[0.1993406432912, 0.2870359096775], -[0.2042350139401, 0.2869435421204], -[0.2091357132449, 0.2868474802162], -[0.2140428715139, 0.2867476329375], -[0.218956617943, 0.2866439086372], -[0.2238770806038, 0.2865362151264], -[0.2288043864321, 0.2864244597527], -[0.2337386612158, 0.2863085494771], -[0.238680029583, 0.2861883909513], -[0.2436286149895, 0.2860638905947], -[0.2485845397072, 0.2859349546704], -[0.2535479248109, 0.2858014893619], -[0.2585188901651, 0.2856634008485], -[-0.2557204804104, 0.2905098113974], -[-0.2507571837271, 0.2906404124333], -[-0.2458014893669, 0.2907659824035], -[-0.2408533026007, 0.2908871466329], -[-0.2359125002789, 0.2910040001998], -[-0.2309789580371, 0.2911166380865], -[-0.2260525503073, 0.2912251551012], -[-0.221133150331, 0.2913296458001], -[-0.2162206301704, 0.2914302044088], -[-0.21131486072, 0.2915269247436], -[-0.2064157117185, 0.2916199001321], -[-0.2015230517597, 0.291709223334], -[-0.1966367483048, 0.2917949864609], -[-0.1917566676934, 0.2918772808967], -[-0.186882675156, 0.2919561972171], -[-0.1820146348256, 0.2920318251098], -[-0.1771524097502, 0.2921042532934], -[-0.1722958619057, 0.2921735694377], -[-0.167444852209, 0.2922398600832], -[-0.1625992405315, 0.2923032105607], -[-0.1577588857137, 0.2923637049119], -[-0.1529236455794, 0.2924214258094], -[-0.1480933769516, 0.2924764544777], -[-0.1432679356687, 0.2925288706145], -[-0.138447176601, 0.2925787523125], -[-0.1336309536685, 0.2926261759822], -[-0.1288191198599, 0.2926712162752], -[-0.1240115272513, 0.2927139460088], -[-0.119208027027, 0.2927544360911], -[-0.1144084695008, 0.2927927554479], -[-0.1096127041379, 0.2928289709505], -[-0.1048205795784, 0.2928631473452], -[-0.1000319436616, 0.2928953471837], -[-0.095246643451, 0.2929256307564], -[-0.09046452526091, 0.2929540560261], -[-0.08568543468362, 0.2929806785649], -[-0.08090921661785, 0.2930055514923], -[-0.07613571529813, 0.2930287254158], -[-0.07136477432521, 0.2930502483741], -[-0.06659623669748, 0.2930701657826], -[-0.06182994484333, 0.293088520381], -[-0.05706574065443, 0.2931053521846], -[-0.05230346551999, 0.2931206984376], -[-0.04754296036179, 0.2931345935696], -[-0.04278406567006, 0.2931470691552], -[-0.03802662154018, 0.2931581538772], -[-0.03327046770996, 0.2931678734918], -[-0.02851544359773, 0.2931762507985], -[-0.0237613883409, 0.2931833056127], -[-0.01900814083512, 0.2931890547418], -[-0.01425553977382, 0.2931935119652], -[-0.009503423688244, 0.2931966880175], -[-0.004751630987681, 0.2931985905756], -[0, 0.2931992242492], -[0.004751630987681, 0.2931985905756], -[0.009503423688244, 0.2931966880175], -[0.01425553977382, 0.2931935119652], -[0.01900814083512, 0.2931890547418], -[0.0237613883409, 0.2931833056127], -[0.02851544359773, 0.2931762507985], -[0.03327046770996, 0.2931678734918], -[0.03802662154018, 0.2931581538772], -[0.04278406567006, 0.2931470691552], -[0.04754296036179, 0.2931345935696], -[0.05230346551999, 0.2931206984376], -[0.05706574065443, 0.2931053521846], -[0.06182994484333, 0.293088520381], -[0.06659623669748, 0.2930701657826], -[0.07136477432521, 0.2930502483741], -[0.07613571529813, 0.2930287254158], -[0.08090921661785, 0.2930055514923], -[0.08568543468362, 0.2929806785649], -[0.09046452526091, 0.2929540560261], -[0.095246643451, 0.2929256307564], -[0.1000319436616, 0.2928953471837], -[0.1048205795784, 0.2928631473452], -[0.1096127041379, 0.2928289709505], -[0.1144084695008, 0.2927927554479], -[0.119208027027, 0.2927544360911], -[0.1240115272513, 0.2927139460088], -[0.1288191198599, 0.2926712162752], -[0.1336309536685, 0.2926261759822], -[0.138447176601, 0.2925787523125], -[0.1432679356687, 0.2925288706145], -[0.1480933769516, 0.2924764544777], -[0.1529236455794, 0.2924214258094], -[0.1577588857137, 0.2923637049119], -[0.1625992405315, 0.2923032105607], -[0.167444852209, 0.2922398600832], -[0.1722958619057, 0.2921735694377], -[0.1771524097502, 0.2921042532934], -[0.1820146348256, 0.2920318251098], -[0.186882675156, 0.2919561972171], -[0.1917566676934, 0.2918772808967], -[0.1966367483048, 0.2917949864609], -[0.2015230517597, 0.291709223334], -[0.2064157117185, 0.2916199001321], -[0.21131486072, 0.2915269247436], -[0.2162206301704, 0.2914302044088], -[0.221133150331, 0.2913296458001], -[0.2260525503073, 0.2912251551012], -[0.2309789580371, 0.2911166380865], -[0.235912500279, 0.2910040001998], -[0.2408533026007, 0.2908871466329], -[0.2458014893669, 0.2907659824035], -[0.2507571837271, 0.2906404124333], -[0.2557204814104, 0.2905098112903], -[-0.2529244030346, 0.2953533326191], -[-0.2479685873712, 0.29547586642], -[-0.2430207199999, 0.2955935503964], -[-0.2380804061591, 0.2957069541395], -[-0.2331475206089, 0.2958161740411], -[-0.2282219368758, 0.2959213063789], -[-0.2233035272641, 0.2960224472379], -[-0.2183921628677, 0.2961196924303], -[-0.2134877135815, 0.2962131374155], -[-0.2085900481123, 0.2963028772191], -[-0.2036990339904, 0.2963890063522], -[-0.1988145375803, 0.2964716187297], -[-0.1939364240927, 0.2965508075891], -[-0.1890645575951, 0.296626665408], -[-0.184198801024, 0.2966992838225], -[-0.1793390161968, 0.2967687535443], -[-0.174485063824, 0.2968351642789], -[-0.1696368035219, 0.2968986046427], -[-0.1647940938257, 0.296959162081], -[-0.1599567922036, 0.2970169227857], -[-0.1551247550705, 0.2970719716131], -[-0.1502978378039, 0.2971243920025], -[-0.1454758947587, 0.2971742658951], -[-0.1406587792844, 0.2972216736526], -[-0.1358463437418, 0.2972666939778], -[-0.1310384395219, 0.2973094038349], -[-0.1262349170643, 0.2973498783711], -[-0.1214356258777, 0.297388190839], -[-0.1166404145608, 0.2974244125202], -[-0.1118491308245, 0.2974586126502], -[-0.1070616215148, 0.2974908583443], -[-0.1022777326369, 0.2975212145259], -[-0.09749730938102, 0.2975497438551], -[-0.09272019614814, 0.2975765066602], -[-0.08794623657782, 0.297601560871], -[-0.08317527357667, 0.2976249619532], -[-0.07840714934807, 0.2976467628463], -[-0.07364170542284, 0.2976670139029], -[-0.06887878269114, 0.297685762831], -[-0.06411822143533, 0.2977030546384], -[-0.05935986136382, 0.2977189315805], -[-0.05460354164597, 0.2977334331106], -[-0.04984910094788, 0.2977465958328], -[-0.0450963774691, 0.2977584534589], -[-0.04034520898023, 0.2977690367675], -[-0.03559543286117, 0.2977783735676], -[-0.03084688614027, 0.2977864886642], -[-0.02609940553404, 0.2977934038289], -[-0.0213528274875, 0.2977991377725], -[-0.01660698821502, 0.297803706123], -[-0.01186172374164, 0.2978071214058], -[-0.007116869944753, 0.2978093930286], -[-0.002372262596095, 0.2978105272694], -[0.002372262596095, 0.2978105272694], -[0.007116869944753, 0.2978093930286], -[0.01186172374164, 0.2978071214058], -[0.01660698821502, 0.297803706123], -[0.0213528274875, 0.2977991377725], -[0.02609940553404, 0.2977934038289], -[0.03084688614027, 0.2977864886642], -[0.03559543286117, 0.2977783735676], -[0.04034520898023, 0.2977690367675], -[0.0450963774691, 0.2977584534589], -[0.04984910094788, 0.2977465958328], -[0.05460354164597, 0.2977334331106], -[0.05935986136382, 0.2977189315805], -[0.06411822143533, 0.2977030546384], -[0.06887878269114, 0.297685762831], -[0.07364170542284, 0.2976670139029], -[0.07840714934807, 0.2976467628463], -[0.08317527357667, 0.2976249619532], -[0.08794623657782, 0.297601560871], -[0.09272019614814, 0.2975765066602], -[0.09749730938102, 0.2975497438551], -[0.1022777326369, 0.2975212145259], -[0.1070616215148, 0.2974908583443], -[0.1118491308245, 0.2974586126502], -[0.1166404145608, 0.2974244125202], -[0.1214356258777, 0.297388190839], -[0.1262349170643, 0.2973498783711], -[0.1310384395219, 0.2973094038349], -[0.1358463437418, 0.2972666939778], -[0.1406587792844, 0.2972216736526], -[0.1454758947587, 0.2971742658951], -[0.1502978378039, 0.2971243920025], -[0.1551247550705, 0.2970719716131], -[0.1599567922036, 0.2970169227857], -[0.1647940938257, 0.296959162081], -[0.1696368035219, 0.2968986046427], -[0.174485063824, 0.2968351642789], -[0.1793390161968, 0.2967687535443], -[0.184198801024, 0.2966992838225], -[0.1890645575951, 0.296626665408], -[0.1939364240927, 0.2965508075891], -[0.1988145375803, 0.2964716187297], -[0.2036990339904, 0.2963890063522], -[0.2085900481123, 0.2963028772191], -[0.2134877135815, 0.2962131374155], -[0.2183921628677, 0.2961196924303], -[0.2233035272641, 0.2960224472379], -[0.2282219368758, 0.2959213063789], -[0.2331475206089, 0.2958161740411], -[0.2380804061591, 0.2957069541395], -[0.2430207199999, 0.2955935503964], -[0.2479685873712, 0.29547586642], -[0.2529244036048, 0.2953533325583], -[-0.2501296868411, 0.3001931429899], -[-0.2451822300092, 0.300307689253], -[-0.2402423258977, 0.300417497824], -[-0.235310019998, 0.3005231535893], -[-0.2303851849644, 0.3006247543056], -[-0.2254676921981, 0.3007223975973], -[-0.2205574118601, 0.300816180876], -[-0.2156542128789, 0.3009062012587], -[-0.2107579629645, 0.3009925554859], -[-0.2058685286178, 0.301075339839], -[-0.2009857751417, 0.3011546500572], -[-0.1961095666517, 0.3012305812546], -[-0.1912397660872, 0.3013032278362], -[-0.1863762352226, 0.3013726834139], -[-0.1815188346785, 0.3014390407225], -[-0.1766674239338, 0.301502391535], -[-0.1718218613377, 0.3015628265783], -[-0.1669820041224, 0.3016204354489], -[-0.1621477084164, 0.3016753065277], -[-0.1573188292582, 0.3017275268962], -[-0.152495220611, 0.3017771822523], -[-0.1476767353775, 0.3018243568261], -[-0.1428632254165, 0.301869133297], -[-0.1380545415593, 0.3019115927103], -[-0.1332505336277, 0.3019518143956], -[-0.1284510504525, 0.3019898758846], -[-0.1236559398937, 0.3020258528315], -[-0.1188650488606, 0.3020598189325], -[-0.114078223334, 0.3020918458483], -[-0.1092953083892, 0.3021220031266], -[-0.1045161482196, 0.3021503581264], -[-0.09974058616252, 0.3021769759445], -[-0.094968464725, 0.3022019193428], -[-0.09019962561161, 0.302225248678], -[-0.08543390975317, 0.3022470218335], -[-0.08067115733633, 0.3022672941526], -[-0.07591120783519, 0.3022861183755], -[-0.07115390004294, 0.3023035445771], -[-0.06639907210546, 0.3023196201089], -[-0.06164656155567, 0.3023343895423], -[-0.05689620534908, 0.3023478946162], -[-0.05214783990028, 0.3023601741864], -[-0.04740130112043, 0.3023712641787], -[-0.04265642445576, 0.3023811975454], -[-0.03791304492682, 0.302390004225], -[-0.03317099716866, 0.3023977111051], -[-0.02843011547168, 0.3024043419896], -[-0.02369023382318, 0.3024099175691], -[-0.01895118594955, 0.3024144553949], -[-0.01421280535891, 0.3024179698572], -[-0.009474925384217, 0.3024204721673], -[-0.00473737922679, 0.3024219703433], -[-2.229268384095e-16, 0.3024224692001], -[0.00473737922679, 0.3024219703433], -[0.009474925384217, 0.3024204721673], -[0.01421280535891, 0.3024179698572], -[0.01895118594955, 0.3024144553949], -[0.02369023382318, 0.3024099175691], -[0.02843011547168, 0.3024043419896], -[0.03317099716866, 0.3023977111051], -[0.03791304492682, 0.302390004225], -[0.04265642445576, 0.3023811975454], -[0.04740130112043, 0.3023712641787], -[0.05214783990028, 0.3023601741864], -[0.05689620534908, 0.3023478946162], -[0.06164656155567, 0.3023343895423], -[0.06639907210546, 0.3023196201089], -[0.07115390004294, 0.3023035445771], -[0.07591120783519, 0.3022861183755], -[0.08067115733633, 0.3022672941526], -[0.08543390975317, 0.3022470218335], -[0.09019962561161, 0.302225248678], -[0.094968464725, 0.3022019193428], -[0.09974058616252, 0.3021769759445], -[0.1045161482196, 0.3021503581264], -[0.1092953083892, 0.3021220031266], -[0.114078223334, 0.3020918458483], -[0.1188650488606, 0.3020598189325], -[0.1236559398937, 0.3020258528315], -[0.1284510504525, 0.3019898758846], -[0.1332505336277, 0.3019518143956], -[0.1380545415593, 0.3019115927103], -[0.1428632254165, 0.301869133297], -[0.1476767353775, 0.3018243568261], -[0.152495220611, 0.3017771822523], -[0.1573188292582, 0.3017275268962], -[0.1621477084164, 0.3016753065277], -[0.1669820041223, 0.3016204354489], -[0.1718218613377, 0.3015628265783], -[0.1766674239338, 0.301502391535], -[0.1815188346785, 0.3014390407225], -[0.1863762352226, 0.3013726834139], -[0.1912397660872, 0.3013032278362], -[0.1961095666517, 0.3012305812546], -[0.2009857751417, 0.3011546500572], -[0.2058685286178, 0.301075339839], -[0.2107579629645, 0.3009925554859], -[0.2156542128789, 0.3009062012587], -[0.2205574118601, 0.300816180876], -[0.2254676921983, 0.3007223975973], -[0.2303851849644, 0.3006247543056], -[0.235310019998, 0.3005231535893], -[0.2402423258977, 0.300417497824], -[0.2451822300092, 0.300307689253], -[0.2501296877648, 0.3001931429519], -[-0.2473378809071, 0.3050291236834], -[-0.2423982063667, 0.3051357181355], -[-0.237466401851, 0.3052376631355], -[-0.2325422389903, 0.3053355847343], -[-0.2276255883178, 0.3054295821059], -[-0.2227163190942, 0.3055197542732], -[-0.2178142993184, 0.3056062000248], -[-0.2129193957381, 0.3056890178321], -[-0.2080314738599, 0.3057683057648], -[-0.2031503979599, 0.3058441614069], -[-0.1982760310942, 0.3059166817715], -[-0.1934082351089, 0.3059859632157], -[-0.1885468706513, 0.3060521013544], -[-0.1836917971802, 0.3061151909746], -[-0.1788428729777, 0.3061753259489], -[-0.1739999551603, 0.3062325991487], -[-0.1691628996914, 0.3062871023579], -[-0.1643315613938, 0.3063389261856], -[-0.1595057939625, 0.3063881599798], -[-0.1546854499794, 0.3064348917403], -[-0.1498703809273, 0.3064792080328], -[-0.1450604372058, 0.3065211939024], -[-0.1402554681474, 0.3065609327881], -[-0.1354553220347, 0.3065985064377], -[-0.1306598461189, 0.3066339948236], -[-0.125868886639, 0.3066674760585], -[-0.1210822888422, 0.3066990263138], -[-0.1162998970053, 0.3067287197371], -[-0.1115215544572, 0.3067566283724], -[-0.1067471036031, 0.3067828220809], -[-0.1019763859494, 0.3068073684637], -[-0.0972092421297, 0.3068303327859], -[-0.09244551193281, 0.3068517779029], -[-0.08768503433113, 0.3068717641882], -[-0.08292764751084, 0.3068903494639], -[-0.07817318890317, 0.306907588933], -[-0.07342149521693, 0.3069235351143], -[-0.06867240247219, 0.3069382377806], -[-0.06392574603527, 0.3069517438982], -[-0.05918136065478, 0.3069640975708], -[-0.05443908049885, 0.3069753399855], -[-0.04969873919341, 0.3069855093628], -[-0.04496016986149, 0.3069946409087], -[-0.04022320516352, 0.3070027667716], -[-0.03548767733847, 0.307009916002], -[-0.03075341824591, 0.307016114516], -[-0.02602025940876, 0.3070213850628], -[-0.02128803205677, 0.3070257471958], -[-0.01655656717057, 0.3070292172476], -[-0.01182569552624, 0.3070318083095], -[-0.007095247740346, 0.3070335302146], -[-0.00236505431526, 0.3070343895256], -[0.00236505431526, 0.3070343895256], -[0.007095247740345, 0.3070335302146], -[0.01182569552624, 0.3070318083095], -[0.01655656717056, 0.3070292172476], -[0.02128803205677, 0.3070257471958], -[0.02602025940876, 0.3070213850628], -[0.03075341824591, 0.307016114516], -[0.03548767733847, 0.307009916002], -[0.04022320516352, 0.3070027667716], -[0.04496016986149, 0.3069946409087], -[0.04969873919341, 0.3069855093628], -[0.05443908049885, 0.3069753399855], -[0.05918136065478, 0.3069640975708], -[0.06392574603527, 0.3069517438982], -[0.06867240247219, 0.3069382377806], -[0.07342149521693, 0.3069235351143], -[0.07817318890317, 0.306907588933], -[0.08292764751084, 0.3068903494639], -[0.08768503433113, 0.3068717641882], -[0.09244551193281, 0.3068517779029], -[0.0972092421297, 0.3068303327859], -[0.1019763859494, 0.3068073684637], -[0.1067471036031, 0.3067828220809], -[0.1115215544572, 0.3067566283724], -[0.1162998970053, 0.3067287197371], -[0.1210822888422, 0.3066990263138], -[0.125868886639, 0.3066674760585], -[0.1306598461189, 0.3066339948236], -[0.1354553220347, 0.3065985064377], -[0.1402554681474, 0.3065609327881], -[0.1450604372058, 0.3065211939024], -[0.1498703809273, 0.3064792080328], -[0.1546854499794, 0.3064348917403], -[0.1595057939625, 0.3063881599798], -[0.1643315613938, 0.3063389261856], -[0.1691628996914, 0.3062871023579], -[0.1739999551603, 0.3062325991487], -[0.1788428729777, 0.3061753259489], -[0.1836917971802, 0.3061151909746], -[0.1885468706513, 0.3060521013544], -[0.1934082351089, 0.3059859632157], -[0.1982760310942, 0.3059166817715], -[0.2031503979599, 0.3058441614069], -[0.2080314738599, 0.3057683057648], -[0.2129193957381, 0.3056890178321], -[0.2178142993184, 0.3056062000248], -[0.2227163190942, 0.3055197542732], -[0.2276255883178, 0.3054295821059], -[0.2325422389903, 0.3053355847343], -[0.237466401851, 0.3052376631355], -[0.2423982063667, 0.3051357181355], -[0.2473378815706, 0.3050291236565], -[-0.2445478050262, 0.3098612418056], -[-0.239616611652, 0.3099597895046], -[-0.2346930431738, 0.3100538840163], -[-0.229777158574, 0.3101440865663], -[-0.2248688262492, 0.3102304977995], -[-0.219967913303, 0.3103132181895], -[-0.2150742855564, 0.3103923479537], -[-0.2101878075576, 0.3104679869674], -[-0.2053083425918, 0.310540234679], -[-0.2004357526912, 0.3106091900223], -[-0.1955698986448, 0.3106749513306], -[-0.1907106400085, 0.3107376162484], -[-0.1858578351154, 0.3107972816436], -[-0.1810113410861, 0.3108540435197], -[-0.1761710138403, 0.3109079969262], -[-0.1713367081076, 0.3109592358707], -[-0.1665082774398, 0.3110078532292], -[-0.1616855742232, 0.3110539406572], -[-0.1568684496923, 0.3110975885005], -[-0.1520567539434, 0.3111388857062], -[-0.1472503359499, 0.311177919734], -[-0.1424490435772, 0.3112147764677], -[-0.1376527236006, 0.3112495401272], -[-0.1328612217218, 0.3112822931811], -[-0.1280743825885, 0.3113131162598], -[-0.1232920498141, 0.3113420880701], -[-0.1185140659986, 0.3113692853098], -[-0.113740272751, 0.3113947825845], -[-0.108970510713, 0.3114186523248], -[-0.1042046195834, 0.3114409647055], -[-0.09944243814468, 0.3114617875665], -[-0.09468380429018, 0.3114811863346], -[-0.08992855505291, 0.3114992239487], -[-0.0851765266357, 0.3115159607857], -[-0.08042755444261, 0.3115314545895], -[-0.07568147311173, 0.311545760402], -[-0.07093811654927, 0.3115589304974], -[-0.06619731796491, 0.3115710143182], -[-0.06145890990843, 0.3115820584152], -[-0.0567227243076, 0.3115921063896], -[-0.05198859250719, 0.3116011988395], -[-0.04725634530907, 0.3116093733083], -[-0.04252581301353, 0.3116166642381], -[-0.03779682546139, 0.3116231029256], -[-0.03306921207724, 0.3116287174824], -[-0.02834280191339, 0.311633532799], -[-0.02361742369467, 0.311637570513], -[-0.01889290586392, 0.3116408489807], -[-0.01416907662801, 0.3116433832536], -[-0.009445764004482, 0.3116451850588], -[-0.004722795868463, 0.3116462627839], -[-2.380221700389e-13, 0.3116466214657], -[0.004722795868463, 0.3116462627839], -[0.009445764004482, 0.3116451850588], -[0.01416907662801, 0.3116433832536], -[0.01889290586392, 0.3116408489807], -[0.02361742369467, 0.311637570513], -[0.02834280191339, 0.311633532799], -[0.03306921207724, 0.3116287174824], -[0.03779682546139, 0.3116231029256], -[0.04252581301353, 0.3116166642381], -[0.04725634530907, 0.3116093733083], -[0.05198859250719, 0.3116011988395], -[0.0567227243076, 0.3115921063896], -[0.06145890990843, 0.3115820584152], -[0.06619731796491, 0.3115710143182], -[0.07093811654927, 0.3115589304974], -[0.07568147311173, 0.311545760402], -[0.08042755444261, 0.3115314545895], -[0.0851765266357, 0.3115159607857], -[0.08992855505291, 0.3114992239487], -[0.09468380429018, 0.3114811863346], -[0.09944243814468, 0.3114617875665], -[0.1042046195834, 0.3114409647055], -[0.108970510713, 0.3114186523248], -[0.113740272751, 0.3113947825845], -[0.1185140659986, 0.3113692853098], -[0.1232920498141, 0.3113420880701], -[0.1280743825885, 0.3113131162598], -[0.1328612217218, 0.3112822931811], -[0.1376527236006, 0.3112495401272], -[0.1424490435772, 0.3112147764677], -[0.1472503359499, 0.311177919734], -[0.1520567539434, 0.3111388857062], -[0.1568684496923, 0.3110975885005], -[0.1616855742232, 0.3110539406572], -[0.1665082774398, 0.3110078532292], -[0.1713367081076, 0.3109592358707], -[0.1761710138403, 0.3109079969262], -[0.1810113410862, 0.3108540435197], -[0.1858578351154, 0.3107972816436], -[0.1907106400085, 0.3107376162484], -[0.1955698986448, 0.3106749513306], -[0.2004357526912, 0.3106091900223], -[0.2053083425918, 0.310540234679], -[0.2101878075576, 0.3104679869674], -[0.2150742855564, 0.3103923479537], -[0.219967913303, 0.3103132181895], -[0.2248688262492, 0.3102304977995], -[0.229777158574, 0.3101440865663], -[0.2346930431738, 0.3100538840163], -[0.239616611652, 0.3099597895046], -[0.2445478050325, 0.3098612418054], -[-0.2417605703175, 0.3146890678217], -[-0.2368375415802, 0.314779738992], -[-0.2319223457291, 0.3148659973487], -[-0.227014874779, 0.314948497278], -[-0.2221149949741, 0.3150273409505], -[-0.2172225712446, 0.3151026303436], -[-0.2123374672164, 0.3151744671551], -[-0.2074595452203, 0.3152429527159], -[-0.2025886663013, 0.3153081879021], -[-0.1977246902279, 0.3153702730462], -[-0.1928674755012, 0.315429307848], -[-0.1880168793652, 0.3154853912848], -[-0.1831727578161, 0.3155386215212], -[-0.1783349656127, 0.3155890958186], -[-0.1735033562874, 0.3156369104438], -[-0.168677782157, 0.3156821605779], -[-0.1638580943348, 0.3157249402251], -[-0.1590441427432, 0.3157653421206], -[-0.1542357761268, 0.3158034576392], -[-0.1494328420665, 0.3158393767042], -[-0.144635186995, 0.3158731876953], -[-0.1398426562121, 0.3159049773587], -[-0.1350550939025, 0.3159348307158], -[-0.1302723431534, 0.3159628309736], -[-0.1254942459744, 0.3159890594359], -[-0.1207206433177, 0.316013595415], -[-0.1159513750999, 0.316036516144], -[-0.1111862802254, 0.3160578966916], -[-0.1064251966109, 0.3160778098774], -[-0.101667961211, 0.3160963261885], -[-0.09691441004562, 0.3161135136984], -[-0.0921643782289, 0.3161294379879], -[-0.08741769999899, 0.316144162067], -[-0.08267420874973, 0.3161577463008], -[-0.07793373706366, 0.3161702483357], -[-0.0731961167463, 0.3161817230302], -[-0.06846117886198, 0.316192222387], -[-0.06372875377096, 0.3162017954886], -[-0.05899867116785, 0.3162104884365], -[-0.05427076012135, 0.3162183442922], -[-0.04954484911523, 0.3162254030236], -[-0.04482076609045, 0.3162317014532], -[-0.04009833848841, 0.316237273211], -[-0.03537739329521, 0.3162421486908], -[-0.0306577570869, 0.3162463550112], -[-0.02593925607562, 0.3162499159795], -[-0.02122171615632, 0.3162528520604], -[-0.0165049629547, 0.3162551803502], -[-0.01178882187501, 0.3162569145526], -[-0.007073118148912, 0.3162580649616], -[-0.002357676884478, 0.3162586384474], -[0.002357676884477, 0.3162586384474], -[0.007073118148912, 0.3162580649616], -[0.01178882187501, 0.3162569145526], -[0.0165049629547, 0.3162551803502], -[0.02122171615632, 0.3162528520604], -[0.02593925607557, 0.3162499159793], -[0.0306577570869, 0.3162463550112], -[0.03537739329521, 0.3162421486908], -[0.04009833848841, 0.316237273211], -[0.04482076609045, 0.3162317014532], -[0.04954484911523, 0.3162254030236], -[0.05427076012135, 0.3162183442922], -[0.05899867116785, 0.3162104884365], -[0.06372875377096, 0.3162017954886], -[0.06846117886198, 0.316192222387], -[0.0731961167463, 0.3161817230302], -[0.07793373706366, 0.3161702483357], -[0.08267420874973, 0.3161577463008], -[0.08741769999899, 0.316144162067], -[0.0921643782289, 0.3161294379879], -[0.09691441004562, 0.3161135136984], -[0.101667961211, 0.3160963261885], -[0.1064251966109, 0.3160778098774], -[0.1111862802254, 0.3160578966916], -[0.1159513750999, 0.316036516144], -[0.1207206433177, 0.316013595415], -[0.1254942459744, 0.315989059436], -[0.1302723431534, 0.3159628309736], -[0.1350550939025, 0.3159348307158], -[0.1398426562121, 0.3159049773587], -[0.144635186995, 0.3158731876953], -[0.1494328420665, 0.3158393767042], -[0.1542357761268, 0.3158034576392], -[0.1590441427432, 0.3157653421206], -[0.1638580943348, 0.3157249402251], -[0.168677782157, 0.3156821605779], -[0.1735033562874, 0.3156369104438], -[0.1783349656127, 0.3155890958186], -[0.1831727578161, 0.3155386215212], -[0.1880168793652, 0.3154853912848], -[0.1928674755012, 0.315429307848], -[0.1977246902279, 0.3153702730462], -[0.2025886663013, 0.3153081879021], -[0.2074595452203, 0.3152429527159], -[0.2123374672164, 0.3151744671551], -[0.2172225712446, 0.3151026303436], -[0.2221149949741, 0.3150273409505], -[0.227014874779, 0.314948497278], -[0.2319223457291, 0.3148659973487], -[0.2368375415802, 0.314779738992], -[0.2417605709927, 0.3146890678402], -[-0.2389758689883, 0.3195127058593], -[-0.2340610923979, 0.3195954013834], -[-0.2291544059549, 0.3196738391718], -[-0.2242554842543, 0.319748654224], -[-0.219364191372, 0.319819950291], -[-0.2144803900485, 0.3198878309081], -[-0.2096039416971, 0.319952399307], -[-0.2047347064127, 0.3200137583257], -[-0.1998725429807, 0.3200720103187], -[-0.1950173088853, 0.3201272570658], -[-0.1901688603188, 0.3201795996813], -[-0.1853270521903, 0.3202291385211], -[-0.1804917381357, 0.3202759730906], -[-0.1756627705272, 0.3203202019514], -[-0.1708400004841, 0.3203619226277], -[-0.1660232778834, 0.3204012315129], -[-0.1612124513719, 0.3204382237748], -[-0.1564073683786, 0.3204729932625], -[-0.1516078751278, 0.320505632411], -[-0.1468138166538, 0.3205362321481], -[-0.1420250368157, 0.3205648818001], -[-0.1372413783146, 0.3205916689985], -[-0.1324626827093, 0.3206166795862], -[-0.1276887904376, 0.3206399975267], -[-0.122919540834, 0.3206617048109], -[-0.1181547721523, 0.3206818813675], -[-0.1133943215877, 0.3207006049729], -[-0.108638025301, 0.3207179511632], -[-0.1038857184445, 0.3207339931474], -[-0.09913723518831, 0.3207488017221], -[-0.09439240874962, 0.3207624451884], -[-0.08965107142222, 0.3207749892704], -[-0.08491305460826, 0.3207864970361], -[-0.08017818885129, 0.3207970288205], -[-0.07544630387088, 0.3208066421516], -[-0.07071722859867, 0.3208153916789], -[-0.06599079121595, 0.3208233291048], -[-0.06126681919265, 0.320830503119], -[-0.05654513932773, 0.3208369593366], -[-0.05182557779091, 0.3208427402396], -[-0.04710796016569, 0.3208478851214], -[-0.04239211149359, 0.3208524300356], -[-0.03767785631956, 0.3208564077491], -[-0.03296501873839, 0.3208598476982], -[-0.0282534224422, 0.3208627759498], -[-0.02354289076872, 0.3208652151666], -[-0.01883324675046, 0.3208671845768], -[-0.01412431316445, 0.3208686999479], -[-0.009415912582691, 0.3208697735659], -[-0.00470786742295, 0.3208704142183], -[4.207903308435e-13, 0.3208706271825], -[0.00470786742295, 0.3208704142183], -[0.009415912582691, 0.3208697735659], -[0.01412431316445, 0.3208686999479], -[0.01883324675046, 0.3208671845768], -[0.02354289076872, 0.3208652151666], -[0.0282534224422, 0.3208627759498], -[0.03296501873839, 0.3208598476982], -[0.03767785631956, 0.3208564077491], -[0.04239211149359, 0.3208524300356], -[0.04710796016569, 0.3208478851214], -[0.05182557779091, 0.3208427402396], -[0.05654513932773, 0.3208369593366], -[0.06126681919265, 0.3208305031189], -[0.06599079121595, 0.3208233291048], -[0.07071722859867, 0.3208153916789], -[0.07544630387088, 0.3208066421516], -[0.08017818885129, 0.3207970288205], -[0.08491305460826, 0.3207864970361], -[0.08965107142222, 0.3207749892704], -[0.09439240874962, 0.3207624451884], -[0.09913723518831, 0.3207488017221], -[0.1038857184445, 0.3207339931474], -[0.108638025301, 0.3207179511632], -[0.1133943215877, 0.3207006049729], -[0.1181547721523, 0.3206818813675], -[0.122919540834, 0.3206617048109], -[0.1276887904376, 0.3206399975267], -[0.1324626827093, 0.3206166795862], -[0.1372413783145, 0.3205916689984], -[0.1420250368158, 0.3205648818001], -[0.1468138166538, 0.3205362321481], -[0.1516078751278, 0.320505632411], -[0.1564073683786, 0.3204729932625], -[0.1612124513719, 0.3204382237748], -[0.1660232778834, 0.3204012315128], -[0.1708400004841, 0.3203619226277], -[0.1756627705272, 0.3203202019514], -[0.1804917381357, 0.3202759730906], -[0.1853270521903, 0.3202291385211], -[0.1901688603188, 0.3201795996813], -[0.1950173088853, 0.3201272570658], -[0.1998725429807, 0.3200720103187], -[0.2047347064127, 0.3200137583257], -[0.2096039416971, 0.319952399307], -[0.2144803900485, 0.3198878309081], -[0.219364191372, 0.319819950291], -[0.2242554842543, 0.319748654224], -[0.2291544059549, 0.3196738391718], -[0.2340610923979, 0.3195954013834], -[0.2389758694867, 0.3195127058733], -[-0.2361931513798, 0.3243319089093], -[-0.2312873609089, 0.3244066105768], -[-0.2263893208909, 0.3244772446407], -[-0.2214990842959, 0.3245443938793], -[-0.2166165130163, 0.3246081636802], -[-0.2117414675853, 0.3246686591922], -[-0.206873807186, 0.3247259852343], -[-0.2020133896586, 0.3247802462046], -[-0.1971600715087, 0.3248315459872], -[-0.1923137079154, 0.3248799878595], -[-0.1874741527394, 0.3249256743982], -[-0.182641258532, 0.3249687073845], -[-0.1778148765441, 0.3250091877096], -[-0.1729948567354, 0.3250472152781], -[-0.1681810477849, 0.3250828889126], -[-0.1633732971018, 0.325116306257], -[-0.1585714508368, 0.3251475636797], -[-0.1537753538947, 0.325176756177], -[-0.1489848499478, 0.3252039772758], -[-0.1441997814504, 0.3252293189371], -[-0.1394199896543, 0.3252528714595], -[-0.1346453146253, 0.3252747233825], -[-0.1298755952616, 0.3252949613915], -[-0.1251106693128, 0.325313670222], -[-0.1203503734004, 0.3253309325662], -[-0.1155945430403, 0.3253468289789], -[-0.1108430126661, 0.3253614377865], -[-0.1060956156542, 0.3253748349955], -[-0.1013521843507, 0.3253870942037], -[-0.09661255009937, 0.3253982865131], -[-0.09187654327169, 0.3254084804439], -[-0.08714399329825, 0.3254177418516], -[-0.0824147287019, 0.3254261338459], -[-0.07768857713245, 0.3254337167124], -[-0.07296536540305, 0.3254405478365], -[-0.06824491952807, 0.3254466816308], -[-0.06352706476261, 0.3254521694654], -[-0.05881162564346, 0.3254570596016], -[-0.05409842603158, 0.3254613971286], -[-0.04938728915598, 0.3254652239046], -[-0.04467803765891, 0.3254685785012], -[-0.03997049364231, 0.3254714961522], -[-0.03526447871556, 0.3254740087058], -[-0.03055981404416, 0.3254761445823], -[-0.02585632039953, 0.3254779287351], -[-0.0211538182097, 0.3254793826167], -[-0.01645212761072, 0.3254805241495], -[-0.01175106849885, 0.3254813677013], -[-0.007050460583235, 0.3254819240653], -[-0.002350123439047, 0.3254822004451], -[0.002350123439047, 0.3254822004451], -[0.007050460583235, 0.3254819240653], -[0.01175106849885, 0.3254813677013], -[0.01645212761072, 0.3254805241495], -[0.0211538182097, 0.3254793826167], -[0.02585632039953, 0.3254779287351], -[0.03055981404416, 0.3254761445823], -[0.03526447871556, 0.3254740087058], -[0.03997049364231, 0.3254714961522], -[0.04467803765891, 0.3254685785012], -[0.04938728915598, 0.3254652239046], -[0.05409842603158, 0.3254613971286], -[0.05881162564346, 0.3254570596016], -[0.06352706476261, 0.3254521694654], -[0.06824491952807, 0.3254466816308], -[0.07296536540305, 0.3254405478365], -[0.07768857713245, 0.3254337167124], -[0.0824147287019, 0.3254261338459], -[0.08714399329825, 0.3254177418516], -[0.09187654327169, 0.3254084804439], -[0.09661255009937, 0.3253982865131], -[0.1013521843507, 0.3253870942037], -[0.1060956156542, 0.3253748349955], -[0.1108430126661, 0.3253614377865], -[0.1155945430403, 0.3253468289789], -[0.1203503734004, 0.3253309325662], -[0.1251106693129, 0.3253136702222], -[0.1298755952616, 0.3252949613915], -[0.1346453146253, 0.3252747233825], -[0.1394199896543, 0.3252528714595], -[0.1441997814504, 0.3252293189371], -[0.1489848499478, 0.3252039772758], -[0.1537753538947, 0.325176756177], -[0.1585714508368, 0.3251475636797], -[0.1633732971018, 0.325116306257], -[0.1681810477849, 0.3250828889126], -[0.1729948567354, 0.3250472152781], -[0.1778148765441, 0.3250091877096], -[0.182641258532, 0.3249687073845], -[0.1874741527394, 0.3249256743982], -[0.1923137079154, 0.3248799878595], -[0.1971600715087, 0.3248315459872], -[0.2020133896586, 0.3247802462046], -[0.206873807186, 0.3247259852343], -[0.2117414675853, 0.3246686591922], -[0.2166165130163, 0.3246081636802], -[0.2214990842959, 0.3245443938793], -[0.2263893208909, 0.3244772446407], -[0.2312873609089, 0.3244066105768], -[0.2361931513865, 0.3243319089095], -[-0.2334137670516, 0.3291463476363], -[-0.2285164445006, 0.3292131995398], -[-0.2236271882061, 0.3292760479836], -[-0.2187457728769, 0.3293355517978], -[-0.2138720582046, 0.329391818064], -[-0.2090059024988, 0.3294449536004], -[-0.2041471626934, 0.3294950648688], -[-0.1992956943546, 0.3295422578807], -[-0.1944513516876, 0.3295866381024], -[-0.1896139875443, 0.3296283103595], -[-0.1847834534311, 0.3296673787404], -[-0.1799595995168, 0.3297039464993], -[-0.1751422746415, 0.3297381159581], -[-0.1703313263255, 0.3297699884084], -[-0.1655266007794, 0.3297996640123], -[-0.1607279429146, 0.3298272417036], -[-0.1559351963548, 0.3298528190878], -[-0.1511482034484, 0.3298764923425], -[-0.1463668052821, 0.3298983561181], -[-0.1415908416953, 0.3299185034375], -[-0.1368201512963, 0.3299370255971], -[-0.132054571479, 0.3299540120675], -[-0.1272939384417, 0.3299695503951], -[-0.1225380872066, 0.3299837261046], -[-0.1177868516419, 0.3299966226012], -[-0.113040064484, 0.3300083210759], -[-0.1082975573626, 0.3300189004099], -[-0.1035591608265, 0.3300284370819], -[-0.09882470437195, 0.3300370050766], -[-0.09409401647176, 0.330044675795], -[-0.08936692460695, 0.3300515179666], -[-0.08464325529962, 0.3300575975642], -[-0.07992283414782, 0.330062977721], -[-0.075205485862, 0.3300677186507], -[-0.07049103430325, 0.3300718775695], -[-0.06577930252316, 0.3300755086227], -[-0.06107011280541, 0.3300786628133], -[-0.05636328670884, 0.3300813879348], -[-0.05165864511214, 0.3300837285075], -[-0.04695600826002, 0.3300857257188], -[-0.04225519581067, 0.3300874173674], -[-0.03755602688473, 0.3300888378116], -[-0.03285832011526, 0.3300900179226], -[-0.02816189369902, 0.3300909850417], -[-0.02346656544869, 0.3300917629424], -[-0.01877215284598, 0.3300923717974], -[-0.0140784730956, 0.3300928281506], -[-0.009385343179787, 0.3300931448932], -[-0.004692579913521, 0.3300933312467], -[0, 0.3300933927489], -[0.004692579913521, 0.3300933312467], -[0.009385343179787, 0.3300931448932], -[0.0140784730956, 0.3300928281506], -[0.01877215284598, 0.3300923717974], -[0.02346656544869, 0.3300917629424], -[0.02816189369902, 0.3300909850417], -[0.03285832011526, 0.3300900179226], -[0.03755602688473, 0.3300888378116], -[0.04225519581067, 0.3300874173674], -[0.04695600826002, 0.3300857257188], -[0.05165864511214, 0.3300837285075], -[0.05636328670884, 0.3300813879348], -[0.06107011280541, 0.3300786628133], -[0.06577930252316, 0.3300755086227], -[0.07049103430325, 0.3300718775695], -[0.075205485862, 0.3300677186507], -[0.07992283414782, 0.330062977721], -[0.08464325529962, 0.3300575975642], -[0.08936692460695, 0.3300515179666], -[0.09409401647176, 0.330044675795], -[0.09882470437195, 0.3300370050766], -[0.1035591608265, 0.3300284370819], -[0.1082975573626, 0.3300189004099], -[0.113040064484, 0.3300083210759], -[0.1177868516419, 0.3299966226012], -[0.1225380872066, 0.3299837261046], -[0.1272939384417, 0.3299695503951], -[0.132054571479, 0.3299540120675], -[0.1368201512963, 0.3299370255971], -[0.1415908416953, 0.3299185034375], -[0.1463668052821, 0.3298983561181], -[0.1511482034484, 0.3298764923425], -[0.1559351963548, 0.3298528190878], -[0.1607279429146, 0.3298272417036], -[0.1655266007794, 0.3297996640123], -[0.1703313263255, 0.3297699884084], -[0.1751422746415, 0.3297381159581], -[0.1799595995168, 0.3297039464993], -[0.1847834534311, 0.3296673787404], -[0.1896139875443, 0.3296283103595], -[0.1944513516876, 0.3295866381024], -[0.1992956943546, 0.3295422578807], -[0.2041471626934, 0.3294950648688], -[0.2090059024988, 0.3294449536004], -[0.2138720582046, 0.329391818064], -[0.2187457728769, 0.3293355517978], -[0.2236271882061, 0.3292760479836], -[0.2285164445006, 0.3292131995398], -[0.233413767543, 0.3291463476851], -[-0.2306367946151, 0.3339566069626], -[-0.2257484411705, 0.3340150002659], -[-0.220868106228, 0.3340700824585], -[-0.2159956486765, 0.3341219625692], -[-0.211130925991, 0.3341707494318], -[-0.206273794239, 0.3342165515914], -[-0.201424108087, 0.3342594772085], -[-0.1965817208066, 0.3342996339629], -[-0.1917464842814, 0.3343371289566], -[-0.1869182490133, 0.3343720686149], -[-0.18209686413, 0.3344045585883], -[-0.1772821773927, 0.3344347036519], -[-0.1724740352036, 0.3344626076049], -[-0.1676722826155, 0.33448837317], -[-0.1628767633405, 0.3345121018909], -[-0.1580873197614, 0.3345338940306], -[-0.1533037929421, 0.3345538484688], -[-0.1485260226407, 0.3345720625992], -[-0.1437538473228, 0.3345886322268], -[-0.1389871041765, 0.3346036514651], -[-0.1342256291284, 0.3346172126339], -[-0.129469256861, 0.3346294061572], -[-0.1247178208323, 0.3346403204616], -[-0.1199711532959, 0.3346500418758], -[-0.1152290853233, 0.3346586545307], -[-0.1104914468281, 0.3346662402607], -[-0.1057580665911, 0.3346728785065], -[-0.1010287722886, 0.3346786462195], -[-0.09630339052032, 0.3346836177673], -[-0.09158174684162, 0.3346878648419], -[-0.08686366579573, 0.3346914563702], -[-0.08214897094868, 0.334694458426], -[-0.07743748492587, 0.3346969341453], -[-0.07272902945043, 0.3346989436449], -[-0.0680234253835, 0.3347005439426], -[-0.0633204927662, 0.3347017888826], -[-0.05862005086338, 0.3347027290626], -[-0.05392191820902, 0.3347034117663], -[-0.04922591265326, 0.3347038808981], -[-0.04453185141095, 0.3347041769238], -[-0.03983955111172, 0.334704336814], -[-0.0351488278513, 0.3347043939925], -[-0.03045949724421, 0.3347043782903], -[-0.02577137447754, 0.3347043159027], -[-0.02108427436578, 0.3347042293527], -[-0.01639801140658, 0.3347041374589], -[-0.01171239983724, 0.3347040553087], -[-0.007027253691924, 0.3347039942364], -[-0.002342386859322, 0.3347039618076], -[0.002342386859322, 0.3347039618076], -[0.007027253691924, 0.3347039942364], -[0.01171239983724, 0.3347040553087], -[0.01639801140657, 0.3347041374589], -[0.02108427436578, 0.3347042293527], -[0.02577137447754, 0.3347043159027], -[0.03045949724421, 0.3347043782903], -[0.0351488278513, 0.3347043939925], -[0.03983955111172, 0.334704336814], -[0.04453185141095, 0.3347041769238], -[0.04922591265326, 0.3347038808981], -[0.05392191820902, 0.3347034117663], -[0.05862005086338, 0.3347027290626], -[0.0633204927662, 0.3347017888826], -[0.0680234253835, 0.3347005439426], -[0.07272902945043, 0.3346989436449], -[0.07743748492587, 0.3346969341453], -[0.08214897094868, 0.334694458426], -[0.08686366579573, 0.3346914563702], -[0.09158174684162, 0.3346878648419], -[0.09630339052032, 0.3346836177673], -[0.1010287722886, 0.3346786462195], -[0.1057580665914, 0.3346728785068], -[0.1104914468281, 0.3346662402607], -[0.1152290853233, 0.3346586545307], -[0.1199711532959, 0.3346500418758], -[0.1247178208323, 0.3346403204616], -[0.129469256861, 0.3346294061572], -[0.1342256291284, 0.3346172126339], -[0.1389871041765, 0.3346036514651], -[0.1437538473228, 0.3345886322268], -[0.1485260226407, 0.3345720625992], -[0.1533037929421, 0.3345538484688], -[0.1580873197614, 0.3345338940306], -[0.1628767633405, 0.3345121018909], -[0.1676722826155, 0.33448837317], -[0.1724740352036, 0.3344626076049], -[0.1772821773927, 0.3344347036519], -[0.18209686413, 0.3344045585883], -[0.1869182490133, 0.3343720686149], -[0.1917464842814, 0.3343371289566], -[0.1965817208066, 0.3342996339629], -[0.201424108087, 0.3342594772085], -[0.206273794239, 0.3342165515914], -[0.211130925991, 0.3341707494318], -[0.2159956486765, 0.3341219625692], -[0.220868106228, 0.3340700824585], -[0.2257484411705, 0.3340150002659], -[0.2306367946151, 0.3339566069626], -[-0.2278627811818, 0.3387613391699], -[-0.2229834495549, 0.3388118437286], -[-0.2181121739716, 0.3388591803085], -[-0.2132488111124, 0.3389034597748], -[-0.2083932162185, 0.3389447927735], -[-0.2035452430975, 0.3389832896349], -[-0.1987047441286, 0.3390190602758], -[-0.1938715702681, 0.3390522141001], -[-0.1890455710556, 0.3390828598998], -[-0.1842265946194, 0.3391111057532], -[-0.1794144876836, 0.3391370589234], -[-0.1746090955744, 0.3391608257558], -[-0.1698102622286, 0.3391825115744], -[-0.1650178302011, 0.3392022205773], -[-0.160231640675, 0.3392200557326], -[-0.155451533471, 0.3392361186728], -[-0.1506773470594, 0.339250509589], -[-0.145908918572, 0.3392633271257], -[-0.1411460838161, 0.3392746682741], -[-0.1363886772895, 0.3392846282671], -[-0.1316365321971, 0.3392933004733], -[-0.1268894804689, 0.3393007762917], -[-0.1221473527795, 0.3393071450476], -[-0.1174099785698, 0.3393124938887], -[-0.11267718607, 0.339316907682], -[-0.1079488023243, 0.3393204689127], -[-0.1032246532181, 0.3393232575839], -[-0.09850456350647, 0.3393253511181], -[-0.09378835684463, 0.3393268242604], -[-0.08907585582095, 0.3393277489846], -[-0.08436688199118, 0.3393281944002], -[-0.0796612559152, 0.3393282266633], -[-0.07495879719544, 0.3393279088898], -[-0.07025932451737, 0.3393273010715], -[-0.06556265569191, 0.3393264599957], -[-0.06086860769965, 0.3393254391684], -[-0.05617699673698, 0.3393242887409], -[-0.05148763826393, 0.3393230554404], -[-0.04680034705371, 0.3393217825057], -[-0.04211493724388, 0.3393205096257], -[-0.03743122238896, 0.3393192728835], -[-0.03274901551458, 0.3393181047055], -[-0.02806812917276, 0.3393170338144], -[-0.02338837549852, 0.3393160851882], -[-0.01870956626738, 0.3393152800242], -[-0.01403151295396, 0.3393146357076], -[-0.009354026791124, 0.339314165787], -[-0.004676918829944, 0.3393138799539], -[2.547735296109e-16, 0.3393137840292], -[0.004676918829944, 0.3393138799539], -[0.009354026791124, 0.339314165787], -[0.01403151295396, 0.3393146357076], -[0.01870956626738, 0.3393152800242], -[0.02338837549852, 0.3393160851882], -[0.02806812917276, 0.3393170338144], -[0.03274901551458, 0.3393181047055], -[0.03743122238896, 0.3393192728835], -[0.04211493724388, 0.3393205096257], -[0.04680034705371, 0.3393217825057], -[0.05148763826393, 0.3393230554404], -[0.05617699673698, 0.3393242887409], -[0.06086860769965, 0.3393254391684], -[0.06556265569191, 0.3393264599957], -[0.07025932451737, 0.3393273010715], -[0.07495879719544, 0.3393279088898], -[0.0796612559152, 0.3393282266633], -[0.08436688199118, 0.3393281944002], -[0.08907585582095, 0.3393277489846], -[0.09378835684464, 0.3393268242605], -[0.09850456350647, 0.3393253511181], -[0.1032246532182, 0.3393232575839], -[0.1079488023243, 0.3393204689127], -[0.11267718607, 0.339316907682], -[0.1174099785698, 0.3393124938887], -[0.1221473527795, 0.3393071450476], -[0.1268894804689, 0.3393007762917], -[0.1316365321971, 0.3392933004733], -[0.1363886772895, 0.3392846282671], -[0.1411460838161, 0.3392746682741], -[0.145908918572, 0.3392633271257], -[0.1506773470594, 0.339250509589], -[0.155451533471, 0.3392361186728], -[0.160231640675, 0.3392200557326], -[0.1650178302011, 0.3392022205773], -[0.1698102622286, 0.3391825115744], -[0.1746090955744, 0.3391608257558], -[0.1794144876836, 0.3391370589234], -[0.1842265946194, 0.3391111057532], -[0.1890455710556, 0.3390828598998], -[0.1938715702681, 0.3390522141001], -[0.1987047441286, 0.3390190602758], -[0.2035452430975, 0.3389832896349], -[0.2083932162185, 0.3389447927735], -[0.2132488111124, 0.3389034597748], -[0.2181121739716, 0.3388591803085], -[0.2229834495549, 0.3388118437286], -[0.2278627811818, 0.3387613391699], -[-0.2250917392777, 0.3435609245377], -[-0.2202215689572, 0.3436035598348], -[-0.2153594911701, 0.3436431727148], -[-0.2105053603721, 0.3436798759414], -[-0.2056590295534, 0.3437137820339], -[-0.2008203502426, 0.3437450031676], -[-0.1959891725115, 0.3437736510741], -[-0.1911653449795, 0.3437998369388], -[-0.1863487148189, 0.3438236712992], -[-0.1815391277596, 0.3438452639404], -[-0.1767364280954, 0.3438647237906], -[-0.1719404586903, 0.3438821588155], -[-0.1671510609853, 0.3438976759115], -[-0.1623680750069, 0.3439113807984], -[-0.1575913393754, 0.3439233779116], -[-0.1528206913157, 0.3439337702937], -[-0.1480559666677, 0.3439426594853], -[-0.1432969998994, 0.3439501454162], -[-0.1385436241204, 0.3439563262961], -[-0.1337956710976, 0.3439612985055], -[-0.1290529712715, 0.3439651564868], -[-0.1243153537757, 0.3439679926359], -[-0.1195826464566, 0.3439698971944], -[-0.114854675896, 0.3439709581427], -[-0.1101312674349, 0.3439712610943], -[-0.1054122451998, 0.3439708891907], -[-0.1006974321306, 0.3439699229989], -[-0.09598665001096, 0.3439684404098], -[-0.09127971950019, 0.3439665165387], -[-0.08657646016776, 0.3439642236288], -[-0.08187669052963, 0.343961630956], -[-0.07718022808677, 0.3439588047376], -[-0.07248688936579, 0.3439558080431], -[-0.0677964899616, 0.3439527007088], -[-0.06310884458212, 0.3439495392558], -[-0.05842376709496, 0.3439463768115], -[-0.05374107057609, 0.3439432630355], -[-0.04906056736023, 0.3439402440494], -[-0.04438206909316, 0.343937362371], -[-0.03970538678556, 0.3439346568536], -[-0.03503033086854, 0.3439321626294], -[-0.0303567112505, 0.3439299110588], -[-0.02568433737545, 0.3439279296846], -[-0.02101301828237, 0.3439262421909], -[-0.01634256266577, 0.3439248683686], -[-0.01167277893702, 0.343923824086], -[-0.007003475286515, 0.343923121265], -[-0.002334459746382, 0.3439227678636], -[0.002334459746382, 0.3439227678636], -[0.007003475286515, 0.343923121265], -[0.01167277893702, 0.343923824086], -[0.01634256266577, 0.3439248683686], -[0.02101301828237, 0.3439262421909], -[0.02568433737545, 0.3439279296846], -[0.0303567112505, 0.3439299110588], -[0.03503033086854, 0.3439321626294], -[0.03970538678556, 0.3439346568536], -[0.04438206909316, 0.343937362371], -[0.04906056736023, 0.3439402440494], -[0.05374107057609, 0.3439432630355], -[0.05842376709496, 0.3439463768115], -[0.06310884458212, 0.3439495392558], -[0.0677964899616, 0.3439527007088], -[0.07248688936579, 0.3439558080431], -[0.07718022808677, 0.3439588047376], -[0.08187669052963, 0.343961630956], -[0.08657646016776, 0.3439642236288], -[0.09127971950019, 0.3439665165387], -[0.09598665001096, 0.3439684404098], -[0.1006974321306, 0.3439699229989], -[0.1054122451998, 0.3439708891907], -[0.1101312674349, 0.3439712610943], -[0.114854675896, 0.3439709581427], -[0.1195826464566, 0.3439698971944], -[0.1243153537757, 0.3439679926359], -[0.1290529712715, 0.3439651564868], -[0.1337956710976, 0.3439612985055], -[0.1385436241204, 0.3439563262961], -[0.1432969998994, 0.3439501454162], -[0.1480559666677, 0.3439426594853], -[0.1528206913157, 0.3439337702937], -[0.1575913393754, 0.3439233779116], -[0.1623680750069, 0.3439113807984], -[0.1671510609853, 0.3438976759115], -[0.1719404586903, 0.3438821588155], -[0.1767364280954, 0.3438647237906], -[0.1815391277596, 0.3438452639404], -[0.1863487148189, 0.3438236712992], -[0.1911653449795, 0.3437998369388], -[0.1959891725115, 0.3437736510741], -[0.2008203502426, 0.3437450031676], -[0.2056590295534, 0.3437137820339], -[0.2105053603721, 0.3436798759414], -[0.2153594911701, 0.3436431727148], -[0.2202215689572, 0.3436035598348], -[0.2250917392777, 0.3435609245377], -[-0.2223237684472, 0.3483551906501], -[-0.2174628993784, 0.3483899773767], -[-0.2126101583068, 0.3484218897495], -[-0.2077653974472, 0.3484510424946], -[-0.2029284675205, 0.3484775500666], -[-0.198099217757, 0.3485015265476], -[-0.1932774958999, 0.3485230855434], -[-0.1884631482094, 0.3485423400799], -[-0.1836560194658, 0.3485594024967], -[-0.178855952975, 0.348574384341], -[-0.1740627905729, 0.3485873962594], -[-0.1692763726314, 0.3485985478888], -[-0.164496538065, 0.3486079477471], -[-0.1597231243385, 0.3486157031222], -[-0.1549559674753, 0.3486219199611], -[-0.1501949020673, 0.3486267027573], -[-0.1454397612866, 0.3486301544393], -[-0.140690376897, 0.3486323762576], -[-0.135946579269, 0.348633467672], -[-0.1312081973951, 0.3486335262391], -[-0.1264750589073, 0.3486326475001], -[-0.1217469900961, 0.3486309248688], -[-0.1170238159321, 0.3486284495204], -[-0.1123053600889, 0.3486253102811], -[-0.1075914449682, 0.3486215935193], -[-0.1028818917272, 0.3486173830377], -[-0.0981765203081, 0.3486127599671], -[-0.09347514946974, 0.3486078026619], -[-0.08877759682141, 0.3486025865986], -[-0.08408367885907, 0.3485971842755], -[-0.0793932110037, 0.348591665116], -[-0.07470600764194, 0.3485860953744], -[-0.07002188216899, 0.3485805380449], -[-0.06534064703361, 0.3485750527744], -[-0.06066211378541, 0.3485696957787], -[-0.05598609312396, 0.3485645197626], -[-0.05131239495046, 0.3485595738451], -[-0.04664082842063, 0.3485549034879], -[-0.04197120200006, 0.3485505504293], -[-0.03730332352094, 0.3485465526233], -[-0.03263700024059, 0.3485429441828], -[-0.02797203890135, 0.3485397553298], -[-0.02330824579193, 0.3485370123493], -[-0.01864542680991, 0.3485347375504], -[-0.01398338752528, 0.3485329492323], -[-0.009321933244893, 0.3485316616566], -[-0.004660869077611, 0.3485308850259], -[-1.273867648054e-16, 0.3485306254678], -[0.004660869077611, 0.3485308850259], -[0.009321933244893, 0.3485316616566], -[0.01398338752528, 0.3485329492323], -[0.01864542680991, 0.3485347375504], -[0.02330824579193, 0.3485370123493], -[0.02797203890135, 0.3485397553298], -[0.03263700024059, 0.3485429441828], -[0.03730332352094, 0.3485465526233], -[0.04197120200006, 0.3485505504293], -[0.04664082842063, 0.3485549034879], -[0.05131239495046, 0.3485595738451], -[0.05598609312397, 0.3485645197626], -[0.0606621137854, 0.3485696957786], -[0.06534064703361, 0.3485750527744], -[0.07002188216899, 0.3485805380449], -[0.07470600764194, 0.3485860953744], -[0.0793932110037, 0.348591665116], -[0.08408367885907, 0.3485971842755], -[0.08877759682141, 0.3486025865986], -[0.09347514946974, 0.3486078026619], -[0.0981765203081, 0.3486127599671], -[0.1028818917272, 0.3486173830377], -[0.1075914449682, 0.3486215935193], -[0.1123053600889, 0.3486253102811], -[0.1170238159321, 0.3486284495204], -[0.1217469900961, 0.3486309248688], -[0.1264750589073, 0.3486326475001], -[0.1312081973951, 0.3486335262391], -[0.135946579269, 0.348633467672], -[0.140690376897, 0.3486323762576], -[0.1454397612866, 0.3486301544393], -[0.1501949020673, 0.3486267027573], -[0.1549559674753, 0.3486219199611], -[0.1597231243385, 0.3486157031222], -[0.164496538065, 0.3486079477471], -[0.1692763726314, 0.3485985478888], -[0.1740627905729, 0.3485873962594], -[0.178855952975, 0.348574384341], -[0.1836560194658, 0.3485594024967], -[0.1884631482094, 0.3485423400799], -[0.1932774958999, 0.3485230855434], -[0.198099217757, 0.3485015265476], -[0.2029284675205, 0.3484775500666], -[0.2077653974472, 0.3484510424946], -[0.2126101583068, 0.3484218897495], -[0.2174628993784, 0.3483899773767], -[0.2223237684472, 0.3483551906501], -[-0.2195589689091, 0.3531439639223], -[-0.2147075415473, 0.3531709239814], -[-0.2098642766479, 0.3531951603262], -[-0.2050290241678, 0.3532167897097], -[-0.20020163254, 0.3532359285863], -[-0.1953819486764, 0.3532526930072], -[-0.1905698179699, 0.3532671985146], -[-0.1857650842972, 0.3532795600341], -[-0.180967590022, 0.3532898917661], -[-0.1761771759984, 0.3532983070762], -[-0.1713936815755, 0.3533049183835], -[-0.1666169446023, 0.3533098370489], -[-0.1618468014338, 0.3533131732616], -[-0.1570830869383, 0.353315035925], -[-0.1523256345057, 0.353315532542], -[-0.1475742760569, 0.3533147690993], -[-0.1428288420551, 0.3533128499518], -[-0.1380891615183, 0.353309877706], -[-0.1333550620338, 0.3533059531041], -[-0.1286263697741, 0.3533011749072], -[-0.1239029095151, 0.3532956397798], -[-0.1191845046556, 0.3532894421741], -[-0.11447097724, 0.3532826742153], -[-0.1097621479817, 0.3532754255877], -[-0.1050578362901, 0.3532677834225], -[-0.1003578602988, 0.3532598321862], -[-0.09566203689705, 0.3532516535717], -[-0.09097018176253, 0.353243326391], -[-0.08628210939752, 0.3532349264696], -[-0.08159763316684, 0.3532265265447], -[-0.07691656533843, 0.3532181961652], -[-0.07223871712627, 0.3532100015957], -[-0.06756389873569, 0.3532020057229], -[-0.06289191941097, 0.3531942679668], -[-0.05822258748526, 0.3531868441951], -[-0.05355571043267, 0.3531797866424], -[-0.04889109492247, 0.3531731438337], -[-0.04422854687541, 0.3531669605123], -[-0.03956787152182, 0.353161277574], -[-0.03490887346157, 0.3531561320045], -[-0.03025135672588, 0.3531515568248], -[-0.0255951248403, 0.3531475810399], -[-0.02093998088934, 0.353144229595], -[-0.01628572758223, 0.353141523337], -[-0.01163216731971, 0.3531394789825], -[-0.006979102261636, 0.3531381090915], -[-0.002326334395387, 0.3531374220483], -[0.002326334395387, 0.3531374220483], -[0.006979102261637, 0.3531381090915], -[0.0116321673197, 0.3531394789825], -[0.01628572758223, 0.353141523337], -[0.02093998088934, 0.353144229595], -[0.0255951248403, 0.3531475810399], -[0.03025135672588, 0.3531515568248], -[0.03490887346157, 0.3531561320045], -[0.03956787152181, 0.353161277574], -[0.0442285468754, 0.3531669605123], -[0.04889109492247, 0.3531731438337], -[0.05355571043267, 0.3531797866424], -[0.05822258748526, 0.3531868441951], -[0.06289191941097, 0.3531942679668], -[0.06756389873569, 0.3532020057229], -[0.07223871712627, 0.3532100015957], -[0.07691656533843, 0.3532181961652], -[0.08159763316684, 0.3532265265447], -[0.08628210939752, 0.3532349264696], -[0.09097018176253, 0.353243326391], -[0.09566203689705, 0.3532516535717], -[0.1003578602988, 0.3532598321862], -[0.1050578362901, 0.3532677834225], -[0.1097621479817, 0.3532754255877], -[0.11447097724, 0.3532826742153], -[0.1191845046556, 0.3532894421741], -[0.1239029095151, 0.3532956397798], -[0.1286263697741, 0.3533011749072], -[0.1333550620338, 0.3533059531041], -[0.1380891615183, 0.353309877706], -[0.1428288420551, 0.3533128499518], -[0.1475742760569, 0.3533147690993], -[0.1523256345057, 0.353315532542], -[0.1570830869383, 0.353315035925], -[0.1618468014338, 0.3533131732616], -[0.1666169446023, 0.3533098370489], -[0.1713936815755, 0.3533049183835], -[0.1761771759984, 0.3532983070762], -[0.180967590022, 0.3532898917661], -[0.1857650842972, 0.3532795600341], -[0.1905698179699, 0.3532671985146], -[0.1953819486764, 0.3532526930072], -[0.20020163254, 0.3532359285863], -[0.2050290241678, 0.3532167897097], -[0.2098642766479, 0.3531951603262], -[0.2147075415473, 0.3531709239814], -[0.2195589689094, 0.3531439639223], -[-0.2167974415883, 0.3579270695489], -[-0.2119555969537, 0.3579462260599], -[-0.2071219482765, 0.3579628121484], -[-0.2022963432386, 0.3579769466614], -[-0.1974786279658, 0.3579887481187], -[-0.1926686470301, 0.3579983346051], -[-0.1878662434514, 0.3580058236618], -[-0.1830712586984, 0.3580113321759], -[-0.178283532691, 0.3580149762683], -[-0.1735029038032, 0.3580168711807], -[-0.1687292088666, 0.3580171311605], -[-0.1639622831746, 0.358015869346], -[-0.1592019604882, 0.3580131976485], -[-0.1544480730427, 0.3580092266354], -[-0.1497004515555, 0.358004065411], -[-0.1449589252357, 0.3579978214977], -[-0.1402233217954, 0.3579906007158], -[-0.1354934674619, 0.3579825070639], -[-0.1307691869928, 0.3579736425983], -[-0.1260503036926, 0.3579641073131], -[-0.1213366394307, 0.3579539990203], -[-0.1166280146627, 0.3579434132306], -[-0.1119242484532, 0.3579324430349], -[-0.107225158501, 0.3579211789867], -[-0.1025305611668, 0.3579097089862], -[-0.09784027150346, 0.3578981181656], -[-0.09315410328855, 0.3578864887765], -[-0.08847186905949, 0.3578749000792], -[-0.08379338015134, 0.357863428235], -[-0.07911844673707, 0.3578521462005], -[-0.07444687787042, 0.3578411236258], -[-0.06977848153132, 0.3578304267553], -[-0.06511306467382, 0.3578201183329], -[-0.06045043327645, 0.3578102575104], -[-0.05579039239501, 0.3578008997609], -[-0.05113274621769, 0.3577920967964], -[-0.04647729812242, 0.3577838964903], -[-0.04182385073625, 0.3577763428049], -[-0.03717220599691, 0.3577694757245], -[-0.03252216521603, 0.3577633311938], -[-0.02787352914422, 0.3577579410625], -[-0.02322609803767, 0.3577533330358], -[-0.0185796717261, 0.3577495306308], -[-0.01393404968199, 0.3577465531397], -[-0.009289031090744, 0.3577444155992], -[-0.004644414921739, 0.357743128767], -[-1.273867648054e-16, 0.3577426991047], -[0.004644414921739, 0.357743128767], -[0.009289031090744, 0.3577444155992], -[0.01393404968199, 0.3577465531397], -[0.0185796717261, 0.3577495306308], -[0.02322609803767, 0.3577533330358], -[0.02787352914422, 0.3577579410625], -[0.03252216521603, 0.3577633311938], -[0.03717220599691, 0.3577694757245], -[0.04182385073625, 0.3577763428049], -[0.04647729812242, 0.3577838964903], -[0.05113274621769, 0.3577920967964], -[0.055790392395, 0.3578008997609], -[0.06045043327645, 0.3578102575104], -[0.06511306467382, 0.3578201183329], -[0.06977848153132, 0.3578304267553], -[0.07444687787042, 0.3578411236258], -[0.07911844673707, 0.3578521462005], -[0.08379338015134, 0.357863428235], -[0.08847186905949, 0.3578749000792], -[0.09315410328855, 0.3578864887765], -[0.09784027150346, 0.3578981181656], -[0.1025305611668, 0.3579097089862], -[0.107225158501, 0.3579211789867], -[0.1119242484532, 0.3579324430349], -[0.1166280146627, 0.3579434132306], -[0.1213366394307, 0.3579539990203], -[0.1260503036926, 0.3579641073131], -[0.1307691869928, 0.3579736425983], -[0.1354934674619, 0.3579825070639], -[0.1402233217954, 0.3579906007158], -[0.1449589252357, 0.3579978214977], -[0.1497004515555, 0.358004065411], -[0.1544480730427, 0.3580092266354], -[0.1592019604882, 0.3580131976485], -[0.1639622831746, 0.358015869346], -[0.1687292088666, 0.3580171311605], -[0.1735029038032, 0.3580168711807], -[0.178283532691, 0.3580149762683], -[0.1830712586984, 0.3580113321759], -[0.1878662434514, 0.3580058236618], -[0.1926686470301, 0.3579983346051], -[0.1974786279658, 0.3579887481187], -[0.2022963432386, 0.3579769466614], -[0.2071219482765, 0.3579628121484], -[0.2119555969535, 0.3579462260599], -[0.2167974415883, 0.3579270695489], -[-0.2140391044276, 0.3627038251849], -[-0.209207167879, 0.362715708753], -[-0.2043832761276, 0.3627246716573], -[-0.1995674582766, 0.3627313411722], -[-0.1947595581248, 0.36273583795], -[-0.1899594178827, 0.3627382821756], -[-0.1851668781729, 0.3627387934538], -[-0.1803817780301, 0.3627374906963], -[-0.1756039549027, 0.3627344920057], -[-0.1708332446542, 0.3627299145589], -[-0.1660694815663, 0.3627238744891], -[-0.1613124983427, 0.3627164867662], -[-0.1565621261135, 0.3627078650762], -[-0.1518181944422, 0.3626981216994], -[-0.147080531333, 0.3626873673882], -[-0.1423489632402, 0.3626757112434], -[-0.1376233150793, 0.3626632605907], -[-0.13290341024, 0.3626501208566], -[-0.128189070601, 0.3626363954439], -[-0.1234801165473, 0.3626221856078], -[-0.1187763669893, 0.3626075903317], -[-0.1140776393843, 0.3625927062043], -[-0.1093837497609, 0.362577627297], -[-0.1046945127451, 0.3625624450425], -[-0.1000097415899, 0.362547248115], -[-0.09532924820657, 0.3625321223122], -[-0.09065284319943, 0.362517150439], -[-0.08598033590291, 0.3625024121934], -[-0.08131153442145, 0.3624879840558], -[-0.07664624567216, 0.3624739391804], -[-0.0719842754302, 0.3624603472906], -[-0.06732542837687, 0.3624472745774], -[-0.06266950815036, 0.3624347836023], -[-0.05801631739913, 0.362422933204], -[-0.05336565783778, 0.36241177841], -[-0.0487173303054, 0.3624013703531], -[-0.04407113482623, 0.3623917561927], -[-0.03942687067254, 0.3623829790418], -[-0.03478433642956, 0.3623750779], -[-0.0301433300624, 0.3623680875918], -[-0.02550364898466, 0.3623620387119], -[-0.02086509012868, 0.3623569575759], -[-0.01622745001709, 0.3623528661789], -[-0.01159052483573, 0.3623497821597], -[-0.00695411050736, 0.3623477187723], -[-0.002318002766327, 0.3623466848648], -[0.002318002766327, 0.3623466848648], -[0.00695411050736, 0.3623477187723], -[0.01159052483573, 0.3623497821597], -[0.01622745001709, 0.3623528661789], -[0.02086509012868, 0.3623569575759], -[0.02550364898467, 0.3623620387119], -[0.0301433300624, 0.3623680875918], -[0.03478433642956, 0.3623750779], -[0.03942687067254, 0.3623829790418], -[0.04407113482623, 0.3623917561927], -[0.0487173303054, 0.3624013703531], -[0.05336565783778, 0.36241177841], -[0.05801631739913, 0.362422933204], -[0.06266950815036, 0.3624347836023], -[0.06732542837687, 0.3624472745774], -[0.0719842754302, 0.3624603472906], -[0.07664624567216, 0.3624739391804], -[0.08131153442145, 0.3624879840558], -[0.08598033590291, 0.3625024121934], -[0.09065284319943, 0.362517150439], -[0.09532924820657, 0.3625321223122], -[0.1000097415899, 0.362547248115], -[0.1046945127451, 0.3625624450425], -[0.1093837497609, 0.362577627297], -[0.1140776393843, 0.3625927062043], -[0.1187763669893, 0.3626075903317], -[0.1234801165473, 0.3626221856078], -[0.128189070601, 0.3626363954439], -[0.13290341024, 0.3626501208566], -[0.1376233150793, 0.3626632605907], -[0.1423489632402, 0.3626757112434], -[0.147080531333, 0.3626873673882], -[0.1518181944422, 0.3626981216994], -[0.1565621261135, 0.3627078650762], -[0.1613124983427, 0.3627164867662], -[0.1660694815663, 0.3627238744891], -[0.1708332446542, 0.3627299145589], -[0.1756039549027, 0.3627344920057], -[0.1803817780301, 0.3627374906963], -[0.1851668781729, 0.3627387934538], -[0.1899594178827, 0.3627382821756], -[0.1947595581248, 0.36273583795], -[0.1995674582766, 0.3627313411722], -[0.2043832761276, 0.3627246716573], -[0.209207167879, 0.362715708753], -[0.2140391044329, 0.3627038251859], -[-0.2112846984452, 0.3674749889182], -[-0.2064623574349, 0.3674791958766], -[-0.2016483640254, 0.3674805639768], -[-0.19684247385, 0.3674797997577], -[-0.1920445283587, 0.3674770260735], -[-0.1872543673778, 0.367472365277], -[-0.1824718291072, 0.3674659391034], -[-0.1776967501205, 0.3674578685534], -[-0.1729289653647, 0.3674482737743], -[-0.1681683081612, 0.3674372739393], -[-0.1634146102078, 0.3674249871257], -[-0.1586677015817, 0.3674115301912], -[-0.1539274107438, 0.3673970186495], -[-0.1491935645447, 0.3673815665445], -[-0.1444659882318, 0.3673652863236], -[-0.1397445054592, 0.3673482887099], -[-0.135028938298, 0.3673306825749], -[-0.1303191072501, 0.3673125748091], -[-0.1256148312634, 0.3672940701943], -[-0.1209159277492, 0.3672752712745], -[-0.1162222126025, 0.3672562782283], -[-0.1115335002247, 0.367237188741], -[-0.1068496035485, 0.3672180978784], -[-0.1021703340659, 0.3671990979612], -[-0.09749550185923, 0.3671802784414], -[-0.09282491563428, 0.3671617257799], -[-0.08815838275694, 0.3671435233273], -[-0.08349570929247, 0.3671257512064], -[-0.07883670004778, 0.3671084861973], -[-0.07418115861668, 0.367091801627], -[-0.06952888742792, 0.3670757672608], -[-0.06487968779624, 0.3670604491994], -[-0.06023335997614, 0.3670459097785], -[-0.0555897032185, 0.3670322074744], -[-0.05094851582976, 0.3670193968137], -[-0.04630959523374, 0.3670075282881], -[-0.04167273803592, 0.3669966482757], -[-0.0370377400899, 0.3669867989671], -[-0.03240439656616, 0.3669780182977], -[-0.02777250202273, 0.3669703398872], -[-0.0231418504776, 0.3669637929848], -[-0.01851223548287, 0.3669584024218], -[-0.01388345020018, 0.3669541885705], -[-0.00925528747735, 0.3669511673111], -[-0.004627539926034, 0.3669493500055], -[0, 0.3669487434782], -[0.004627539926034, 0.3669493500055], -[0.00925528747735, 0.3669511673111], -[0.01388345020018, 0.3669541885705], -[0.01851223548287, 0.3669584024218], -[0.0231418504776, 0.3669637929848], -[0.02777250202273, 0.3669703398872], -[0.03240439656616, 0.3669780182977], -[0.0370377400899, 0.3669867989671], -[0.04167273803592, 0.3669966482757], -[0.04630959523374, 0.3670075282881], -[0.05094851582976, 0.3670193968137], -[0.0555897032185, 0.3670322074744], -[0.06023335997614, 0.3670459097785], -[0.06487968779624, 0.3670604491994], -[0.06952888742792, 0.3670757672608], -[0.07418115861668, 0.367091801627], -[0.07883670004778, 0.3671084861973], -[0.08349570929247, 0.3671257512064], -[0.08815838275694, 0.3671435233273], -[0.09282491563428, 0.3671617257799], -[0.09749550185923, 0.3671802784414], -[0.1021703340659, 0.3671990979612], -[0.1068496035485, 0.3672180978784], -[0.1115335002247, 0.367237188741], -[0.1162222126025, 0.3672562782283], -[0.1209159277492, 0.3672752712745], -[0.1256148312634, 0.3672940701943], -[0.1303191072501, 0.3673125748091], -[0.135028938298, 0.3673306825749], -[0.1397445054592, 0.3673482887099], -[0.1444659882318, 0.3673652863236], -[0.1491935645447, 0.3673815665445], -[0.1539274107438, 0.3673970186495], -[0.1586677015817, 0.3674115301912], -[0.1634146102078, 0.3674249871257], -[0.1681683081612, 0.3674372739393], -[0.1729289653647, 0.3674482737743], -[0.1776967501205, 0.3674578685534], -[0.1824718291072, 0.3674659391034], -[0.1872543673778, 0.367472365277], -[0.1920445283587, 0.3674770260735], -[0.19684247385, 0.3674797997577], -[0.201648364026, 0.3674805639769], -[0.2064623574349, 0.3674791958766], -[0.2112846984436, 0.3674749889178], -[-0.2085333829353, 0.3722400762078], -[-0.2037212695951, 0.3722365098637], -[-0.1989173167215, 0.3722303128569], -[-0.1941214955186, 0.3722221475714], -[-0.189333645067, 0.372212139135], -[-0.1845536027837, 0.3722004121382], -[-0.1797812044198, 0.3721870905149], -[-0.1750162840589, 0.3721722974219], -[-0.1702586741153, 0.3721561551155], -[-0.1655082053349, 0.3721387848278], -[-0.1607647067953, 0.3721203066402], -[-0.1560280059088, 0.3721008393556], -[-0.1512979284259, 0.3720805003701], -[-0.1465742984408, 0.3720594055427], -[-0.1418569383986, 0.3720376690637], -[-0.1371456691045, 0.3720154033234], -[-0.1324403097346, 0.3719927187794], -[-0.1277406778501, 0.3719697238232], -[-0.1230465894125, 0.3719465246476], -[-0.1183578588022, 0.3719232251136], -[-0.1136742988395, 0.3718999266177], -[-0.1089957208081, 0.3718767279601], -[-0.1043219344818, 0.3718537252137], -[-0.09965274815385, 0.3718310115948], -[-0.09498796866935, 0.3718086773346], -[-0.09032740146089, 0.3717868095538], -[-0.08567085058704, 0.371765492139], -[-0.08101811877408, 0.3717448056213], -[-0.07636900746083, 0.371724827059], -[-0.07172331684666, 0.371705629923], -[-0.06708084594254, 0.3716872839864], -[-0.06244139262517, 0.371669855218], -[-0.05780475369409, 0.3716534056806], -[-0.05317072493174, 0.3716379934339], -[-0.04853910116623, 0.3716236724431], -[-0.04390967633694, 0.3716104924925], -[-0.03928224356251, 0.3715984991057], -[-0.03465659521136, 0.3715877334716], -[-0.03003252297435, 0.3715782323767], -[-0.0254098179395, 0.3715700281448], -[-0.02078827066854, 0.3715631485833], -[-0.01616767127506, 0.3715576169368], -[-0.01154780950407, 0.371553451848], -[-0.006928474812705, 0.3715506673267], -[-0.002309456451806, 0.3715492727258], -[0.002309456451807, 0.3715492727258], -[0.006928474812705, 0.3715506673267], -[0.01154780950407, 0.371553451848], -[0.01616767127506, 0.3715576169368], -[0.02078827066854, 0.3715631485833], -[0.0254098179395, 0.3715700281448], -[0.03003252297435, 0.3715782323767], -[0.03465659521136, 0.3715877334716], -[0.03928224356251, 0.3715984991057], -[0.04390967633694, 0.3716104924925], -[0.04853910116623, 0.3716236724431], -[0.05317072493174, 0.3716379934339], -[0.05780475369409, 0.3716534056806], -[0.06244139262517, 0.371669855218], -[0.06708084594254, 0.3716872839864], -[0.07172331684666, 0.371705629923], -[0.07636900746083, 0.371724827059], -[0.08101811877408, 0.3717448056213], -[0.08567085058704, 0.371765492139], -[0.09032740146089, 0.3717868095538], -[0.09498796866935, 0.3718086773346], -[0.09965274815385, 0.3718310115948], -[0.1043219344818, 0.3718537252137], -[0.1089957208081, 0.3718767279601], -[0.1136742988395, 0.3718999266177], -[0.1183578588022, 0.3719232251136], -[0.1230465894125, 0.3719465246476], -[0.1277406778501, 0.3719697238232], -[0.1324403097346, 0.3719927187794], -[0.1371456691045, 0.3720154033234], -[0.1418569383986, 0.3720376690637], -[0.1465742984408, 0.3720594055427], -[0.1512979284259, 0.3720805003701], -[0.1560280059088, 0.3721008393556], -[0.1607647067953, 0.3721203066402], -[0.1655082053349, 0.3721387848278], -[0.1702586741153, 0.3721561551155], -[0.1750162840589, 0.3721722974219], -[0.1797812044198, 0.3721870905149], -[0.1845536027837, 0.3722004121382], -[0.189333645067, 0.372212139135], -[0.1941214955186, 0.3722221475714], -[0.1989173167215, 0.3722303128569], -[0.2037212695951, 0.3722365098637], -[0.2085333846551, 0.3722400766771], -[-0.2057858504634, 0.3769988119082], -[-0.2009840092347, 0.3769874717054], -[-0.1961902399334, 0.3769737406146], -[-0.1914046298766, 0.3769582083465], -[-0.1866270157515, 0.3769410023757], -[-0.1818572325409, 0.3769222496028], -[-0.1770951135191, 0.3769020762307], -[-0.1723404902489, 0.3768806076407], -[-0.1675931925795, 0.3768579682652], -[-0.162853048645, 0.376834281459], -[-0.1581198848651, 0.3768096693693], -[-0.1533935259462, 0.3767842528035], -[-0.1486737948851, 0.3767581510958], -[-0.1439605129734, 0.3767314819728], -[-0.1392534998049, 0.3767043614171], -[-0.1345525732849, 0.3766769035313], -[-0.1298575496407, 0.3766492204004], -[-0.1251682434365, 0.3766214219537], -[-0.1204844675888, 0.3765936158278], -[-0.1158060333863, 0.3765659072278], -[-0.1111327505114, 0.3765383987909], -[-0.1064644270652, 0.3765111904493], -[-0.1018008695954, 0.3764843792948], -[-0.09714188312781, 0.3764580594451], -[-0.09248727120024, 0.3764323219109], -[-0.08783683590038, 0.3764072544666], -[-0.08319037790668, 0.3763829415222], -[-0.0785476965327, 0.3763594639987], -[-0.0739085897747, 0.376336899207], -[-0.06927285436269, 0.3763153207305], -[-0.06464028581464, 0.376294798311], -[-0.06001067849408, 0.3762753977404], -[-0.0553838256707, 0.3762571807561], -[-0.05075951958417, 0.3762402049426], -[-0.04613755151079, 0.3762245236379], -[-0.04151771183306, 0.3762101858467], -[-0.03689979011182, 0.3761972361595], -[-0.03228357516091, 0.3761857146781], -[-0.02766885512411, 0.3761756569487], -[-0.02305541755419, 0.3761670939017], -[-0.01844304949376, 0.3761600517993], -[-0.01383153755778, 0.3761545521905], -[-0.009220668017433, 0.3761506118742], -[-0.00461022688506, 0.3761482428707], -[3.184669120136e-16, 0.3761474524001], -[0.00461022688506, 0.3761482428707], -[0.009220668017434, 0.3761506118742], -[0.01383153755778, 0.3761545521905], -[0.01844304949376, 0.3761600517993], -[0.02305541755419, 0.3761670939017], -[0.02766885512411, 0.3761756569487], -[0.03228357516091, 0.3761857146781], -[0.03689979011182, 0.3761972361595], -[0.04151771183306, 0.3762101858467], -[0.04613755151079, 0.3762245236379], -[0.05075951958417, 0.3762402049426], -[0.0553838256707, 0.3762571807561], -[0.06001067849408, 0.3762753977404], -[0.06464028581464, 0.376294798311], -[0.06927285436269, 0.3763153207305], -[0.0739085897747, 0.376336899207], -[0.0785476965327, 0.3763594639987], -[0.08319037790668, 0.3763829415222], -[0.08783683590038, 0.3764072544666], -[0.09248727120024, 0.3764323219109], -[0.09714188312781, 0.3764580594451], -[0.1018008695954, 0.3764843792948], -[0.1064644270652, 0.3765111904493], -[0.1111327505114, 0.3765383987909], -[0.1158060333863, 0.3765659072278], -[0.1204844675888, 0.3765936158278], -[0.1251682434365, 0.3766214219537], -[0.1298575496407, 0.3766492204004], -[0.1345525732849, 0.3766769035313], -[0.1392534998049, 0.3767043614171], -[0.1439605129734, 0.3767314819728], -[0.1486737948851, 0.3767581510958], -[0.1533935259462, 0.3767842528035], -[0.1581198848651, 0.3768096693693], -[0.162853048645, 0.376834281459], -[0.1675931925795, 0.3768579682652], -[0.1723404902489, 0.3768806076407], -[0.1770951135191, 0.3769020762307], -[0.1818572325409, 0.3769222496028], -[0.1866270157515, 0.3769410023757], -[0.1914046298766, 0.3769582083465], -[0.1961902399334, 0.3769737406146], -[0.2009840092347, 0.3769874717054], -[0.2057858504721, 0.3769988119104], -[-0.2030423784777, 0.3817508029355], -[-0.198250682168, 0.3817319008887], -[-0.1934672403873, 0.3817106680732], -[-0.188691984596, 0.3816878043357], -[-0.1839247490637, 0.3816634395736], -[-0.1791653663118, 0.3816377030715], -[-0.1744136671085, 0.3816107233745], -[-0.1696694804638, 0.3815826281589], -[-0.1649326336264, 0.3815535441014], -[-0.1602029520814, 0.3815235967461], -[-0.1554802595497, 0.3814929103695], -[-0.1507643779887, 0.3814616078437], -[-0.1460551275951, 0.3814298104986], -[-0.1413523268091, 0.3813976379821], -[-0.1366557923218, 0.3813652081193], -[-0.1319653390837, 0.3813326367712], -[-0.1272807803164, 0.3813000376919], -[-0.1226019275272, 0.3812675223861], -[-0.1179285905258, 0.381235199966], -[-0.1132605774442, 0.3812031770086], -[-0.1085976947601, 0.3811715574135], -[-0.1039397473231, 0.3811404422611], -[-0.09928653838401, 0.3811099296727], -[-0.0946378696282, 0.3810801146716], -[-0.08999354121185, 0.3810510890465], -[-0.08535335180201, 0.3810229412165], -[-0.08071709862012, 0.3809957561003], -[-0.0760845774891, 0.380969614987], -[-0.07145558288414, 0.3809445954115], -[-0.06682990798684, 0.3809207710335], -[-0.06220734474308, 0.3808982115211], -[-0.05758768392411, 0.3808769824389], -[-0.05297071519116, 0.3808571451423], -[-0.04835622716317, 0.3808387566759], -[-0.04374400748769, 0.3808218696798], -[-0.03913384291463, 0.3808065323006], -[-0.03452551937293, 0.3807927881104], -[-0.02991882204959, 0.3807806760325], -[-0.02531353547125, 0.3807702302744], -[-0.02070944358774, 0.3807614802685], -[-0.01610632985763, 0.3807544506213], -[-0.01150397733523, 0.38074916107], -[-0.006902168759111, 0.3807456264481], -[-0.002300686641491, 0.3807438566591], -[0.002300686641491, 0.3807438566591], -[0.006902168759111, 0.3807456264481], -[0.01150397733523, 0.38074916107], -[0.01610632985763, 0.3807544506213], -[0.02070944358774, 0.3807614802685], -[0.02531353547125, 0.3807702302744], -[0.02991882204959, 0.3807806760325], -[0.03452551937293, 0.3807927881104], -[0.03913384291463, 0.3808065323006], -[0.04374400748769, 0.3808218696798], -[0.04835622716317, 0.3808387566759], -[0.05297071519116, 0.3808571451423], -[0.05758768392411, 0.3808769824389], -[0.06220734474308, 0.3808982115211], -[0.06682990798684, 0.3809207710335], -[0.07145558288413, 0.3809445954115], -[0.0760845774891, 0.380969614987], -[0.08071709862012, 0.3809957561003], -[0.08535335180201, 0.3810229412165], -[0.08999354121185, 0.3810510890465], -[0.0946378696282, 0.3810801146716], -[0.09928653838401, 0.3811099296727], -[0.1039397473231, 0.3811404422611], -[0.1085976947601, 0.3811715574135], -[0.1132605774442, 0.3812031770086], -[0.1179285905258, 0.381235199966], -[0.1226019275272, 0.3812675223861], -[0.1272807803164, 0.3813000376919], -[0.1319653390837, 0.3813326367712], -[0.1366557923218, 0.3813652081193], -[0.1413523268091, 0.3813976379821], -[0.1460551275951, 0.3814298104986], -[0.1507643779887, 0.3814616078437], -[0.1554802595497, 0.3814929103695], -[0.1602029520814, 0.3815235967461], -[0.1649326336264, 0.3815535441014], -[0.1696694804638, 0.3815826281589], -[0.1744136671085, 0.3816107233745], -[0.1791653663118, 0.3816377030715], -[0.1839247490637, 0.3816634395736], -[0.188691984596, 0.3816878043357], -[0.1934672403873, 0.3817106680732], -[0.198250682168, 0.3817319008887], -[0.2030423784816, 0.3817508029365], -[-0.200302810839, 0.3864961570354], -[-0.1955213951893, 0.3864696153322], -[-0.1907484258606, 0.3864409144987], -[-0.185983668473, 0.386410756249], -[-0.181226954853, 0.3863792729818], -[-0.1764781150325, 0.3863465964427], -[-0.1717369772418, 0.3863128575936], -[-0.1670033679042, 0.3862781864789], -[-0.1622771116309, 0.3862427120906], -[-0.157558031218, 0.3862065622299], -[-0.1528459476445, 0.3861698633679], -[-0.1481406800729, 0.3861327405039], -[-0.1434420458507, 0.386095317022], -[-0.1387498605149, 0.3860577145469], -[-0.1340639377985, 0.3860200527972], -[-0.1293840896397, 0.3859824494392], -[-0.1247101261938, 0.3859450199387], -[-0.1200418558478, 0.3859078774129], -[-0.1153790852381, 0.3858711324824], -[-0.110721619272, 0.3858348931227], -[-0.1060692611513, 0.3857992645171], -[-0.1014218124009, 0.3857643489097], -[-0.09677907289943, 0.3857302454602], -[-0.09214084091491, 0.3856970501002], -[-0.08750691314312, 0.3856648553918], -[-0.08287708475031, 0.3856337503886], -[-0.07825114941956, 0.3856038204996], -[-0.07362889940096, 0.3855751473568], -[-0.06901012556569, 0.3855478086866], -[-0.06439461746373, 0.3855218781852], -[-0.05978216338547, 0.3854974253992], -[-0.05517255042685, 0.3854745156117], -[-0.05056556455801, 0.385453209733], -[-0.04596099069548, 0.3854335641984], -[-0.04135861277743, 0.3854156308722], -[-0.03675821384219, 0.3853994569587], -[-0.03215957610943, 0.3853850849198], -[-0.02756248106418, 0.3853725524014], -[-0.02296670954313, 0.3853618921667], -[-0.01837204182316, 0.3853531320384], -[-0.01377825771167, 0.3853462948488], -[-0.009185136638565, 0.3853413983992], -[-0.00459245774948, 0.3853384554277], -[-1.592334560068e-16, 0.3853374735864], -[0.00459245774948, 0.3853384554277], -[0.009185136638565, 0.3853413983992], -[0.01377825771167, 0.3853462948488], -[0.01837204182316, 0.3853531320384], -[0.02296670954313, 0.3853618921667], -[0.02756248106418, 0.3853725524014], -[0.03215957610943, 0.3853850849198], -[0.03675821384219, 0.3853994569587], -[0.04135861277743, 0.3854156308722], -[0.04596099069548, 0.3854335641984], -[0.05056556455801, 0.385453209733], -[0.05517255042685, 0.3854745156117], -[0.05978216338547, 0.3854974253992], -[0.06439461746373, 0.3855218781852], -[0.06901012556569, 0.3855478086866], -[0.07362889940096, 0.3855751473568], -[0.07825114941956, 0.3856038204996], -[0.08287708475031, 0.3856337503886], -[0.08750691314312, 0.3856648553918], -[0.09214084091491, 0.3856970501002], -[0.09677907289943, 0.3857302454602], -[0.1014218124009, 0.3857643489097], -[0.1060692611513, 0.3857992645171], -[0.110721619272, 0.3858348931227], -[0.1153790852381, 0.3858711324824], -[0.1200418558478, 0.3859078774129], -[0.1247101261938, 0.3859450199387], -[0.1293840896397, 0.3859824494392], -[0.1340639377985, 0.3860200527972], -[0.1387498605149, 0.3860577145469], -[0.1434420458507, 0.386095317022], -[0.1481406800729, 0.3861327405039], -[0.1528459476445, 0.3861698633679], -[0.157558031218, 0.3862065622299], -[0.1622771116309, 0.3862427120906], -[0.1670033679042, 0.3862781864789], -[0.1717369772418, 0.3863128575936], -[0.1764781150325, 0.3863465964427], -[0.181226954853, 0.3863792729818], -[0.185983668473, 0.386410756249], -[0.1907484258606, 0.3864409144987], -[0.1955213951893, 0.3864696153322], -[0.200302811707, 0.3864961573477], -[-0.1975667344755, 0.3912346701246], -[-0.1927962561144, 0.3912004313196], -[-0.1880339052266, 0.3911642975336], -[-0.1832797914759, 0.3911268831886], -[-0.1785337442186, 0.3910883232653], -[-0.1737955909667, 0.3910487520499], -[-0.1690651573801, 0.3910083029984], -[-0.1643422672588, 0.390967108599], -[-0.1596267425371, 0.3909253002314], -[-0.1549184032797, 0.3908830080246], -[-0.1502170676782, 0.3908403607116], -[-0.1455225520509, 0.3907974854826], -[-0.1408346708442, 0.3907545078368], -[-0.1361532366365, 0.3907115514318], -[-0.1314780601446, 0.3906687379323], -[-0.1268089502327, 0.3906261868576], -[-0.1221457139253, 0.390584015428], -[-0.1174881564216, 0.3905423384111], -[-0.1128360811149, 0.3905012679682], -[-0.1081892896146, 0.3904609134998], -[-0.1035475817715, 0.3904213814934], -[-0.09891075570815, 0.3903827753707], -[-0.09427860785127, 0.3903451953375], -[-0.08965093296974, 0.3903087382342], -[-0.08502752421562, 0.3902734973901], -[-0.08040817316957, 0.3902395624792], -[-0.07579266989034, 0.3902070193799], -[-0.07118080296834, 0.3901759500381], -[-0.06657235958327, 0.390146432335], -[-0.06196712556574, 0.390118539959], -[-0.05736488546295, 0.3900923422831], -[-0.05276542260813, 0.390067904248], -[-0.04816851919369, 0.390045286251], -[-0.04357395634806, 0.390024544042], -[-0.0389815142158, 0.390005728626], -[-0.03439097204098, 0.3899888861728], -[-0.02980210825355, 0.3899740579357], -[-0.02521470055835, 0.3899612801767], -[-0.02062852602667, 0.3899505841017], -[-0.01604336118994, 0.3899419958032], -[-0.01145898213525, 0.3899355362131], -[-0.006875164602506, 0.3899312210643], -[-0.002291684082733, 0.3899290608612], -[0.002291684082733, 0.3899290608612], -[0.006875164602506, 0.3899312210643], -[0.01145898213525, 0.3899355362131], -[0.01604336118994, 0.3899419958032], -[0.02062852602667, 0.3899505841017], -[0.02521470055835, 0.3899612801767], -[0.02980210825355, 0.3899740579357], -[0.03439097204098, 0.3899888861728], -[0.0389815142158, 0.390005728626], -[0.04357395634806, 0.390024544042], -[0.04816851919369, 0.390045286251], -[0.05276542260813, 0.390067904248], -[0.05736488546295, 0.3900923422831], -[0.06196712556574, 0.390118539959], -[0.06657235958327, 0.390146432335], -[0.07118080296834, 0.3901759500381], -[0.07579266989034, 0.3902070193799], -[0.08040817316957, 0.3902395624792], -[0.08502752421562, 0.3902734973901], -[0.08965093296974, 0.3903087382342], -[0.09427860785127, 0.3903451953375], -[0.09891075570815, 0.3903827753707], -[0.1035475817715, 0.3904213814934], -[0.1081892896146, 0.3904609134998], -[0.1128360811149, 0.3905012679682], -[0.1174881564216, 0.3905423384111], -[0.1221457139253, 0.390584015428], -[0.1268089502327, 0.3906261868576], -[0.1314780601446, 0.3906687379323], -[0.1361532366365, 0.3907115514318], -[0.1408346708442, 0.3907545078368], -[0.1455225520509, 0.3907974854826], -[0.1502170676782, 0.3908403607116], -[0.1549184032797, 0.3908830080246], -[0.1596267425371, 0.3909253002314], -[0.1643422672589, 0.390967108599], -[0.1690651573801, 0.3910083029984], -[0.1737955909667, 0.3910487520499], -[0.1785337442186, 0.3910883232653], -[0.1832797914759, 0.3911268831886], -[0.1880339052266, 0.3911642975336], -[0.1927962561144, 0.3912004313196], -[0.1975667344863, 0.3912346701281], -[-0.1948352217271, 0.3959659065889], -[-0.1900753738242, 0.3959241634297], -[-0.1853237885015, 0.3958806331284], -[-0.1805804647951, 0.3958360025812], -[-0.1758452295622, 0.3957904094347], -[-0.1711179077632, 0.3957439905973], -[-0.1663983224521, 0.3956968820999], -[-0.1616862947675, 0.3956492189519], -[-0.1569816439251, 0.3956011349966], -[-0.1522841872127, 0.395552762763], -[-0.1475937399858, 0.3955042333154], -[-0.1429101156668, 0.395455676101], -[-0.1382331257455, 0.3954072187959], -[-0.1335625797827, 0.3953589871489], -[-0.1288982854167, 0.3953111048241], -[-0.1242400483728, 0.3952636932424], -[-0.1195876724756, 0.3952168714222], -[-0.1149409596653, 0.3951707558197], -[-0.1102997100174, 0.3951254601687], -[-0.1056637217658, 0.395081095321], -[-0.1010327913307, 0.3950377690877], -[-0.09640671334961, 0.3949955860812], -[-0.09178528071286, 0.3949546475587], -[-0.08716828460364, 0.3949150512683], -[-0.08255551454197, 0.3948768912974], -[-0.07794675843319, 0.3948402579234], -[-0.07334180262085, 0.3948052374694], -[-0.06874043194389, 0.3947719121625], -[-0.06414242979827, 0.3947403599976], -[-0.05954757820278, 0.3947106546058], -[-0.05495565786908, 0.3946828651288], -[-0.05036644827587, 0.394657056099], -[-0.04577972774689, 0.3946332873264], -[-0.04119527353273, 0.3946116137924], -[-0.03661286189616, 0.3945920855518], -[-0.03203226820088, 0.3945747476415], -[-0.02745326700317, 0.3945596399991], -[-0.0228756321465, 0.3945467973886], -[-0.01829913685856, 0.3945362493367], -[-0.01372355385044, 0.3945280200776], -[-0.009148655417762, 0.3945221285074], -[-0.004574213543156, 0.394518588149], -[0, 0.3945174071264], -[0.004574213543156, 0.394518588149], -[0.009148655417763, 0.3945221285074], -[0.01372355385044, 0.3945280200776], -[0.01829913685855, 0.3945362493367], -[0.0228756321465, 0.3945467973886], -[0.02745326700317, 0.3945596399991], -[0.03203226820088, 0.3945747476415], -[0.03661286189616, 0.3945920855518], -[0.04119527353272, 0.3946116137924], -[0.04577972774689, 0.3946332873264], -[0.05036644827587, 0.394657056099], -[0.05495565786908, 0.3946828651288], -[0.05954757820278, 0.3947106546058], -[0.06414242979827, 0.3947403599976], -[0.0687404319439, 0.3947719121625], -[0.07334180262085, 0.3948052374694], -[0.07794675843319, 0.3948402579234], -[0.08255551454197, 0.3948768912974], -[0.08716828460364, 0.3949150512683], -[0.09178528071286, 0.3949546475587], -[0.09640671334961, 0.3949955860812], -[0.1010327913307, 0.3950377690877], -[0.1056637217658, 0.395081095321], -[0.1102997100174, 0.3951254601687], -[0.1149409596653, 0.3951707558197], -[0.1195876724756, 0.3952168714223], -[0.1242400483728, 0.3952636932424], -[0.1288982854167, 0.3953111048241], -[0.1335625797827, 0.3953589871489], -[0.1382331257455, 0.3954072187959], -[0.1429101156668, 0.395455676101], -[0.1475937399858, 0.3955042333154], -[0.1522841872127, 0.395552762763], -[0.1569816439251, 0.3956011349966], -[0.1616862947675, 0.3956492189519], -[0.1663983224521, 0.3956968820999], -[0.1711179077632, 0.3957439905973], -[0.1758452295622, 0.3957904094347], -[0.1805804647951, 0.3958360025812], -[0.1853237885015, 0.3958806331284], -[0.1900753738242, 0.3959241634297], -[0.1948352217341, 0.3959659065912], -[-0.1921079097297, 0.4006898990645], -[-0.1873588583108, 0.4006406244642], -[-0.1826181868935, 0.4005897354702], -[-0.1778858008954, 0.400537930108], -[-0.173161524644, 0.4004853487769], -[-0.1684451805143, 0.4004321310931], -[-0.1637365889172, 0.4003784157445], -[-0.1590355682886, 0.400324340343], -[-0.1543419350814, 0.4002700412732], -[-0.1496555037581, 0.4002156535391], -[-0.1449760867867, 0.4001613106079], -[-0.140303494638, 0.4001071442518], -[-0.1356375357862, 0.4000532843877], -[-0.130978016712, 0.399999858915], -[-0.1263247419092, 0.3999469935517], -[-0.1216775138942, 0.3998948116703], -[-0.117036133219, 0.3998434341312], -[-0.1124003984886, 0.3997929791172], -[-0.1077701063811, 0.3997435619667], -[-0.1031450516732, 0.3996952950084], -[-0.09852502726911, 0.3996482873956], -[-0.09390982423402, 0.3996026449423], -[-0.08929923183212, 0.3995584699616], -[-0.0846930375691, 0.3995158611051], -[-0.08009102723942, 0.3994749132062], -[-0.07549298497813, 0.3994357171259], -[-0.07089869331744, 0.3993983596033], -[-0.06630793324795, 0.3993629231093], -[-0.0617204842845, 0.3993294857069], -[-0.05713612453661, 0.3992981209152], -[-0.05255463078329, 0.3992688975809], -[-0.04797577855221, 0.3992418797558], -[-0.043399342203, 0.3992171265813], -[-0.03882509501446, 0.3991946921808], -[-0.03425280927546, 0.3991746255602], -[-0.0296822563794, 0.3991569705168], -[-0.02511320692165, 0.3991417655573], -[-0.02054543080003, 0.399129043825], -[-0.01597869731767, 0.3991188330372], -[-0.01141277528815, 0.3991111554316], -[-0.006847433142369, 0.3991060277244], -[-0.002282439036862, 0.3991034610777], -[0.002282439036861, 0.3991034610777], -[0.006847433142369, 0.3991060277244], -[0.01141277528815, 0.3991111554316], -[0.01597869731767, 0.3991188330372], -[0.02054543080003, 0.399129043825], -[0.02511320692165, 0.3991417655573], -[0.0296822563794, 0.3991569705168], -[0.03425280927546, 0.3991746255602], -[0.03882509501446, 0.3991946921808], -[0.043399342203, 0.3992171265813], -[0.04797577855221, 0.3992418797558], -[0.05255463078329, 0.3992688975809], -[0.05713612453661, 0.3992981209152], -[0.0617204842845, 0.3993294857069], -[0.06630793324794, 0.3993629231093], -[0.07089869331744, 0.3993983596033], -[0.07549298497813, 0.3994357171259], -[0.08009102723942, 0.3994749132062], -[0.0846930375691, 0.3995158611051], -[0.08929923183212, 0.3995584699616], -[0.09390982423402, 0.3996026449423], -[0.09852502726911, 0.3996482873956], -[0.1031450516732, 0.3996952950084], -[0.1077701063811, 0.3997435619667], -[0.1124003984886, 0.3997929791172], -[0.117036133219, 0.3998434341312], -[0.1216775138942, 0.3998948116703], -[0.1263247419092, 0.3999469935517], -[0.130978016712, 0.399999858915], -[0.1356375357862, 0.4000532843877], -[0.140303494638, 0.4001071442518], -[0.1449760867867, 0.4001613106079], -[0.1496555037581, 0.4002156535391], -[0.1543419350814, 0.4002700412732], -[0.1590355682886, 0.400324340343], -[0.1637365889172, 0.4003784157445], -[0.1684451805143, 0.4004321310931], -[0.173161524644, 0.4004853487769], -[0.1778858008954, 0.400537930108], -[0.1826181868935, 0.4005897354702], -[0.1873588583108, 0.4006406244642], -[0.1921079097334, 0.4006898990658], -[-0.1893846391679, 0.4054065010832], -[-0.1846468207247, 0.4053496253716], -[-0.1799172128538, 0.4052914169075], -[-0.1751959135709, 0.4052324796311], -[-0.1704827446415, 0.4051729567842], -[-0.165777525819, 0.4051129907787], -[-0.1610800748311, 0.4050527230463], -[-0.156390207368, 0.4049922938843], -[-0.1517077370719, 0.4049318422996], -[-0.1470324755293, 0.4048715058486], -[-0.142364232265, 0.4048114204756], -[-0.1377028147394, 0.4047517203476], -[-0.1330480283482, 0.4046925376881], -[-0.1283996764253, 0.4046340026081], -[-0.1237575602495, 0.4045762429358], -[-0.1191214790542, 0.4045193840454], -[-0.1144912300411, 0.4044635486841], -[-0.1098666083987, 0.4044088567995], -[-0.1052474073238, 0.4043554253668], -[-0.1006334180482, 0.4043033682159], -[-0.09602442986987, 0.4042527958598], -[-0.0914202301889, 0.4042038153242], -[-0.08682060454795, 0.4041565299795], -[-0.08222533667798, 0.4041110393742], -[-0.07763420854879, 0.404067439073], -[-0.07304700042457, 0.4040258204964], -[-0.0684634909246, 0.4039862707667], -[-0.06388345708874, 0.4039488725571], -[-0.05930667444804, 0.4039137039469], -[-0.05473291710007, 0.4038808382832], -[-0.05016195778895, 0.4038503440477], -[-0.04559356799001, 0.4038222847325], -[-0.04102751799869, 0.403796718722], -[-0.03646357702364, 0.4037736991839], -[-0.03190151328363, 0.4037532739688], -[-0.02734109410806, 0.4037354855188], -[-0.02278208604067, 0.4037203707862], -[-0.01822425494622, 0.4037079611613], -[-0.0136673661197, 0.4036982824118], -[-0.009111184397582, 0.403691354632], -[-0.004555474270982, 0.4036871922036], -[0, 0.4036858037668], -[0.004555474270982, 0.4036871922036], -[0.009111184397582, 0.403691354632], -[0.0136673661197, 0.4036982824118], -[0.01822425494622, 0.4037079611613], -[0.02278208604067, 0.4037203707862], -[0.02734109410806, 0.4037354855188], -[0.03190151328363, 0.4037532739688], -[0.03646357702364, 0.4037736991838], -[0.04102751799869, 0.403796718722], -[0.04559356799001, 0.4038222847325], -[0.05016195778895, 0.4038503440477], -[0.05473291710007, 0.4038808382832], -[0.05930667444804, 0.4039137039469], -[0.06388345708874, 0.4039488725571], -[0.06846349092459, 0.4039862707667], -[0.07304700042457, 0.4040258204964], -[0.07763420854879, 0.404067439073], -[0.08222533667798, 0.4041110393742], -[0.08682060454795, 0.4041565299795], -[0.0914202301889, 0.4042038153242], -[0.09602442986987, 0.4042527958598], -[0.1006334180482, 0.4043033682159], -[0.1052474073238, 0.4043554253668], -[0.1098666083987, 0.4044088567995], -[0.1144912300411, 0.4044635486841], -[0.1191214790542, 0.4045193840454], -[0.1237575602495, 0.4045762429358], -[0.1283996764253, 0.4046340026081], -[0.1330480283482, 0.4046925376881], -[0.1377028147391, 0.4047517203473], -[0.142364232265, 0.4048114204756], -[0.1470324755293, 0.4048715058486], -[0.1517077370719, 0.4049318422996], -[0.156390207368, 0.4049922938843], -[0.1610800748311, 0.4050527230463], -[0.165777525819, 0.4051129907787], -[0.1704827446415, 0.4051729567842], -[0.1751959135709, 0.4052324796311], -[0.1799172128538, 0.4052914169075], -[0.1846468207247, 0.4053496253716], -[0.1893846391794, 0.4054065010876], -[-0.1866660734783, 0.4101152547698], -[-0.1819393734246, 0.4100509751689], -[-0.1772209801304, 0.4099854878732], -[-0.1725109180028, 0.4099194631171], -[-0.1678090062106, 0.4098530470786], -[-0.1631150618474, 0.4097863850569], -[-0.1584288999155, 0.4097196213165], -[-0.1537503333127, 0.409652898927], -[-0.1490791728201, 0.409586359601], -[-0.1444152270932, 0.4095201435278], -[-0.1397583026553, 0.4094543892049], -[-0.1351082038931, 0.4093892332668], -[-0.1304647330568, 0.4093248103111], -[-0.1258276902624, 0.4092612527233], -[-0.1211968734986, 0.4091986904989], -[-0.1165720786368, 0.4091372510652], -[-0.1119530994458, 0.4090770591014], -[-0.1073397276113, 0.4090182363588], -[-0.1027317527587, 0.4089609014802], -[-0.09812896248205, 0.408905169821], -[-0.09353114237735, 0.4088511532699], -[-0.08893807608075, 0.4087989600724], -[-0.08434954531233, 0.4087486946553], -[-0.07976532992508, 0.4087004574551], -[-0.0751852079591, 0.4086543447487], -[-0.07060895570136, 0.4086104484886], -[-0.06603634775066, 0.4085688561428], -[-0.06146715708806, 0.4085296505396], -[-0.05690115515244, 0.4084929097181], -[-0.05233811192126, 0.408458706786], -[-0.04777779599625, 0.4084271097841], -[-0.04321997469396, 0.4083981815577], -[-0.03866441414077, 0.4083719796382], -[-0.0341108793723, 0.4083485561316], -[-0.02955913443674, 0.4083279576179], -[-0.02500894250195, 0.4083102250596], -[-0.02046006596582, 0.4082953937209], -[-0.01591226656961, 0.4082834930973], -[-0.01136530551376, 0.408274546857], -[-0.006818943575914, 0.4082685727931], -[-0.002272941230493, 0.4082655827876], -[0.002272941230492, 0.4082655827876], -[0.006818943575914, 0.4082685727931], -[0.01136530551376, 0.408274546857], -[0.01591226656961, 0.4082834930973], -[0.02046006596582, 0.4082953937209], -[0.02500894250195, 0.4083102250596], -[0.02955913443674, 0.4083279576179], -[0.0341108793723, 0.4083485561316], -[0.03866441414077, 0.4083719796382], -[0.04321997469396, 0.4083981815577], -[0.04777779599625, 0.4084271097841], -[0.05233811192126, 0.408458706786], -[0.05690115515244, 0.4084929097181], -[0.06146715708806, 0.4085296505396], -[0.06603634775066, 0.4085688561428], -[0.07060895570136, 0.4086104484886], -[0.0751852079591, 0.4086543447487], -[0.07976532992508, 0.4087004574551], -[0.08434954531233, 0.4087486946553], -[0.08893807608075, 0.4087989600724], -[0.09353114237735, 0.4088511532699], -[0.09812896248205, 0.408905169821], -[0.1027317527587, 0.4089609014802], -[0.1073397276113, 0.4090182363588], -[0.1119530994458, 0.4090770591014], -[0.1165720786368, 0.4091372510652], -[0.1211968734986, 0.4091986904989], -[0.1258276902625, 0.4092612527233], -[0.1304647330568, 0.4093248103111], -[0.1351082038931, 0.4093892332668], -[0.1397583026553, 0.4094543892049], -[0.1444152270932, 0.4095201435278], -[0.1490791728201, 0.409586359601], -[0.1537503333127, 0.409652898927], -[0.1584288999155, 0.4097196213165], -[0.1631150618474, 0.4097863850569], -[0.1678090062106, 0.4098530470786], -[0.1725109180028, 0.4099194631171], -[0.1772209801304, 0.4099854878732], -[0.1819393734246, 0.410050975169], -[0.1866660734872, 0.4101152547734], -[-0.183952190776, 0.4148167127431], -[-0.1792366300295, 0.4147444808588], -[-0.1745296038237, 0.4146717568027], -[-0.1698309308186, 0.4145986905574], -[-0.1651404275498, 0.4145254313345], -[-0.1604579084098, 0.4144521274155], -[-0.1557831856305, 0.4143789259902], -[-0.1511160692676, 0.4143059729907], -[-0.1464563671873, 0.4142334129219], -[-0.1418038850558, 0.4141613886892], -[-0.1371584263319, 0.4140900414226], -[-0.1325197922616, 0.4140195102984], -[-0.1278877818782, 0.4139499323585], -[-0.1232621920037, 0.413881442327], -[-0.1186428172567, 0.4138141724255], -[-0.1140294500623, 0.4137482521869], -[-0.1094218806684, 0.4136838082679], -[-0.1048198971657, 0.413620964262], -[-0.100223285513, 0.4135598405109], -[-0.09563182956754, 0.4135005539183], -[-0.09104531112121, 0.4134432177635], -[-0.08646350994145, 0.4133879415172], -[-0.08188620381844, 0.4133348306599], -[-0.07731316861765, 0.413283986503], -[-0.07274417833825, 0.4132355060137], -[-0.06817900517724, 0.4131894816441], -[-0.06361741959934, 0.4131460011654], -[-0.05905919041255, 0.4131051475082], -[-0.05450408484931, 0.4130669986083], -[-0.04995186865305, 0.4130316272608], -[-0.04540230617008, 0.4129991009808], -[-0.04085516044641, 0.412969481873], -[-0.0363101933295, 0.4129428265106], -[-0.03176716557433, 0.4129191858232], -[-0.02722583695377, 0.4128986049954], -[-0.02268596637265, 0.4128811233757], -[-0.01814731198524, 0.4128667743964], -[-0.0136096313157, 0.412855585506], -[-0.00907268138103, 0.4128475781121], -[-0.004536218816068, 0.4128427675376], -[0, 0.4128411629891], -[0.004536218816068, 0.4128427675376], -[0.00907268138103, 0.4128475781121], -[0.0136096313157, 0.412855585506], -[0.01814731198524, 0.4128667743964], -[0.02268596637265, 0.4128811233757], -[0.02722583695377, 0.4128986049954], -[0.03176716557433, 0.4129191858232], -[0.0363101933295, 0.4129428265106], -[0.04085516044641, 0.412969481873], -[0.04540230617008, 0.4129991009808], -[0.04995186865305, 0.4130316272608], -[0.05450408484931, 0.4130669986083], -[0.05905919041255, 0.4131051475082], -[0.06361741959934, 0.4131460011654], -[0.06817900517724, 0.4131894816441], -[0.07274417833825, 0.4132355060137], -[0.07731316861765, 0.413283986503], -[0.08188620381844, 0.4133348306599], -[0.08646350994145, 0.4133879415172], -[0.09104531112121, 0.4134432177635], -[0.09563182956754, 0.4135005539183], -[0.100223285513, 0.4135598405109], -[0.1048198971657, 0.413620964262], -[0.1094218806684, 0.4136838082679], -[0.1140294500623, 0.4137482521869], -[0.1186428172567, 0.4138141724255], -[0.1232621920037, 0.413881442327], -[0.1278877818782, 0.4139499323585], -[0.1325197922616, 0.4140195102984], -[0.1371584263319, 0.4140900414226], -[0.1418038850558, 0.4141613886892], -[0.1464563671873, 0.4142334129219], -[0.1511160692676, 0.4143059729907], -[0.1557831856305, 0.4143789259902], -[0.1604579084098, 0.4144521274155], -[0.1651404275498, 0.4145254313345], -[0.1698309308186, 0.4145986905574], -[0.1745296038237, 0.4146717568027], -[0.1792366300295, 0.4147444808588], -[0.183952190776, 0.4148167127431], -[-0.1812427691816, 0.4195095686038], -[-0.1765387054731, 0.4194299473433], -[-0.1718432004456, 0.419350030049], -[-0.167156070156, 0.4192699698849], -[-0.1624771284677, 0.4191899191968], -[-0.1578061870284, 0.4191100293477], -[-0.1531430552512, 0.4190304505495], -[-0.1484875402968, 0.4189513316897], -[-0.1438394470589, 0.4188728201559], -[-0.1391985781522, 0.4187950616556], -[-0.1345647339037, 0.4187182000333], -[-0.1299377123474, 0.4186423770845], -[-0.1253173092228, 0.4185677323671], -[-0.1207033179775, 0.4184944030102], -[-0.1160955297741, 0.4184225235214], -[-0.1114937335019, 0.4183522255925], -[-0.1068977157938, 0.4182836379044], -[-0.1023072610476, 0.4182168859307], -[-0.09772215145357, 0.418152091743], -[-0.09314216702701, 0.4180893738149], -[-0.08856708564704, 0.4180288468292], -[-0.08399668310104, 0.4179706214857], -[-0.07943073313526, 0.4179148043124], -[-0.07486900751148, 0.4178614974794], -[-0.07031127606995, 0.4178107986176], -[-0.0657573067984, 0.4177628006414], -[-0.06120686590726, 0.4177175915777], -[-0.05665971791087, 0.4176752544001], -[-0.05211562571465, 0.4176358668715], -[-0.04757435070806, 0.4175995013931], -[-0.0430356528631, 0.4175662248622], -[-0.03849929083806, 0.4175360985398], -[-0.03396502208634, 0.4175091779271], -[-0.02943260296995, 0.4174855126527], -[-0.02490178887719, 0.4174651463706], -[-0.02037233434439, 0.4174481166703], -[-0.01584399318089, 0.4174344549979], -[-0.01131651859716, 0.4174241865907], -[-0.006789663335219, 0.4174173304234], -[-0.002263179801146, 0.4174138991682], -[0.002263179801146, 0.4174138991682], -[0.006789663335219, 0.4174173304234], -[0.01131651859716, 0.4174241865907], -[0.01584399318089, 0.4174344549979], -[0.02037233434439, 0.4174481166703], -[0.02490178887719, 0.4174651463706], -[0.02943260296995, 0.4174855126527], -[0.03396502208634, 0.4175091779271], -[0.03849929083806, 0.4175360985398], -[0.0430356528631, 0.4175662248622], -[0.04757435070806, 0.4175995013931], -[0.05211562571465, 0.4176358668715], -[0.05665971791087, 0.4176752544001], -[0.06120686590726, 0.4177175915777], -[0.0657573067984, 0.4177628006414], -[0.07031127606995, 0.4178107986176], -[0.07486900751148, 0.4178614974794], -[0.07943073313526, 0.4179148043124], -[0.08399668310104, 0.4179706214857], -[0.08856708564704, 0.4180288468292], -[0.09314216702701, 0.4180893738149], -[0.09772215145357, 0.418152091743], -[0.1023072610476, 0.4182168859307], -[0.1068977157938, 0.4182836379044], -[0.1114937335019, 0.4183522255925], -[0.1160955297741, 0.4184225235214], -[0.1207033179775, 0.4184944030102], -[0.1253173092228, 0.4185677323671], -[0.1299377123474, 0.4186423770845], -[0.1345647339037, 0.4187182000333], -[0.1391985781522, 0.4187950616556], -[0.1438394470589, 0.4188728201559], -[0.1484875402968, 0.4189513316897], -[0.1531430552512, 0.4190304505495], -[0.1578061870284, 0.4191100293477], -[0.1624771284677, 0.4191899191968], -[0.167156070156, 0.4192699698849], -[0.1718432004456, 0.419350030049], -[0.1765387054731, 0.4194299473433], -[0.1812427691816, 0.4195095686038], -[-0.1785381265527, 0.4241941470534], -[-0.173845716061, 0.4241071773341], -[-0.1691618879806, 0.4240201117942], -[-0.1644864557287, 0.4239331068863], -[-0.159819230454, 0.4238463181959], -[-0.1551600210129, 0.4237599002705], -[-0.150508633948, 0.4236740064439], -[-0.1458648734684, 0.4235887886569], -[-0.1412285414339, 0.4235043972729], -[-0.1365994373409, 0.4234209808912], -[-0.1319773583133, 0.4233386861558], -[-0.1273620990962, 0.4232576575611], -[-0.122753452054, 0.4231780372552], -[-0.118151207173, 0.4230999648404], -[-0.1135551520689, 0.4230235771719], -[-0.1089650719995, 0.4229490081549], -[-0.1043807498822, 0.4228763885405], -[-0.09980196631752, 0.4228058457217], -[-0.09522849961877, 0.4227375035289], -[-0.09066012584719, 0.422671482027], -[-0.08609661885385, 0.4226078973133], -[-0.08153775032729, 0.4225468613173], -[-0.07698328984895, 0.4224884816052], -[-0.07243300495357, 0.422432861186], -[-0.0678866611974, 0.422380098323], -[-0.06334402223257, 0.4223302863506], -[-0.05880484988807, 0.4222835134969], -[-0.05426890425717, 0.4222398627136], -[-0.04973594379118, 0.4221994115127], -[-0.04520572539928, 0.4221622318124], -[-0.04067800455423, 0.4221283897919], -[-0.03615253540364, 0.4220979457556], -[-0.03162907088644, 0.4220709540088], -[-0.02710736285427, 0.4220474627438], -[-0.02258716219721, 0.4220275139385], -[-0.0180682189735, 0.4220111432668], -[-0.01355028254276, 0.4219983800221], -[-0.009033101702129, 0.4219892470546], -[-0.004516424824723, 0.4219837607213], -[1.592334560068e-16, 0.4219819308507], -[0.004516424824723, 0.4219837607213], -[0.009033101702129, 0.4219892470546], -[0.01355028254276, 0.4219983800221], -[0.0180682189735, 0.4220111432668], -[0.02258716219721, 0.4220275139385], -[0.02710736285427, 0.4220474627438], -[0.03162907088644, 0.4220709540088], -[0.03615253540364, 0.4220979457556], -[0.04067800455423, 0.4221283897919], -[0.04520572539928, 0.4221622318124], -[0.04973594379118, 0.4221994115127], -[0.05426890425717, 0.4222398627136], -[0.05880484988807, 0.4222835134969], -[0.06334402223257, 0.4223302863506], -[0.0678866611974, 0.422380098323], -[0.07243300495357, 0.422432861186], -[0.07698328984895, 0.4224884816052], -[0.08153775032729, 0.4225468613173], -[0.08609661885375, 0.4226078973131], -[0.09066012584719, 0.422671482027], -[0.09522849961877, 0.4227375035289], -[0.09980196631752, 0.4228058457217], -[0.1043807498822, 0.4228763885405], -[0.1089650719995, 0.4229490081549], -[0.1135551520689, 0.4230235771719], -[0.118151207173, 0.4230999648404], -[0.122753452054, 0.4231780372552], -[0.1273620990962, 0.4232576575611], -[0.1319773583133, 0.4233386861558], -[0.1365994373409, 0.4234209808912], -[0.1412285414339, 0.4235043972729], -[0.1458648734684, 0.4235887886569], -[0.150508633948, 0.4236740064439], -[0.1551600210129, 0.4237599002705], -[0.159819230454, 0.4238463181959], -[0.1644864557287, 0.4239331068863], -[0.1691618879806, 0.4240201117942], -[0.173845716061, 0.4241071773341], -[0.1785381265527, 0.4241941470534], -[-0.1758383788955, 0.4288702471632], -[-0.1711577795302, 0.4287759712578], -[-0.1664857859513, 0.4286818039564], -[-0.161822208896, 0.4285879051117], -[-0.1571668567539, 0.4284944336588], -[-0.15251953554, 0.428401547437], -[-0.1478800488711, 0.4283094030069], -[-0.1432481979445, 0.4282181554631], -[-0.1386237815198, 0.4281279582428], -[-0.1340065959043, 0.4280389629299], -[-0.1293964349421, 0.4279513190557], -[-0.1247930900073, 0.4278651738964], -[-0.1201963500021, 0.427780672267], -[-0.1156060013594, 0.4276979563131], -[-0.1110218280504, 0.4276171653003], -[-0.106443611599, 0.4275384354023], -[-0.1018711311002, 0.427461899488], -[-0.09730416324601, 0.4273876869076], -[-0.09274248235707, 0.4273159232798], -[-0.08818586042116, 0.4272467302795], -[-0.08363406713825, 0.4271802254273], -[-0.07908686997252, 0.4271165218812], -[-0.07454403421148, 0.4270557282324], -[-0.07000532303209, 0.426997948304], -[-0.06547049757403, 0.4269432809557], -[-0.06093931702, 0.4268918198933], -[-0.05641153868311, 0.426843653486], -[-0.05188691810102, 0.42679886459], -[-0.04736520913688, 0.4267575303813], -[-0.04284616408665, 0.4267197221972], -[-0.03832953379263, 0.4266855053879], -[-0.03381506776283, 0.426654939179], -[-0.02930251429575, 0.4266280765451], -[-0.02479162061023, 0.4266049640959], -[-0.0202821329798, 0.4265856419753], -[-0.01577379687108, 0.4265701437728], -[-0.01126635708563, 0.4265584964503], -[-0.006759557904718, 0.4265507202817], -[-0.002253143236297, 0.4265468288083], -[0.002253143236297, 0.4265468288083], -[0.006759557904717, 0.4265507202817], -[0.01126635708563, 0.4265584964503], -[0.01577379687108, 0.4265701437728], -[0.0202821329798, 0.4265856419753], -[0.02479162061023, 0.4266049640959], -[0.02930251429575, 0.4266280765451], -[0.03381506776283, 0.426654939179], -[0.03832953379263, 0.4266855053879], -[0.04284616408665, 0.4267197221972], -[0.04736520913688, 0.4267575303813], -[0.05188691810102, 0.42679886459], -[0.05641153868311, 0.426843653486], -[0.06093931702, 0.4268918198933], -[0.06547049757403, 0.4269432809557], -[0.07000532303209, 0.426997948304], -[0.07454403421148, 0.4270557282324], -[0.07908686997252, 0.4271165218812], -[0.08363406713825, 0.4271802254273], -[0.08818586042116, 0.4272467302795], -[0.09274248235707, 0.4273159232798], -[0.09730416324601, 0.4273876869076], -[0.1018711311002, 0.427461899488], -[0.106443611599, 0.4275384354023], -[0.1110218280504, 0.4276171653003], -[0.1156060013594, 0.4276979563131], -[0.1201963500021, 0.427780672267], -[0.1247930900073, 0.4278651738964], -[0.1293964349421, 0.4279513190557], -[0.1340065959043, 0.4280389629299], -[0.1386237815198, 0.4281279582428], -[0.1432481979445, 0.4282181554631], -[0.1478800488711, 0.4283094030069], -[0.15251953554, 0.428401547437], -[0.1571668567539, 0.4284944336588], -[0.161822208896, 0.4285879051117], -[0.1664857859513, 0.4286818039564], -[0.1711577795302, 0.4287759712578], -[0.1758383788955, 0.4288702471632], -[-0.1731436436021, 0.4335376656044], -[-0.1684750151121, 0.4334361271573], -[-0.1638150154848, 0.4333349060919], -[-0.1591634527358, 0.4332341657784], -[-0.1545201324464, 0.4331340686157], -[-0.1498848577371, 0.4330347758469], -[-0.1452574292399, 0.4329364473684], -[-0.1406376450754, 0.4328392415344], -[-0.1360253008326, 0.4327433149567], -[-0.1314201895535, 0.4326488223008], -[-0.1268221017204, 0.4325559160768], -[-0.122230825249, 0.4324647464281], -[-0.1176461454859, 0.4323754609158], -[-0.1130678452116, 0.4322882043009], -[-0.1084957046494, 0.432203118324], -[-0.1039295014795, 0.4321203414838], -[-0.0993690108605, 0.4320400088139], -[-0.09481400545693, 0.4319622516599], -[-0.0902642554737, 0.4318871974568], -[-0.08571952869785, 0.4318149695071], -[-0.08117959054745, 0.431745686761], -[-0.07664420412809, 0.4316794635999], -[-0.07211313029684, 0.4316164096229], -[-0.06758612773387, 0.4315566294383], -[-0.06306295302164, 0.4315002224599], -[-0.05854336073178, 0.4314472827105], -[-0.05402710351927, 0.4313978986321], -[-0.04951393222412, 0.4313521529046], -[-0.04500359598, 0.4313101222735], -[-0.04049584232977, 0.4312718773876], -[-0.03599041734745, 0.4312374826475], -[-0.0314870657664, 0.4312069960661], -[-0.026985531113, 0.4311804691412], -[-0.02248555584569, 0.4311579467412], -[-0.01798688149853, 0.4311394670052], -[-0.01348924882887, 0.4311250612569], -[-0.008992397968445, 0.4311147539333], -[-0.004496068577347, 0.4311085625299], -[0, 0.4311064975597], -[0.004496068577347, 0.4311085625299], -[0.008992397968445, 0.4311147539333], -[0.01348924882887, 0.4311250612569], -[0.01798688149853, 0.4311394670052], -[0.02248555584569, 0.4311579467412], -[0.026985531113, 0.4311804691412], -[0.0314870657664, 0.4312069960661], -[0.03599041734745, 0.4312374826475], -[0.04049584232977, 0.4312718773876], -[0.04500359598, 0.4313101222735], -[0.04951393222412, 0.4313521529046], -[0.05402710351927, 0.4313978986321], -[0.05854336073178, 0.4314472827105], -[0.06306295302164, 0.4315002224599], -[0.06758612773387, 0.4315566294383], -[0.07211313029684, 0.4316164096229], -[0.07664420412809, 0.4316794635999], -[0.08117959054745, 0.431745686761], -[0.08571952869785, 0.4318149695071], -[0.0902642554737, 0.4318871974568], -[0.09481400545693, 0.4319622516599], -[0.0993690108605, 0.4320400088139], -[0.1039295014795, 0.4321203414838], -[0.1084957046494, 0.432203118324], -[0.1130678452116, 0.4322882043009], -[0.1176461454859, 0.4323754609158], -[0.122230825249, 0.4324647464281], -[0.1268221017204, 0.4325559160768], -[0.1314201895535, 0.4326488223008], -[0.1360253008326, 0.4327433149567], -[0.1406376450754, 0.4328392415344], -[0.1452574292399, 0.4329364473684], -[0.1498848577371, 0.4330347758469], -[0.1545201324464, 0.4331340686157], -[0.1591634527358, 0.4332341657784], -[0.1638150154848, 0.4333349060919], -[0.1684750151121, 0.4334361271573], -[0.1731436436021, 0.4335376656044], -[-0.1704539810967, 0.4381955741696], -[-0.1657975435982, 0.4380874405878], -[-0.1611496993864, 0.4379792152942], -[-0.1565103121215, 0.4378716876715], -[-0.151879184527, 0.4377650237026], -[-0.1472561167708, 0.4376593881516], -[-0.1426409064368, 0.4375549443643], -[-0.1380333484995, 0.4374518540644], -[-0.1334332353022, 0.4373502771442], -[-0.1288403565396, 0.4372503714509], -[-0.1242544992446, 0.4371522925689], -[-0.1196754477808, 0.4370561935972], -[-0.1151029838394, 0.4369622249249], -[-0.1105368864433, 0.4368705340027], -[-0.1059769319558, 0.4367812651122], -[-0.1014228940974, 0.4366945591341], -[-0.0968745439681, 0.4366105533146], -[-0.09233165007807, 0.4365293810323], -[-0.08779397838503, 0.4364511715651], -[-0.08326129233969, 0.4363760498585], -[-0.07873335293891, 0.4363041362963], -[-0.07420991878706, 0.4362355464744], -[-0.06969074616543, 0.4361703909786], -[-0.06517558910986, 0.4361087751674], -[-0.0606641994965, 0.4360507989607], -[-0.05615632713578, 0.4359965566364], -[-0.05165171987424, 0.4359461366334], -[-0.04715012370419, 0.4358996213654], -[-0.0426512828809, 0.4358570870434], -[-0.03815494004697, 0.4358186035094], -[-0.03366083636353, 0.4357842340827], -[-0.0291687116478, 0.4357540354178], -[-0.02467830451658, 0.4357280573764], -[-0.02018935253495, 0.4357063429138], -[-0.01570159237, 0.4356889279807], -[-0.01121475994806, 0.4356758414377], -[-0.006728590616027, 0.4356671049905], -[-0.002242819304852, 0.4356627331381], -[0.002242819304852, 0.4356627331381], -[0.006728590616024, 0.4356671049905], -[0.01121475994806, 0.4356758414377], -[0.01570159237, 0.4356889279807], -[0.02018935253487, 0.4357063429132], -[0.02467830451658, 0.4357280573764], -[0.0291687116478, 0.4357540354178], -[0.03366083636353, 0.4357842340827], -[0.03815494004697, 0.4358186035094], -[0.0426512828809, 0.4358570870434], -[0.04715012370419, 0.4358996213654], -[0.05165171987424, 0.4359461366334], -[0.05615632713578, 0.4359965566364], -[0.0606641994965, 0.4360507989607], -[0.06517558910986, 0.4361087751674], -[0.06969074616544, 0.4361703909786], -[0.07420991878706, 0.4362355464744], -[0.07873335293891, 0.4363041362963], -[0.08326129233969, 0.4363760498585], -[0.08779397838503, 0.4364511715651], -[0.09233165007807, 0.4365293810323], -[0.0968745439681, 0.4366105533146], -[0.1014228940974, 0.4366945591341], -[0.1059769319558, 0.4367812651122], -[0.1105368864433, 0.4368705340027], -[0.1151029838394, 0.4369622249249], -[0.1196754477808, 0.4370561935972], -[0.1242544992446, 0.4371522925689], -[0.1288403565396, 0.4372503714509], -[0.1334332353022, 0.4373502771442], -[0.1380333484995, 0.4374518540644], -[0.1426409064368, 0.4375549443643], -[0.1472561167708, 0.4376593881516], -[0.151879184527, 0.4377650237026], -[0.1565103121215, 0.4378716876715], -[0.1611496993864, 0.4379792152942], -[0.1657975435982, 0.4380874405878], -[0.1704539830546, 0.4381955752841], -[-0.1677694341385, 0.4428451150126], -[-0.1631254874095, 0.4427297045083], -[-0.1584899622112, 0.4426145260853], -[-0.153862913803, 0.4425002670382], -[-0.1492441419943, 0.4423870970591], -[-0.1446334439393, 0.4422751845551], -[-0.1400306141061, 0.4421646964406], -[-0.1354354442486, 0.4420557979236], -[-0.1308477233835, 0.4419486522869], -[-0.1262672377709, 0.4418434206646], -[-0.1216937709004, 0.4417402618133], -[-0.1171271034829, 0.4416393318804], -[-0.1125670134477, 0.4415407841673], -[-0.1080132759467, 0.4414447688906], -[-0.1034656633647, 0.4413514329409], -[-0.09892394533726, 0.4412609196387], -[-0.09438788877573, 0.4411733684908], -[-0.08985725790039, 0.4410889149456], -[-0.08533181428154, 0.4410076901493], -[-0.08081131688893, 0.4409298207038], -[-0.0762955221498, 0.4408554284269], -[-0.07178418401549, 0.4407846301163], -[-0.067277054037, 0.4407175373178], -[-0.06277388144913, 0.4406542560996], -[-0.05827441326361, 0.4405948868331], -[-0.05377839437071, 0.440539523981], -[-0.04928556764948, 0.4404882558949], -[-0.04479567408622, 0.4404411646222], -[-0.04030845290085, 0.4403983257249], -[-0.035823641681, 0.4403598081089], -[-0.03134097652311, 0.4403256738677], -[-0.02686019218031, 0.4402959781387], -[-0.02238102221627, 0.4402707689753], -[-0.01790319916459, 0.4402500872334], -[-0.01342645469292, 0.440233966475], -[-0.008950519771175, 0.4402224328877], -[-0.004475124843049, 0.4402155052223], -[-3.184669120136e-16, 0.4402131947475], -[0.004475124843049, 0.4402155052223], -[0.008950519771175, 0.4402224328877], -[0.01342645469292, 0.440233966475], -[0.01790319916459, 0.4402500872334], -[0.02238102221627, 0.4402707689753], -[0.02686019218031, 0.4402959781387], -[0.03134097652311, 0.4403256738677], -[0.035823641681, 0.4403598081089], -[0.04030845290085, 0.4403983257249], -[0.04479567408622, 0.4404411646222], -[0.04928556764948, 0.4404882558949], -[0.05377839437071, 0.440539523981], -[0.05827441326361, 0.4405948868331], -[0.06277388144913, 0.4406542560996], -[0.067277054037, 0.4407175373178], -[0.07178418401549, 0.4407846301163], -[0.0762955221498, 0.4408554284269], -[0.08081131688894, 0.4409298207038], -[0.08533181428154, 0.4410076901493], -[0.08985725790039, 0.4410889149456], -[0.09438788877573, 0.4411733684908], -[0.09892394533727, 0.4412609196387], -[0.1034656633647, 0.4413514329409], -[0.1080132759467, 0.4414447688906], -[0.1125670134477, 0.4415407841673], -[0.1171271034829, 0.4416393318804], -[0.1216937709004, 0.4417402618133], -[0.1262672377709, 0.4418434206646], -[0.1308477233835, 0.4419486522869], -[0.1354354442486, 0.4420557979236], -[0.1400306141061, 0.4421646964406], -[0.1446334439393, 0.4422751845551], -[0.1492441419943, 0.4423870970591], -[0.153862913803, 0.4425002670382], -[0.1584899622112, 0.4426145260853], -[0.1631254874095, 0.4427297045083], -[0.167769434149, 0.4428451150182], -[-0.1650906343922, 0.4474851508501], -[-0.160458970669, 0.4473627091669], -[-0.1558359303463, 0.4472406303045], -[-0.1512213864919, 0.4471196974783], -[-0.146615135942, 0.4470000842207], -[-0.1420169727713, 0.4468819627101], -[-0.1374266882589, 0.4467655035538], -[-0.132844070859, 0.446650875564], -[-0.1282689061745, 0.4465382455291], -[-0.1237009769373, 0.4464277779789], -[-0.1191400629931, 0.4463196349456], -[-0.1145859412925, 0.4462139757198], -[-0.1100383858886, 0.446110956603], -[-0.1054971679414, 0.4460107306566], -[-0.1009620557296, 0.4459134474488], -[-0.09643281467053, 0.4458192527993], -[-0.09190920734751, 0.4457282885232], -[-0.08739099354626, 0.4456406921748], -[-0.08287793029993, 0.4455565967925], -[-0.07836977194312, 0.445476130645], -[-0.07386627017519, 0.4453994169812], -[-0.06936717413294, 0.445326573783], -[-0.06487223047267, 0.4452577135245], -[-0.06038118346181, 0.4451929429367], -[-0.05589377507986, 0.4451323627791], -[-0.05140974512861, 0.4450760676212], -[-0.04692883135148, 0.4450241456328], -[-0.04245076956159, 0.4449766783851], -[-0.03797529377824, 0.4449337406645], -[-0.03350213637143, 0.4448954002989], -[-0.02903102821384, 0.4448617179983], -[-0.02456169883972, 0.4448327472106], -[-0.02009387661004, 0.4448085339928], -[-0.01562728888324, 0.4447891169], -[-0.01116166219074, 0.4447745268907], -[-0.00669672241654, 0.4447647872511], -[-0.002232194979855, 0.4447599135374], -[0.002232194979854, 0.4447599135374], -[0.00669672241654, 0.4447647872511], -[0.01116166219074, 0.4447745268907], -[0.01562728888324, 0.4447891169], -[0.02009387661004, 0.4448085339928], -[0.02456169883972, 0.4448327472106], -[0.02903102821384, 0.4448617179983], -[0.03350213637143, 0.4448954002989], -[0.03797529377824, 0.4449337406645], -[0.04245076956159, 0.4449766783851], -[0.04692883135148, 0.4450241456328], -[0.05140974512861, 0.4450760676212], -[0.05589377507986, 0.4451323627791], -[0.06038118346181, 0.4451929429367], -[0.06487223047267, 0.4452577135245], -[0.06936717413294, 0.445326573783], -[0.07386627017519, 0.4453994169812], -[0.07836977194312, 0.445476130645], -[0.08287793029993, 0.4455565967925], -[0.08739099354626, 0.4456406921748], -[0.09190920734751, 0.4457282885232], -[0.09643281467053, 0.4458192527993], -[0.1009620557296, 0.4459134474488], -[0.1054971679414, 0.4460107306566], -[0.1100383858886, 0.446110956603], -[0.1145859412925, 0.4462139757198], -[0.1191400629931, 0.4463196349456], -[0.1237009769373, 0.4464277779789], -[0.1282689061745, 0.4465382455291], -[0.132844070859, 0.446650875564], -[0.1374266882589, 0.4467655035538], -[0.1420169727713, 0.4468819627101], -[0.146615135942, 0.4470000842207], -[0.1512213864919, 0.4471196974783], -[0.1558359303463, 0.4472406303045], -[0.160458970669, 0.4473627091669], -[0.1650906343959, 0.4474851508521], -[-0.1624172627934, 0.4521157348518], -[-0.1577981192787, 0.4519862419812], -[-0.1531877320924, 0.4518573169896], -[-0.1485858609515, 0.4517297698281], -[-0.1439922996556, 0.4516037780067], -[-0.1394068391289, 0.4514795176094], -[-0.1348292673839, 0.4513571630663], -[-0.1302593694888, 0.4512368869196], -[-0.1256969275403, 0.4511188595832], -[-0.1211417206414, 0.4510032490968], -[-0.1165935248859, 0.4508902208748], -[-0.1120521133488, 0.4507799374503], -[-0.1075172560844, 0.4506725582153], -[-0.1029887201312, 0.450568239157], -[-0.09846626952566, 0.4504671325921], -[-0.09394966532391, 0.4503693868992], -[-0.08943866563228, 0.4502751462492], -[-0.08493302564727, 0.4501845503378], -[-0.080432497705, 0.450097734117], -[-0.07593683134037, 0.4500148275302], -[-0.07144577335623, 0.4499359552499], -[-0.06695906790274, 0.4498612364203], -[-0.06247645656675, 0.4497907844054], -[-0.05799767847152, 0.4497247065439], -[-0.05352247038637, 0.4496631039131], -[-0.04905056684633, 0.4496060711011], -[-0.04458170028142, 0.4495536959907], -[-0.0401156011552, 0.4495060595551], -[-0.03565199811228, 0.4494632356663], -[-0.0311906181342, 0.4494252909184], -[-0.02673118670315, 0.4493922844659], -[-0.02227342797282, 0.4493642678787], -[-0.0178170649457, 0.4493412850143], -[-0.01336181965604, 0.4493233719082], -[-0.008907413357613, 0.4493105566831], -[-0.004453566715361, 0.449302859478], -[3.503136032149e-16, 0.449300292397], -[0.004453566715361, 0.449302859478], -[0.008907413357613, 0.4493105566831], -[0.01336181965604, 0.4493233719082], -[0.0178170649457, 0.4493412850143], -[0.02227342797282, 0.4493642678787], -[0.02673118670315, 0.4493922844659], -[0.0311906181342, 0.4494252909184], -[0.03565199811228, 0.4494632356663], -[0.0401156011552, 0.4495060595551], -[0.04458170028142, 0.4495536959907], -[0.04905056684633, 0.449606071101], -[0.05352247038637, 0.4496631039131], -[0.05799767847152, 0.4497247065439], -[0.06247645656675, 0.4497907844054], -[0.06695906790274, 0.4498612364203], -[0.07144577335623, 0.4499359552499], -[0.07593683134037, 0.4500148275302], -[0.080432497705, 0.450097734117], -[0.08493302564727, 0.4501845503378], -[0.08943866563228, 0.4502751462492], -[0.09394966532391, 0.4503693868992], -[0.09846626952566, 0.4504671325921], -[0.1029887201312, 0.450568239157], -[0.1075172560844, 0.4506725582153], -[0.1120521133488, 0.4507799374503], -[0.1165935248859, 0.4508902208748], -[0.1211417206414, 0.4510032490968], -[0.1256969275403, 0.4511188595832], -[0.1302593694888, 0.4512368869196], -[0.1348292673839, 0.4513571630663], -[0.1394068391289, 0.4514795176094], -[0.1439922996556, 0.4516037780067], -[0.1485858609515, 0.4517297698281], -[0.1531877320924, 0.4518573169896], -[0.1577981192787, 0.4519862419812], -[0.1624172627928, 0.4521157348514], -[-0.1597490570802, 0.4567367447458], -[-0.1551430610003, 0.4566000874111], -[-0.1505454977518, 0.4564643722526], -[-0.1459564700916, 0.4563302720387], -[-0.1413757687143, 0.4561979684015], -[-0.1368031813177, 0.4560676414709], -[-0.1322384925637, 0.4559394696366], -[-0.1276814840427, 0.4558136293019], -[-0.1231319342452, 0.455690294632], -[-0.1185896185376, 0.4555696372954], -[-0.1140543091458, 0.4554518261999], -[-0.1095257751457, 0.4553370272243], -[-0.1050037824612, 0.4552254029444], -[-0.1004880938707, 0.4551171123569], -[-0.09597846902212, 0.4550123105994], -[-0.09147466445759, 0.4549111486693], -[-0.08697643364702, 0.4548137731416], -[-0.08248352703237, 0.4547203258864], -[-0.0779956920819, 0.4546309437893], -[-0.07351267335516, 0.4545457584722], -[-0.06903421257869, 0.4544648960199], -[-0.0645600487327, 0.4543884767104], -[-0.06008991814865, 0.4543166147523], -[-0.0556235546178, 0.45424941803], -[-0.05116068951057, 0.4541869878574], -[-0.04670105190638, 0.4541294187429], -[-0.04224436873389, 0.4540767981661], -[-0.03779036492108, 0.4540292063669], -[-0.03333876355463, 0.4539867161504], -[-0.02888928604826, 0.453949392706], -[-0.0244416523191, 0.453917293445], -[-0.01999558097152, 0.4538904678545], -[-0.01555078948749, 0.4538689573711], -[-0.01110699442273, 0.4538527952745], -[-0.006663911607446, 0.4538420066004], -[-0.002221256350977, 0.4538366080761], -[0.002221256350978, 0.4538366080761], -[0.006663911607446, 0.4538420066004], -[0.01110699442273, 0.4538527952745], -[0.01555078948749, 0.4538689573711], -[0.01999558097152, 0.4538904678545], -[0.0244416523191, 0.453917293445], -[0.02888928604826, 0.453949392706], -[0.03333876355463, 0.4539867161504], -[0.03779036492108, 0.4540292063669], -[0.04224436873389, 0.4540767981661], -[0.04670105190637, 0.4541294187429], -[0.05116068951057, 0.4541869878574], -[0.0556235546178, 0.45424941803], -[0.06008991814865, 0.4543166147523], -[0.0645600487327, 0.4543884767104], -[0.06903421257869, 0.4544648960199], -[0.07351267335516, 0.4545457584722], -[0.0779956920819, 0.4546309437893], -[0.08248352703237, 0.4547203258864], -[0.08697643364702, 0.4548137731416], -[0.09147466445759, 0.4549111486693], -[0.09597846902212, 0.4550123105994], -[0.1004880938707, 0.4551171123569], -[0.1050037824612, 0.4552254029444], -[0.1095257751457, 0.4553370272243], -[0.1140543091458, 0.4554518261999], -[0.1185896185376, 0.4555696372954], -[0.1231319342452, 0.455690294632], -[0.1276814840427, 0.4558136293019], -[0.1322384925637, 0.4559394696366], -[0.1368031813177, 0.4560676414709], -[0.1413757687143, 0.4561979684015], -[0.1459564700916, 0.4563302720387], -[0.1505454977518, 0.4564643722526], -[0.1551430610003, 0.4566000874111], -[0.1597490570947, 0.4567367447546], -[-0.1570870570116, 0.4613475901023], -[-0.15249392554, 0.4612040268265], -[-0.1479093597213, 0.461061579149], -[-0.1433333490692, 0.4609209890486], -[-0.1387656810997, 0.4607824424303], -[-0.1342061402028, 0.4606461236181], -[-0.1296545075993, 0.4605122151041], -[-0.1251105613036, 0.4603808972908], -[-0.1205740760923, 0.4602523482258], -[-0.1160448234795, 0.4601267433306], -[-0.1115225716989, 0.4600042551227], -[-0.1070070856944, 0.4598850529334], -[-0.1024981271189, 0.4597693026194], -[-0.09799545434137, 0.4596571662727], -[-0.09349882246504, 0.4595488019256], -[-0.08900798335396, 0.4594443632555], -[-0.08452268567112, 0.4593439992878], -[-0.08004267492702, 0.4592478541004], -[-0.07556769353954, 0.4591560665282], -[-0.07109748090532, 0.4590687698724], -[-0.06663177348275, 0.458986091613], -[-0.06217030488683, 0.4589081531271], -[-0.05771280599576, 0.4588350694153], -[-0.05325900506928, 0.4587669488353], -[-0.04880862787858, 0.4587038928475], -[-0.04436139784756, 0.4586459957702], -[-0.03991703620492, 0.4585933445501], -[-0.03547526214676, 0.4585460185452], -[-0.03103579300911, 0.4585040893253], -[-0.02659834444965, 0.4584676204888], -[-0.02216263063783, 0.458436667498], -[-0.01772836445275, 0.4584112775344], -[-0.01329525768758, 0.4583914893739], -[-0.008863021259789, 0.458377333284], -[-0.004431365425939, 0.4583688309424], -[0, 0.4583659953795], -[0.004431365425939, 0.4583688309424], -[0.008863021259789, 0.458377333284], -[0.01329525768758, 0.4583914893739], -[0.01772836445275, 0.4584112775344], -[0.02216263063783, 0.458436667498], -[0.02659834444965, 0.4584676204888], -[0.03103579300911, 0.4585040893253], -[0.03547526214676, 0.4585460185452], -[0.03991703620492, 0.4585933445501], -[0.04436139784756, 0.4586459957702], -[0.04880862787858, 0.4587038928475], -[0.05325900506928, 0.4587669488353], -[0.05771280599576, 0.4588350694153], -[0.06217030488683, 0.4589081531271], -[0.06663177348275, 0.458986091613], -[0.07109748090532, 0.4590687698724], -[0.07556769353954, 0.4591560665282], -[0.08004267492702, 0.4592478541004], -[0.08452268567112, 0.4593439992878], -[0.08900798335396, 0.4594443632555], -[0.09349882246504, 0.4595488019256], -[0.09799545434137, 0.4596571662727], -[0.1024981271189, 0.4597693026194], -[0.1070070856944, 0.4598850529334], -[0.1115225716989, 0.4600042551227], -[0.1160448234795, 0.4601267433306], -[0.1205740760923, 0.4602523482258], -[0.1251105613036, 0.4603808972908], -[0.1296545075993, 0.4605122151041], -[0.1342061402028, 0.4606461236181], -[0.1387656810997, 0.4607824424303], -[0.1433333490692, 0.4609209890486], -[0.1479093597213, 0.461061579149], -[0.15249392554, 0.4612040268265], -[0.1570870570214, 0.4613475901085], -[-0.1544309129097, 0.4659482771975], -[-0.1498508446387, 0.4657978383663], -[-0.1452794525897, 0.4656487175399], -[-0.1407166353938, 0.4655017026479], -[-0.1361621773097, 0.4653569840281], -[-0.1316158593311, 0.4652147503533], -[-0.1270774591412, 0.4650751883686], -[-0.122546751072, 0.4649384826198], -[-0.1180235060712, 0.4648048151748], -[-0.113507491676, 0.4646743653379], -[-0.1089984719944, 0.4645473093576], -[-0.1044962076959, 0.4644238201284], -[-0.1000004560107, 0.4643040668888], -[-0.09551097073904, 0.464188214914], -[-0.0910275022712, 0.4640764252066], -[-0.08654979761785, 0.4639688541854], -[-0.08207760045225, 0.4638656533728], -[-0.07761065116418, 0.463766969084], -[-0.07314868692593, 0.4636729421176], -[-0.06869144177088, 0.4635837074493], -[-0.06423864668464, 0.4634993939317], -[-0.05979002970887, 0.4634201239992], -[-0.0553453160579, 0.4633460133824], -[-0.05090422824791, 0.463277170831], -[-0.04646648623845, 0.4632136978491], -[-0.04203180758612, 0.4631556884423], -[-0.03759990760976, 0.4631032288804], -[-0.03317049956676, 0.4630563974753], -[-0.0287432948398, 0.4630152643768], -[-0.02431800313313, 0.4629798913873], -[-0.0198943326777, 0.4629503317965], -[-0.01547199044407, 0.4629266302372], -[-0.0110506823621, 0.4629088225642], -[-0.006630113546199, 0.4628969357555], -[-0.002209988525111, 0.4628909878382], -[0.002209988525111, 0.4628909878382], -[0.006630113546199, 0.4628969357555], -[0.0110506823621, 0.4629088225642], -[0.01547199044408, 0.4629266302372], -[0.0198943326777, 0.4629503317965], -[0.02431800313313, 0.4629798913873], -[0.0287432948398, 0.4630152643768], -[0.03317049956676, 0.4630563974753], -[0.03759990760976, 0.4631032288804], -[0.04203180758612, 0.4631556884423], -[0.04646648623845, 0.4632136978491], -[0.05090422824791, 0.463277170831], -[0.0553453160579, 0.4633460133824], -[0.05979002970887, 0.4634201239992], -[0.06423864668464, 0.4634993939317], -[0.06869144177088, 0.4635837074493], -[0.07314868692593, 0.4636729421176], -[0.07761065116418, 0.463766969084], -[0.08207760045225, 0.4638656533728], -[0.08654979761785, 0.4639688541854], -[0.0910275022712, 0.4640764252066], -[0.09551097073904, 0.464188214914], -[0.1000004560107, 0.4643040668888], -[0.1044962076959, 0.4644238201284], -[0.1089984719944, 0.4645473093576], -[0.113507491676, 0.4646743653379], -[0.1180235060712, 0.4648048151748], -[0.122546751072, 0.4649384826198], -[0.1270774591412, 0.4650751883686], -[0.1316158593311, 0.4652147503533], -[0.1361621773097, 0.4653569840281], -[0.1407166353938, 0.4655017026479], -[0.1452794525897, 0.4656487175399], -[0.1498508446387, 0.4657978383663], -[0.1544309129157, 0.4659482772014], -[-0.1517807595535, 0.4705385744713], -[-0.1472139521666, 0.4703812967911], -[-0.1426559132419, 0.4702255639463], -[-0.1381064690407, 0.4700721913373], -[-0.1335654004795, 0.4699213739018], -[-0.1290324850617, 0.469773304825], -[-0.1245074968281, 0.4696281752627], -[-0.1199902063145, 0.4694861740559], -[-0.1154803805156, 0.4693474874368], -[-0.1109777828577, 0.4692122987287], -[-0.1064821731799, 0.4690807880369], -[-0.1019933077237, 0.4689531319355], -[-0.0975109391345, 0.468829503148], -[-0.09303481647219, 0.4687100702242], -[-0.08856468523399, 0.4685949972138], -[-0.08410028738891, 0.4684844433381], -[-0.07964136142477, 0.4683785626623], -[-0.07518764240789, 0.4682775037671], -[-0.07073886205622, 0.4681814094239], -[-0.06629474882581, 0.468090416274], -[-0.06185502801098, 0.4680046545128], -[-0.05741942185825, 0.4679242475822], -[-0.05298764969392, 0.4678493118715], -[-0.04855942806523, 0.4677799564292], -[-0.04413447089473, 0.4677162826881], -[-0.03971248964753, 0.4676583842039], -[-0.03529319351091, 0.46760634641], -[-0.03087628958554, 0.4675602463909], -[-0.02646148308769, 0.4675201526733], -[-0.02204847756147, 0.4674861250396], -[-0.01763697510004, 0.467458214362], -[-0.01322667657491, 0.4674364624607], -[-0.008817281871872, 0.4674209019864], -[-0.004408490132525, 0.4674115563277], -[0, 0.4674084395444], -[0.004408490132524, 0.4674115563277], -[0.008817281871872, 0.4674209019864], -[0.01322667657491, 0.4674364624607], -[0.01763697510004, 0.467458214362], -[0.02204847756147, 0.4674861250396], -[0.02646148308769, 0.4675201526733], -[0.03087628958554, 0.4675602463909], -[0.03529319351091, 0.46760634641], -[0.03971248964753, 0.4676583842039], -[0.04413447089473, 0.4677162826881], -[0.04855942806523, 0.4677799564292], -[0.05298764969392, 0.4678493118715], -[0.05741942185825, 0.4679242475822], -[0.06185502801098, 0.4680046545128], -[0.06629474882581, 0.468090416274], -[0.07073886205622, 0.4681814094239], -[0.07518764240789, 0.4682775037671], -[0.07964136142477, 0.4683785626623], -[0.08410028738891, 0.4684844433381], -[0.08856468523399, 0.4685949972138], -[0.09303481647219, 0.4687100702242], -[0.0975109391345, 0.468829503148], -[0.1019933077237, 0.4689531319355], -[0.1064821731799, 0.4690807880369], -[0.1109777828577, 0.4692122987287], -[0.1154803805156, 0.4693474874368], -[0.1199902063145, 0.4694861740559], -[0.1245074968281, 0.4696281752628], -[0.1290324850617, 0.469773304825], -[0.1335654004795, 0.4699213739018], -[0.1381064690407, 0.4700721913373], -[0.1426559132419, 0.4702255639463], -[0.1472139521666, 0.4703812967911], -[0.1517807595564, 0.4705385744732], -[-0.149136721343, 0.4751188746905], -[-0.1445833842239, 0.4749541733263], -[-0.1400388809675, 0.4747918913961], -[-0.1355029925689, 0.4746322301775], -[-0.1309754965108, 0.474475389385], -[-0.1264561667041, 0.4743215668879], -[-0.1219447734354, 0.4741709584188], -[-0.1174410833211, 0.4740237572731], -[-0.1129448592698, 0.4738801539993], -[-0.108455860453, 0.4737403360813], -[-0.1039738422861, 0.4736044876135], -[-0.09949855641844, 0.4734727889699], -[-0.09502975073575, 0.4733454164665], -[-0.09056716937331, 0.473222542021], -[-0.08611055274201, 0.4731043328083], -[-0.08165963756727, 0.4729909509145], -[-0.07721415694148, 0.4728825529908], -[-0.0727738403905, 0.4727792899089], -[-0.06833841395448, 0.4726813064188], -[-0.06390760028325, 0.4725887408115], -[-0.05948111874664, 0.4725017245888], -[-0.05505868555946, 0.4724203821404], -[-0.0506400139214, 0.4723448304323], -[-0.04622481417108, 0.4722751787059], -[-0.04181279395513, 0.472211528194], -[-0.03740365840983, 0.472153971849], -[-0.03299711035671, 0.4721025940916], -[-0.0285928505101, 0.4720574705785], -[-0.02419057769619, 0.4720186679904], -[-0.0197899890825, 0.471986243844], -[-0.01539078041666, 0.4719602463271], -[-0.01099264627321, 0.4719407141596], -[-0.006595280307196, 0.4719276764814], -[-0.002198375512986, 0.4719211527666], -[0.002198375512986, 0.4719211527666], -[0.006595280307196, 0.4719276764814], -[0.01099264627321, 0.4719407141596], -[0.01539078041666, 0.4719602463271], -[0.0197899890825, 0.471986243844], -[0.02419057769619, 0.4720186679904], -[0.0285928505101, 0.4720574705785], -[0.03299711035671, 0.4721025940916], -[0.03740365840983, 0.472153971849], -[0.04181279395513, 0.472211528194], -[0.04622481417108, 0.4722751787059], -[0.05064001392113, 0.4723448304315], -[0.05505868555946, 0.4724203821404], -[0.05948111874664, 0.4725017245888], -[0.06390760028325, 0.4725887408115], -[0.06833841395448, 0.4726813064188], -[0.0727738403905, 0.4727792899089], -[0.07721415694148, 0.4728825529908], -[0.08165963756727, 0.4729909509145], -[0.08611055274201, 0.4731043328083], -[0.09056716937331, 0.473222542021], -[0.09502975073575, 0.4733454164665], -[0.09949855641844, 0.4734727889699], -[0.1039738422861, 0.4736044876135], -[0.108455860453, 0.4737403360813], -[0.1129448592698, 0.4738801539993], -[0.1174410833211, 0.4740237572731], -[0.1219447734354, 0.4741709584188], -[0.1264561667041, 0.4743215668879], -[0.1309754965108, 0.474475389385], -[0.1355029925689, 0.4746322301775], -[0.1400388809675, 0.4747918913961], -[0.1445833842239, 0.4749541733263], -[0.149136721343, 0.4751188746905], -[-0.1464989186258, 0.4796876830171], -[-0.1419592792463, 0.4795162354978], -[-0.1374284975776, 0.4793474692616], -[-0.1329063512478, 0.4791815906314], -[-0.1283926142071, 0.4790188042843], -[-0.1238870566645, 0.4788593129549], -[-0.1193894450313, 0.4787033171278], -[-0.1148995418725, 0.4785510147203], -[-0.1104171058666, 0.4784026007558], -[-0.1059418917757, 0.4782582670282], -[-0.1014736504251, 0.4781182017589], -[-0.09701212869488, 0.4779825892465], -[-0.09255706952344, 0.4778516095114], -[-0.08810821192342, 0.4777254379351], -[-0.08366529101167, 0.4776042448969], -[-0.07922803805319, 0.477488195409], -[-0.07479618051988, 0.4773774487514], -[-0.07036944216445, 0.4772721581084], -[-0.06594754311001, 0.4771724702087], -[-0.06153019995547, 0.4770785249714], -[-0.05711712589701, 0.4769904551589], -[-0.0527080308655, 0.4769083860392], -[-0.04830262167977, 0.4768324350603], -[-0.04390060221561, 0.476762711538], -[-0.03950167358978, 0.4766993163591], -[-0.03510553435868, 0.4766423417026], -[-0.03071188073093, 0.476591870781], -[-0.02632040679278, 0.4765479776021], -[-0.02193080474558, 0.4765107267557], -[-0.01754276515402, 0.4764801732238], -[-0.01315597720378, 0.4764563622184], -[-0.008770128967409, 0.4764393290464], -[-0.004384907676668, 0.4764290990033], -[1.910801472081e-16, 0.4764256872975], -[0.004384907676668, 0.4764290990033], -[0.008770128967409, 0.4764393290464], -[0.01315597720378, 0.4764563622184], -[0.01754276515402, 0.4764801732238], -[0.02193080474558, 0.4765107267557], -[0.02632040679277, 0.4765479776021], -[0.03071188073093, 0.476591870781], -[0.03510553435868, 0.4766423417026], -[0.03950167358978, 0.4766993163591], -[0.04390060221561, 0.476762711538], -[0.04830262167977, 0.4768324350603], -[0.0527080308655, 0.4769083860392], -[0.05711712589701, 0.4769904551589], -[0.06153019995547, 0.4770785249714], -[0.06594754311001, 0.4771724702087], -[0.07036944216445, 0.4772721581084], -[0.07479618051988, 0.4773774487514], -[0.07922803805319, 0.477488195409], -[0.08366529101167, 0.4776042448969], -[0.08810821192342, 0.4777254379351], -[0.09255706952344, 0.4778516095114], -[0.09701212869489, 0.4779825892465], -[0.1014736504251, 0.4781182017589], -[0.1059418917757, 0.4782582670282], -[0.1104171058666, 0.4784026007558], -[0.1148995418725, 0.4785510147203], -[0.1193894450313, 0.4787033171278], -[0.1238870566645, 0.4788593129549], -[0.1283926142071, 0.4790188042843], -[0.1329063512478, 0.4791815906314], -[0.1374284975776, 0.4793474692616], -[0.1419592792463, 0.4795162354978], -[0.1464989186258, 0.4796876830171], -[-0.1438675307961, 0.4842453804325], -[-0.1393417781182, 0.4840672469568], -[-0.1348249075275, 0.4838920630885], -[-0.1303166931907, 0.4837200403967], -[-0.1258169054192, 0.4835513887176], -[-0.121325310602, 0.4833863158423], -[-0.1168416711447, 0.4832250271915], -[-0.1123657454181, 0.4830677254811], -[-0.1078972877164, 0.4829146103763], -[-0.1034360482248, 0.4827658781374], -[-0.09898177300004, 0.4826217212566], -[-0.09453420396221, 0.4824823280879], -[-0.09009307890018, 0.4823478824707], -[-0.0856581314911, 0.4822185633491], -[-0.08122909133453, 0.4820945443875], -[-0.07680568400221, 0.481975993585], -[-0.07238763110389, 0.4818630728903], -[-0.06797465036968, 0.4817559378181], -[-0.06356645574943, 0.4816547370709], -[-0.05916275752932, 0.4815596121657], -[-0.05476326246573, 0.4814706970703], -[-0.05036767393643, 0.48138811785], -[-0.0459756921089, 0.4813119923269], -[-0.0415870141253, 0.4812424297555], -[-0.03720133430373, 0.4811795305147], -[-0.03281834435496, 0.4811233858205], -[-0.02843773361382, 0.4810740774597], -[-0.02405918928421, 0.4810316775485], -[-0.01968239669657, 0.480996248316], -[-0.01530703957642, 0.4809678419154], -[-0.01093280032256, 0.4809465002646], -[-0.006559360293358, 0.4809322549167], -[-0.002186400099374, 0.4809251269619], -[0.002186400099374, 0.4809251269619], -[0.006559360293358, 0.4809322549167], -[0.01093280032256, 0.4809465002646], -[0.01530703957642, 0.4809678419154], -[0.01968239669658, 0.480996248316], -[0.02405918928421, 0.4810316775485], -[0.02843773361382, 0.4810740774597], -[0.03281834435496, 0.4811233858205], -[0.03720133430373, 0.4811795305147], -[0.0415870141253, 0.4812424297555], -[0.0459756921089, 0.4813119923269], -[0.05036767393643, 0.48138811785], -[0.05476326246573, 0.4814706970703], -[0.05916275752932, 0.4815596121657], -[0.06356645574943, 0.4816547370709], -[0.06797465036968, 0.4817559378181], -[0.07238763110389, 0.4818630728903], -[0.07680568400221, 0.481975993585], -[0.08122909133452, 0.4820945443875], -[0.0856581314911, 0.4822185633491], -[0.09009307890018, 0.4823478824707], -[0.0945342039622, 0.4824823280879], -[0.09898177300004, 0.4826217212566], -[0.1034360482248, 0.4827658781374], -[0.1078972877164, 0.4829146103764], -[0.1123657454181, 0.4830677254811], -[0.1168416711447, 0.4832250271915], -[0.121325310602, 0.4833863158423], -[0.1258169054192, 0.4835513887176], -[0.1303166931907, 0.4837200403967], -[0.1348249075275, 0.4838920630885], -[0.1393417781182, 0.4840672469568], -[0.1438675307961, 0.4842453804325], -[-0.1412426974909, 0.4887917246521], -[-0.1367310242912, 0.4886069672955], -[-0.1322282580473, 0.4884254344147], -[-0.127734169497, 0.4882473432295], -[-0.1232485251989, 0.4880729089433], -[-0.118771087594, 0.487902344605], -[-0.1143016149418, 0.4877358607665], -[-0.1098398612657, 0.4875736651278], -[-0.1053855763079, 0.4874159621717], -[-0.1009385054975, 0.4872629527887], -[-0.09649838992963, 0.4871148338926], -[-0.0920649663589, 0.4869717980283], -[-0.08763796720731, 0.4868340329738], -[-0.08321712058725, 0.4867017213365], -[-0.0788021503409, 0.4865750401471], -[-0.07439277609651, 0.4864541604518], -[-0.0699887133422, 0.4863392469052], -[-0.06558967351788, 0.4862304573661], -[-0.06119536412558, 0.4861279424981], -[-0.05680548885849, 0.4860318453776], -[-0.05241974774875, 0.4859423011119], -[-0.04803783733394, 0.4858594364688], -[-0.04365945084192, 0.4857833695217], -[-0.03928427839366, 0.4857142093112], -[-0.03491200722339, 0.4856520555264], -[-0.03054232191515, 0.485596998209], -[-0.02617490465494, 0.4855491174803], -[-0.021809435497, 0.4855084832962], -[-0.0174455926431, 0.4854751552291], -[-0.01308305273317, 0.4854491822813], -[-0.008721491145646, 0.4854306027294], -[-0.004360582305793, 0.485419444002], -[0, 0.4854157225917], -[0.004360582305793, 0.485419444002], -[0.008721491145646, 0.4854306027294], -[0.01308305273317, 0.4854491822813], -[0.0174455926431, 0.4854751552291], -[0.021809435497, 0.4855084832962], -[0.02617490465494, 0.4855491174803], -[0.03054232191515, 0.485596998209], -[0.03491200722339, 0.4856520555264], -[0.03928427839366, 0.4857142093112], -[0.04365945084192, 0.4857833695217], -[0.04803783733394, 0.4858594364688], -[0.05241974774875, 0.4859423011119], -[0.05680548885849, 0.4860318453776], -[0.06119536412558, 0.4861279424981], -[0.06558967351788, 0.4862304573661], -[0.0699887133422, 0.4863392469052], -[0.07439277609651, 0.4864541604518], -[0.07880215034089, 0.4865750401471], -[0.08321712058724, 0.4867017213365], -[0.0876379672073, 0.4868340329738], -[0.09206496635891, 0.4869717980283], -[0.09649838992963, 0.4871148338926], -[0.1009385054975, 0.4872629527887], -[0.1053855763079, 0.4874159621717], -[0.1098398612657, 0.4875736651278], -[0.1143016149418, 0.4877358607665], -[0.118771087594, 0.487902344605], -[0.1232485251989, 0.4880729089433], -[0.127734169497, 0.4882473432295], -[0.1322282580473, 0.4884254344147], -[0.1367310242912, 0.4886069672955], -[0.1412426976259, 0.4887917248447], -[-0.1386243102207, 0.4933259140092], -[-0.134127163911, 0.4931351518513], -[-0.1296386992803, 0.4929473405779], -[-0.1251589344036, 0.492763258757], -[-0.1206876319626, 0.4925831271787], -[-0.1162245503131, 0.4924071643635], -[-0.1117694434168, 0.4922355861994], -[-0.1073220607833, 0.4920686055666], -[-0.1028821474237, 0.4919064319506], -[-0.09844944381638, 0.4917492710442], -[-0.09402368588698, 0.4915973243401], -[-0.08960460500343, 0.4914507887158], -[-0.08519192798636, 0.4913098560107], -[-0.08078537713666, 0.4911747125991], -[-0.07638467028074, 0.4910455389601], -[-0.0719895208342, 0.4909225092455], -[-0.06759963788477, 0.49080579085], -[-0.06321472629489, 0.4906955439837], -[-0.05883448682441, 0.4905919212517], -[-0.05445861627351, 0.4904950672411], -[-0.05008680764603, 0.49040511812], -[-0.04571875033289, 0.4903222012499], -[-0.04135413031538, 0.4902464348147], -[-0.0369926303876, 0.4901779274693], -[-0.0326339303975, 0.4901167780097], -[-0.02827770750529, 0.4900630750683], -[-0.02392363645815, 0.490016896835], -[-0.01957138987997, 0.4899783108094], -[-0.01522063857424, 0.4899473735822], -[-0.01087105183871, 0.4899241306518], -[-0.006522297789655, 0.4899086162744], -[-0.002174043693854, 0.4899008533509], -[0.002174043693854, 0.4899008533509], -[0.006522297789655, 0.4899086162744], -[0.01087105183871, 0.4899241306518], -[0.01522063857424, 0.4899473735822], -[0.01957138987997, 0.4899783108094], -[0.02392363645815, 0.490016896835], -[0.02827770750529, 0.4900630750683], -[0.0326339303975, 0.4901167780097], -[0.0369926303876, 0.4901779274693], -[0.04135413031538, 0.4902464348147], -[0.04571875033289, 0.4903222012499], -[0.05008680764603, 0.49040511812], -[0.05445861627351, 0.4904950672411], -[0.05883448682441, 0.4905919212517], -[0.06321472629489, 0.4906955439837], -[0.06759963788477, 0.49080579085], -[0.07198952083419, 0.4909225092455], -[0.07638467028074, 0.4910455389601], -[0.08078537713667, 0.4911747125991], -[0.08519192798636, 0.4913098560107], -[0.08960460500343, 0.4914507887158], -[0.09402368588698, 0.4915973243401], -[0.09844944381638, 0.4917492710442], -[0.1028821474237, 0.4919064319506], -[0.1073220607833, 0.4920686055666], -[0.1117694434168, 0.4922355861994], -[0.1162245503131, 0.4924071643635], -[0.1206876319626, 0.4925831271787], -[0.1251589344036, 0.492763258757], -[0.1296386992803, 0.4929473405779], -[0.134127163911, 0.4931351518513], -[0.1386243121472, 0.4933259156208], -[-0.1360128908714, 0.4978488999987], -[-0.1315303459513, 0.4976515514991], -[-0.1270563844308, 0.4974575345124], -[-0.1225911454455, 0.4972675422793], -[-0.1181343876663, 0.4970818014092], -[-0.1136858652154, 0.4969005361199], -[-0.1092453275928, 0.4967239678527], -[-0.1048125196157, 0.4965523148752], -[-0.1003871813692, 0.4963857918699], -[-0.09596904817166, 0.4962246095127], -[-0.09155785055513, 0.4960689740406], -[-0.08715331426182, 0.4959190868101], -[-0.08275516025832, 0.4957751438497], -[-0.07836310476808, 0.4956373354066], -[-0.07397685932341, 0.4955058454899], -[-0.06959613083769, 0.4953808514144], -[-0.06522062169854, 0.4952625233441], -[-0.06085002988245, 0.4951510238422], -[-0.05648404909134, 0.495046507426], -[-0.05212236891104, 0.4949491201333], -[-0.04776467499189, 0.4948589991002], -[-0.04341064925109, 0.494776272156], -[-0.03905997009632, 0.4947010574358], -[-0.03471231267004, 0.4946334630152], -[-0.03036734911339, 0.4945735865693], -[-0.02602474884871, 0.4945215150599], -[-0.02168417887905, 0.4944773244515], -[-0.01734530410339, 0.4944410794605], -[-0.01300778764535, 0.4944128333392], -[-0.008671291193802, 0.4943926276955], -[-0.004335475353004, 0.4943804923516], -[0, 0.494376445242], -[0.004335475353004, 0.4943804923516], -[0.008671291193802, 0.4943926276955], -[0.01300778764535, 0.4944128333392], -[0.01734530410339, 0.4944410794605], -[0.02168417887905, 0.4944773244515], -[0.02602474884871, 0.4945215150599], -[0.03036734911339, 0.4945735865693], -[0.03471231267004, 0.4946334630152], -[0.03905997009632, 0.4947010574358], -[0.04341064925109, 0.494776272156], -[0.04776467499189, 0.4948589991002], -[0.05212236891104, 0.4949491201333], -[0.05648404909134, 0.495046507426], -[0.06085002988246, 0.4951510238422], -[0.06522062169854, 0.4952625233441], -[0.06959613083769, 0.4953808514144], -[0.07397685932341, 0.4955058454899], -[0.07836310476808, 0.4956373354066], -[0.08275516025832, 0.4957751438497], -[0.08715331426182, 0.4959190868101], -[0.09155785055513, 0.4960689740406], -[0.09596904817166, 0.4962246095127], -[0.1003871813692, 0.4963857918699], -[0.1048125196157, 0.4965523148752], -[0.1092453275928, 0.4967239678527], -[0.1136858652154, 0.4969005361199], -[0.1181343876663, 0.4970818014092], -[0.1225911454455, 0.4972675422793], -[0.1270563844308, 0.4974575345124], -[0.1315303459513, 0.4976515514991], -[0.1360128908897, 0.497848900013], -[-0.1334088151943, 0.5023595474696], -[-0.128940722357, 0.5021559124311], -[-0.1244814699211, 0.5019557645332], -[-0.1200309636272, 0.5017599445593], -[-0.1155889579914, 0.501568685185], -[-0.1111552027412, 0.5013822165644], -[-0.1067294427385, 0.5012007659222], -[-0.1023114179141, 0.5010245571315], -[-0.09790086321758, 0.5008538102773], -[-0.0934975085809, 0.5006887412087], -[-0.08910107890005, 0.5005295610793], -[-0.08471129403384, 0.5003764758781], -[-0.08032786882207, 0.5002296859542], -[-0.07595051312392, 0.500089385535], -[-0.07157893187773, 0.4999557622425], -[-0.0672128251828, 0.499828996608], -[-0.0628518884042, 0.4997092615904], -[-0.05849581230102, 0.4995967220989], -[-0.05414428317839, 0.4994915345241], -[-0.04979698306348, 0.4993938462808], -[-0.0454535899053, 0.4993037953648], -[-0.04111377779814, 0.4992215099285], -[-0.03677721722777, 0.499147107877], -[-0.03244357533981, 0.4990806964886], -[-0.02811251622905, 0.4990223720634], -[-0.0237837012483, 0.4989722196019], -[-0.01945678933518, 0.4989303125171], -[-0.01513143735509, 0.4988967123829], -[-0.01080730045812, 0.4988714687202], -[-0.006484032447668, 0.4988546188237], -[-0.002161286158513, 0.4988461876301], -[0.002161286158512, 0.4988461876301], -[0.006484032447668, 0.4988546188237], -[0.01080730045812, 0.4988714687202], -[0.01513143735509, 0.4988967123829], -[0.01945678933518, 0.4989303125171], -[0.0237837012483, 0.4989722196019], -[0.02811251622906, 0.4990223720634], -[0.03244357533981, 0.4990806964886], -[0.03677721722777, 0.499147107877], -[0.04111377779814, 0.4992215099285], -[0.04545358990531, 0.4993037953648], -[0.04979698306348, 0.4993938462808], -[0.05414428317839, 0.4994915345241], -[0.05849581230102, 0.4995967220989], -[0.0628518884042, 0.4997092615904], -[0.0672128251828, 0.499828996608], -[0.07157893187773, 0.4999557622425], -[0.07595051312393, 0.500089385535], -[0.08032786882207, 0.5002296859542], -[0.08471129403384, 0.5003764758781], -[0.08910107890005, 0.5005295610793], -[0.0934975085809, 0.5006887412087], -[0.09790086321758, 0.5008538102773], -[0.1023114179141, 0.5010245571315], -[0.1067294427385, 0.5012007659222], -[0.1111552027412, 0.5013822165644], -[0.1155889579914, 0.501568685185], -[0.1200309636272, 0.5017599445593], -[0.1244814699211, 0.5019557645332], -[0.128940722357, 0.5021559124311], -[0.1334088152021, 0.5023595474758], -[-0.1308117937451, 0.5068579179513], -[-0.1263584481957, 0.5066479759227], -[-0.1219141155584, 0.5064417741062], -[-0.1174785536059, 0.5062402115995], -[-0.1130515125433, 0.5060435274061], -[-0.1086327375302, 0.5058519578698], -[-0.1042219685985, 0.5056657362421], -[-0.09981894058375, 0.5054850922327], -[-0.09542338307265, 0.5053102515459], -[-0.09103502036637, 0.5051414354036], -[-0.08665357146296, 0.5049788600566], -[-0.08227875005922, 0.5048227362861], -[-0.07791026457367, 0.5046732688973], -[-0.07354781819169, 0.5045306562078], -[-0.06919110893414, 0.5043950895334], -[-0.06483982975025, 0.5042667526735], -[-0.06049366863547, 0.5041458214004], -[-0.05615230877509, 0.504032462954], -[-0.05181542871369, 0.503926835547], -[-0.04748270255065, 0.5038290878826], -[-0.04315380016155, 0.5037393586897], -[-0.03882838744489, 0.503657776278], -[-0.0345061265935, 0.5035844581171], -[-0.03018667638954, 0.5035195104433], -[-0.02586969252178, 0.5034630278969], -[-0.02155482792348, 0.5034150931941], -[-0.01724173312908, 0.5033757768361], -[-0.01293005664743, 0.5033451368571], -[-0.008619445349328, 0.5033232186156], -[-0.004309544866576, 0.50331005463], -[-1.592334560068e-16, 0.5033056644589], -[0.004309544866576, 0.50331005463], -[0.008619445349328, 0.5033232186156], -[0.01293005664743, 0.5033451368571], -[0.01724173312907, 0.5033757768361], -[0.02155482792348, 0.5034150931941], -[0.02586969252178, 0.5034630278969], -[0.03018667638954, 0.5035195104433], -[0.0345061265935, 0.5035844581171], -[0.03882838744489, 0.503657776278], -[0.04315380016155, 0.5037393586897], -[0.04748270255065, 0.5038290878826], -[0.05181542871369, 0.503926835547], -[0.05615230877509, 0.504032462954], -[0.06049366863547, 0.5041458214004], -[0.06483982975025, 0.5042667526735], -[0.06919110893414, 0.5043950895334], -[0.07354781819169, 0.5045306562078], -[0.07791026457367, 0.5046732688973], -[0.08227875005922, 0.5048227362861], -[0.08665357146296, 0.5049788600566], -[0.09103502036637, 0.5051414354036], -[0.09542338307265, 0.5053102515459], -[0.09981894058375, 0.5054850922327], -[0.1042219685985, 0.5056657362421], -[0.1086327375302, 0.5058519578698], -[0.1130515125433, 0.5060435274061], -[0.1174785536059, 0.5062402115995], -[0.1219141155584, 0.5064417741062], -[0.1263584481957, 0.5066479759227], -[0.1308117937462, 0.5068579179521], -[-0.1282220071659, 0.5113437120071], -[-0.1237836818201, 0.5111274780837], -[-0.1193544847137, 0.5109153016052], -[-0.1149340838868, 0.5107080844053], -[-0.1105222250646, 0.5105060720936], -[-0.1061186486509, 0.5103095074732], -[-0.1017230896404, 0.51011863008], -[-0.09733527754726, 0.509933675705], -[-0.0929549363494, 0.5097548759003], -[-0.08858178445248, 0.5095824574708], -[-0.08421553467341, 0.5094166419542], -[-0.07985589424576, 0.5092576450893], -[-0.07550256484843, 0.5091056762773], -[-0.07115524265865, 0.5089609380373], -[-0.06681361843073, 0.5088236254592], -[-0.06247737760143, 0.5086939256576], -[-0.05814620042278, 0.5085720172296], -[-0.05381976212287, 0.50845806972], -[-0.04949773309497, 0.5083522430982], -[-0.04517977911491, 0.5082546872507], -[-0.04086556158652, 0.508165541492], -[-0.03655473781439, 0.5080849340992], -[-0.03224696130326, 0.508012981874], -[-0.02794188208242, 0.507949789735], -[-0.02363914705392, 0.5078954503452], -[-0.0193384003624, 0.5078500437774], -[-0.01503928378444, 0.5078136372212], -[-0.01074143713494, 0.507786284734], -[-0.006444498687837, 0.5077680270383], -[-0.002148105608078, 0.5077588913688], -[0.002148105608078, 0.5077588913688], -[0.006444498687837, 0.5077680270383], -[0.01074143713494, 0.507786284734], -[0.01503928378444, 0.5078136372212], -[0.0193384003624, 0.5078500437774], -[0.02363914705392, 0.5078954503452], -[0.02794188208242, 0.507949789735], -[0.03224696130326, 0.508012981874], -[0.03655473781439, 0.5080849340992], -[0.04086556158652, 0.508165541492], -[0.04517977911491, 0.5082546872507], -[0.04949773309497, 0.5083522430982], -[0.05381976212287, 0.50845806972], -[0.05814620042278, 0.5085720172296], -[0.06247737760143, 0.5086939256576], -[0.06681361843073, 0.5088236254592], -[0.07115524265865, 0.5089609380373], -[0.07550256484843, 0.5091056762773], -[0.07985589424576, 0.5092576450893], -[0.08421553467341, 0.5094166419542], -[0.08858178445248, 0.5095824574708], -[0.0929549363494, 0.5097548759003], -[0.09733527754726, 0.509933675705], -[0.1017230896404, 0.51011863008], -[0.1061186486509, 0.5103095074732], -[0.1105222250646, 0.5105060720936], -[0.1149340838868, 0.5107080844053], -[0.1193544847137, 0.5109153016052], -[0.1237836818201, 0.5111274780837], -[0.1282220071628, 0.5113437120045], -[-0.1256392142422, 0.5158167026294], -[-0.1212165850404, 0.5155941495927], -[-0.116802744512, 0.5153760800514], -[-0.1123977270317, 0.5151632987326], -[-0.1080012736618, 0.5149560581478], -[-0.1036131198467, 0.5147546078454], -[-0.09923299531991, 0.5145591939198], -[-0.09486062402838, 0.5143700585021], -[-0.09049572407557, 0.5141874392337], -[-0.08613800768485, 0.5140115687241], -[-0.08178718118526, 0.5138426739958], -[-0.07744294502119, 0.5136809759179], -[-0.07310499378757, 0.5135266886314], -[-0.06877301629202, 0.5133800189693], -[-0.06444669564521, 0.5132411658742], -[-0.06012570938044, 0.5131103198174], -[-0.05580972960335, 0.5129876622237], -[-0.05149842317219, 0.5128733649048], -[-0.04719145190897, 0.5127675895062], -[-0.0428884728414, 0.512670486972], -[-0.03858913847521, 0.5125821970315], -[-0.03429309709598, 0.5125028477128], -[-0.02999999309944, 0.5124325548861], -[-0.02570946734868, 0.5123714218429], -[-0.02142115755633, 0.5123195389139], -[-0.01713469868956, 0.5122769831291], -[-0.01284972339524, 0.5122438179248], -[-0.008565862442436, 0.5122200928985], -[-0.004282745179182, 0.5122058436169], -[0, 0.5122010914759], -[0.004282745179182, 0.5122058436169], -[0.008565862442436, 0.5122200928985], -[0.01284972339524, 0.5122438179248], -[0.01713469868956, 0.5122769831291], -[0.02142115755633, 0.5123195389139], -[0.02570946734868, 0.5123714218429], -[0.02999999309944, 0.5124325548861], -[0.03429309709598, 0.5125028477128], -[0.03858913847521, 0.5125821970315], -[0.0428884728414, 0.512670486972], -[0.04719145190897, 0.5127675895062], -[0.05149842317219, 0.5128733649048], -[0.05580972960335, 0.5129876622237], -[0.06012570938044, 0.5131103198174], -[0.06444669564521, 0.5132411658742], -[0.06877301629202, 0.5133800189693], -[0.07310499378757, 0.5135266886314], -[0.07744294502119, 0.5136809759179], -[0.08178718118526, 0.5138426739958], -[0.08613800768485, 0.5140115687241], -[0.09049572407557, 0.5141874392337], -[0.09486062402838, 0.5143700585021], -[0.09923299531991, 0.5145591939198], -[0.1036131198467, 0.5147546078454], -[0.1080012736618, 0.5149560581478], -[0.1123977270317, 0.5151632987326], -[0.116802744512, 0.5153760800514], -[0.1212165850404, 0.5155941495927], -[0.1256392142595, 0.5158167026444], -[-0.1230644904321, 0.520276323354], -[-0.1186573233085, 0.5200477154152], -[-0.1142590660364, 0.5198238368377], -[-0.1098696598827, 0.5196055848197], -[-0.1054888410492, 0.5193932190898], -[-0.1011163398001, 0.5191869962457], -[-0.09675188036427, 0.5189871692314], -[-0.09239518085589, 0.5187939867928], -[-0.0880459532153, 0.5186076929158], -[-0.08370390317288, 0.5184285262475], -[-0.07936873023745, 0.5182567195031], -[-0.07504012771103, 0.5180924988612], -[-0.0707177827318, 0.5179360833505], -[-0.06640137634671, 0.5177876842307], -[-0.06209058361511, 0.5176475043727], -[-0.0577850737446, 0.5175157376401], -[-0.05348451025982, 0.5173925682781], -[-0.0491885512047, 0.5172781703127], -[-0.0448968493785, 0.5171727069661], -[-0.04060905260525, 0.5170763300925], -[-0.03632480403608, 0.5169891796389], -[-0.03204374248353, 0.5169113831365], -[-0.0277655027863, 0.5168430552265], -[-0.02348971620261, 0.5167842972258], -[-0.01921601083002, 0.5167351967359], -[-0.01494401204907, 0.5166958273001], -[-0.01067334298765, 0.5166662481119], -[-0.006403625002896, 0.5166465037774], -[-0.002134478176979, 0.5166366241353], -[0.002134478176979, 0.5166366241353], -[0.006403625002895, 0.5166465037774], -[0.01067334298765, 0.5166662481119], -[0.01494401204907, 0.5166958273001], -[0.01921601083002, 0.5167351967359], -[0.02348971620261, 0.5167842972258], -[0.0277655027863, 0.5168430552265], -[0.03204374248353, 0.5169113831365], -[0.03632480403608, 0.5169891796389], -[0.04060905260524, 0.5170763300925], -[0.0448968493785, 0.5171727069661], -[0.0491885512047, 0.5172781703127], -[0.05348451025982, 0.5173925682781], -[0.0577850737446, 0.5175157376401], -[0.06209058361511, 0.5176475043727], -[0.06640137634671, 0.5177876842307], -[0.0707177827318, 0.5179360833505], -[0.07504012771103, 0.5180924988612], -[0.07936873023745, 0.5182567195031], -[0.08370390317288, 0.5184285262475], -[0.08804595321531, 0.5186076929158], -[0.0923951808559, 0.5187939867928], -[0.09675188036426, 0.5189871692314], -[0.1011163398001, 0.5191869962457], -[0.1054888410492, 0.5193932190898], -[0.1098696598827, 0.5196055848198], -[0.1142590660364, 0.5198238368377], -[0.1186573233086, 0.5200477154152], -[0.1230644904446, 0.5202763233652], -[-0.120497650628, 0.5247232002503], -[-0.1161060659157, 0.5244878945018], -[-0.1117236245458, 0.5242582934337], -[-0.1073500638022, 0.5240346671015], -[-0.1029851148104, 0.5238172827867], -[-0.09862850241545, 0.5236064044609], -[-0.09427994507795, 0.5234022922266], -[-0.08993915479045, 0.523205201736], -[-0.08560583701712, 0.5230153835898], -[-0.08127969065823, 0.5228330827181], -[-0.07696040804186, 0.5226585377466], -[-0.07264767494476, 0.5224919803495], -[-0.06834117064431, 0.5223336345941], -[-0.06404056800325, 0.5221837162805], -[-0.05974553358861, 0.5220424322796], -[-0.0554557278259, 0.5219099798746], -[-0.05117080518965, 0.5217865461116], -[-0.04689041443056, 0.521672307162], -[-0.04261419883942, 0.5215674277043], -[-0.03834179654753, 0.5214720603292], -[-0.03407284086267, 0.5213863449739], -[-0.02980696063955, 0.5213104083908], -[-0.02554378068285, 0.5212443636554], -[-0.02128292218077, 0.5211883097193], -[-0.01702400316636, 0.521142331012], -[-0.01276663900356, 0.5211064970964], -[-0.00851044289458, 0.5210808623815], -[-0.00425502640461, 0.5210654658951], -[-1.910801472081e-16, 0.5210603311201], -[0.00425502640461, 0.5210654658951], -[0.00851044289458, 0.5210808623815], -[0.01276663900357, 0.5211064970964], -[0.01702400316636, 0.521142331012], -[0.02128292218077, 0.5211883097193], -[0.02554378068285, 0.5212443636554], -[0.02980696063955, 0.5213104083908], -[0.03407284086267, 0.5213863449739], -[0.03834179654753, 0.5214720603292], -[0.04261419883943, 0.5215674277043], -[0.04689041443056, 0.521672307162], -[0.05117080518965, 0.5217865461116], -[0.0554557278259, 0.5219099798746], -[0.05974553358861, 0.5220424322796], -[0.06404056800326, 0.5221837162805], -[0.06834117064431, 0.5223336345941], -[0.07264767494476, 0.5224919803495], -[0.07696040804187, 0.5226585377467], -[0.08127969065823, 0.5228330827181], -[0.08560583701712, 0.5230153835898], -[0.08993915479045, 0.523205201736], -[0.09427994507797, 0.5234022922266], -[0.09862850241547, 0.5236064044609], -[0.1029851148104, 0.5238172827867], -[0.1073500638022, 0.5240346671015], -[0.1117236245458, 0.5242582934337], -[0.1161060659157, 0.5244878945018], -[0.120497650628, 0.5247232002503], -[-0.1179385520736, 0.5291556889682], -[-0.1135629862029, 0.5289143994662], -[-0.1091965997093, 0.5286791650707], -[-0.1048391249291, 0.5284502639041], -[-0.1004902876788, 0.5282279711596], -[-0.09614980712422, 0.5280125585283], -[-0.09181739567084, 0.5278042936004], -[-0.0874927588763, 0.5276034392438], -[-0.08317559538853, 0.52741025296], -[-0.07886559691151, 0.5272249862213], -[-0.07456244820105, 0.5270478837913], -[-0.07026582709298, 0.5268791830332], -[-0.06597540456565, 0.5267191132076], -[-0.06169084483855, 0.5265678947673], -[-0.05741180550871, 0.5264257386497], -[-0.05313793772597, 0.5262928455759], -[-0.04886888640811, 0.5261694053586], -[-0.04460429049611, 0.5260555962263], -[-0.04034378324963, 0.525951584169], -[-0.03608699258212, 0.5258575223111], -[-0.03183354143457, 0.5257735503181], -[-0.02758304818624, 0.5256997938421], -[-0.02333512710038, 0.5256363640126], -[-0.01908938880224, 0.5255833569773], -[-0.01484544078622, 0.525540853499], -[-0.01060288794865, 0.5255089186111], -[-0.006361333142024, 0.5254876013382], -[-0.002120377746446, 0.5254769344831], -[0.002120377746446, 0.5254769344831], -[0.006361333142024, 0.5254876013383], -[0.01060288794865, 0.5255089186111], -[0.01484544078622, 0.525540853499], -[0.01908938880224, 0.5255833569773], -[0.02333512710038, 0.5256363640126], -[0.02758304818624, 0.5256997938421], -[0.03183354143457, 0.5257735503181], -[0.03608699258212, 0.5258575223111], -[0.04034378324963, 0.525951584169], -[0.04460429049611, 0.5260555962263], -[0.04886888640811, 0.5261694053586], -[0.05313793772597, 0.5262928455759], -[0.05741180550871, 0.5264257386497], -[0.06169084483856, 0.5265678947673], -[0.06597540456565, 0.5267191132076], -[0.07026582709298, 0.5268791830332], -[0.07456244820105, 0.5270478837913], -[0.07886559691152, 0.5272249862213], -[0.08317559538855, 0.52741025296], -[0.08749275887631, 0.5276034392438], -[0.09181739567084, 0.5278042936004], -[0.09614980712421, 0.5280125585283], -[0.1004902876788, 0.5282279711597], -[0.1048391249291, 0.5284502639041], -[0.1091965997093, 0.5286791650707], -[0.1135629862029, 0.5289143994662], -[0.1179385520736, 0.5291556889682], -[-0.1153875650847, 0.5335741280423], -[-0.1110282617873, 0.5333269362409], -[-0.1066781758565, 0.5330861604054], -[-0.1023370344562, 0.5328520871196], -[-0.09800455784002, 0.5326249998715], -[-0.09368045921233, 0.5324051784404], -[-0.08936444461185, 0.5321928982556], -[-0.08505621282044, 0.5319884297294], -[-0.08075545529996, 0.5317920375672], -[-0.07646185615992, 0.5316039800563], -[-0.07217509215832, 0.531424508337], -[-0.06789483273849, 0.5312538656614], -[-0.06362074010382, 0.531092286641], -[-0.05935246933248, 0.5309399964917], -[-0.0550896685338, 0.530797210278], -[-0.05083197904764, 0.5306641321646], -[-0.04657903568739, 0.5305409546802], -[-0.04233046702708, 0.5304278579992], -[-0.0380858957325, 0.5303250092502], -[-0.03384493893532, 0.5302325618547], -[-0.02960720864913, 0.5301506549053], -[-0.02537231222521, 0.5300794125882], -[-0.02113985284579, 0.530018943657], -[-0.01690943005128, 0.5299693409634], -[-0.01268064029807, 0.5299306810501], -[-0.008453077542529, 0.5299030238108], -[-0.004226333846615, 0.5298864122219], -[0, 0.5298808721474], -[0.004226333846615, 0.5298864122219], -[0.008453077542529, 0.5299030238108], -[0.01268064029807, 0.5299306810501], -[0.01690943005128, 0.5299693409634], -[0.02113985284579, 0.530018943657], -[0.02537231222521, 0.5300794125882], -[0.02960720864913, 0.5301506549053], -[0.03384493893533, 0.5302325618547], -[0.0380858957325, 0.5303250092502], -[0.04233046702708, 0.5304278579992], -[0.04657903568739, 0.5305409546802], -[0.05083197904763, 0.5306641321646], -[0.05508966853379, 0.530797210278], -[0.05935246933248, 0.5309399964917], -[0.06362074010383, 0.531092286641], -[0.0678948327385, 0.5312538656614], -[0.07217509215831, 0.531424508337], -[0.07646185615991, 0.5316039800562], -[0.08075545529997, 0.5317920375672], -[0.08505621282044, 0.5319884297294], -[0.08936444461185, 0.5321928982556], -[0.09368045921232, 0.5324051784404], -[0.09800455784002, 0.5326249998715], -[0.1023370344562, 0.5328520871196], -[0.1066781758565, 0.5330861604054], -[0.1110282617873, 0.5333269362409], -[0.1153875650847, 0.5335741280423], -[-0.112844864851, 0.5379782140356], -[-0.1085020748046, 0.5377252037084], -[-0.1041685422476, 0.53747898116], -[-0.09984398892666, 0.5372398418573], -[-0.0955281292569, 0.5370080779937], -[-0.09122067017391, 0.5367839778308], -[-0.08692131101051, 0.5365678250111], -[-0.08262974340168, 0.5363598978416], -[-0.07834565122063, 0.5361604685528], -[-0.07406871054893, 0.5359698025347], -[-0.0697985896837, 0.5357881575543], -[-0.06553494918454, 0.5356157829593], -[-0.06127744196256, 0.5354529188717], -[-0.05702571341364, 0.5352997953785], -[-0.05277940159783, 0.535156631723], -[-0.04853813746606, 0.5350236355056], -[-0.04430154513497, 0.5349010018993], -[-0.04006924221019, 0.534788912888], -[-0.03584084015742, 0.5346875365328], -[-0.03161594472079, 0.5345970262774], -[-0.02739415638608, 0.5345175202958], -[-0.02317507088708, 0.534449140892], -[-0.01895827975153, 0.5343919939584], -[-0.01474337088309, 0.5343461684974], -[-0.01052992917493, 0.534311736214], -[-0.006317537150098, 0.5342887511837], -[-0.00210577562307, 0.5342772495989], -[0.00210577562307, 0.534277249599], -[0.006317537150098, 0.5342887511837], -[0.01052992917493, 0.534311736214], -[0.01474337088309, 0.5343461684974], -[0.01895827975153, 0.5343919939584], -[0.02317507088707, 0.534449140892], -[0.02739415638607, 0.5345175202957], -[0.03161594472079, 0.5345970262774], -[0.03584084015742, 0.5346875365328], -[0.04006924221018, 0.5347889128879], -[0.04430154513497, 0.5349010018993], -[0.04853813746607, 0.5350236355056], -[0.05277940159783, 0.535156631723], -[0.05702571341363, 0.5352997953785], -[0.06127744196256, 0.5354529188717], -[0.06553494918456, 0.5356157829593], -[0.0697985896837, 0.5357881575543], -[0.07406871054892, 0.5359698025347], -[0.07834565122063, 0.5361604685528], -[0.08262974340169, 0.5363598978416], -[0.08692131101051, 0.5365678250111], -[0.09122067017391, 0.5367839778308], -[0.0955281292569, 0.5370080779937], -[0.09984398892666, 0.5372398418573], -[0.1041685422476, 0.53747898116], -[0.1085020748046, 0.5377252037084], -[0.112844864851, 0.5379782140356], -[-0.1103104313888, 0.5423670233466], -[-0.1059846121696, 0.542108893306], -[-0.1016678933631, 0.5418573217361], -[-0.09736019055459, 0.5416132260716], -[-0.09306121202048, 0.5413769076503], -[-0.08877065809287, 0.5411486636384], -[-0.08448822102911, 0.5409287862911], -[-0.08021358491287, 0.540717562183], -[-0.07594642558986, 0.5405152714105], -[-0.07168641064138, 0.5403221867698], -[-0.06743319939911, 0.5401385729157], -[-0.06318644300398, 0.5399646855054], -[-0.05894578451183, 0.5398007703325], -[-0.05471085904813, 0.5396470624581], -[-0.05048129401377, 0.5395037853456], -[-0.04625670934305, 0.5393711500062], -[-0.04203671781472, 0.5392493541627], -[-0.03782092541614, 0.5391385814398], -[-0.03360893175995, 0.5390390005889], -[-0.02940033055173, 0.5389507647559], -[-0.02519471010674, 0.5388740107997], -[-0.02099165391235, 0.5388088586692], -[-0.01679074123298, 0.5387554108467], -[-0.01259154775259, 0.5387137518643], -[-0.00839364624996, 0.5386839478994], -[-0.004196607300702, 0.5386660464542], -[2.229268384095e-16, 0.5386600761233], -[0.0041966073007, 0.5386660464542], -[0.008393646249959, 0.5386839478994], -[0.01259154775259, 0.5387137518643], -[0.01679074123298, 0.5387554108466], -[0.02099165391235, 0.5388088586691], -[0.02519471010674, 0.5388740107997], -[0.02940033055174, 0.5389507647559], -[0.03360893175995, 0.5390390005889], -[0.03782092541614, 0.5391385814398], -[0.04203671781472, 0.5392493541627], -[0.04625670934305, 0.5393711500062], -[0.05048129401378, 0.5395037853456], -[0.05471085904813, 0.5396470624581], -[0.05894578451183, 0.5398007703325], -[0.06318644300398, 0.5399646855054], -[0.06743319939911, 0.5401385729157], -[0.07168641064138, 0.5403221867698], -[0.07594642558986, 0.5405152714105], -[0.08021358491287, 0.540717562183], -[0.08448822102911, 0.5409287862911], -[0.08877065809287, 0.5411486636384], -[0.09306121202048, 0.5413769076503], -[0.09736019055459, 0.5416132260716], -[0.1016678933631, 0.5418573217361], -[0.1059846121696, 0.542108893306], -[0.1103104228165, 0.5423669872625], -[-0.1077849576091, 0.5467414034471], -[-0.1034760658566, 0.5464776886014], -[-0.09917642921681, 0.5462208688013], -[-0.09488584757068, 0.545971930162], -[-0.09060402272911, 0.5457311836373], -[-0.08633064805546, 0.5454989357494], -[-0.08206540832854, 0.5452754877944], -[-0.07780797963937, 0.5450611350115], -[-0.07355802932725, 0.5448561657245], -[-0.06931521595776, 0.5446608604564], -[-0.06507918934673, 0.5444754910228], -[-0.06084959063317, 0.5443003196102], -[-0.0566260524043, 0.544135597845], -[-0.05240819887512, 0.5439815658598], -[-0.04819564612441, 0.5438384513664], -[-0.04398800238856, 0.5437064687411], -[-0.03978486841391, 0.5435858181334], -[-0.03558583786739, 0.5434766846057], -[-0.03139049780457, 0.5433792373132], -[-0.02719842919323, 0.5432936287336], -[-0.0230092074898, 0.543219993956], -[-0.01882240326496, 0.5431584500359], -[-0.01463758287399, 0.5431090954263], -[-0.01045430916655, 0.5430720094918], -[-0.00627214222976, 0.5430472521106], -[-0.002090640157975, 0.543034863372], -[0.002090640157974, 0.543034863372], -[0.00627214222976, 0.5430472521106], -[0.01045430916655, 0.5430720094919], -[0.01463758287399, 0.5431090954264], -[0.01882240326496, 0.5431584500359], -[0.0230092074898, 0.543219993956], -[0.02719842919323, 0.5432936287336], -[0.03139049780457, 0.5433792373132], -[0.0355858378674, 0.5434766846057], -[0.03978486841391, 0.5435858181334], -[0.04398800238856, 0.5437064687411], -[0.04819564612441, 0.5438384513664], -[0.05240819887512, 0.5439815658598], -[0.0566260524043, 0.544135597845], -[0.06084959063317, 0.5443003196102], -[0.06507918934673, 0.5444754910228], -[0.06931521595776, 0.5446608604564], -[0.07355802932725, 0.5448561657245], -[0.07780797963937, 0.5450611350115], -[0.08206540832854, 0.5452754877944], -[0.08633064805546, 0.5454989357494], -[0.09060402272903, 0.5457311836372], -[0.09488584757068, 0.545971930162], -[0.09917642921681, 0.5462208688013], -[0.1034760658566, 0.5464776886014], -[0.1077849576145, 0.5467414034524], -[-0.1052684319968, 0.551100519657], -[-0.1009766332014, 0.5508312648368], -[-0.09669435569273, 0.5505693008445], -[-0.09242117459561, 0.5503156365448], -[-0.08815678489824, 0.5500705930136], -[-0.08390087259703, 0.5498344866151], -[-0.07965311455152, 0.5496076281424], -[-0.07541317837794, 0.5493903219239], -[-0.07118072238587, 0.549182864895], -[-0.06695539556199, 0.5489855456431], -[-0.06273683760504, 0.5487986434297], -[-0.05852467901541, 0.5486224271965], -[-0.05431854124273, 0.5484571545628], -[-0.05011803689404, 0.5483030708218], -[-0.04592277000467, 0.5481604079452], -[-0.04173233637315, 0.5480293836047], -[-0.03754632396056, 0.5479102002206], -[-0.03336431335409, 0.5478030440479], -[-0.02918587829327, 0.5477080843089], -[-0.02501058625665, 0.5476254723848], -[-0.0208379991054, 0.5475553410736], -[-0.01666767377948, 0.5474978039256], -[-0.012499163041, 0.5474529546651], -[-0.008332016258424, 0.5474208667053], -[-0.004165780224464, 0.5474015927636], -[0, 0.5473951645831], -[0.004165780224463, 0.5474015927636], -[0.008332016258424, 0.5474208667053], -[0.012499163041, 0.5474529546651], -[0.01666767377948, 0.5474978039256], -[0.0208379991054, 0.5475553410736], -[0.02501058625665, 0.5476254723848], -[0.02918587829327, 0.5477080843089], -[0.03336431335409, 0.5478030440479], -[0.03754632396056, 0.5479102002206], -[0.04173233637315, 0.5480293836047], -[0.04592277000467, 0.5481604079452], -[0.05011803689404, 0.5483030708218], -[0.05431854124273, 0.5484571545628], -[0.05852467901541, 0.5486224271965], -[0.06273683760504, 0.5487986434297], -[0.06695539556199, 0.5489855456431], -[0.07118072238587, 0.549182864895], -[0.07541317837794, 0.5493903219239], -[0.07965311455152, 0.5496076281424], -[0.08390087259703, 0.5498344866151], -[0.08815678489824, 0.5500705930136], -[0.09242117459562, 0.5503156365448], -[0.09669435569273, 0.5505693008445], -[0.1009766332014, 0.5508312648368], -[0.105268431991, 0.5511005196513], -[-0.1027608007641, 0.5554440135352], -[-0.09848651722694, 0.555169288438], -[-0.09422188491007, 0.554902287698], -[-0.08996639304433, 0.5546440191925], -[-0.08571972940529, 0.5543948146651], -[-0.08148157218662, 0.5541550008418], -[-0.07725158984692, 0.553924898504], -[-0.07302944099997, 0.5537048215212], -[-0.06881477435295, 0.5534950758487], -[-0.06460722869743, 0.5532959584948], -[-0.06040643295749, 0.5531077564639], -[-0.05621200629892, 0.552930745684], -[-0.05202355830308, 0.5527651899248], -[-0.04784068920827, 0.5526113397177], -[-0.04366299022071, 0.5524694312864], -[-0.03949004389654, 0.5523396854985], -[-0.03532142459497, 0.5522223068506], -[-0.03115669900201, 0.5521174824964], -[-0.02699542672273, 0.5520253813315], -[-0.02283716093916, 0.551946153144], -[-0.01868144912946, 0.5518799278443], -[-0.01452783384315, 0.5518268147823], -[-0.01037585352572, 0.5517869021628], -[-0.006225043385264, 0.5517602565678], -[-0.002074936292818, 0.5517469225908], -[0.002074936292818, 0.5517469225909], -[0.006225043385263, 0.5517602565678], -[0.01037585352572, 0.5517869021628], -[0.01452783384315, 0.5518268147822], -[0.01868144912946, 0.5518799278443], -[0.02283716093915, 0.551946153144], -[0.02699542672273, 0.5520253813315], -[0.03115669900201, 0.5521174824964], -[0.03532142459497, 0.5522223068506], -[0.03949004389654, 0.5523396854985], -[0.04366299022071, 0.5524694312864], -[0.04784068920827, 0.5526113397177], -[0.05202355830308, 0.5527651899248], -[0.05621200629891, 0.552930745684], -[0.06040643295749, 0.5531077564639], -[0.06460722869743, 0.5532959584948], -[0.06881477435295, 0.5534950758487], -[0.07302944099997, 0.5537048215212], -[0.07725158984692, 0.553924898504], -[0.08148157218661, 0.5541550008418], -[0.08571972940529, 0.5543948146651], -[0.08996639304433, 0.5546440191925], -[0.09422188491007, 0.554902287698], -[0.09848651722694, 0.555169288438], -[0.102760800754, 0.555444013525], -[-0.1002617621126, 0.5597716563079], -[-0.09600592699546, 0.5594914164855], -[-0.09175923561765, 0.5592194900225], -[-0.08752173156419, 0.5589567431391], -[-0.08329309497146, 0.5587035188334], -[-0.07907299575336, 0.5584601547537], -[-0.07486109343986, 0.558226982195], -[-0.07065703706409, 0.5580043250524], -[-0.06646046510328, 0.5577924987347], -[-0.06227100547865, 0.5575918090467], -[-0.05808827561938, 0.5574025510453], -[-0.05391188259486, 0.5572250078794], -[-0.0497414233192, 0.5570594496222], -[-0.04557648483102, 0.5569061321065], -[-0.0414166446508, 0.5567652957753], -[-0.03726147121688, 0.556637164558], -[-0.03311052440019, 0.5565219447866], -[-0.02896335609652, 0.556419824164], -[-0.02481951089381, 0.5563309707971], -[-0.02067852681048, 0.5562555323082], -[-0.01653993609975, 0.5561936350364], -[-0.01240326611325, 0.5561453833404], -[-0.008268040216213, 0.5561108590131], -[-0.004133778745425, 0.5560901208163], -[0, 0.5560832041439], -[0.004133778745425, 0.5560901208164], -[0.008268040216213, 0.5561108590131], -[0.01240326611324, 0.5561453833404], -[0.01653993609975, 0.5561936350364], -[0.02067852681048, 0.5562555323082], -[0.02481951089381, 0.5563309707971], -[0.02896335609652, 0.556419824164], -[0.03311052440019, 0.5565219447866], -[0.03726147121688, 0.556637164558], -[0.0414166446508, 0.5567652957753], -[0.04557648483102, 0.5569061321065], -[0.04974142331919, 0.5570594496221], -[0.05391188259486, 0.5572250078794], -[0.05808827561938, 0.5574025510453], -[0.06227100547865, 0.5575918090467], -[0.06646046510328, 0.5577924987347], -[0.07065703706409, 0.5580043250524], -[0.07486109343986, 0.558226982195], -[0.07907299575337, 0.5584601547537], -[0.08329309497147, 0.5587035188334], -[0.08752173156419, 0.5589567431391], -[0.09175923561765, 0.5592194900225], -[0.09600592699547, 0.5594914164855], -[0.1002617621378, 0.5597716563348], -[-0.09777283397979, 0.5640826808331], -[-0.09353507798948, 0.5637972961432], -[-0.0893066336219, 0.5635205587518], -[-0.08508742651089, 0.5632534639457], -[-0.08087712868635, 0.5629963666112], -[-0.07667540125942, 0.562749615922], -[-0.07248189425248, 0.5625135542517], -[-0.06829624648355, 0.5622885160383], -[-0.06411808551106, 0.5620748266056], -[-0.05994702764491, 0.561872800951], -[-0.05578267802929, 0.5616827425049], -[-0.05162463080214, 0.5615049418751], -[-0.04747246933541, 0.5613396755831], -[-0.04332576655953, 0.5611872048086], -[-0.03918408537417, 0.5610477741512], -[-0.03504697914648, 0.5609216104258], -[-0.03091399229631, 0.5608089215058], -[-0.02678466096674, 0.5607098952267], -[-0.02265851377654, 0.5606246983677], -[-0.01853507264964, 0.5605534757234], -[-0.01441385371517, 0.560496349279], -[-0.01029436827016, 0.5604534175032], -[-0.006176123795534, 0.5604247547679], -[-0.002058625014967, 0.5604104109046], -[0.002058625014967, 0.5604104109046], -[0.006176123795535, 0.5604247547679], -[0.01029436827016, 0.5604534175032], -[0.01441385371517, 0.560496349279], -[0.01853507264964, 0.5605534757234], -[0.02265851377654, 0.5606246983677], -[0.02678466096674, 0.5607098952267], -[0.03091399229631, 0.5608089215058], -[0.03504697914648, 0.5609216104258], -[0.03918408537417, 0.5610477741512], -[0.04332576655953, 0.5611872048086], -[0.04747246933541, 0.5613396755831], -[0.05162463080214, 0.5615049418751], -[0.05578267802929, 0.5616827425049], -[0.05994702764491, 0.561872800951], -[0.06411808551107, 0.5620748266057], -[0.06829624648355, 0.5622885160383], -[0.07248189425248, 0.5625135542517], -[0.07667540125943, 0.562749615922], -[0.08087712868637, 0.5629963666112], -[0.08508742651088, 0.5632534639457], -[0.08930663362188, 0.5635205587518], -[0.09353507798949, 0.5637972961432], -[0.09777283399795, 0.5640826808528], -[-0.09529355208019, 0.5683770544631], -[-0.09107419252473, 0.5680865640414], -[-0.08686431225155, 0.5678051344931], -[-0.08266372246606, 0.567533827126], -[-0.07847208657906, 0.567273009399], -[-0.07428905632458, 0.5670230426618], -[-0.07011427158126, 0.5667842809743], -[-0.06594736025457, 0.5665570698712], -[-0.0617879382269, 0.5663417450826], -[-0.05763560938231, 0.5661386312148], -[-0.05348996571202, 0.565948040405], -[-0.0493505875058, 0.565770270958], -[-0.04521704363416, 0.5656056059787], -[-0.04108889192458, 0.5654543120149], -[-0.03696567963426, 0.5653166377239], -[-0.03284694401992, 0.5651928125806], -[-0.02873221300396, 0.5650830456411], -[-0.02462100593438, 0.5649875243809], -[-0.02051283443414, 0.5649064136221], -[-0.0164072033338, 0.5648398545668], -[-0.01230361167941, 0.5647879639506], -[-0.008201553806099, 0.5647508333303], -[-0.004100520466302, 0.5647285285169], -[0, 0.5647210891638], -[0.004100520466302, 0.5647285285169], -[0.008201553806099, 0.5647508333303], -[0.01230361167941, 0.5647879639506], -[0.01640720333381, 0.5648398545668], -[0.02051283443414, 0.5649064136221], -[0.02462100593438, 0.5649875243809], -[0.02873221300396, 0.5650830456411], -[0.03284694401993, 0.5651928125806], -[0.03696567963426, 0.5653166377239], -[0.04108889192458, 0.5654543120149], -[0.04521704363416, 0.5656056059787], -[0.04935058750582, 0.565770270958], -[0.05348996571202, 0.565948040405], -[0.05763560938231, 0.5661386312148], -[0.0617879382269, 0.5663417450826], -[0.06594736025459, 0.5665570698713], -[0.07011427158125, 0.5667842809742], -[0.07428905632456, 0.5670230426618], -[0.07847208657907, 0.567273009399], -[0.08266372246611, 0.5675338271261], -[0.0868643122515, 0.567805134493], -[0.09107419252471, 0.5680865640414], -[0.09529355209115, 0.5683770544752], -[-0.09282416832514, 0.5726550776211], -[-0.08862350019844, 0.5723588456083], -[-0.08443251286326, 0.5720728468782], -[-0.08025087280154, 0.5717974675242], -[-0.07607823424146, 0.5715330883187], -[-0.07191423890845, 0.5712800834907], -[-0.06775851583726, 0.5710388194397], -[-0.06361068125276, 0.5708096533917], -[-0.05947033852731, 0.5705929320043], -[-0.05533707822247, 0.5703889899323], -[-0.05121047822125, 0.5701981483627], -[-0.04709010395744, 0.5700207135346], -[-0.04297550874661, 0.5698569752554], -[-0.03886623422295, 0.5697072054338], -[-0.03476181088361, 0.569571656642], -[-0.03066175874114, 0.5694505607289], -[-0.02656558808262, 0.5693441275007], -[-0.02247280033193, 0.5692525434892], -[-0.01838288900944, 0.5691759708258], -[-0.0142953407814, 0.5691145462378], -[-0.01020963658944, 0.569068380185], -[-0.006125252848366, 0.5690375561504], -[-0.002041662698935, 0.5690221300961], -[0.002041662698935, 0.5690221300961], -[0.006125252848366, 0.5690375561504], -[0.01020963658944, 0.569068380185], -[0.0142953407814, 0.5691145462378], -[0.01838288900944, 0.5691759708258], -[0.02247280033194, 0.5692525434892], -[0.02656558808261, 0.5693441275006], -[0.03066175874114, 0.5694505607289], -[0.03476181088362, 0.569571656642], -[0.03886623422295, 0.5697072054337], -[0.0429755087466, 0.5698569752554], -[0.04709010395745, 0.5700207135346], -[0.05121047822125, 0.5701981483628], -[0.05533707822245, 0.5703889899323], -[0.05947033852729, 0.5705929320043], -[0.06361068125277, 0.5708096533917], -[0.06775851583732, 0.5710388194398], -[0.0719142389085, 0.5712800834908], -[0.07607823424146, 0.5715330883187], -[0.08025087280151, 0.5717974675242], -[0.08443251286322, 0.5720728468781], -[0.08862350019843, 0.5723588456083], -[0.09282416832517, 0.5726550776211], -[-0.09036474168464, 0.57691492952], -[-0.08618323837757, 0.5766137543454], -[-0.08201148539297, 0.5763233138601], -[-0.07784914029513, 0.5760440086426], -[-0.07369584750964, 0.575776233582], -[-0.0695512380573, 0.5755203765466], -[-0.06541492935689, 0.575276816981], -[-0.06128652510542, 0.5750459244386], -[-0.05716561524534, 0.5748280570608], -[-0.05305177602653, 0.5746235600114], -[-0.04894457017098, 0.5744327638806], -[-0.04484354714643, 0.5742559830734], -[-0.04074824355525, 0.5740935142], -[-0.03665818364145, 0.5739456344859], -[-0.03257287991837, 0.5738126002216], -[-0.02849183391646, 0.5736946452731], -[-0.02441453704972, 0.5735919796754], -[-0.02034047159491, 0.5735047883281], -[-0.01626911177705, 0.5734332298164], -[-0.01219992495123, 0.5733774353739], -[-0.008132372869128, 0.5733375080105], -[-0.004065913015617, 0.5733135218134], -[2.229268384095e-16, 0.573305521441], -[0.004065913015619, 0.5733135218135], -[0.008132372869128, 0.5733375080105], -[0.01219992495123, 0.5733774353739], -[0.01626911177705, 0.5734332298163], -[0.02034047159492, 0.5735047883282], -[0.02441453704972, 0.5735919796754], -[0.02849183391644, 0.5736946452731], -[0.03257287991836, 0.5738126002216], -[0.03665818364145, 0.5739456344859], -[0.04074824355522, 0.5740935142], -[0.0448435471464, 0.5742559830733], -[0.04894457017098, 0.5744327638806], -[0.05305177602659, 0.5746235600115], -[0.05716561524533, 0.5748280570608], -[0.06128652510538, 0.5750459244385], -[0.06541492935685, 0.5752768169809], -[0.06955123805736, 0.5755203765467], -[0.07369584750967, 0.5757762335821], -[0.07784914029513, 0.5760440086426], -[0.08201148539295, 0.5763233138601], -[0.08618323837757, 0.5766137543454], -[0.09036474168464, 0.57691492952], -[-0.08791564107491, 0.581156896209], -[-0.08375365272978, 0.5808508910395], -[-0.07960148895769, 0.5805561409504], -[-0.0754587978049, 0.5802730619133], -[-0.0713252132107, 0.5800020638067], -[-0.06720035472298, 0.5797435489619], -[-0.06308382729153, 0.5794979106291], -[-0.05897522114929, 0.5792655313732], -[-0.05487411179189, 0.5790467814103], -[-0.0507800600646, 0.5788420168966], -[-0.04669261236561, 0.5786515781861], -[-0.04261130097247, 0.5784757880739], -[-0.03853564449848, 0.5783149500458], -[-0.03446514848199, 0.5781693465547], -[-0.03039930611091, 0.5780392373477], -[-0.02633759908143, 0.5779248578676], -[-0.02227949858712, 0.5778264177514], -[-0.01822446643293, 0.5777440994539], -[-0.01417195626428, 0.5776780570182], -[-0.0101214148987, 0.5776284150089], -[-0.006072283746808, 0.5775952676399], -[-0.002024000304159, 0.5775786781006], -[0.002024000304162, 0.5775786781008], -[0.006072283746811, 0.57759526764], -[0.01012141489869, 0.5776284150088], -[0.01417195626426, 0.577678057018], -[0.01822446643295, 0.5777440994541], -[0.02227949858708, 0.5778264177511], -[0.0263375990814, 0.5779248578674], -[0.03039930611091, 0.5780392373477], -[0.03446514848202, 0.5781693465548], -[0.03853564449846, 0.5783149500457], -[0.04261130097244, 0.5784757880738], -[0.04669261236559, 0.578651578186], -[0.05078006006462, 0.5788420168966], -[0.05487411179192, 0.5790467814104], -[0.05897522114929, 0.5792655313732], -[0.06308382729151, 0.5794979106291], -[0.06720035472298, 0.5797435489619], -[0.07132521321071, 0.5800020638067], -[0.07545879780491, 0.5802730619133], -[0.07960148895769, 0.5805561409504], -[0.08375365272978, 0.5808508910395], -[0.08791564107491, 0.581156896209], -[-0.08547710701129, 0.5853805611032], -[-0.08133499780425, 0.5850698429061], -[-0.0772027925145, 0.5847709203892], -[-0.07308012900793, 0.5844842259073], -[-0.06896662998225, 0.5842101852777], -[-0.06486190266272, 0.5839492161883], -[-0.06076553858598, 0.5837017265173], -[-0.05667711348398, 0.5834681125754], -[-0.05259618727926, 0.5832487572818], -[-0.04852230420246, 0.5830440282914], -[-0.04445499304154, 0.5828542760877], -[-0.04039376753116, 0.5826798320659], -[-0.03633812688828, 0.5825210066262], -[-0.03228755649799, 0.5823780873039], -[-0.02824152875082, 0.5822513369629], -[-0.02419950402955, 0.5821409920787], -[-0.02016093184108, 0.5820472611418], -[-0.01612525208441, 0.5819703232057], -[-0.0120918964435, 0.5819103266094], -[-0.008060289889519, 0.581867387893], -[-0.004029852275141, 0.5818415909332], -[-6.687805152285e-16, 0.581832986312], -[0.004029852275135, 0.5818415909331], -[0.008060289889516, 0.581867387893], -[0.01209189644351, 0.5819103266095], -[0.01612525208443, 0.5819703232059], -[0.02016093184107, 0.5820472611417], -[0.02419950402953, 0.5821409920786], -[0.02824152875081, 0.5822513369629], -[0.03228755649801, 0.582378087304], -[0.0363381268883, 0.5825210066263], -[0.04039376753115, 0.5826798320659], -[0.04445499304153, 0.5828542760877], -[0.04852230420246, 0.5830440282914], -[0.05259618727928, 0.5832487572819], -[0.05667711348399, 0.5834681125754], -[0.06076553858598, 0.5837017265173], -[0.06486190266272, 0.5839492161883], -[0.06896662998227, 0.5842101852777], -[0.07308012900793, 0.5844842259073], -[0.0772027925145, 0.5847709203892], -[0.08133499780425, 0.5850698429061], -[0.08547710701129, 0.5853805611032], -[-0.08304938850977, 0.5895854928943], -[-0.07892753766673, 0.5892701826542], -[-0.07481567558301, 0.5889672302417], -[-0.0707134292123, 0.5886770854752], -[-0.0666204091746, 0.5884001911458], -[-0.06253620943072, 0.5881369812694], -[-0.05846040705683, 0.5878878792423], -[-0.05439256213305, 0.5876532959096], -[-0.0503322177589, 0.5874336275626], -[-0.04627890020781, 0.5872292538819], -[-0.04223211923185, 0.5870405358493], -[-0.03819136852531, 0.5868678136493], -[-0.03415612635412, 0.5867114045912], -[-0.03012585635477, 0.5865716010783], -[-0.02610000850335, 0.5864486686552], -[-0.02207802025161, 0.5863428441673], -[-0.01805931782324, 0.5862543340624], -[-0.01404331765926, 0.5861833128665], -[-0.01002942799789, 0.5861299218625], -[-0.006017050570184, 0.5860942679994], -[-0.002005582389531, 0.5860764230521], -[0.00200558238953, 0.5860764230521], -[0.006017050570182, 0.5860942679994], -[0.01002942799789, 0.5861299218626], -[0.01404331765926, 0.5861833128665], -[0.01805931782325, 0.5862543340625], -[0.02207802025161, 0.5863428441673], -[0.02610000850335, 0.5864486686552], -[0.03012585635478, 0.5865716010783], -[0.03415612635414, 0.5867114045913], -[0.03819136852532, 0.5868678136493], -[0.04223211923185, 0.5870405358493], -[0.04627890020781, 0.5872292538819], -[0.0503322177589, 0.5874336275626], -[0.05439256213306, 0.5876532959096], -[0.05846040705683, 0.5878878792423], -[0.06253620943072, 0.5881369812694], -[0.06662040917461, 0.5884001911458], -[0.07071342921229, 0.5886770854752], -[0.07481567558301, 0.5889672302417], -[0.07892753766673, 0.5892701826542], -[0.08304938850977, 0.5895854928943], -[-0.08063241846241, 0.5937706358268], -[-0.07653154659584, 0.5934514674659], -[-0.07244042903968, 0.5931446334119], -[-0.0683590062513, 0.5928512108111], -[-0.06428687584557, 0.5925716605582], -[-0.06022361747263, 0.5923064340551], -[-0.05616879258371, 0.5920559711802], -[-0.05212194432707, 0.5918206981617], -[-0.04808259758875, 0.5916010253725], -[-0.04405025919257, 0.5913973450682], -[-0.04002441827102, 0.5912100290935], -[-0.03600454681745, 0.5910394265835], -[-0.03199010042636, 0.5908858616952], -[-0.02798051922532, 0.5907496313988], -[-0.02397522899825, 0.5906310033699], -[-0.01997364249511, 0.5905302140151], -[-0.01597516091861, 0.5904474666707], -[-0.01197917557371, 0.5903829300088], -[-0.007985069661325, 0.5903367366826], -[-0.003992220193004, 0.5903089822415], -[0, 0.5902997243374], -[0.003992220193004, 0.5903089822415], -[0.007985069661325, 0.5903367366826], -[0.01197917557371, 0.5903829300088], -[0.01597516091861, 0.5904474666707], -[0.01997364249512, 0.5905302140151], -[0.02397522899825, 0.5906310033699], -[0.02798051922532, 0.5907496313988], -[0.03199010042636, 0.5908858616952], -[0.03600454681745, 0.5910394265836], -[0.04002441827102, 0.5912100290935], -[0.04405025919257, 0.5913973450682], -[0.04808259758875, 0.5916010253725], -[0.05212194432706, 0.5918206981617], -[0.05616879258371, 0.5920559711802], -[0.06022361747263, 0.5923064340551], -[0.06428687584557, 0.5925716605582], -[0.0683590062513, 0.5928512108111], -[0.07244042903968, 0.5931446334119], -[0.07653154659585, 0.5934514674659], -[0.08063241848515, 0.5937706358538], -[-0.0782275063791, 0.5979366259881], -[-0.0741473098484, 0.5976132378777], -[-0.07007735599282, 0.5973026765647], -[-0.06601718147072, 0.5970061564318], -[-0.06196636986056, 0.5967241577139], -[-0.05792448533698, 0.5964571503528], -[-0.05389107242854, 0.596205591755], -[-0.04986565592432, 0.5959699244444], -[-0.04584774094688, 0.5957505736289], -[-0.04183681320726, 0.5955479447066], -[-0.03783233945581, 0.5953624207412], -[-0.03383376813996, 0.5951943599407], -[-0.02984053027589, 0.5950440931757], -[-0.02585204053741, 0.5949119215785], -[-0.02186769856003, 0.5947981142649], -[-0.01788689045315, 0.5947029062209], -[-0.01390899050765, 0.5946264963978], -[-0.009933363080403, 0.5945690460533], -[-0.005959364632381, 0.5945306773776], -[-0.001986345891592, 0.5945114724329], -[0.001986345891593, 0.594511472433], -[0.005959364632382, 0.5945306773776], -[0.009933363080403, 0.5945690460533], -[0.01390899050765, 0.5946264963978], -[0.01788689045316, 0.5947029062209], -[0.02186769856003, 0.5947981142649], -[0.02585204053741, 0.5949119215785], -[0.02984053027589, 0.5950440931757], -[0.03383376813996, 0.5951943599407], -[0.03783233945581, 0.5953624207412], -[0.04183681320726, 0.5955479447066], -[0.04584774094688, 0.5957505736289], -[0.04986565592431, 0.5959699244444], -[0.05389107242853, 0.596205591755], -[0.05792448533698, 0.5964571503528], -[0.06196636986056, 0.5967241577139], -[0.06601718147072, 0.5970061564318], -[0.0700773559928, 0.5973026765647], -[0.07414730984841, 0.5976132378777], -[0.0782275063755, 0.5979366259838], -[-0.0758339361914, 0.6020826596905], -[-0.07177512450236, 0.6017550165546], -[-0.06772677274912, 0.6014408889444], -[-0.0636882908214, 0.6011414600606], -[-0.05965924711186, 0.6008572308349], -[-0.05563918901944, 0.6005886910088], -[-0.05162764270003, 0.6003363166539], -[-0.04762411298829, 0.6001005675719], -[-0.04362808351074, 0.5998818846033], -[-0.03963901700817, 0.5996806868716], -[-0.0356563558828, 0.5994973689993], -[-0.0316795229822, 0.5993322983362], -[-0.02770792262733, 0.5991858122427], -[-0.02374094188672, 0.5990582154774], -[-0.01977795209324, 0.5989497777369], -[-0.01581831059284, 0.5988607313974], -[-0.0118613627085, 0.5987912695073], -[-0.007906443895697, 0.598741544075], -[-0.003952882059809, 0.5987116646915], -[5.095470592217e-16, 0.5987016975223], -[0.003952882059809, 0.5987116646915], -[0.007906443895697, 0.598741544075], -[0.0118613627085, 0.5987912695073], -[0.01581831059284, 0.5988607313974], -[0.01977795209324, 0.5989497777369], -[0.02374094188672, 0.5990582154774], -[0.02770792262733, 0.5991858122427], -[0.0316795229822, 0.5993322983362], -[0.03565635588279, 0.5994973689993], -[0.03963901700817, 0.5996806868716], -[0.04362808351074, 0.5998818846033], -[0.04762411298829, 0.6001005675719], -[0.05162764270003, 0.6003363166539], -[0.05563918901945, 0.6005886910089], -[0.05965924711186, 0.6008572308349], -[0.0636882908214, 0.6011414600607], -[0.06772677274913, 0.6014408889444], -[0.07177512450237, 0.6017550165546], -[0.07583393617975, 0.6020826596763], -[-0.07345221318924, 0.6062080264922], -[-0.06941530038772, 0.6058763069405], -[-0.06538900988393, 0.6055587810776], -[-0.06137268607185, 0.6052566414061], -[-0.05736588087399, 0.6049704110445], -[-0.05336812345846, 0.6047006009148], -[-0.04937891998411, 0.6044477069889], -[-0.04539775354319, 0.6042122074038], -[-0.0414240843249, 0.6039945594755], -[-0.03745735002012, 0.6037951966468], -[-0.03349696648501, 0.6036145254107], -[-0.02954232867635, 0.6034529222581], -[-0.02559281186573, 0.6033107307012], -[-0.02164777313367, 0.6031882584291], -[-0.01770655313666, 0.6030857746542], -[-0.01376847813291, 0.6030035077041], -[-0.009832862244357, 0.6029416429184], -[-0.005899009924456, 0.6029003208963], -[-0.001966218594571, 0.6028796361421], -[0.001966218594571, 0.6028796361421], -[0.005899009924457, 0.6029003208963], -[0.009832862244357, 0.6029416429184], -[0.01376847813291, 0.6030035077041], -[0.01770655313665, 0.6030857746541], -[0.02164777313367, 0.6031882584291], -[0.02559281186573, 0.6033107307012], -[0.02954232867635, 0.6034529222582], -[0.03349696648502, 0.6036145254108], -[0.03745735002013, 0.6037951966468], -[0.0414240843249, 0.6039945594755], -[0.04539775354319, 0.6042122074038], -[0.04937891998412, 0.604447706989], -[0.05336812345849, 0.6047006009149], -[0.05736588087399, 0.6049704110445], -[0.06137268607184, 0.605256641406], -[0.06538900988394, 0.6055587810777], -[0.06941530038777, 0.6058763069406], -[0.07345221317361, 0.6062080264729], -[-0.07108208864354, 0.6103123067532], -[-0.06706816111711, 0.6099765917721], -[-0.06306441342956, 0.609655843346], -[-0.05907073615756, 0.6093512008204], -[-0.05508666331437, 0.6090632111432], -[-0.05111170420413, 0.6087924079302], -[-0.04714534316357, 0.6085393083993], -[-0.04318703953318, 0.6083044101602], -[-0.03923622788361, 0.6080881878925], -[-0.03529231852143, 0.6078910899564], -[-0.03135469829389, 0.6077135349851], -[-0.02742273170628, 0.6075559085186], -[-0.02349576235898, 0.6074185597384], -[-0.01957311470258, 0.6073017983719], -[-0.01565409610056, 0.607205891832], -[-0.01173799917995, 0.6071310626608], -[-0.007824104439968, 0.6070774863381], -[-0.003911683079981, 0.6070452895137], -[0, 0.607034548707], -[0.003911683079981, 0.6070452895137], -[0.007824104439968, 0.6070774863382], -[0.01173799917995, 0.6071310626608], -[0.01565409610056, 0.6072058918321], -[0.01957311470258, 0.6073017983719], -[0.02349576235899, 0.6074185597384], -[0.02742273170627, 0.6075559085186], -[0.0313546982939, 0.6077135349852], -[0.03529231852148, 0.6078910899565], -[0.03923622788361, 0.6080881878926], -[0.04318703953317, 0.6083044101602], -[0.04714534316357, 0.6085393083993], -[0.05111170420418, 0.6087924079303], -[0.05508666331437, 0.6090632111432], -[0.05907073615751, 0.6093512008203], -[0.06306441342954, 0.609655843346], -[0.06706816111718, 0.6099765917722], -[0.07108208867674, 0.6103123067966], -[-0.06872515235175, 0.6143947181569], -[-0.06473404522992, 0.6140553314351], -[-0.06075334619866, 0.6137315444112], -[-0.0567828286872, 0.6134246178257], -[-0.05282200718237, 0.6131351242693], -[-0.04887036928567, 0.6128636217144], -[-0.0449273754553, 0.6126106500924], -[-0.04099245901492, 0.6123767277091], -[-0.03706502645883, 0.6121623475392], -[-0.03314445808208, 0.6119679734527], -[-0.02923010895629, 0.6117940364324], -[-0.02532131026762, 0.6116409308561], -[-0.0214173710204, 0.6115090109116], -[-0.01751758010333, 0.6113985872285], -[-0.01362120870212, 0.611309923802], -[-0.009727513031677, 0.6112432352909], -[-0.005835737348363, 0.611198684757], -[-0.001945117193147, 0.6111763819105], -[0.001945117193149, 0.6111763819106], -[0.005835737348367, 0.6111986847571], -[0.009727513031673, 0.6112432352908], -[0.01362120870211, 0.6113099238019], -[0.01751758010335, 0.6113985872286], -[0.02141737102042, 0.6115090109117], -[0.0253213102676, 0.611640930856], -[0.02923010895626, 0.6117940364323], -[0.03314445808209, 0.6119679734528], -[0.03706502645887, 0.6121623475393], -[0.04099245901488, 0.612376727709], -[0.04492737545524, 0.6126106500922], -[0.04887036928567, 0.6128636217144], -[0.05282200718254, 0.6131351242695], -[0.05678282868707, 0.6134246178254], -[0.06075334619852, 0.613731544411], -[0.0647340452299, 0.6140553314351], -[0.06872515237615, 0.6143947181892], -[-0.06638106862222, 0.6184549261189], -[-0.0624133074662, 0.6181119621444], -[-0.05845618926232, 0.6177853294739], -[-0.05450937162875, 0.6174763494888], -[-0.05057234770335, 0.617185622431], -[-0.04664458130797, 0.6169137324598], -[-0.04272550669776, 0.6166612438213], -[-0.03881452861828, 0.6164286968325], -[-0.03491102271002, 0.6162166037353], -[-0.03101433629043, 0.616025444481], -[-0.02712378954102, 0.6158556625286], -[-0.02323867711026, 0.6157076607274], -[-0.01935827013871, 0.615581797381], -[-0.01548181869699, 0.6154783825852], -[-0.01160855461305, 0.6153976749286], -[-0.007737694653586, 0.6153398786573], -[-0.00386844400603, 0.6153051413694], -[1.910801472081e-16, 0.6152935523182], -[0.003868444006043, 0.6153051413697], -[0.007737694653586, 0.6153398786573], -[0.01160855461301, 0.6153976749283], -[0.01548181869694, 0.6154783825849], -[0.01935827013879, 0.6155817973814], -[0.02323867711025, 0.6157076607274], -[0.02712378954094, 0.6158556625283], -[0.03101433629034, 0.6160254444807], -[0.03491102271006, 0.6162166037354], -[0.03881452861822, 0.6164286968324], -[0.04272550669758, 0.6166612438209], -[0.04664458130782, 0.6169137324595], -[0.05057234770305, 0.6171856224305], -[0.05450937162869, 0.6174763494887], -[0.05845618926195, 0.6177853294733], -[0.06241330746594, 0.618111962144], -[0.06638106863745, 0.6184549261393], -[-0.06405022375377, 0.6224930115517], -[-0.06010632018852, 0.6221458939196], -[-0.056173343606, 0.6218166183424], -[-0.05225079520489, 0.6215058286288], -[-0.04833814471015, 0.6212141548969], -[-0.04443482981285, 0.6209422095161], -[-0.04054025592797, 0.6206905827967], -[-0.03665379631675, 0.6204598384767], -[-0.03277479261607, 0.6202505090688], -[-0.02890255581067, 0.6200630911459], -[-0.02503636767458, 0.6198980406502], -[-0.02117548269913, 0.6197557683363], -[-0.01731913050503, 0.6196366354442], -[-0.01346651872749, 0.6195409497339], -[-0.009616836333172, 0.6194689619454], -[-0.00576925733282, 0.6194208628616], -[-0.001922944809545, 0.6193967809917], -[0.001922944809566, 0.6193967809928], -[0.005769257332842, 0.619420862862], -[0.00961683633313, 0.619468961945], -[0.01346651872736, 0.619540949733], -[0.01731913050536, 0.619636635446], -[0.02117548269899, 0.6197557683357], -[0.02503636767433, 0.6198980406493], -[0.02890255581047, 0.6200630911452], -[0.03277479261606, 0.6202505090688], -[0.03665379631709, 0.6204598384775], -[0.04054025592804, 0.6206905827969], -[0.04443482981274, 0.6209422095159], -[0.04833814471, 0.6212141548966], -[0.05225079520483, 0.6215058286287], -[0.05617334360618, 0.6218166183427], -[0.06010632018908, 0.6221458939203], -[0.06405022375377, 0.6224930115517], -[-0.06173280452057, 0.626506899407], -[-0.05781347497981, 0.6261565083363], -[-0.05390523199397, 0.6258248032889], -[-0.05000755402671, 0.6255124618269], -[-0.04611988505025, 0.6252201464259], -[-0.04224163394837, 0.6249484998988], -[-0.03837217429378, 0.6246981405318], -[-0.03451084455519, 0.6244696569946], -[-0.03065694878373, 0.6242636031015], -[-0.02680975781958, 0.6240804925169], -[-0.02296851105001, 0.6239207935202], -[-0.01913241873107, 0.6237849239475], -[-0.01530066486966, 0.6236732464425], -[-0.01147241064211, 0.6235860641533], -[-0.007646798301232, 0.6235236169921], -[-0.003822955508157, 0.6234860785943], -[-1.369407721658e-15, 0.6234735540644], -[0.003822955508121, 0.6234860785935], -[0.007646798301191, 0.6235236169916], -[0.01147241064213, 0.6235860641535], -[0.01530066486979, 0.6236732464433], -[0.01913241873113, 0.6237849239478], -[0.02296851104995, 0.6239207935199], -[0.02680975781948, 0.6240804925166], -[0.03065694878369, 0.6242636031014], -[0.03451084455532, 0.624469656995], -[0.03837217429395, 0.6246981405322], -[0.0422416339484, 0.6249484998988], -[0.04611988505021, 0.6252201464258], -[0.05000755402668, 0.6255124618268], -[0.05390523199405, 0.625824803289], -[0.05781347498006, 0.6261565083367], -[0.06173280452056, 0.626506899407], -[-0.05942931595963, 0.6304966251053], -[-0.0555351844302, 0.6301431559992], -[-0.05165230106781, 0.6298092466515], -[-0.04778012951163, 0.6294956272246], -[-0.04391808531391, 0.6292029953195], -[-0.04006554549619, 0.6289320266681], -[-0.03622184835815, 0.6286833696244], -[-0.03238629379504, 0.6284576394011], -[-0.02855814418268, 0.628255412151], -[-0.02473662587753, 0.6280772190095], -[-0.02092093136344, 0.6279235402322], -[-0.01711022205708, 0.6277947995808], -[-0.01330363176039, 0.6276913591117], -[-0.009500270722922, 0.6276135145284], -[-0.005699230250103, 0.6275614912492], -[-0.001899587767984, 0.6275354413265], -[0.00189958776798, 0.6275354413263], -[0.005699230250084, 0.6275614912489], -[0.009500270722914, 0.6276135145283], -[0.01330363176043, 0.627691359112], -[0.01711022205717, 0.6277947995813], -[0.02092093136349, 0.6279235402324], -[0.02473662587751, 0.6280772190094], -[0.02855814418265, 0.628255412151], -[0.03238629379507, 0.6284576394012], -[0.03622184835828, 0.6286833696247], -[0.04006554549625, 0.6289320266683], -[0.04391808531391, 0.6292029953195], -[0.04778012951162, 0.6294956272246], -[0.05165230106783, 0.6298092466516], -[0.05553518443028, 0.6301431559994], -[0.05942931831279, 0.6304966283509], -[-0.05714018822099, 0.6344615365995], -[-0.05327188416373, 0.6341051537215], -[-0.04941502372967, 0.6337692781607], -[-0.04556903262782, 0.6334546720696], -[-0.04173329493868, 0.6331620712735], -[-0.03790715231928, 0.6328921871728], -[-0.03408990385927, 0.632645700476], -[-0.03028080654268, 0.6324232546509], -[-0.02647907638544, 0.6322254492143], -[-0.02268389030179, 0.6320528330063], -[-0.01889438873392, 0.6319058976164], -[-0.01510967905211, 0.6317850711473], -[-0.01132883970225, 0.631690712504], -[-0.007550925046711, 0.6316231064065], -[-0.003774970808434, 0.6315824592947], -[2.547735296109e-16, 0.6315688962854], -[0.003774970808434, 0.6315824592947], -[0.007550925046707, 0.6316231064064], -[0.01132883970225, 0.631690712504], -[0.01510967905212, 0.6317850711474], -[0.01889438873399, 0.6319058976168], -[0.02268389030181, 0.6320528330064], -[0.02647907638543, 0.6322254492143], -[0.03028080654268, 0.6324232546509], -[0.03408990385929, 0.6326457004761], -[0.03790715231928, 0.6328921871728], -[0.04173329493869, 0.6331620712735], -[0.04556903262782, 0.6334546720696], -[0.04941502372967, 0.6337692781607], -[0.05327188416374, 0.6341051537215], -[0.05714018958903, 0.6344615385126], -[-0.05486551684639, 0.6384002769258], -[-0.05102403512878, 0.6380417813433], -[-0.04719390184999, 0.6377041919346], -[-0.04337480702552, 0.6373889099792], -[-0.0395660997572, 0.6370967130072], -[-0.03576708230446, 0.636828351146], -[-0.03197701000929, 0.6365845399606], -[-0.02819509194756, 0.6363659529806], -[-0.02442049238738, 0.6361732140648], -[-0.02065233311706, 0.6360068897867], -[-0.01688969667635, 0.6358674820504], -[-0.01313163049068, 0.635755421161], -[-0.009377151870106, 0.6356710595894], -[-0.005625253791121, 0.635614666653], -[-0.001874911340185, 0.6355864243218], -[0.001874911340189, 0.635586424322], -[0.005625253791123, 0.635614666653], -[0.009377151870106, 0.6356710595894], -[0.01313163049068, 0.635755421161], -[0.01688969667633, 0.6358674820503], -[0.02065233311707, 0.6360068897868], -[0.02442049238738, 0.6361732140648], -[0.02819509194756, 0.6363659529806], -[0.03197701000929, 0.6365845399606], -[0.03576708230442, 0.636828351146], -[0.03956609975718, 0.6370967130071], -[0.04337480702551, 0.6373889099792], -[0.04719390184999, 0.6377041919346], -[0.05102403512878, 0.6380417813433], -[0.05486551829716, 0.6384002793516], -[-0.05260687553872, 0.6423131949134], -[-0.04879212620515, 0.6419522781395], -[-0.04498946936172, 0.6416132430973], -[-0.04119803262512, 0.6412976178788], -[-0.03741712606943, 0.6410062256411], -[-0.03364600788986, 0.6407398586487], -[-0.02988388442717, 0.6404992700566], -[-0.02612991106622, 0.6402851653446], -[-0.02238319410649, 0.6400981935979], -[-0.01864279367322, 0.6399389388613], -[-0.01490772770197, 0.6398079118317], -[-0.01117697698412, 0.6397055421687], -[-0.007449491209629, 0.6396321717089], -[-0.003724195890871, 0.6395880488568], -[0, 0.6395733243887], -[0.003724195890872, 0.6395880488568], -[0.007449491209629, 0.6396321717089], -[0.01117697698412, 0.6397055421687], -[0.01490772770196, 0.6398079118316], -[0.01864279367317, 0.639938938861], -[0.02238319410648, 0.6400981935978], -[0.02612991106622, 0.6402851653446], -[0.02988388442717, 0.6404992700566], -[0.03364600788985, 0.6407398586487], -[0.0374171260694, 0.641006225641], -[0.04119803262512, 0.6412976178788], -[0.04498946936172, 0.6416132430973], -[0.04879212620515, 0.6419522781395], -[0.05260687702221, 0.6423131973969], -[-0.05036285351713, 0.6461990808901], -[-0.04657667718319, 0.6458358387451], -[-0.04280229581217, 0.6454956439574], -[-0.03903932974839, 0.6451800325682], -[-0.03528704533923, 0.6448898777961], -[-0.03154465128912, 0.6446260178527], -[-0.02781129882333, 0.6443892464634], -[-0.02408608291339, 0.6441803030063], -[-0.02036804467755, 0.6439998625153], -[-0.01665617503361, 0.6438485258366], -[-0.0129494196324, 0.6437268102752], -[-0.009246685037443, 0.6436351410727], -[-0.005546846053861, 0.6435738440741], -[-0.001848754038278, 0.6435431399007], -[0.001848754038274, 0.6435431399005], -[0.005546846053859, 0.6435738440741], -[0.009246685037444, 0.6436351410727], -[0.0129494196324, 0.6437268102753], -[0.01665617503364, 0.6438485258367], -[0.02036804467753, 0.6439998625152], -[0.0240860829134, 0.6441803030063], -[0.02781129882333, 0.6443892464634], -[0.03154465128913, 0.6446260178528], -[0.03528704533927, 0.6448898777962], -[0.03903932974846, 0.6451800325683], -[0.04280229581217, 0.6454956439574], -[0.04657667718318, 0.6458358387451], -[0.05036285355508, 0.6461990809448], -[-0.04813574080155, 0.6500568217673], -[-0.04437824218462, 0.6496916085147], -[-0.04063299046061, 0.6493505596738], -[-0.03689936389948, 0.6490353468581], -[-0.03317657963924, 0.648746898381], -[-0.02946379054705, 0.648486102663], -[-0.02576008558076, 0.648253797241], -[-0.02206449144482, 0.6480507573607], -[-0.01837597567761, 0.6478776844679], -[-0.01469345125407, 0.6477351949769], -[-0.01101578271839, 0.6476238097285], -[-0.007341793784652, 0.6475439445825], -[-0.003670276252192, 0.6474959025638], -[-1.910801472081e-16, 0.6474798679439], -[0.003670276252192, 0.6474959025638], -[0.007341793784655, 0.6475439445826], -[0.01101578271838, 0.6476238097284], -[0.01469345125409, 0.647735194977], -[0.01837597567776, 0.6478776844685], -[0.02206449144488, 0.6480507573609], -[0.02576008558076, 0.648253797241], -[0.02946379054703, 0.648486102663], -[0.03317657963932, 0.6487468983812], -[0.03689936389976, 0.6490353468587], -[0.04063299046066, 0.6493505596739], -[0.04437824218454, 0.6496916085146], -[0.04813574081524, 0.6500568217873], -[-0.04592526332826, 0.6538856871833], -[-0.04219741361064, 0.6535186782132], -[-0.03848220703117, 0.6531771033193], -[-0.03477885132899, 0.6528627052129], -[-0.0310865079955, 0.6525764730323], -[-0.02740426659718, 0.6523193501851], -[-0.02373114540966, 0.6520922215267], -[-0.02006609364722, 0.6518959000977], -[-0.0164079954461, 0.6517311138256], -[-0.01275567568843, 0.6515984926718], -[-0.009107907664204, 0.6514985567699], -[-0.005463422454171, 0.6514317060841], -[-0.001820919809283, 0.6513982121192], -[0.001820919809292, 0.6513982121196], -[0.0054634224542, 0.6514317060845], -[0.009107907664191, 0.6514985567698], -[0.01275567568837, 0.6515984926715], -[0.01640799544616, 0.6517311138258], -[0.02006609364749, 0.6518959000987], -[0.02373114540971, 0.6520922215268], -[0.02740426659705, 0.6523193501847], -[0.03108650799543, 0.6525764730322], -[0.03477885132931, 0.6528627052135], -[0.0384822070314, 0.6531771033196], -[0.04219741361037, 0.6535186782128], -[0.04592526332624, 0.6538856871803], -[-0.04373202147597, 0.6576846171309], -[-0.04003482672403, 0.6573160779108], -[-0.03635064925923, 0.6569743302364], -[-0.0326785655452, 0.6566611988162], -[-0.02901767382605, 0.6563777401723], -[-0.02536699153132, 0.6561249580563], -[-0.02172545629445, 0.6559037884086], -[-0.01809192894995, 0.6557150838588], -[-0.01446519868954, 0.655559598284], -[-0.01084399047681, 0.6554379721023], -[-0.007226974659335, 0.6553507189259], -[-0.003612778602053, 0.6552982142958], -[4.331150003384e-15, 0.6552806871191], -[0.003612778602145, 0.6552982142976], -[0.00722697465937, 0.6553507189262], -[0.01084399047665, 0.6554379721013], -[0.01446519868929, 0.6555595982827], -[0.01809192895006, 0.6557150838592], -[0.02172545629477, 0.6559037884096], -[0.02536699153104, 0.6561249580555], -[0.0290176738255, 0.656377740171], -[0.03267856554503, 0.6566611988159], -[0.03635064926015, 0.656974330238], -[0.04003482672346, 0.6573160779099], -[0.04373202146322, 0.657684617112], -[-0.04155664108235, 0.6614525877252], -[-0.03789116499789, 0.6610827699259], -[-0.03423907739789, 0.6607412315442], -[-0.03059934498619, 0.6604298599756], -[-0.02697099371474, 0.6601497866496], -[-0.02335295834577, 0.6599020816762], -[-0.01974408400499, 0.6596877360787], -[-0.0161431302147, 0.6595076435849], -[-0.01254877760113, 0.6593625826209], -[-0.008959637387776, 0.6592531994778], -[-0.005374263515259, 0.6591799933406], -[-0.00179116712288, 0.6591433041756], -[0.001791167123027, 0.6591433041812], -[0.005374263515458, 0.6591799933431], -[0.00895963738759, 0.6592531994765], -[0.01254877760041, 0.6593625826171], -[0.0161431302139, 0.6595076435816], -[0.01974408400609, 0.6596877360824], -[0.02335295834545, 0.6599020816753], -[0.02697099371338, 0.6601497866463], -[0.03059934498478, 0.6604298599727], -[0.03423907739517, 0.6607412315392], -[0.03789116499742, 0.6610827699251], -[0.04155664106206, 0.6614525876949], -[-0.03939960781507, 0.6651891307968], -[-0.03576716641041, 0.6648176406369], -[-0.03214831591875, 0.6644767266575], -[-0.02854210211864, 0.6641676557505], -[-0.02494746783111, 0.6638916429336], -[-0.02136325250135, 0.6636498314089], -[-0.0177881945137, 0.6634432714499], -[-0.01422093662308, 0.6632728988597], -[-0.01066003475683, 0.6631395139982], -[-0.007103970199587, 0.6630437623565], -[-0.003551164987869, 0.6629861179708], -[-2.149014722268e-13, 0.6629668706693], -[0.00355116498787, 0.6629861179708], -[0.007103970198311, 0.6630437623451], -[0.01066003475602, 0.6631395139933], -[0.01422093662388, 0.6632728988632], -[0.0177881945137, 0.6634432714499], -[0.02136325250285, 0.6636498314133], -[0.02494746783062, 0.6638916429324], -[0.02854210211702, 0.6641676557471], -[0.03214831591708, 0.6644767266544], -[0.0357671664099, 0.664817640636], -[0.03939960781507, 0.6651891307968], -[-0.03726197466034, 0.6688916200251], -[-0.0336636308705, 0.6685194908677], -[-0.0300792626715, 0.6681796545863], -[-0.02650783431354, 0.6678734806891], -[-0.02294819238525, 0.6676022778222], -[-0.01939906570885, 0.6673672698251], -[-0.01585906872728, 0.6671695704432], -[-0.0123267088601, 0.6670101577244], -[-0.00880039809746, 0.6668898493934], -[-0.005278468802096, 0.6668092806738], -[-0.001759193323816, 0.6667688860064], -[0.001759193323655, 0.666768886001], -[0.005278468801493, 0.6668092806669], -[0.008800398096809, 0.6668898493889], -[0.01232670886015, 0.6670101577246], -[0.01585906872879, 0.6671695704489], -[0.01939906571146, 0.667367269833], -[0.02294819238618, 0.6676022778246], -[0.02650783431327, 0.6678734806885], -[0.03007926267075, 0.6681796545848], -[0.03366363087012, 0.668519490867], -[0.03726197466034, 0.6688916200251], -[-0.03514435494196, 0.6725594449709], -[-0.03158142910504, 0.6721870246195], -[-0.028032899889, 0.6718487638007], -[-0.02449763694556, 0.6715461485175], -[-0.02097437465448, 0.6712805927151], -[-0.01746171252463, 0.6710534092725], -[-0.01395812010495, 0.6708657794617], -[-0.01046194701143, 0.6707187223463], -[-0.006971438325062, 0.670613065848], -[-0.003484755199678, 0.6705494214559], -[2.273853751777e-14, 0.6705281644805], -[0.003484755199586, 0.6705494214544], -[0.006971438324759, 0.6706130658455], -[0.01046194701127, 0.6707187223454], -[0.01395812010543, 0.6708657794637], -[0.017461712526, 0.6710534092769], -[0.02097437465578, 0.6712805927185], -[0.02449763694599, 0.6715461485185], -[0.02803289988888, 0.6718487638005], -[0.03158142910486, 0.6721870246192], -[0.03514435494196, 0.6725594449709], -[-0.0330475777279, 0.6761911696388], -[-0.02952151332905, 0.6758188356799], -[-0.0260103075112, 0.6754827003282], -[-0.02251271931214, 0.6751843826192], -[-0.01902735122622, 0.6749254154138], -[-0.01555265040322, 0.6747072098914], -[-0.01208691577416, 0.6745310184087], -[-0.008628311800311, 0.6743978976681], -[-0.005174889099755, 0.6743086747076], -[-0.001724611515551, 0.6742639183104], -[0.001724611515651, 0.6742639183136], -[0.005174889099749, 0.6743086747075], -[0.008628311800228, 0.6743978976676], -[0.01208691577423, 0.674531018409], -[0.01555265040357, 0.6747072098926], -[0.01902735122648, 0.6749254154146], -[0.0225127193125, 0.6751843826201], -[0.02601030751132, 0.6754827003285], -[0.02952151332903, 0.6758188356798], -[0.0330475777279, 0.6761911696388], -[-0.03097254775682, 0.6797852269761], -[-0.02748493020449, 0.6794133916273], -[-0.02401267948136, 0.6790799937035], -[-0.02055442416822, 0.678786805127], -[-0.0171086103684, 0.6785354935965], -[-0.01367350418405, 0.678327578702], -[-0.01024720204675, 0.6781643862991], -[-0.006827649761999, 0.6780470039937], -[-0.003412670379088, 0.6779762412007], -[-5.732404416244e-15, 0.677952597326], -[0.003412670379179, 0.677976241202], -[0.006827649762015, 0.6780470039939], -[0.01024720204675, 0.6781643862991], -[0.01367350418407, 0.6783275787021], -[0.01710861036813, 0.6785354935957], -[0.02055442416779, 0.678786805126], -[0.02401267948131, 0.6790799937034], -[0.02748493020449, 0.6794133916274], -[0.03097254775682, 0.6797852269761], -[-0.02892042707301, 0.6833391910113], -[-0.02547283673527, 0.6829690145536], -[-0.02204134389033, 0.6826390402759], -[-0.01862425194767, 0.6823519244294], -[-0.01521981973808, 0.6821094882313], -[-0.01182609618082, 0.6819133703957], -[-0.008440935349707, 0.6817649705754], -[-0.005062023122471, 0.6816653953208], -[-0.001686915199915, 0.6816154114139], -[0.001686915199916, 0.6816154114139], -[0.005062023122474, 0.6816653953208], -[0.008440935349708, 0.6817649705755], -[0.01182609618081, 0.6819133703957], -[0.01521981973794, 0.6821094882308], -[0.01862425194675, 0.6823519244271], -[0.02204134388997, 0.6826390402752], -[0.02547283673524, 0.6829690145536], -[0.02892042705286, 0.68333919098], -[-0.02689208664254, 0.6868526810276], -[-0.02348651998808, 0.6864838576071], -[-0.02009778817492, 0.686158083248], -[-0.0167238911461, 0.6858781209192], -[-0.01336286101798, 0.6856459672841], -[-0.01001248346297, 0.6854633910166], -[-0.006670319891184, 0.6853318620693], -[-0.003333745168574, 0.6852524858679], -[9.235540448393e-15, 0.6852259494176], -[0.003333745168464, 0.6852524858664], -[0.006670319891171, 0.6853318620692], -[0.01001248346297, 0.6854633910166], -[0.01336286101805, 0.6856459672843], -[0.01672389114628, 0.6858781209197], -[0.02009778817492, 0.686158083248], -[0.02348651998834, 0.6864838576076], -[0.02689208660613, 0.6868526809707], -[-0.02488870098299, 0.690322693066], -[-0.02152742187423, 0.6899558761548], -[-0.01818369105528, 0.6896351886406], -[-0.01485525692063, 0.6893636308704], -[-0.01153987372366, 0.6891434005848], -[-0.008235004411137, 0.6889764063969], -[-0.004937853636, 0.6888641784575], -[-0.001645421842983, 0.6888077883674], -[0.001645421842831, 0.6888077883634], -[0.00493785363609, 0.6888641784583], -[0.00823500441118, 0.6889764063971], -[0.01153987372357, 0.6891434005845], -[0.01485525692126, 0.6893636308721], -[0.01818369105764, 0.6896351886458], -[0.02152742187619, 0.6899558761584], -[0.02488870094205, 0.6903226930016], -[-0.02291170751258, 0.6937469652219], -[-0.01959717074693, 0.6933827919247], -[-0.01630096363552, 0.693068216208], -[-0.01302054080474, 0.6928065284518], -[-0.009753311246181, 0.6926001572794], -[-0.006496337276823, 0.6924511583465], -[-0.003246384410451, 0.6923611005793], -[-3.140083752454e-14, 0.6923309692673], -[0.003246384411053, 0.6923611005865], -[0.006496337277435, 0.6924511583501], -[0.009753311245559, 0.6926001572769], -[0.01302054080403, 0.6928065284497], -[0.01630096363827, 0.6930682162144], -[0.01959717074693, 0.6933827919247], -[0.0229117074674, 0.6937469651503], -[-0.02096263171367, 0.6971228749186], -[-0.01769762232945, 0.6967620478086], -[-0.01445180312891, 0.6964547839163], -[-0.01122227575254, 0.6962047063037], -[-0.008006013426135, 0.69601450846], -[-0.004799574287221, 0.6958863934943], -[-0.001599178036367, 0.6958219283197], -[0.001599178036367, 0.6958219283197], -[0.004799574289315, 0.6958863935094], -[0.008006013425593, 0.6960145084576], -[0.01122227574794, 0.6962047062893], -[0.01445180312379, 0.6964547839038], -[0.01769762232945, 0.6967620478086], -[0.02096263166559, 0.6971228748419], -[-0.01904261815676, 0.7004474003649], -[-0.01583091376608, 0.7000907501417], -[-0.0126387644902, 0.6997922244879], -[-0.009463422684554, 0.69955585581], -[-0.006301301708239, 0.6993846396542], -[-0.003148315755044, 0.6992809128959], -[-2.547735296109e-16, 0.6992461663624], -[0.003148315755043, 0.6992809128959], -[0.00630130170824, 0.6993846396542], -[0.009463422684555, 0.69955585581], -[0.0126387644902, 0.6997922244879], -[0.01583091376608, 0.7000907501417], -[0.01904261825204, 0.7004474005432], -[-0.01715494057457, 0.703717038583], -[-0.01399953650354, 0.7033655937127], -[-0.01086485801565, 0.7030775322318], -[-0.007747487829185, 0.7028574498822], -[-0.004643105356104, 0.7027086814617], -[-0.001546789393424, 0.7026336556096], -[0.001546789393423, 0.7026336556096], -[0.004643105356103, 0.7027086814617], -[0.007747487829186, 0.7028574498822], -[0.01086485801566, 0.7030775322318], -[0.01399953650354, 0.7033655937127], -[0.01715494064903, 0.703717038724], -[-0.01530122472793, 0.7069279049047], -[-0.01220643708209, 0.7065827626162], -[-0.0091336854778, 0.7063072978916], -[-0.006078685019474, 0.706106734256], -[-0.003036130604527, 0.7059847740025], -[-1.910801472081e-16, 0.7059438391265], -[0.003036130604525, 0.7059847740024], -[0.006078685019475, 0.706106734256], -[0.009133685477806, 0.7063072978916], -[0.0122064370821, 0.7065827626162], -[0.01530122477922, 0.7069279050031], -[-0.01348417195164, 0.7100752029387], -[-0.01045516068143, 0.7097377964457], -[-0.007449635737358, 0.7094776307085], -[-0.004462165133524, 0.7093007409056], -[-0.001486088481581, 0.7092111937514], -[0.001486088481579, 0.7092111937514], -[0.004462165133524, 0.7093007409056], -[0.007449635737367, 0.7094776307085], -[0.01045516068144, 0.7097377964458], -[0.01348417198416, 0.7100752030022], -[-0.01170705490348, 0.7131533709156], -[-0.008750062897309, 0.7128254055575], -[-0.005818175061802, 0.7125840693749], -[-0.002904347473578, 0.7124363528467], -[0, 0.7123865973633], -[0.002904347473583, 0.7124363528468], -[0.005818175061808, 0.7125840693749], -[0.008750062897347, 0.7128254055576], -[0.01170705491558, 0.7131533709406], -[-0.009973852849156, 0.7161554239324], -[-0.007096635880662, 0.7158392095518], -[-0.004246294870762, 0.7156214941554], -[-0.001413407446787, 0.7155104860681], -[0.001413407446826, 0.7155104860686], -[0.004246294870751, 0.7156214941554], -[0.007096635880663, 0.7158392095518], -[0.009973852841939, 0.7161554239204], -[-0.008289569299574, 0.7190727448679], -[-0.005502038084432, 0.7187713573025], -[-0.002743233167485, 0.7185840841089], -[2.420348531303e-15, 0.718520539208], -[0.002743233167643, 0.7185840841097], -[0.005502038083903, 0.7187713573011], -[0.008289569271268, 0.7190727448147], -[-0.006660687832536, 0.7218941356497], -[-0.003976015066116, 0.7216119625317], -[-0.001321693929486, 0.7214654635158], -[0.001321693931834, 0.7214654635368], -[0.003976015061832, 0.7216119625192], -[0.00666068778272, 0.7218941355537], -[-0.005096029795053, 0.7246042523881], -[-0.002532648385099, 0.7243482655417], -[2.547735296109e-16, 0.724259515524], -[0.002532648385105, 0.7243482655417], -[0.005096029717048, 0.7246042522349], -[-0.003608372490823, 0.727181000017], -[-0.001194098120486, 0.7269635223321], -[0.001194098120526, 0.7269635223324], -[0.003608372374348, 0.7271809997838], -[-0.002218253884721, 0.7295888083816], -[2.547735296109e-16, 0.7294368598531], -[0.002218253706294, 0.729588808016], -[-0.000965607490097, 0.7317585187421], -[0.000965607180279, 0.7317585180783], -[0, 0.7334312533308] diff --git a/LiveWeather/src/org/.DS_Store b/LiveWeather/src/org/.DS_Store deleted file mode 100755 index 2da12ae..0000000 Binary files a/LiveWeather/src/org/.DS_Store and /dev/null differ diff --git a/LiveWeather/src/org/bukkit/Achievement.java b/LiveWeather/src/org/bukkit/Achievement.java deleted file mode 100755 index 928b6d5..0000000 --- a/LiveWeather/src/org/bukkit/Achievement.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.bukkit; - -/** - * Represents an achievement, which may be given to players. - */ -public enum Achievement { - OPEN_INVENTORY, - MINE_WOOD (OPEN_INVENTORY), - BUILD_WORKBENCH (MINE_WOOD), - BUILD_PICKAXE (BUILD_WORKBENCH), - BUILD_FURNACE (BUILD_PICKAXE), - ACQUIRE_IRON (BUILD_FURNACE), - BUILD_HOE (BUILD_WORKBENCH), - MAKE_BREAD (BUILD_HOE), - BAKE_CAKE (BUILD_HOE), - BUILD_BETTER_PICKAXE (BUILD_PICKAXE), - COOK_FISH (BUILD_FURNACE), - ON_A_RAIL (ACQUIRE_IRON), - BUILD_SWORD (BUILD_WORKBENCH), - KILL_ENEMY (BUILD_SWORD), - KILL_COW (BUILD_SWORD), - FLY_PIG (KILL_COW), - SNIPE_SKELETON (KILL_ENEMY), - GET_DIAMONDS (ACQUIRE_IRON), - NETHER_PORTAL (GET_DIAMONDS), - GHAST_RETURN (NETHER_PORTAL), - GET_BLAZE_ROD (NETHER_PORTAL), - BREW_POTION (GET_BLAZE_ROD), - END_PORTAL (GET_BLAZE_ROD), - THE_END (END_PORTAL), - ENCHANTMENTS (GET_DIAMONDS), - OVERKILL (ENCHANTMENTS), - BOOKCASE (ENCHANTMENTS), - EXPLORE_ALL_BIOMES (END_PORTAL), - SPAWN_WITHER (THE_END), - KILL_WITHER (SPAWN_WITHER), - FULL_BEACON (KILL_WITHER), - BREED_COW (KILL_COW), - DIAMONDS_TO_YOU (GET_DIAMONDS), - ; - - private final Achievement parent; - - private Achievement() { - parent = null; - } - - private Achievement(Achievement parent) { - this.parent = parent; - } - - /** - * Returns whether or not this achievement has a parent achievement. - * - * @return whether the achievement has a parent achievement - */ - public boolean hasParent() { - return parent != null; - } - - /** - * Returns the parent achievement of this achievement, or null if none. - * - * @return the parent achievement or null - */ - public Achievement getParent() { - return parent; - } -} diff --git a/LiveWeather/src/org/bukkit/Art.java b/LiveWeather/src/org/bukkit/Art.java deleted file mode 100755 index ba66f16..0000000 --- a/LiveWeather/src/org/bukkit/Art.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bukkit; - -import java.util.HashMap; - -import org.apache.commons.lang.Validate; - -import com.google.common.collect.Maps; - -/** - * Represents the art on a painting - */ -public enum Art { - KEBAB(0, 1, 1), - AZTEC(1, 1, 1), - ALBAN(2, 1, 1), - AZTEC2(3, 1, 1), - BOMB(4, 1, 1), - PLANT(5, 1, 1), - WASTELAND(6, 1, 1), - POOL(7, 2, 1), - COURBET(8, 2, 1), - SEA(9, 2, 1), - SUNSET(10, 2, 1), - CREEBET(11, 2, 1), - WANDERER(12, 1, 2), - GRAHAM(13, 1, 2), - MATCH(14, 2, 2), - BUST(15, 2, 2), - STAGE(16, 2, 2), - VOID(17, 2, 2), - SKULL_AND_ROSES(18, 2, 2), - WITHER(19, 2, 2), - FIGHTERS(20, 4, 2), - POINTER(21, 4, 4), - PIGSCENE(22, 4, 4), - BURNINGSKULL(23, 4, 4), - SKELETON(24, 4, 3), - DONKEYKONG(25, 4, 3); - - private int id, width, height; - private static final HashMap BY_NAME = Maps.newHashMap(); - private static final HashMap BY_ID = Maps.newHashMap(); - - private Art(int id, int width, int height) { - this.id = id; - this.width = width; - this.height = height; - } - - /** - * Gets the width of the painting, in blocks - * - * @return The width of the painting, in blocks - */ - public int getBlockWidth() { - return width; - } - - /** - * Gets the height of the painting, in blocks - * - * @return The height of the painting, in blocks - */ - public int getBlockHeight() { - return height; - } - - /** - * Get the ID of this painting. - * - * @return The ID of this painting - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Get a painting by its numeric ID - * - * @param id The ID - * @return The painting - * @deprecated Magic value - */ - @Deprecated - public static Art getById(int id) { - return BY_ID.get(id); - } - - /** - * Get a painting by its unique name - *

- * This ignores underscores and capitalization - * - * @param name The name - * @return The painting - */ - public static Art getByName(String name) { - Validate.notNull(name, "Name cannot be null"); - - return BY_NAME.get(name.toLowerCase().replaceAll("_", "")); - } - - static { - for (Art art : values()) { - BY_ID.put(art.id, art); - BY_NAME.put(art.toString().toLowerCase().replaceAll("_", ""), art); - } - } -} diff --git a/LiveWeather/src/org/bukkit/BanEntry.java b/LiveWeather/src/org/bukkit/BanEntry.java deleted file mode 100755 index 986120e..0000000 --- a/LiveWeather/src/org/bukkit/BanEntry.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.bukkit; - -import java.util.Date; - -/** - * A single entry from a ban list. This may represent either a player ban or - * an IP ban. - *

- * Ban entries include the following properties: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
PropertyDescription
Target Name / IP AddressThe target name or IP address
Creation DateThe creation date of the ban
SourceThe source of the ban, such as a player, console, plugin, etc
Expiration DateThe expiration date of the ban
ReasonThe reason for the ban
- *

- * Unsaved information is not automatically written to the implementation's - * ban list, instead, the {@link #save()} method must be called to write the - * changes to the ban list. If this ban entry has expired (such as from an - * unban) and is no longer found in the list, the {@link #save()} call will - * re-add it to the list, therefore banning the victim specified. - *

- * Likewise, changes to the associated {@link BanList} or other entries may or - * may not be reflected in this entry. - */ -public interface BanEntry { - - /** - * Gets the target involved. This may be in the form of an IP or a player - * name. - * - * @return the target name or IP address - */ - public String getTarget(); - - /** - * Gets the date this ban entry was created. - * - * @return the creation date - */ - public Date getCreated(); - - /** - * Sets the date this ban entry was created. - * - * @param created the new created date, cannot be null - * @see #save() saving changes - */ - public void setCreated(Date created); - - /** - * Gets the source of this ban. - *

- * Note: A source is considered any String, although this is generally a - * player name. - * - * @return the source of the ban - */ - public String getSource(); - - /** - * Sets the source of this ban. - *

- * Note: A source is considered any String, although this is generally a - * player name. - * - * @param source the new source where null values become empty strings - * @see #save() saving changes - */ - public void setSource(String source); - - /** - * Gets the date this ban expires on, or null for no defined end date. - * - * @return the expiration date - */ - public Date getExpiration(); - - /** - * Sets the date this ban expires on. Null values are considered - * "infinite" bans. - * - * @param expiration the new expiration date, or null to indicate an - * eternity - * @see #save() saving changes - */ - public void setExpiration(Date expiration); - - /** - * Gets the reason for this ban. - * - * @return the ban reason, or null if not set - */ - public String getReason(); - - /** - * Sets the reason for this ban. Reasons must not be null. - * - * @param reason the new reason, null values assume the implementation - * default - * @see #save() saving changes - */ - public void setReason(String reason); - - /** - * Saves the ban entry, overwriting any previous data in the ban list. - *

- * Saving the ban entry of an unbanned player will cause the player to be - * banned once again. - */ - public void save(); -} diff --git a/LiveWeather/src/org/bukkit/BanList.java b/LiveWeather/src/org/bukkit/BanList.java deleted file mode 100755 index c21b858..0000000 --- a/LiveWeather/src/org/bukkit/BanList.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit; - -import java.util.Date; -import java.util.Set; - -/** - * A ban list, containing bans of some {@link Type}. - */ -public interface BanList { - - /** - * Represents a ban-type that a {@link BanList} may track. - */ - public enum Type { - /** - * Banned player names - */ - NAME, - /** - * Banned player IP addresses - */ - IP, - ; - } - - /** - * Gets a {@link BanEntry} by target. - * - * @param target entry parameter to search for - * @return the corresponding entry, or null if none found - */ - public BanEntry getBanEntry(String target); - - /** - * Adds a ban to the this list. If a previous ban exists, this will - * update the previous entry. - * - * @param target the target of the ban - * @param reason reason for the ban, null indicates implementation default - * @param expires date for the ban's expiration (unban), or null to imply - * forever - * @param source source of the ban, null indicates implementation default - * @return the entry for the newly created ban, or the entry for the - * (updated) previous ban - */ - public BanEntry addBan(String target, String reason, Date expires, String source); - - /** - * Gets a set containing every {@link BanEntry} in this list. - * - * @return an immutable set containing every entry tracked by this list - */ - public Set getBanEntries(); - - /** - * Gets if a {@link BanEntry} exists for the target, indicating an active - * ban status. - * - * @param target the target to find - * @return true if a {@link BanEntry} exists for the name, indicating an - * active ban status, false otherwise - */ - public boolean isBanned(String target); - - /** - * Removes the specified target from this list, therefore indicating a - * "not banned" status. - * - * @param target the target to remove from this list - */ - public void pardon(String target); -} diff --git a/LiveWeather/src/org/bukkit/BlockChangeDelegate.java b/LiveWeather/src/org/bukkit/BlockChangeDelegate.java deleted file mode 100755 index e6b9f0e..0000000 --- a/LiveWeather/src/org/bukkit/BlockChangeDelegate.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.bukkit; - -/** - * A delegate for handling block changes. This serves as a direct interface - * between generation algorithms in the server implementation and utilizing - * code. - */ -public interface BlockChangeDelegate { - - /** - * Set a block type at the specified coordinates without doing all world - * updates and notifications. - *

- * It is safe to have this call World.setTypeId, but it may be slower than - * World.setRawTypeId. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param typeId New block ID - * @return true if the block was set successfully - * @deprecated Magic value - */ - @Deprecated - public boolean setRawTypeId(int x, int y, int z, int typeId); - - /** - * Set a block type and data at the specified coordinates without doing - * all world updates and notifications. - *

- * It is safe to have this call World.setTypeId, but it may be slower than - * World.setRawTypeId. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param typeId New block ID - * @param data Block data - * @return true if the block was set successfully - * @deprecated Magic value - */ - @Deprecated - public boolean setRawTypeIdAndData(int x, int y, int z, int typeId, int data); - - /** - * Set a block type at the specified coordinates. - *

- * This method cannot call World.setRawTypeId, a full update is needed. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param typeId New block ID - * @return true if the block was set successfully - * @deprecated Magic value - */ - @Deprecated - public boolean setTypeId(int x, int y, int z, int typeId); - - /** - * Set a block type and data at the specified coordinates. - *

- * This method cannot call World.setRawTypeId, a full update is needed. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param typeId New block ID - * @param data Block data - * @return true if the block was set successfully - * @deprecated Magic value - */ - @Deprecated - public boolean setTypeIdAndData(int x, int y, int z, int typeId, int data); - - /** - * Get the block type at the location. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @return The block ID - * @deprecated Magic value - */ - @Deprecated - public int getTypeId(int x, int y, int z); - - /** - * Gets the height of the world. - * - * @return Height of the world - */ - public int getHeight(); - - /** - * Checks if the specified block is empty (air) or not. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @return True if the block is considered empty. - */ - public boolean isEmpty(int x, int y, int z); -} diff --git a/LiveWeather/src/org/bukkit/Bukkit.java b/LiveWeather/src/org/bukkit/Bukkit.java deleted file mode 100755 index 0f4890f..0000000 --- a/LiveWeather/src/org/bukkit/Bukkit.java +++ /dev/null @@ -1,750 +0,0 @@ -package org.bukkit; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.logging.Logger; - -import org.bukkit.Warning.WarningState; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.help.HelpMap; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemFactory; -import org.bukkit.inventory.Recipe; -import org.bukkit.map.MapView; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.ServicesManager; -import org.bukkit.plugin.messaging.Messenger; -import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.util.CachedServerIcon; - -import com.avaje.ebean.config.ServerConfig; - -/** - * Represents the Bukkit core, for version and Server singleton handling - */ -public final class Bukkit { - private static Server server; - - /** - * Static class cannot be initialized. - */ - private Bukkit() {} - - /** - * Gets the current {@link Server} singleton - * - * @return Server instance being ran - */ - public static Server getServer() { - return server; - } - - /** - * Attempts to set the {@link Server} singleton. - *

- * This cannot be done if the Server is already set. - * - * @param server Server instance - */ - public static void setServer(Server server) { - if (Bukkit.server != null) { - throw new UnsupportedOperationException("Cannot redefine singleton Server"); - } - - Bukkit.server = server; - server.getLogger().info("This server is running " + getName() + " version " + getVersion() + " (Implementing API version " + getBukkitVersion() + ")"); - } - - /** - * @see Server#getName() - */ - public static String getName() { - return server.getName(); - } - - /** - * @see Server#getVersion() - */ - public static String getVersion() { - return server.getVersion(); - } - - /** - * @see Server#getBukkitVersion() - */ - public static String getBukkitVersion() { - return server.getBukkitVersion(); - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - * - * @deprecated - * @see Server#_INVALID_getOnlinePlayers() - */ - @Deprecated - public static Player[] _INVALID_getOnlinePlayers() { - return server._INVALID_getOnlinePlayers(); - } - - /** - * @see Server#getOnlinePlayers() - */ - public static Collection getOnlinePlayers() { - return server.getOnlinePlayers(); - } - - /** - * @see Server#getMaxPlayers() - */ - public static int getMaxPlayers() { - return server.getMaxPlayers(); - } - - /** - * @see Server#getPort() - */ - public static int getPort() { - return server.getPort(); - } - - /** - * @see Server#getViewDistance() - */ - public static int getViewDistance() { - return server.getViewDistance(); - } - - /** - * @see Server#getIp() - */ - public static String getIp() { - return server.getIp(); - } - - /** - * @see Server#getServerName() - */ - public static String getServerName() { - return server.getServerName(); - } - - /** - * @see Server#getServerId() - */ - public static String getServerId() { - return server.getServerId(); - } - - /** - * @see Server#getWorldType() - */ - public static String getWorldType() { - return server.getWorldType(); - } - - /** - * @see Server#getGenerateStructures() - */ - public static boolean getGenerateStructures() { - return server.getGenerateStructures(); - } - - /** - * @see Server#getAllowNether() - */ - public static boolean getAllowNether() { - return server.getAllowNether(); - } - - /** - * @see Server#hasWhitelist() - */ - public static boolean hasWhitelist() { - return server.hasWhitelist(); - } - - /** - * @see Server#broadcastMessage(String message) - */ - public static int broadcastMessage(String message) { - return server.broadcastMessage(message); - } - - /** - * @see Server#getUpdateFolder() - */ - public static String getUpdateFolder() { - return server.getUpdateFolder(); - } - - /** - * @see Server#getPlayer(String name) - */ - @Deprecated - public static Player getPlayer(String name) { - return server.getPlayer(name); - } - - /** - * @see Server#matchPlayer(String name) - */ - @Deprecated - public static List matchPlayer(String name) { - return server.matchPlayer(name); - } - - /** - * @see Server#getPlayer(java.util.UUID) - */ - public static Player getPlayer(UUID id) { - return server.getPlayer(id); - } - - /** - * @see Server#getPluginManager() - */ - public static PluginManager getPluginManager() { - return server.getPluginManager(); - } - - /** - * @see Server#getScheduler() - */ - public static BukkitScheduler getScheduler() { - return server.getScheduler(); - } - - /** - * @see Server#getServicesManager() - */ - public static ServicesManager getServicesManager() { - return server.getServicesManager(); - } - - /** - * @see Server#getWorlds() - */ - public static List getWorlds() { - return server.getWorlds(); - } - - /** - * @see Server#createWorld(WorldCreator options) - */ - public static World createWorld(WorldCreator options) { - return server.createWorld(options); - } - - /** - * @see Server#unloadWorld(String name, boolean save) - */ - public static boolean unloadWorld(String name, boolean save) { - return server.unloadWorld(name, save); - } - - /** - * @see Server#unloadWorld(World world, boolean save) - */ - public static boolean unloadWorld(World world, boolean save) { - return server.unloadWorld(world, save); - } - - /** - * @see Server#getWorld(String name) - */ - public static World getWorld(String name) { - return server.getWorld(name); - } - - /** - * @see Server#getWorld(UUID uid) - */ - public static World getWorld(UUID uid) { - return server.getWorld(uid); - } - - /** - * @see Server#getMap(short id) - * @deprecated Magic value - */ - @Deprecated - public static MapView getMap(short id) { - return server.getMap(id); - } - - /** - * @see Server#createMap(World world) - */ - public static MapView createMap(World world) { - return server.createMap(world); - } - - /** - * @see Server#reload() - */ - public static void reload() { - server.reload(); - } - - /** - * @see Server#getLogger() - */ - public static Logger getLogger() { - return server.getLogger(); - } - - /** - * @see Server#getPluginCommand(String name) - */ - public static PluginCommand getPluginCommand(String name) { - return server.getPluginCommand(name); - } - - /** - * @see Server#savePlayers() - */ - public static void savePlayers() { - server.savePlayers(); - } - - /** - * @see Server#dispatchCommand(CommandSender sender, String commandLine) - */ - public static boolean dispatchCommand(CommandSender sender, String commandLine) throws CommandException { - return server.dispatchCommand(sender, commandLine); - } - - /** - * @see Server#configureDbConfig(ServerConfig config) - */ - public static void configureDbConfig(ServerConfig config) { - server.configureDbConfig(config); - } - - /** - * @see Server#addRecipe(Recipe recipe) - */ - public static boolean addRecipe(Recipe recipe) { - return server.addRecipe(recipe); - } - - /** - * @see Server#getRecipesFor(ItemStack result) - */ - public static List getRecipesFor(ItemStack result) { - return server.getRecipesFor(result); - } - - /** - * @see Server#recipeIterator() - */ - public static Iterator recipeIterator() { - return server.recipeIterator(); - } - - /** - * @see Server#clearRecipes() - */ - public static void clearRecipes() { - server.clearRecipes(); - } - - /** - * @see Server#resetRecipes() - */ - public static void resetRecipes() { - server.resetRecipes(); - } - - /** - * @see Server#getCommandAliases() - */ - public static Map getCommandAliases() { - return server.getCommandAliases(); - } - - /** - * @see Server#getSpawnRadius() - */ - public static int getSpawnRadius() { - return server.getSpawnRadius(); - } - - /** - * @see Server#setSpawnRadius(int value) - */ - public static void setSpawnRadius(int value) { - server.setSpawnRadius(value); - } - - /** - * @see Server#getOnlineMode() - */ - public static boolean getOnlineMode() { - return server.getOnlineMode(); - } - - /** - * @see Server#getAllowFlight() - */ - public static boolean getAllowFlight() { - return server.getAllowFlight(); - } - - /** - * @see Server#isHardcore() - */ - public static boolean isHardcore() { - return server.isHardcore(); - } - - /** - * @see Server#shutdown() - */ - public static void shutdown() { - server.shutdown(); - } - - /** - * @see Server#broadcast(String message, String permission) - */ - public static int broadcast(String message, String permission) { - return server.broadcast(message, permission); - } - - /** - * @see Server#getOfflinePlayer(String name) - */ - @Deprecated - public static OfflinePlayer getOfflinePlayer(String name) { - return server.getOfflinePlayer(name); - } - - /** - * @see Server#getOfflinePlayer(java.util.UUID) - */ - public static OfflinePlayer getOfflinePlayer(UUID id) { - return server.getOfflinePlayer(id); - } - - /** - * @see Server#getPlayerExact(String name) - */ - @Deprecated - public static Player getPlayerExact(String name) { - return server.getPlayerExact(name); - } - - /** - * @see Server#getIPBans() - */ - public static Set getIPBans() { - return server.getIPBans(); - } - - /** - * @see Server#banIP(String address) - */ - public static void banIP(String address) { - server.banIP(address); - } - - /** - * @see Server#unbanIP(String address) - */ - public static void unbanIP(String address) { - server.unbanIP(address); - } - - /** - * @see Server#getBannedPlayers() - */ - public static Set getBannedPlayers() { - return server.getBannedPlayers(); - } - - /** - * @see Server#getBanList(BanList.Type) - */ - public static BanList getBanList(BanList.Type type){ - return server.getBanList(type); - } - - /** - * @see Server#setWhitelist(boolean value) - */ - public static void setWhitelist(boolean value) { - server.setWhitelist(value); - } - - /** - * @see Server#getWhitelistedPlayers() - */ - public static Set getWhitelistedPlayers() { - return server.getWhitelistedPlayers(); - } - - /** - * @see Server#reloadWhitelist() - */ - public static void reloadWhitelist() { - server.reloadWhitelist(); - } - - /** - * @see Server#getConsoleSender() - */ - public static ConsoleCommandSender getConsoleSender() { - return server.getConsoleSender(); - } - - /** - * @see Server#getOperators() - */ - public static Set getOperators() { - return server.getOperators(); - } - - /** - * @see Server#getWorldContainer() - */ - public static File getWorldContainer() { - return server.getWorldContainer(); - } - - /** - * @see Server#getMessenger() - */ - public static Messenger getMessenger() { - return server.getMessenger(); - } - - /** - * @see Server#getAllowEnd() - */ - public static boolean getAllowEnd() { - return server.getAllowEnd(); - } - - /** - * @see Server#getUpdateFolderFile() - */ - public static File getUpdateFolderFile() { - return server.getUpdateFolderFile(); - } - - /** - * @see Server#getConnectionThrottle() - */ - public static long getConnectionThrottle() { - return server.getConnectionThrottle(); - } - - /** - * @see Server#getTicksPerAnimalSpawns() - */ - public static int getTicksPerAnimalSpawns() { - return server.getTicksPerAnimalSpawns(); - } - - /** - * @see Server#getTicksPerMonsterSpawns() - */ - public static int getTicksPerMonsterSpawns() { - return server.getTicksPerMonsterSpawns(); - } - - /** - * @see Server#useExactLoginLocation() - */ - public static boolean useExactLoginLocation() { - return server.useExactLoginLocation(); - } - - /** - * @see Server#getDefaultGameMode() - */ - public static GameMode getDefaultGameMode() { - return server.getDefaultGameMode(); - } - - /** - * @see Server#setDefaultGameMode(GameMode mode) - */ - public static void setDefaultGameMode(GameMode mode) { - server.setDefaultGameMode(mode); - } - - /** - * @see Server#getOfflinePlayers() - */ - public static OfflinePlayer[] getOfflinePlayers() { - return server.getOfflinePlayers(); - } - - /** - * @see Server#createInventory(InventoryHolder owner, InventoryType type) - */ - public static Inventory createInventory(InventoryHolder owner, InventoryType type) { - return server.createInventory(owner, type); - } - - /** - * @see Server#createInventory(InventoryHolder owner, InventoryType type, String title) - */ - public static Inventory createInventory(InventoryHolder owner, InventoryType type, String title) { - return server.createInventory(owner, type, title); - } - - /** - * @see Server#createInventory(InventoryHolder owner, int size) - */ - public static Inventory createInventory(InventoryHolder owner, int size) throws IllegalArgumentException { - return server.createInventory(owner, size); - } - - /** - * @see Server#createInventory(InventoryHolder owner, int size, String - * title) - */ - public static Inventory createInventory(InventoryHolder owner, int size, String title) throws IllegalArgumentException { - return server.createInventory(owner, size, title); - } - - /** - * @see Server#getHelpMap() - */ - public static HelpMap getHelpMap() { - return server.getHelpMap(); - } - - /** - * @see Server#getMonsterSpawnLimit() - */ - public static int getMonsterSpawnLimit() { - return server.getMonsterSpawnLimit(); - } - - /** - * @see Server#getAnimalSpawnLimit() - */ - public static int getAnimalSpawnLimit() { - return server.getAnimalSpawnLimit(); - } - - /** - * @see Server#getWaterAnimalSpawnLimit() - */ - public static int getWaterAnimalSpawnLimit() { - return server.getWaterAnimalSpawnLimit(); - } - - /** - * @see Server#getAmbientSpawnLimit() - */ - public static int getAmbientSpawnLimit() { - return server.getAmbientSpawnLimit(); - } - - /** - * @see Server#isPrimaryThread() - */ - public static boolean isPrimaryThread() { - return server.isPrimaryThread(); - } - - /** - * @see Server#getMotd() - */ - public static String getMotd() { - return server.getMotd(); - } - - /** - * @see Server#getShutdownMessage() - */ - public static String getShutdownMessage() { - return server.getShutdownMessage(); - } - - /** - * @see Server#getWarningState() - */ - public static WarningState getWarningState() { - return server.getWarningState(); - } - - /** - * @see Server#getItemFactory() - */ - public static ItemFactory getItemFactory() { - return server.getItemFactory(); - } - - /** - * @see Server#getScoreboardManager() - */ - public static ScoreboardManager getScoreboardManager() { - return server.getScoreboardManager(); - } - - /** - * @see Server#getServerIcon() - */ - public static CachedServerIcon getServerIcon() { - return server.getServerIcon(); - } - - /** - * @see Server#loadServerIcon(File) - */ - public static CachedServerIcon loadServerIcon(File file) throws IllegalArgumentException, Exception { - return server.loadServerIcon(file); - } - - /** - * @see Server#loadServerIcon(BufferedImage) - */ - public static CachedServerIcon loadServerIcon(BufferedImage image) throws IllegalArgumentException, Exception { - return server.loadServerIcon(image); - } - - /** - * @see Server#setIdleTimeout(int) - */ - public static void setIdleTimeout(int threshold) { - server.setIdleTimeout(threshold); - } - - /** - * @see Server#getIdleTimeout() - */ - public static int getIdleTimeout() { - return server.getIdleTimeout(); - } - - /** - * @see Server#getUnsafe() - */ - @Deprecated - public static UnsafeValues getUnsafe() { - return server.getUnsafe(); - } -} diff --git a/LiveWeather/src/org/bukkit/ChatColor.java b/LiveWeather/src/org/bukkit/ChatColor.java deleted file mode 100755 index 0bbc9fa..0000000 --- a/LiveWeather/src/org/bukkit/ChatColor.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.bukkit; - -import java.util.Map; -import java.util.regex.Pattern; - -import org.apache.commons.lang.Validate; - -import com.google.common.collect.Maps; - -/** - * All supported color values for chat - */ -public enum ChatColor { - /** - * Represents black - */ - BLACK('0', 0x00), - /** - * Represents dark blue - */ - DARK_BLUE('1', 0x1), - /** - * Represents dark green - */ - DARK_GREEN('2', 0x2), - /** - * Represents dark blue (aqua) - */ - DARK_AQUA('3', 0x3), - /** - * Represents dark red - */ - DARK_RED('4', 0x4), - /** - * Represents dark purple - */ - DARK_PURPLE('5', 0x5), - /** - * Represents gold - */ - GOLD('6', 0x6), - /** - * Represents gray - */ - GRAY('7', 0x7), - /** - * Represents dark gray - */ - DARK_GRAY('8', 0x8), - /** - * Represents blue - */ - BLUE('9', 0x9), - /** - * Represents green - */ - GREEN('a', 0xA), - /** - * Represents aqua - */ - AQUA('b', 0xB), - /** - * Represents red - */ - RED('c', 0xC), - /** - * Represents light purple - */ - LIGHT_PURPLE('d', 0xD), - /** - * Represents yellow - */ - YELLOW('e', 0xE), - /** - * Represents white - */ - WHITE('f', 0xF), - /** - * Represents magical characters that change around randomly - */ - MAGIC('k', 0x10, true), - /** - * Makes the text bold. - */ - BOLD('l', 0x11, true), - /** - * Makes a line appear through the text. - */ - STRIKETHROUGH('m', 0x12, true), - /** - * Makes the text appear underlined. - */ - UNDERLINE('n', 0x13, true), - /** - * Makes the text italic. - */ - ITALIC('o', 0x14, true), - /** - * Resets all previous chat colors or formats. - */ - RESET('r', 0x15); - - /** - * The special character which prefixes all chat colour codes. Use this if - * you need to dynamically convert colour codes from your custom format. - */ - public static final char COLOR_CHAR = '\u00A7'; - private static final Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-FK-OR]"); - - private final int intCode; - private final char code; - private final boolean isFormat; - private final String toString; - private final static Map BY_ID = Maps.newHashMap(); - private final static Map BY_CHAR = Maps.newHashMap(); - - private ChatColor(char code, int intCode) { - this(code, intCode, false); - } - - private ChatColor(char code, int intCode, boolean isFormat) { - this.code = code; - this.intCode = intCode; - this.isFormat = isFormat; - this.toString = new String(new char[] {COLOR_CHAR, code}); - } - - /** - * Gets the char value associated with this color - * - * @return A char value of this color code - */ - public char getChar() { - return code; - } - - @Override - public String toString() { - return toString; - } - - /** - * Checks if this code is a format code as opposed to a color code. - */ - public boolean isFormat() { - return isFormat; - } - - /** - * Checks if this code is a color code as opposed to a format code. - */ - public boolean isColor() { - return !isFormat && this != RESET; - } - - /** - * Gets the color represented by the specified color code - * - * @param code Code to check - * @return Associative {@link org.bukkit.ChatColor} with the given code, - * or null if it doesn't exist - */ - public static ChatColor getByChar(char code) { - return BY_CHAR.get(code); - } - - /** - * Gets the color represented by the specified color code - * - * @param code Code to check - * @return Associative {@link org.bukkit.ChatColor} with the given code, - * or null if it doesn't exist - */ - public static ChatColor getByChar(String code) { - Validate.notNull(code, "Code cannot be null"); - Validate.isTrue(code.length() > 0, "Code must have at least one char"); - - return BY_CHAR.get(code.charAt(0)); - } - - /** - * Strips the given message of all color codes - * - * @param input String to strip of color - * @return A copy of the input string, without any coloring - */ - public static String stripColor(final String input) { - if (input == null) { - return null; - } - - return STRIP_COLOR_PATTERN.matcher(input).replaceAll(""); - } - - /** - * Translates a string using an alternate color code character into a - * string that uses the internal ChatColor.COLOR_CODE color code - * character. The alternate color code character will only be replaced if - * it is immediately followed by 0-9, A-F, a-f, K-O, k-o, R or r. - * - * @param altColorChar The alternate color code character to replace. Ex: & - * @param textToTranslate Text containing the alternate color code character. - * @return Text containing the ChatColor.COLOR_CODE color code character. - */ - public static String translateAlternateColorCodes(char altColorChar, String textToTranslate) { - char[] b = textToTranslate.toCharArray(); - for (int i = 0; i < b.length - 1; i++) { - if (b[i] == altColorChar && "0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(b[i+1]) > -1) { - b[i] = ChatColor.COLOR_CHAR; - b[i+1] = Character.toLowerCase(b[i+1]); - } - } - return new String(b); - } - - /** - * Gets the ChatColors used at the end of the given input string. - * - * @param input Input string to retrieve the colors from. - * @return Any remaining ChatColors to pass onto the next line. - */ - public static String getLastColors(String input) { - String result = ""; - int length = input.length(); - - // Search backwards from the end as it is faster - for (int index = length - 1; index > -1; index--) { - char section = input.charAt(index); - if (section == COLOR_CHAR && index < length - 1) { - char c = input.charAt(index + 1); - ChatColor color = getByChar(c); - - if (color != null) { - result = color.toString() + result; - - // Once we find a color or reset we can stop searching - if (color.isColor() || color.equals(RESET)) { - break; - } - } - } - } - - return result; - } - - static { - for (ChatColor color : values()) { - BY_ID.put(color.intCode, color); - BY_CHAR.put(color.code, color); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Chunk.java b/LiveWeather/src/org/bukkit/Chunk.java deleted file mode 100755 index 0510151..0000000 --- a/LiveWeather/src/org/bukkit/Chunk.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Entity; - -/** - * Represents a chunk of blocks - */ -public interface Chunk { - - /** - * Gets the X-coordinate of this chunk - * - * @return X-coordinate - */ - int getX(); - - /** - * Gets the Z-coordinate of this chunk - * - * @return Z-coordinate - */ - int getZ(); - - /** - * Gets the world containing this chunk - * - * @return Parent World - */ - World getWorld(); - - /** - * Gets a block from this chunk - * - * @param x 0-15 - * @param y 0-127 - * @param z 0-15 - * @return the Block - */ - Block getBlock(int x, int y, int z); - - /** - * Capture thread-safe read-only snapshot of chunk data - * - * @return ChunkSnapshot - */ - ChunkSnapshot getChunkSnapshot(); - - /** - * Capture thread-safe read-only snapshot of chunk data - * - * @param includeMaxblocky - if true, snapshot includes per-coordinate - * maximum Y values - * @param includeBiome - if true, snapshot includes per-coordinate biome - * type - * @param includeBiomeTempRain - if true, snapshot includes per-coordinate - * raw biome temperature and rainfall - * @return ChunkSnapshot - */ - ChunkSnapshot getChunkSnapshot(boolean includeMaxblocky, boolean includeBiome, boolean includeBiomeTempRain); - - /** - * Get a list of all entities in the chunk. - * - * @return The entities. - */ - Entity[] getEntities(); - - /** - * Get a list of all tile entities in the chunk. - * - * @return The tile entities. - */ - BlockState[] getTileEntities(); - - /** - * Checks if the chunk is loaded. - * - * @return True if it is loaded. - */ - boolean isLoaded(); - - /** - * Loads the chunk. - * - * @param generate Whether or not to generate a chunk if it doesn't - * already exist - * @return true if the chunk has loaded successfully, otherwise false - */ - boolean load(boolean generate); - - /** - * Loads the chunk. - * - * @return true if the chunk has loaded successfully, otherwise false - */ - boolean load(); - - /** - * Unloads and optionally saves the Chunk - * - * @param save Controls whether the chunk is saved - * @param safe Controls whether to unload the chunk when players are - * nearby - * @return true if the chunk has unloaded successfully, otherwise false - */ - boolean unload(boolean save, boolean safe); - - /** - * Unloads and optionally saves the Chunk - * - * @param save Controls whether the chunk is saved - * @return true if the chunk has unloaded successfully, otherwise false - */ - boolean unload(boolean save); - - /** - * Unloads and optionally saves the Chunk - * - * @return true if the chunk has unloaded successfully, otherwise false - */ - boolean unload(); -} diff --git a/LiveWeather/src/org/bukkit/ChunkSnapshot.java b/LiveWeather/src/org/bukkit/ChunkSnapshot.java deleted file mode 100755 index 83fccc8..0000000 --- a/LiveWeather/src/org/bukkit/ChunkSnapshot.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit; - -import org.bukkit.block.Biome; - -/** - * Represents a static, thread-safe snapshot of chunk of blocks. - *

- * Purpose is to allow clean, efficient copy of a chunk data to be made, and - * then handed off for processing in another thread (e.g. map rendering) - */ -public interface ChunkSnapshot { - - /** - * Gets the X-coordinate of this chunk - * - * @return X-coordinate - */ - int getX(); - - /** - * Gets the Z-coordinate of this chunk - * - * @return Z-coordinate - */ - int getZ(); - - /** - * Gets name of the world containing this chunk - * - * @return Parent World Name - */ - String getWorldName(); - - /** - * Get block type for block at corresponding coordinate in the chunk - * - * @param x 0-15 - * @param y 0-127 - * @param z 0-15 - * @return 0-255 - * @deprecated Magic value - */ - @Deprecated - int getBlockTypeId(int x, int y, int z); - - /** - * Get block data for block at corresponding coordinate in the chunk - * - * @param x 0-15 - * @param y 0-127 - * @param z 0-15 - * @return 0-15 - * @deprecated Magic value - */ - @Deprecated - int getBlockData(int x, int y, int z); - - /** - * Get sky light level for block at corresponding coordinate in the chunk - * - * @param x 0-15 - * @param y 0-127 - * @param z 0-15 - * @return 0-15 - */ - int getBlockSkyLight(int x, int y, int z); - - /** - * Get light level emitted by block at corresponding coordinate in the - * chunk - * - * @param x 0-15 - * @param y 0-127 - * @param z 0-15 - * @return 0-15 - */ - int getBlockEmittedLight(int x, int y, int z); - - /** - * Gets the highest non-air coordinate at the given coordinates - * - * @param x X-coordinate of the blocks - * @param z Z-coordinate of the blocks - * @return Y-coordinate of the highest non-air block - */ - int getHighestBlockYAt(int x, int z); - - /** - * Get biome at given coordinates - * - * @param x X-coordinate - * @param z Z-coordinate - * @return Biome at given coordinate - */ - Biome getBiome(int x, int z); - - /** - * Get raw biome temperature (0.0-1.0) at given coordinate - * - * @param x X-coordinate - * @param z Z-coordinate - * @return temperature at given coordinate - */ - double getRawBiomeTemperature(int x, int z); - - /** - * Get raw biome rainfall (0.0-1.0) at given coordinate - * - * @param x X-coordinate - * @param z Z-coordinate - * @return rainfall at given coordinate - */ - double getRawBiomeRainfall(int x, int z); - - /** - * Get world full time when chunk snapshot was captured - * - * @return time in ticks - */ - long getCaptureFullTime(); - - /** - * Test if section is empty - * - * @param sy - section Y coordinate (block Y / 16) - * @return true if empty, false if not - */ - boolean isSectionEmpty(int sy); -} diff --git a/LiveWeather/src/org/bukkit/CoalType.java b/LiveWeather/src/org/bukkit/CoalType.java deleted file mode 100755 index 4fcccd2..0000000 --- a/LiveWeather/src/org/bukkit/CoalType.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the two types of coal - */ -public enum CoalType { - COAL(0x0), - CHARCOAL(0x1); - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - private CoalType(final int data) { - this.data = (byte) data; - } - - /** - * Gets the associated data value representing this type of coal - * - * @return A byte containing the data value of this coal type - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the type of coal with the given data value - * - * @param data Data value to fetch - * @return The {@link CoalType} representing the given value, or null if - * it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static CoalType getByData(final byte data) { - return BY_DATA.get(data); - } - - static { - for (CoalType type : values()) { - BY_DATA.put(type.data, type); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Color.java b/LiveWeather/src/org/bukkit/Color.java deleted file mode 100755 index 76ff651..0000000 --- a/LiveWeather/src/org/bukkit/Color.java +++ /dev/null @@ -1,344 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.SerializableAs; - -import com.google.common.collect.ImmutableMap; - -/** - * A container for a color palette. This class is immutable; the set methods - * return a new color. The color names listed as fields are HTML4 standards, - * but subject to change. - */ -@SerializableAs("Color") -public final class Color implements ConfigurationSerializable { - private static final int BIT_MASK = 0xff; - - /** - * White, or (0xFF,0xFF,0xFF) in (R,G,B) - */ - public static final Color WHITE = fromRGB(0xFFFFFF); - - /** - * Silver, or (0xC0,0xC0,0xC0) in (R,G,B) - */ - public static final Color SILVER = fromRGB(0xC0C0C0); - - /** - * Gray, or (0x80,0x80,0x80) in (R,G,B) - */ - public static final Color GRAY = fromRGB(0x808080); - - /** - * Black, or (0x00,0x00,0x00) in (R,G,B) - */ - public static final Color BLACK = fromRGB(0x000000); - - /** - * Red, or (0xFF,0x00,0x00) in (R,G,B) - */ - public static final Color RED = fromRGB(0xFF0000); - - /** - * Maroon, or (0x80,0x00,0x00) in (R,G,B) - */ - public static final Color MAROON = fromRGB(0x800000); - - /** - * Yellow, or (0xFF,0xFF,0x00) in (R,G,B) - */ - public static final Color YELLOW = fromRGB(0xFFFF00); - - /** - * Olive, or (0x80,0x80,0x00) in (R,G,B) - */ - public static final Color OLIVE = fromRGB(0x808000); - - /** - * Lime, or (0x00,0xFF,0x00) in (R,G,B) - */ - public static final Color LIME = fromRGB(0x00FF00); - - /** - * Green, or (0x00,0x80,0x00) in (R,G,B) - */ - public static final Color GREEN = fromRGB(0x008000); - - /** - * Aqua, or (0x00,0xFF,0xFF) in (R,G,B) - */ - public static final Color AQUA = fromRGB(0x00FFFF); - - /** - * Teal, or (0x00,0x80,0x80) in (R,G,B) - */ - public static final Color TEAL = fromRGB(0x008080); - - /** - * Blue, or (0x00,0x00,0xFF) in (R,G,B) - */ - public static final Color BLUE = fromRGB(0x0000FF); - - /** - * Navy, or (0x00,0x00,0x80) in (R,G,B) - */ - public static final Color NAVY = fromRGB(0x000080); - - /** - * Fuchsia, or (0xFF,0x00,0xFF) in (R,G,B) - */ - public static final Color FUCHSIA = fromRGB(0xFF00FF); - - /** - * Purple, or (0x80,0x00,0x80) in (R,G,B) - */ - public static final Color PURPLE = fromRGB(0x800080); - - /** - * Orange, or (0xFF,0xA5,0x00) in (R,G,B) - */ - public static final Color ORANGE = fromRGB(0xFFA500); - - private final byte red; - private final byte green; - private final byte blue; - - /** - * Creates a new Color object from a red, green, and blue - * - * @param red integer from 0-255 - * @param green integer from 0-255 - * @param blue integer from 0-255 - * @return a new Color object for the red, green, blue - * @throws IllegalArgumentException if any value is strictly >255 or <0 - */ - public static Color fromRGB(int red, int green, int blue) throws IllegalArgumentException { - return new Color(red, green, blue); - } - - /** - * Creates a new Color object from a blue, green, and red - * - * @param blue integer from 0-255 - * @param green integer from 0-255 - * @param red integer from 0-255 - * @return a new Color object for the red, green, blue - * @throws IllegalArgumentException if any value is strictly >255 or <0 - */ - public static Color fromBGR(int blue, int green, int red) throws IllegalArgumentException { - return new Color(red, green, blue); - } - - /** - * Creates a new color object from an integer that contains the red, - * green, and blue bytes in the lowest order 24 bits. - * - * @param rgb the integer storing the red, green, and blue values - * @return a new color object for specified values - * @throws IllegalArgumentException if any data is in the highest order 8 - * bits - */ - public static Color fromRGB(int rgb) throws IllegalArgumentException { - Validate.isTrue((rgb >> 24) == 0, "Extrenuous data in: ", rgb); - return fromRGB(rgb >> 16 & BIT_MASK, rgb >> 8 & BIT_MASK, rgb >> 0 & BIT_MASK); - } - - /** - * Creates a new color object from an integer that contains the blue, - * green, and red bytes in the lowest order 24 bits. - * - * @param bgr the integer storing the blue, green, and red values - * @return a new color object for specified values - * @throws IllegalArgumentException if any data is in the highest order 8 - * bits - */ - public static Color fromBGR(int bgr) throws IllegalArgumentException { - Validate.isTrue((bgr >> 24) == 0, "Extrenuous data in: ", bgr); - return fromBGR(bgr >> 16 & BIT_MASK, bgr >> 8 & BIT_MASK, bgr >> 0 & BIT_MASK); - } - - private Color(int red, int green, int blue) { - Validate.isTrue(red >= 0 && red <= BIT_MASK, "Red is not between 0-255: ", red); - Validate.isTrue(green >= 0 && green <= BIT_MASK, "Green is not between 0-255: ", green); - Validate.isTrue(blue >= 0 && blue <= BIT_MASK, "Blue is not between 0-255: ", blue); - - this.red = (byte) red; - this.green = (byte) green; - this.blue = (byte) blue; - } - - /** - * Gets the red component - * - * @return red component, from 0 to 255 - */ - public int getRed() { - return BIT_MASK & red; - } - - /** - * Creates a new Color object with specified component - * - * @param red the red component, from 0 to 255 - * @return a new color object with the red component - */ - public Color setRed(int red) { - return fromRGB(red, getGreen(), getBlue()); - } - - /** - * Gets the green component - * - * @return green component, from 0 to 255 - */ - public int getGreen() { - return BIT_MASK & green; - } - - /** - * Creates a new Color object with specified component - * - * @param green the red component, from 0 to 255 - * @return a new color object with the red component - */ - public Color setGreen(int green) { - return fromRGB(getRed(), green, getBlue()); - } - - /** - * Gets the blue component - * - * @return blue component, from 0 to 255 - */ - public int getBlue() { - return BIT_MASK & blue; - } - - /** - * Creates a new Color object with specified component - * - * @param blue the red component, from 0 to 255 - * @return a new color object with the red component - */ - public Color setBlue(int blue) { - return fromRGB(getRed(), getGreen(), blue); - } - - /** - * - * @return An integer representation of this color, as 0xRRGGBB - */ - public int asRGB() { - return getRed() << 16 | getGreen() << 8 | getBlue() << 0; - } - - /** - * - * @return An integer representation of this color, as 0xBBGGRR - */ - public int asBGR() { - return getBlue() << 16 | getGreen() << 8 | getRed() << 0; - } - - /** - * Creates a new color with its RGB components changed as if it was dyed - * with the colors passed in, replicating vanilla workbench dyeing - * - * @param colors The DyeColors to dye with - * @return A new color with the changed rgb components - */ - // TODO: Javadoc what this method does, not what it mimics. API != Implementation - public Color mixDyes(DyeColor... colors) { - Validate.noNullElements(colors, "Colors cannot be null"); - - Color[] toPass = new Color[colors.length]; - for (int i = 0; i < colors.length; i++) { - toPass[i] = colors[i].getColor(); - } - - return mixColors(toPass); - } - - /** - * Creates a new color with its RGB components changed as if it was dyed - * with the colors passed in, replicating vanilla workbench dyeing - * - * @param colors The colors to dye with - * @return A new color with the changed rgb components - */ - // TODO: Javadoc what this method does, not what it mimics. API != Implementation - public Color mixColors(Color... colors) { - Validate.noNullElements(colors, "Colors cannot be null"); - - int totalRed = this.getRed(); - int totalGreen = this.getGreen(); - int totalBlue = this.getBlue(); - int totalMax = Math.max(Math.max(totalRed, totalGreen), totalBlue); - for (Color color : colors) { - totalRed += color.getRed(); - totalGreen += color.getGreen(); - totalBlue += color.getBlue(); - totalMax += Math.max(Math.max(color.getRed(), color.getGreen()), color.getBlue()); - } - - float averageRed = totalRed / (colors.length + 1); - float averageGreen = totalGreen / (colors.length + 1); - float averageBlue = totalBlue / (colors.length + 1); - float averageMax = totalMax / (colors.length + 1); - - float maximumOfAverages = Math.max(Math.max(averageRed, averageGreen), averageBlue); - float gainFactor = averageMax / maximumOfAverages; - - return Color.fromRGB((int) (averageRed * gainFactor), (int) (averageGreen * gainFactor), (int) (averageBlue * gainFactor)); - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof Color)) { - return false; - } - final Color that = (Color) o; - return this.blue == that.blue && this.green == that.green && this.red == that.red; - } - - @Override - public int hashCode() { - return asRGB() ^ Color.class.hashCode(); - } - - public Map serialize() { - return ImmutableMap.of( - "RED", getRed(), - "BLUE", getBlue(), - "GREEN", getGreen() - ); - } - - @SuppressWarnings("javadoc") - public static Color deserialize(Map map) { - return fromRGB( - asInt("RED", map), - asInt("GREEN", map), - asInt("BLUE", map) - ); - } - - private static int asInt(String string, Map map) { - Object value = map.get(string); - if (value == null) { - throw new IllegalArgumentException(string + " not in map " + map); - } - if (!(value instanceof Number)) { - throw new IllegalArgumentException(string + '(' + value + ") is not a number"); - } - return ((Number) value).intValue(); - } - - @Override - public String toString() { - return "Color:[rgb0x" + Integer.toHexString(getRed()).toUpperCase() + Integer.toHexString(getGreen()).toUpperCase() + Integer.toHexString(getBlue()).toUpperCase() + "]"; - } -} diff --git a/LiveWeather/src/org/bukkit/CropState.java b/LiveWeather/src/org/bukkit/CropState.java deleted file mode 100755 index ef0faf9..0000000 --- a/LiveWeather/src/org/bukkit/CropState.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the different growth states of crops - */ -public enum CropState { - - /** - * State when first seeded - */ - SEEDED(0x0), - /** - * First growth stage - */ - GERMINATED(0x1), - /** - * Second growth stage - */ - VERY_SMALL(0x2), - /** - * Third growth stage - */ - SMALL(0x3), - /** - * Fourth growth stage - */ - MEDIUM(0x4), - /** - * Fifth growth stage - */ - TALL(0x5), - /** - * Almost ripe stage - */ - VERY_TALL(0x6), - /** - * Ripe stage - */ - RIPE(0x7); - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - private CropState(final int data) { - this.data = (byte) data; - } - - /** - * Gets the associated data value representing this growth state - * - * @return A byte containing the data value of this growth state - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the CropState with the given data value - * - * @param data Data value to fetch - * @return The {@link CropState} representing the given value, or null if - * it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static CropState getByData(final byte data) { - return BY_DATA.get(data); - } - - static { - for (CropState cropState : values()) { - BY_DATA.put(cropState.getData(), cropState); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Difficulty.java b/LiveWeather/src/org/bukkit/Difficulty.java deleted file mode 100755 index a8a5a78..0000000 --- a/LiveWeather/src/org/bukkit/Difficulty.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the various difficulty levels that are available. - */ -public enum Difficulty { - /** - * Players regain health over time, hostile mobs don't spawn, the hunger - * bar does not deplete. - */ - PEACEFUL(0), - - /** - * Hostile mobs spawn, enemies deal less damage than on normal difficulty, - * the hunger bar does deplete and starving deals up to 5 hearts of - * damage. (Default value) - */ - EASY(1), - - /** - * Hostile mobs spawn, enemies deal normal amounts of damage, the hunger - * bar does deplete and starving deals up to 9.5 hearts of damage. - */ - NORMAL(2), - - /** - * Hostile mobs spawn, enemies deal greater damage than on normal - * difficulty, the hunger bar does deplete and starving can kill players. - */ - HARD(3); - - private final int value; - private final static Map BY_ID = Maps.newHashMap(); - - private Difficulty(final int value) { - this.value = value; - } - - /** - * Gets the difficulty value associated with this Difficulty. - * - * @return An integer value of this difficulty - * @deprecated Magic value - */ - @Deprecated - public int getValue() { - return value; - } - - /** - * Gets the Difficulty represented by the specified value - * - * @param value Value to check - * @return Associative {@link Difficulty} with the given value, or null if - * it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static Difficulty getByValue(final int value) { - return BY_ID.get(value); - } - - static { - for (Difficulty diff : values()) { - BY_ID.put(diff.value, diff); - } - } -} diff --git a/LiveWeather/src/org/bukkit/DyeColor.java b/LiveWeather/src/org/bukkit/DyeColor.java deleted file mode 100755 index 214806e..0000000 --- a/LiveWeather/src/org/bukkit/DyeColor.java +++ /dev/null @@ -1,239 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.ImmutableMap; - -/** - * All supported color values for dyes and cloth - */ -public enum DyeColor { - - /** - * Represents white dye. - */ - WHITE(0x0, 0xF, Color.WHITE, Color.fromRGB(0xF0F0F0)), - /** - * Represents orange dye. - */ - ORANGE(0x1, 0xE, Color.fromRGB(0xD87F33), Color.fromRGB(0xEB8844)), - /** - * Represents magenta dye. - */ - MAGENTA(0x2, 0xD, Color.fromRGB(0xB24CD8), Color.fromRGB(0xC354CD)), - /** - * Represents light blue dye. - */ - LIGHT_BLUE(0x3, 0xC, Color.fromRGB(0x6699D8), Color.fromRGB(0x6689D3)), - /** - * Represents yellow dye. - */ - YELLOW(0x4, 0xB, Color.fromRGB(0xE5E533), Color.fromRGB(0xDECF2A)), - /** - * Represents lime dye. - */ - LIME(0x5, 0xA, Color.fromRGB(0x7FCC19), Color.fromRGB(0x41CD34)), - /** - * Represents pink dye. - */ - PINK(0x6, 0x9, Color.fromRGB(0xF27FA5), Color.fromRGB(0xD88198)), - /** - * Represents gray dye. - */ - GRAY(0x7, 0x8, Color.fromRGB(0x4C4C4C), Color.fromRGB(0x434343)), - /** - * Represents silver dye. - */ - SILVER(0x8, 0x7, Color.fromRGB(0x999999), Color.fromRGB(0xABABAB)), - /** - * Represents cyan dye. - */ - CYAN(0x9, 0x6, Color.fromRGB(0x4C7F99), Color.fromRGB(0x287697)), - /** - * Represents purple dye. - */ - PURPLE(0xA, 0x5, Color.fromRGB(0x7F3FB2), Color.fromRGB(0x7B2FBE)), - /** - * Represents blue dye. - */ - BLUE(0xB, 0x4, Color.fromRGB(0x334CB2), Color.fromRGB(0x253192)), - /** - * Represents brown dye. - */ - BROWN(0xC, 0x3, Color.fromRGB(0x664C33), Color.fromRGB(0x51301A)), - /** - * Represents green dye. - */ - GREEN(0xD, 0x2, Color.fromRGB(0x667F33), Color.fromRGB(0x3B511A)), - /** - * Represents red dye. - */ - RED(0xE, 0x1, Color.fromRGB(0x993333), Color.fromRGB(0xB3312C)), - /** - * Represents black dye. - */ - BLACK(0xF, 0x0, Color.fromRGB(0x191919), Color.fromRGB(0x1E1B1B)); - - private final byte woolData; - private final byte dyeData; - private final Color color; - private final Color firework; - private final static DyeColor[] BY_WOOL_DATA; - private final static DyeColor[] BY_DYE_DATA; - private final static Map BY_COLOR; - private final static Map BY_FIREWORK; - - private DyeColor(final int woolData, final int dyeData, Color color, Color firework) { - this.woolData = (byte) woolData; - this.dyeData = (byte) dyeData; - this.color = color; - this.firework = firework; - } - - /** - * Gets the associated (wool) data value representing this color. - * - * @return A byte containing the (wool) data value of this color - * @deprecated The name is misleading. It would imply {@link - * Material#INK_SACK} but uses {@link Material#WOOL} - * @see #getWoolData() - * @see #getDyeData() - */ - @Deprecated - public byte getData() { - return getWoolData(); - } - - /** - * Gets the associated wool data value representing this color. - * - * @return A byte containing the wool data value of this color - * @see #getDyeData() - * @deprecated Magic value - */ - @Deprecated - public byte getWoolData() { - return woolData; - } - - /** - * Gets the associated dye data value representing this color. - * - * @return A byte containing the dye data value of this color - * @see #getWoolData() - * @deprecated Magic value - */ - @Deprecated - public byte getDyeData() { - return dyeData; - } - - /** - * Gets the color that this dye represents. - * - * @return The {@link Color} that this dye represents - */ - public Color getColor() { - return color; - } - - /** - * Gets the firework color that this dye represents. - * - * @return The {@link Color} that this dye represents - */ - public Color getFireworkColor() { - return firework; - } - - /** - * Gets the DyeColor with the given (wool) data value. - * - * @param data (wool) data value to fetch - * @return The {@link DyeColor} representing the given value, or null if - * it doesn't exist - * @deprecated The name is misleading. It would imply {@link - * Material#INK_SACK} but uses {@link Material#WOOL} - * @see #getByDyeData(byte) - * @see #getByWoolData(byte) - */ - @Deprecated - public static DyeColor getByData(final byte data) { - return getByWoolData(data); - } - - /** - * Gets the DyeColor with the given wool data value. - * - * @param data Wool data value to fetch - * @return The {@link DyeColor} representing the given value, or null if - * it doesn't exist - * @see #getByDyeData(byte) - * @deprecated Magic value - */ - @Deprecated - public static DyeColor getByWoolData(final byte data) { - int i = 0xff & data; - if (i >= BY_WOOL_DATA.length) { - return null; - } - return BY_WOOL_DATA[i]; - } - - /** - * Gets the DyeColor with the given dye data value. - * - * @param data Dye data value to fetch - * @return The {@link DyeColor} representing the given value, or null if - * it doesn't exist - * @see #getByWoolData(byte) - * @deprecated Magic value - */ - @Deprecated - public static DyeColor getByDyeData(final byte data) { - int i = 0xff & data; - if (i >= BY_DYE_DATA.length) { - return null; - } - return BY_DYE_DATA[i]; - } - - /** - * Gets the DyeColor with the given color value. - * - * @param color Color value to get the dye by - * @return The {@link DyeColor} representing the given value, or null if - * it doesn't exist - */ - public static DyeColor getByColor(final Color color) { - return BY_COLOR.get(color); - } - - /** - * Gets the DyeColor with the given firework color value. - * - * @param color Color value to get dye by - * @return The {@link DyeColor} representing the given value, or null if - * it doesn't exist - */ - public static DyeColor getByFireworkColor(final Color color) { - return BY_FIREWORK.get(color); - } - - static { - BY_WOOL_DATA = values(); - BY_DYE_DATA = values(); - ImmutableMap.Builder byColor = ImmutableMap.builder(); - ImmutableMap.Builder byFirework = ImmutableMap.builder(); - - for (DyeColor color : values()) { - BY_WOOL_DATA[color.woolData & 0xff] = color; - BY_DYE_DATA[color.dyeData & 0xff] = color; - byColor.put(color.getColor(), color); - byFirework.put(color.getFireworkColor(), color); - } - - BY_COLOR = byColor.build(); - BY_FIREWORK = byFirework.build(); - } -} diff --git a/LiveWeather/src/org/bukkit/Effect.java b/LiveWeather/src/org/bukkit/Effect.java deleted file mode 100755 index 9d6aca6..0000000 --- a/LiveWeather/src/org/bukkit/Effect.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -import org.bukkit.block.BlockFace; -import org.bukkit.potion.Potion; - -/** - * A list of effects that the server is able to send to players. - */ -public enum Effect { - /** - * An alternate click sound. - */ - CLICK2(1000, Type.SOUND), - /** - * A click sound. - */ - CLICK1(1001, Type.SOUND), - /** - * Sound of a bow firing. - */ - BOW_FIRE(1002, Type.SOUND), - /** - * Sound of a door opening/closing. - */ - DOOR_TOGGLE(1003, Type.SOUND), - /** - * Sound of fire being extinguished. - */ - EXTINGUISH(1004, Type.SOUND), - /** - * A song from a record. Needs the record item ID as additional info. - */ - RECORD_PLAY(1005, Type.SOUND, Material.class), - /** - * Sound of ghast shrieking. - */ - GHAST_SHRIEK(1007, Type.SOUND), - /** - * Sound of ghast firing. - */ - GHAST_SHOOT(1008, Type.SOUND), - /** - * Sound of blaze firing. - */ - BLAZE_SHOOT(1009, Type.SOUND), - /** - * Sound of zombies chewing on wooden doors. - */ - ZOMBIE_CHEW_WOODEN_DOOR(1010, Type.SOUND), - /** - * Sound of zombies chewing on iron doors. - */ - ZOMBIE_CHEW_IRON_DOOR(1011, Type.SOUND), - /** - * Sound of zombies destroying a door. - */ - ZOMBIE_DESTROY_DOOR(1012, Type.SOUND), - /** - * A visual smoke effect. Needs direction as additional info. - */ - SMOKE(2000, Type.VISUAL, BlockFace.class), - /** - * Sound of a block breaking. Needs block ID as additional info. - */ - STEP_SOUND(2001, Type.SOUND, Material.class), - /** - * Visual effect of a splash potion breaking. Needs potion data value as - * additional info. - */ - POTION_BREAK(2002, Type.VISUAL, Potion.class), - /** - * An ender eye signal; a visual effect. - */ - ENDER_SIGNAL(2003, Type.VISUAL), - /** - * The flames seen on a mobspawner; a visual effect. - */ - MOBSPAWNER_FLAMES(2004, Type.VISUAL); - - private final int id; - private final Type type; - private final Class data; - private static final Map BY_ID = Maps.newHashMap(); - - Effect(int id, Type type) { - this(id,type,null); - } - - Effect(int id, Type type, Class data) { - this.id = id; - this.type = type; - this.data = data; - } - - /** - * Gets the ID for this effect. - * - * @return ID of this effect - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return this.id; - } - - /** - * @return The type of the effect. - */ - public Type getType() { - return this.type; - } - - /** - * @return The class which represents data for this effect, or null if - * none - */ - public Class getData() { - return this.data; - } - - /** - * Gets the Effect associated with the given ID. - * - * @param id ID of the Effect to return - * @return Effect with the given ID - * @deprecated Magic value - */ - @Deprecated - public static Effect getById(int id) { - return BY_ID.get(id); - } - - static { - for (Effect effect : values()) { - BY_ID.put(effect.id, effect); - } - } - - /** - * Represents the type of an effect. - */ - public enum Type {SOUND, VISUAL} -} diff --git a/LiveWeather/src/org/bukkit/EntityEffect.java b/LiveWeather/src/org/bukkit/EntityEffect.java deleted file mode 100755 index ec7d1e3..0000000 --- a/LiveWeather/src/org/bukkit/EntityEffect.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * A list of all Effects that can happen to entities. - */ -public enum EntityEffect { - - /** - * When mobs get hurt. - */ - HURT(2), - - /** - * When a mob dies. - *

- * This will cause client-glitches! - */ - DEATH(3), - - /** - * The smoke when taming a wolf fails. - *

- * Without client-mods this will be ignored if the entity is not a wolf. - */ - WOLF_SMOKE(6), - - /** - * The hearts when taming a wolf succeeds. - *

- * Without client-mods this will be ignored if the entity is not a wolf. - */ - WOLF_HEARTS(7), - - /** - * When a wolf shakes (after being wet). - *

- * Without client-mods this will be ignored if the entity is not a wolf. - */ - WOLF_SHAKE(8), - - /** - * When a sheep eats a LONG_GRASS block. - */ - SHEEP_EAT(10), - - /** - * When an Iron Golem gives a rose. - *

- * This will not play an effect if the entity is not an iron golem. - */ - IRON_GOLEM_ROSE(11), - - /** - * Hearts from a villager. - *

- * This will not play an effect if the entity is not a villager. - */ - VILLAGER_HEART(12), - - /** - * When a villager is angry. - *

- * This will not play an effect if the entity is not a villager. - */ - VILLAGER_ANGRY(13), - - /** - * Happy particles from a villager. - *

- * This will not play an effect if the entity is not a villager. - */ - VILLAGER_HAPPY(14), - - /** - * Magic particles from a witch. - *

- * This will not play an effect if the entity is not a witch. - */ - WITCH_MAGIC(15), - - /** - * When a zombie transforms into a villager by shaking violently. - *

- * This will not play an effect if the entity is not a zombie. - */ - ZOMBIE_TRANSFORM(16), - - /** - * When a firework explodes. - *

- * This will not play an effect if the entity is not a firework. - */ - FIREWORK_EXPLODE(17); - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - EntityEffect(final int data) { - this.data = (byte) data; - } - - /** - * Gets the data value of this EntityEffect - * - * @return The data value - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the EntityEffect with the given data value - * - * @param data Data value to fetch - * @return The {@link EntityEffect} representing the given value, or null - * if it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static EntityEffect getByData(final byte data) { - return BY_DATA.get(data); - } - - - static { - for (EntityEffect entityEffect : values()) { - BY_DATA.put(entityEffect.data, entityEffect); - } - } -} diff --git a/LiveWeather/src/org/bukkit/FireworkEffect.java b/LiveWeather/src/org/bukkit/FireworkEffect.java deleted file mode 100755 index 6f2d096..0000000 --- a/LiveWeather/src/org/bukkit/FireworkEffect.java +++ /dev/null @@ -1,421 +0,0 @@ -package org.bukkit; - -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.SerializableAs; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - -/** - * Represents a single firework effect. - */ -@SerializableAs("Firework") -public final class FireworkEffect implements ConfigurationSerializable { - - /** - * The type or shape of the effect. - */ - public enum Type { - /** - * A small ball effect. - */ - BALL, - /** - * A large ball effect. - */ - BALL_LARGE, - /** - * A star-shaped effect. - */ - STAR, - /** - * A burst effect. - */ - BURST, - /** - * A creeper-face effect. - */ - CREEPER, - ; - } - - /** - * Construct a firework effect. - * - * @return A utility object for building a firework effect - */ - public static Builder builder() { - return new Builder(); - } - - /** - * This is a builder for FireworkEffects. - * - * @see FireworkEffect#builder() - */ - public static final class Builder { - boolean flicker = false; - boolean trail = false; - final ImmutableList.Builder colors = ImmutableList.builder(); - ImmutableList.Builder fadeColors = null; - Type type = Type.BALL; - - Builder() {} - - /** - * Specify the type of the firework effect. - * - * @param type The effect type - * @return This object, for chaining - * @throws IllegalArgumentException If type is null - */ - public Builder with(Type type) throws IllegalArgumentException { - Validate.notNull(type, "Cannot have null type"); - this.type = type; - return this; - } - - /** - * Add a flicker to the firework effect. - * - * @return This object, for chaining - */ - public Builder withFlicker() { - flicker = true; - return this; - } - - /** - * Set whether the firework effect should flicker. - * - * @param flicker true if it should flicker, false if not - * @return This object, for chaining - */ - public Builder flicker(boolean flicker) { - this.flicker = flicker; - return this; - } - - /** - * Add a trail to the firework effect. - * - * @return This object, for chaining - */ - public Builder withTrail() { - trail = true; - return this; - } - - /** - * Set whether the firework effect should have a trail. - * - * @param trail true if it should have a trail, false for no trail - * @return This object, for chaining - */ - public Builder trail(boolean trail) { - this.trail = trail; - return this; - } - - /** - * Add a primary color to the firework effect. - * - * @param color The color to add - * @return This object, for chaining - * @throws IllegalArgumentException If color is null - */ - public Builder withColor(Color color) throws IllegalArgumentException { - Validate.notNull(color, "Cannot have null color"); - - colors.add(color); - - return this; - } - - /** - * Add several primary colors to the firework effect. - * - * @param colors The colors to add - * @return This object, for chaining - * @throws IllegalArgumentException If colors is null - * @throws IllegalArgumentException If any color is null (may be - * thrown after changes have occurred) - */ - public Builder withColor(Color...colors) throws IllegalArgumentException { - Validate.notNull(colors, "Cannot have null colors"); - if (colors.length == 0) { - return this; - } - - ImmutableList.Builder list = this.colors; - for (Color color : colors) { - Validate.notNull(color, "Color cannot be null"); - list.add(color); - } - - return this; - } - - /** - * Add several primary colors to the firework effect. - * - * @param colors An iterable object whose iterator yields the desired - * colors - * @return This object, for chaining - * @throws IllegalArgumentException If colors is null - * @throws IllegalArgumentException If any color is null (may be - * thrown after changes have occurred) - */ - public Builder withColor(Iterable colors) throws IllegalArgumentException { - Validate.notNull(colors, "Cannot have null colors"); - - ImmutableList.Builder list = this.colors; - for (Object color : colors) { - if (!(color instanceof Color)) { - throw new IllegalArgumentException(color + " is not a Color in " + colors); - } - list.add((Color) color); - } - - return this; - } - - /** - * Add a fade color to the firework effect. - * - * @param color The color to add - * @return This object, for chaining - * @throws IllegalArgumentException If colors is null - * @throws IllegalArgumentException If any color is null (may be - * thrown after changes have occurred) - */ - public Builder withFade(Color color) throws IllegalArgumentException { - Validate.notNull(color, "Cannot have null color"); - - if (fadeColors == null) { - fadeColors = ImmutableList.builder(); - } - - fadeColors.add(color); - - return this; - } - - /** - * Add several fade colors to the firework effect. - * - * @param colors The colors to add - * @return This object, for chaining - * @throws IllegalArgumentException If colors is null - * @throws IllegalArgumentException If any color is null (may be - * thrown after changes have occurred) - */ - public Builder withFade(Color...colors) throws IllegalArgumentException { - Validate.notNull(colors, "Cannot have null colors"); - if (colors.length == 0) { - return this; - } - - ImmutableList.Builder list = this.fadeColors; - if (list == null) { - list = this.fadeColors = ImmutableList.builder(); - } - - for (Color color : colors) { - Validate.notNull(color, "Color cannot be null"); - list.add(color); - } - - return this; - } - - /** - * Add several fade colors to the firework effect. - * - * @param colors An iterable object whose iterator yields the desired - * colors - * @return This object, for chaining - * @throws IllegalArgumentException If colors is null - * @throws IllegalArgumentException If any color is null (may be - * thrown after changes have occurred) - */ - public Builder withFade(Iterable colors) throws IllegalArgumentException { - Validate.notNull(colors, "Cannot have null colors"); - - ImmutableList.Builder list = this.fadeColors; - if (list == null) { - list = this.fadeColors = ImmutableList.builder(); - } - - for (Object color : colors) { - if (!(color instanceof Color)) { - throw new IllegalArgumentException(color + " is not a Color in " + colors); - } - list.add((Color) color); - } - - return this; - } - - /** - * Create a {@link FireworkEffect} from the current contents of this - * builder. - *

- * To successfully build, you must have specified at least one color. - * - * @return The representative firework effect - */ - public FireworkEffect build() { - return new FireworkEffect( - flicker, - trail, - colors.build(), - fadeColors == null ? ImmutableList.of() : fadeColors.build(), - type - ); - } - } - - private static final String FLICKER = "flicker"; - private static final String TRAIL = "trail"; - private static final String COLORS = "colors"; - private static final String FADE_COLORS = "fade-colors"; - private static final String TYPE = "type"; - - private final boolean flicker; - private final boolean trail; - private final ImmutableList colors; - private final ImmutableList fadeColors; - private final Type type; - private String string = null; - - FireworkEffect(boolean flicker, boolean trail, ImmutableList colors, ImmutableList fadeColors, Type type) { - if (colors.isEmpty()) { - throw new IllegalStateException("Cannot make FireworkEffect without any color"); - } - this.flicker = flicker; - this.trail = trail; - this.colors = colors; - this.fadeColors = fadeColors; - this.type = type; - } - - /** - * Get whether the firework effect flickers. - * - * @return true if it flickers, false if not - */ - public boolean hasFlicker() { - return flicker; - } - - /** - * Get whether the firework effect has a trail. - * - * @return true if it has a trail, false if not - */ - public boolean hasTrail() { - return trail; - } - - /** - * Get the primary colors of the firework effect. - * - * @return An immutable list of the primary colors - */ - public List getColors() { - return colors; - } - - /** - * Get the fade colors of the firework effect. - * - * @return An immutable list of the fade colors - */ - public List getFadeColors() { - return fadeColors; - } - - /** - * Get the type of the firework effect. - * - * @return The effect type - */ - public Type getType() { - return type; - } - - /** - * @see ConfigurationSerializable - */ - public static ConfigurationSerializable deserialize(Map map) { - Type type = Type.valueOf((String) map.get(TYPE)); - if (type == null) { - throw new IllegalArgumentException(map.get(TYPE) + " is not a valid Type"); - } - - return builder() - .flicker((Boolean) map.get(FLICKER)) - .trail((Boolean) map.get(TRAIL)) - .withColor((Iterable) map.get(COLORS)) - .withFade((Iterable) map.get(FADE_COLORS)) - .with(type) - .build(); - } - - public Map serialize() { - return ImmutableMap.of( - FLICKER, flicker, - TRAIL, trail, - COLORS, colors, - FADE_COLORS, fadeColors, - TYPE, type.name() - ); - } - - @Override - public String toString() { - final String string = this.string; - if (string == null) { - return this.string = "FireworkEffect:" + serialize(); - } - return string; - } - - @Override - public int hashCode() { - /** - * TRUE and FALSE as per boolean.hashCode() - */ - final int PRIME = 31, TRUE = 1231, FALSE = 1237; - int hash = 1; - hash = hash * PRIME + (flicker ? TRUE : FALSE); - hash = hash * PRIME + (trail ? TRUE : FALSE); - hash = hash * PRIME + type.hashCode(); - hash = hash * PRIME + colors.hashCode(); - hash = hash * PRIME + fadeColors.hashCode(); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (!(obj instanceof FireworkEffect)) { - return false; - } - - FireworkEffect that = (FireworkEffect) obj; - return this.flicker == that.flicker - && this.trail == that.trail - && this.type == that.type - && this.colors.equals(that.colors) - && this.fadeColors.equals(that.fadeColors); - } -} diff --git a/LiveWeather/src/org/bukkit/GameMode.java b/LiveWeather/src/org/bukkit/GameMode.java deleted file mode 100755 index f85ed0b..0000000 --- a/LiveWeather/src/org/bukkit/GameMode.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import org.bukkit.entity.HumanEntity; - -import com.google.common.collect.Maps; - -/** - * Represents the various type of game modes that {@link HumanEntity}s may - * have - */ -public enum GameMode { - /** - * Creative mode may fly, build instantly, become invulnerable and create - * free items. - */ - CREATIVE(1), - - /** - * Survival mode is the "normal" gameplay type, with no special features. - */ - SURVIVAL(0), - - /** - * Adventure mode cannot break blocks without the correct tools. - */ - ADVENTURE(2); - - private final int value; - private final static Map BY_ID = Maps.newHashMap(); - - private GameMode(final int value) { - this.value = value; - } - - /** - * Gets the mode value associated with this GameMode - * - * @return An integer value of this gamemode - * @deprecated Magic value - */ - @Deprecated - public int getValue() { - return value; - } - - /** - * Gets the GameMode represented by the specified value - * - * @param value Value to check - * @return Associative {@link GameMode} with the given value, or null if - * it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static GameMode getByValue(final int value) { - return BY_ID.get(value); - } - - static { - for (GameMode mode : values()) { - BY_ID.put(mode.getValue(), mode); - } - } -} diff --git a/LiveWeather/src/org/bukkit/GrassSpecies.java b/LiveWeather/src/org/bukkit/GrassSpecies.java deleted file mode 100755 index 1111515..0000000 --- a/LiveWeather/src/org/bukkit/GrassSpecies.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the different types of grass. - */ -public enum GrassSpecies { - - /** - * Represents the dead looking grass. - */ - DEAD(0x0), - /** - * Represents the normal grass species. - */ - NORMAL(0x1), - /** - * Represents the fern-looking grass species. - */ - FERN_LIKE(0x2); - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - private GrassSpecies(final int data) { - this.data = (byte) data; - } - - /** - * Gets the associated data value representing this species - * - * @return A byte containing the data value of this grass species - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the GrassSpecies with the given data value - * - * @param data Data value to fetch - * @return The {@link GrassSpecies} representing the given value, or null - * if it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static GrassSpecies getByData(final byte data) { - return BY_DATA.get(data); - } - - static { - for (GrassSpecies grassSpecies : values()) { - BY_DATA.put(grassSpecies.getData(), grassSpecies); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Instrument.java b/LiveWeather/src/org/bukkit/Instrument.java deleted file mode 100755 index 891a2b1..0000000 --- a/LiveWeather/src/org/bukkit/Instrument.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -public enum Instrument { - - /** - * Piano is the standard instrument for a note block. - */ - PIANO(0x0), - /** - * Bass drum is normally played when a note block is on top of a - * stone-like block - */ - BASS_DRUM(0x1), - /** - * Snare drum is normally played when a note block is on top of a sandy - * block. - */ - SNARE_DRUM(0x2), - /** - * Sticks are normally played when a note block is on top of a glass - * block. - */ - STICKS(0x3), - /** - * Bass guitar is normally played when a note block is on top of a wooden - * block. - */ - BASS_GUITAR(0x4); - - private final byte type; - private final static Map BY_DATA = Maps.newHashMap(); - - private Instrument(final int type) { - this.type = (byte) type; - } - - /** - * @return The type ID of this instrument. - * @deprecated Magic value - */ - @Deprecated - public byte getType() { - return this.type; - } - - /** - * Get an instrument by its type ID. - * - * @param type The type ID - * @return The instrument - * @deprecated Magic value - */ - @Deprecated - public static Instrument getByType(final byte type) { - return BY_DATA.get(type); - } - - static { - for (Instrument instrument : Instrument.values()) { - BY_DATA.put(instrument.getType(), instrument); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Location.java b/LiveWeather/src/org/bukkit/Location.java deleted file mode 100755 index e083d97..0000000 --- a/LiveWeather/src/org/bukkit/Location.java +++ /dev/null @@ -1,560 +0,0 @@ -package org.bukkit; - -import org.bukkit.block.Block; -import org.bukkit.util.NumberConversions; -import org.bukkit.util.Vector; - -/** - * Represents a 3-dimensional position in a world - */ -public class Location implements Cloneable { - private World world; - private double x; - private double y; - private double z; - private float pitch; - private float yaw; - - /** - * Constructs a new Location with the given coordinates - * - * @param world The world in which this location resides - * @param x the x coordinate of this new location - * @param y the y coordinate of this new location - * @param z the z coordinate of this new location - */ - public Location(final World world, final double x, final double y, final double z) { - this(world, x, y, z, 0, 0); - } - - /** - * Constructs a new Location with the given coordinates and direction - * - * @param world The world in which this location resides - * @param x the x coordinate of this new location - * @param y the y coordinate of this new location - * @param z the z coordinate of this new location - * @param yaw the absolute rotation on the x-plane, in degrees - * @param pitch the absolute rotation on the y-plane, in degrees - */ - public Location(final World world, final double x, final double y, final double z, final float yaw, final float pitch) { - this.world = world; - this.x = x; - this.y = y; - this.z = z; - this.pitch = pitch; - this.yaw = yaw; - } - - /** - * Sets the world that this location resides in - * - * @param world New world that this location resides in - */ - public void setWorld(World world) { - this.world = world; - } - - /** - * Gets the world that this location resides in - * - * @return World that contains this location - */ - public World getWorld() { - return world; - } - - /** - * Gets the chunk at the represented location - * - * @return Chunk at the represented location - */ - public Chunk getChunk() { - return world.getChunkAt(this); - } - - /** - * Gets the block at the represented location - * - * @return Block at the represented location - */ - public Block getBlock() { - return world.getBlockAt(this); - } - - /** - * Sets the x coordinate of this location - * - * @param x the x coordinate - */ - public void setX(double x) { - this.x = x; - } - - /** - * Gets the x coordinate of this location - * - * @return x coordinate - */ - public double getX() { - return x; - } - - /** - * Gets the floored value of the X component, indicating the block that - * this location is contained with. - * - * @return block x - */ - public int getBlockX() { - return locToBlock(x); - } - - /** - * Sets the y coordinate of this location - * - * @param y the y coordinate - */ - public void setY(double y) { - this.y = y; - } - - /** - * Gets the y coordinate of this location - * - * @return y coordinate - */ - public double getY() { - return y; - } - - /** - * Gets the floored value of the Y component, indicating the block that - * this location is contained with. - * - * @return block y - */ - public int getBlockY() { - return locToBlock(y); - } - - /** - * Sets the z coordinate of this location - * - * @param z the z coordinate - */ - public void setZ(double z) { - this.z = z; - } - - /** - * Gets the z coordinate of this location - * - * @return z coordinate - */ - public double getZ() { - return z; - } - - /** - * Gets the floored value of the z component, indicating the block that - * this location is contained with. - * - * @return block z - */ - public int getBlockZ() { - return locToBlock(z); - } - - /** - * Sets the yaw of this location, measured in degrees. - *

    - *
  • A yaw of 0 or 360 represents the positive z direction. - *
  • A yaw of 180 represents the negative z direction. - *
  • A yaw of 90 represents the negative x direction. - *
  • A yaw of 270 represents the positive x direction. - *
- * Increasing yaw values are the equivalent of turning to your - * right-facing, increasing the scale of the next respective axis, and - * decreasing the scale of the previous axis. - * - * @param yaw new rotation's yaw - */ - public void setYaw(float yaw) { - this.yaw = yaw; - } - - /** - * Gets the yaw of this location, measured in degrees. - *
    - *
  • A yaw of 0 or 360 represents the positive z direction. - *
  • A yaw of 180 represents the negative z direction. - *
  • A yaw of 90 represents the negative x direction. - *
  • A yaw of 270 represents the positive x direction. - *
- * Increasing yaw values are the equivalent of turning to your - * right-facing, increasing the scale of the next respective axis, and - * decreasing the scale of the previous axis. - * - * @return the rotation's yaw - */ - public float getYaw() { - return yaw; - } - - /** - * Sets the pitch of this location, measured in degrees. - *
    - *
  • A pitch of 0 represents level forward facing. - *
  • A pitch of 90 represents downward facing, or negative y - * direction. - *
  • A pitch of -90 represents upward facing, or positive y direction. - *
      - * Increasing pitch values the equivalent of looking down. - * - * @param pitch new incline's pitch - */ - public void setPitch(float pitch) { - this.pitch = pitch; - } - - /** - * Gets the pitch of this location, measured in degrees. - *
        - *
      • A pitch of 0 represents level forward facing. - *
      • A pitch of 90 represents downward facing, or negative y - * direction. - *
      • A pitch of -90 represents upward facing, or positive y direction. - *
          - * Increasing pitch values the equivalent of looking down. - * - * @return the incline's pitch - */ - public float getPitch() { - return pitch; - } - - /** - * Gets a unit-vector pointing in the direction that this Location is - * facing. - * - * @return a vector pointing the direction of this location's {@link - * #getPitch() pitch} and {@link #getYaw() yaw} - */ - public Vector getDirection() { - Vector vector = new Vector(); - - double rotX = this.getYaw(); - double rotY = this.getPitch(); - - vector.setY(-Math.sin(Math.toRadians(rotY))); - - double xz = Math.cos(Math.toRadians(rotY)); - - vector.setX(-xz * Math.sin(Math.toRadians(rotX))); - vector.setZ(xz * Math.cos(Math.toRadians(rotX))); - - return vector; - } - - /** - * Sets the {@link #getYaw() yaw} and {@link #getPitch() pitch} to point - * in the direction of the vector. - */ - public Location setDirection(Vector vector) { - /* - * Sin = Opp / Hyp - * Cos = Adj / Hyp - * Tan = Opp / Adj - * - * x = -Opp - * z = Adj - */ - final double _2PI = 2 * Math.PI; - final double x = vector.getX(); - final double z = vector.getZ(); - - if (x == 0 && z == 0) { - pitch = vector.getY() > 0 ? -90 : 90; - return this; - } - - double theta = Math.atan2(-x, z); - yaw = (float) Math.toDegrees((theta + _2PI) % _2PI); - - double x2 = NumberConversions.square(x); - double z2 = NumberConversions.square(z); - double xz = Math.sqrt(x2 + z2); - pitch = (float) Math.toDegrees(Math.atan(-vector.getY() / xz)); - - return this; - } - - /** - * Adds the location by another. - * - * @see Vector - * @param vec The other location - * @return the same location - * @throws IllegalArgumentException for differing worlds - */ - public Location add(Location vec) { - if (vec == null || vec.getWorld() != getWorld()) { - throw new IllegalArgumentException("Cannot add Locations of differing worlds"); - } - - x += vec.x; - y += vec.y; - z += vec.z; - return this; - } - - /** - * Adds the location by a vector. - * - * @see Vector - * @param vec Vector to use - * @return the same location - */ - public Location add(Vector vec) { - this.x += vec.getX(); - this.y += vec.getY(); - this.z += vec.getZ(); - return this; - } - - /** - * Adds the location by another. Not world-aware. - * - * @see Vector - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the same location - */ - public Location add(double x, double y, double z) { - this.x += x; - this.y += y; - this.z += z; - return this; - } - - /** - * Subtracts the location by another. - * - * @see Vector - * @param vec The other location - * @return the same location - * @throws IllegalArgumentException for differing worlds - */ - public Location subtract(Location vec) { - if (vec == null || vec.getWorld() != getWorld()) { - throw new IllegalArgumentException("Cannot add Locations of differing worlds"); - } - - x -= vec.x; - y -= vec.y; - z -= vec.z; - return this; - } - - /** - * Subtracts the location by a vector. - * - * @see Vector - * @param vec The vector to use - * @return the same location - */ - public Location subtract(Vector vec) { - this.x -= vec.getX(); - this.y -= vec.getY(); - this.z -= vec.getZ(); - return this; - } - - /** - * Subtracts the location by another. Not world-aware and - * orientation independent. - * - * @see Vector - * @param x the x coordinate - * @param y the y coordinate - * @param z the z coordinate - * @return the same location - */ - public Location subtract(double x, double y, double z) { - this.x -= x; - this.y -= y; - this.z -= z; - return this; - } - - /** - * Gets the magnitude of the location, defined as sqrt(x^2+y^2+z^2). The - * value of this method is not cached and uses a costly square-root - * function, so do not repeatedly call this method to get the location's - * magnitude. NaN will be returned if the inner result of the sqrt() - * function overflows, which will be caused if the length is too long. Not - * world-aware and orientation independent. - * - * @see Vector - * @return the magnitude - */ - public double length() { - return Math.sqrt(NumberConversions.square(x) + NumberConversions.square(y) + NumberConversions.square(z)); - } - - /** - * Gets the magnitude of the location squared. Not world-aware and - * orientation independent. - * - * @see Vector - * @return the magnitude - */ - public double lengthSquared() { - return NumberConversions.square(x) + NumberConversions.square(y) + NumberConversions.square(z); - } - - /** - * Get the distance between this location and another. The value of this - * method is not cached and uses a costly square-root function, so do not - * repeatedly call this method to get the location's magnitude. NaN will - * be returned if the inner result of the sqrt() function overflows, which - * will be caused if the distance is too long. - * - * @see Vector - * @param o The other location - * @return the distance - * @throws IllegalArgumentException for differing worlds - */ - public double distance(Location o) { - return Math.sqrt(distanceSquared(o)); - } - - /** - * Get the squared distance between this location and another. - * - * @see Vector - * @param o The other location - * @return the distance - * @throws IllegalArgumentException for differing worlds - */ - public double distanceSquared(Location o) { - if (o == null) { - throw new IllegalArgumentException("Cannot measure distance to a null location"); - } else if (o.getWorld() == null || getWorld() == null) { - throw new IllegalArgumentException("Cannot measure distance to a null world"); - } else if (o.getWorld() != getWorld()) { - throw new IllegalArgumentException("Cannot measure distance between " + getWorld().getName() + " and " + o.getWorld().getName()); - } - - return NumberConversions.square(x - o.x) + NumberConversions.square(y - o.y) + NumberConversions.square(z - o.z); - } - - /** - * Performs scalar multiplication, multiplying all components with a - * scalar. Not world-aware. - * - * @param m The factor - * @see Vector - * @return the same location - */ - public Location multiply(double m) { - x *= m; - y *= m; - z *= m; - return this; - } - - /** - * Zero this location's components. Not world-aware. - * - * @see Vector - * @return the same location - */ - public Location zero() { - x = 0; - y = 0; - z = 0; - return this; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Location other = (Location) obj; - - if (this.world != other.world && (this.world == null || !this.world.equals(other.world))) { - return false; - } - if (Double.doubleToLongBits(this.x) != Double.doubleToLongBits(other.x)) { - return false; - } - if (Double.doubleToLongBits(this.y) != Double.doubleToLongBits(other.y)) { - return false; - } - if (Double.doubleToLongBits(this.z) != Double.doubleToLongBits(other.z)) { - return false; - } - if (Float.floatToIntBits(this.pitch) != Float.floatToIntBits(other.pitch)) { - return false; - } - if (Float.floatToIntBits(this.yaw) != Float.floatToIntBits(other.yaw)) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 3; - - hash = 19 * hash + (this.world != null ? this.world.hashCode() : 0); - hash = 19 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32)); - hash = 19 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32)); - hash = 19 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32)); - hash = 19 * hash + Float.floatToIntBits(this.pitch); - hash = 19 * hash + Float.floatToIntBits(this.yaw); - return hash; - } - - @Override - public String toString() { - return "Location{" + "world=" + world + ",x=" + x + ",y=" + y + ",z=" + z + ",pitch=" + pitch + ",yaw=" + yaw + '}'; - } - - /** - * Constructs a new {@link Vector} based on this Location - * - * @return New Vector containing the coordinates represented by this - * Location - */ - public Vector toVector() { - return new Vector(x, y, z); - } - - @Override - public Location clone() { - try { - return (Location) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } - - /** - * Safely converts a double (location coordinate) to an int (block - * coordinate) - * - * @param loc Precise coordinate - * @return Block coordinate - */ - public static int locToBlock(double loc) { - return NumberConversions.floor(loc); - } -} diff --git a/LiveWeather/src/org/bukkit/Material.java b/LiveWeather/src/org/bukkit/Material.java deleted file mode 100755 index c45c180..0000000 --- a/LiveWeather/src/org/bukkit/Material.java +++ /dev/null @@ -1,1034 +0,0 @@ -package org.bukkit; - -import java.lang.reflect.Constructor; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.map.MapView; -import org.bukkit.material.Bed; -import org.bukkit.material.Button; -import org.bukkit.material.Cake; -import org.bukkit.material.Cauldron; -import org.bukkit.material.Chest; -import org.bukkit.material.Coal; -import org.bukkit.material.CocoaPlant; -import org.bukkit.material.Command; -import org.bukkit.material.Crops; -import org.bukkit.material.DetectorRail; -import org.bukkit.material.Diode; -import org.bukkit.material.Dispenser; -import org.bukkit.material.Door; -import org.bukkit.material.Dye; -import org.bukkit.material.EnderChest; -import org.bukkit.material.FlowerPot; -import org.bukkit.material.Furnace; -import org.bukkit.material.Gate; -import org.bukkit.material.Ladder; -import org.bukkit.material.Lever; -import org.bukkit.material.LongGrass; -import org.bukkit.material.MaterialData; -import org.bukkit.material.MonsterEggs; -import org.bukkit.material.Mushroom; -import org.bukkit.material.NetherWarts; -import org.bukkit.material.PistonBaseMaterial; -import org.bukkit.material.PistonExtensionMaterial; -import org.bukkit.material.PoweredRail; -import org.bukkit.material.PressurePlate; -import org.bukkit.material.Pumpkin; -import org.bukkit.material.Rails; -import org.bukkit.material.RedstoneTorch; -import org.bukkit.material.RedstoneWire; -import org.bukkit.material.Sandstone; -import org.bukkit.material.Sign; -import org.bukkit.material.Skull; -import org.bukkit.material.SmoothBrick; -import org.bukkit.material.SpawnEgg; -import org.bukkit.material.Stairs; -import org.bukkit.material.Step; -import org.bukkit.material.Torch; -import org.bukkit.material.TrapDoor; -import org.bukkit.material.Tree; -import org.bukkit.material.Tripwire; -import org.bukkit.material.TripwireHook; -import org.bukkit.material.Vine; -import org.bukkit.material.WoodenStep; -import org.bukkit.material.Wool; -import org.bukkit.potion.Potion; -import org.bukkit.util.Java15Compat; - -import com.google.common.collect.Maps; - -/** - * An enum of all material IDs accepted by the official server and client - */ -public enum Material { - AIR(0, 0), - STONE(1), - GRASS(2), - DIRT(3), - COBBLESTONE(4), - WOOD(5, Tree.class), - SAPLING(6, Tree.class), - BEDROCK(7), - WATER(8, MaterialData.class), - STATIONARY_WATER(9, MaterialData.class), - LAVA(10, MaterialData.class), - STATIONARY_LAVA(11, MaterialData.class), - SAND(12), - GRAVEL(13), - GOLD_ORE(14), - IRON_ORE(15), - COAL_ORE(16), - LOG(17, Tree.class), - LEAVES(18, Tree.class), - SPONGE(19), - GLASS(20), - LAPIS_ORE(21), - LAPIS_BLOCK(22), - DISPENSER(23, Dispenser.class), - SANDSTONE(24, Sandstone.class), - NOTE_BLOCK(25), - BED_BLOCK(26, Bed.class), - POWERED_RAIL(27, PoweredRail.class), - DETECTOR_RAIL(28, DetectorRail.class), - PISTON_STICKY_BASE(29, PistonBaseMaterial.class), - WEB(30), - LONG_GRASS(31, LongGrass.class), - DEAD_BUSH(32), - PISTON_BASE(33, PistonBaseMaterial.class), - PISTON_EXTENSION(34, PistonExtensionMaterial.class), - WOOL(35, Wool.class), - PISTON_MOVING_PIECE(36), - YELLOW_FLOWER(37), - RED_ROSE(38), - BROWN_MUSHROOM(39), - RED_MUSHROOM(40), - GOLD_BLOCK(41), - IRON_BLOCK(42), - DOUBLE_STEP(43, Step.class), - STEP(44, Step.class), - BRICK(45), - TNT(46), - BOOKSHELF(47), - MOSSY_COBBLESTONE(48), - OBSIDIAN(49), - TORCH(50, Torch.class), - FIRE(51), - MOB_SPAWNER(52), - WOOD_STAIRS(53, Stairs.class), - CHEST(54, Chest.class), - REDSTONE_WIRE(55, RedstoneWire.class), - DIAMOND_ORE(56), - DIAMOND_BLOCK(57), - WORKBENCH(58), - CROPS(59, Crops.class), - SOIL(60, MaterialData.class), - FURNACE(61, Furnace.class), - BURNING_FURNACE(62, Furnace.class), - SIGN_POST(63, 64, Sign.class), - WOODEN_DOOR(64, Door.class), - LADDER(65, Ladder.class), - RAILS(66, Rails.class), - COBBLESTONE_STAIRS(67, Stairs.class), - WALL_SIGN(68, 64, Sign.class), - LEVER(69, Lever.class), - STONE_PLATE(70, PressurePlate.class), - IRON_DOOR_BLOCK(71, Door.class), - WOOD_PLATE(72, PressurePlate.class), - REDSTONE_ORE(73), - GLOWING_REDSTONE_ORE(74), - REDSTONE_TORCH_OFF(75, RedstoneTorch.class), - REDSTONE_TORCH_ON(76, RedstoneTorch.class), - STONE_BUTTON(77, Button.class), - SNOW(78), - ICE(79), - SNOW_BLOCK(80), - CACTUS(81, MaterialData.class), - CLAY(82), - SUGAR_CANE_BLOCK(83, MaterialData.class), - JUKEBOX(84), - FENCE(85), - PUMPKIN(86, Pumpkin.class), - NETHERRACK(87), - SOUL_SAND(88), - GLOWSTONE(89), - PORTAL(90), - JACK_O_LANTERN(91, Pumpkin.class), - CAKE_BLOCK(92, 64, Cake.class), - DIODE_BLOCK_OFF(93, Diode.class), - DIODE_BLOCK_ON(94, Diode.class), - @Deprecated - LOCKED_CHEST(95), - STAINED_GLASS(95), - TRAP_DOOR(96, TrapDoor.class), - MONSTER_EGGS(97, MonsterEggs.class), - SMOOTH_BRICK(98, SmoothBrick.class), - HUGE_MUSHROOM_1(99, Mushroom.class), - HUGE_MUSHROOM_2(100, Mushroom.class), - IRON_FENCE(101), - THIN_GLASS(102), - MELON_BLOCK(103), - PUMPKIN_STEM(104, MaterialData.class), - MELON_STEM(105, MaterialData.class), - VINE(106, Vine.class), - FENCE_GATE(107, Gate.class), - BRICK_STAIRS(108, Stairs.class), - SMOOTH_STAIRS(109, Stairs.class), - MYCEL(110), - WATER_LILY(111), - NETHER_BRICK(112), - NETHER_FENCE(113), - NETHER_BRICK_STAIRS(114, Stairs.class), - NETHER_WARTS(115, NetherWarts.class), - ENCHANTMENT_TABLE(116), - BREWING_STAND(117, MaterialData.class), - CAULDRON(118, Cauldron.class), - ENDER_PORTAL(119), - ENDER_PORTAL_FRAME(120), - ENDER_STONE(121), - DRAGON_EGG(122), - REDSTONE_LAMP_OFF(123), - REDSTONE_LAMP_ON(124), - WOOD_DOUBLE_STEP(125, WoodenStep.class), - WOOD_STEP(126, WoodenStep.class), - COCOA(127, CocoaPlant.class), - SANDSTONE_STAIRS(128, Stairs.class), - EMERALD_ORE(129), - ENDER_CHEST(130, EnderChest.class), - TRIPWIRE_HOOK(131, TripwireHook.class), - TRIPWIRE(132, Tripwire.class), - EMERALD_BLOCK(133), - SPRUCE_WOOD_STAIRS(134, Stairs.class), - BIRCH_WOOD_STAIRS(135, Stairs.class), - JUNGLE_WOOD_STAIRS(136, Stairs.class), - COMMAND(137, Command.class), - BEACON(138), - COBBLE_WALL(139), - FLOWER_POT(140, FlowerPot.class), - CARROT(141), - POTATO(142), - WOOD_BUTTON(143, Button.class), - SKULL(144, Skull.class), - ANVIL(145), - TRAPPED_CHEST(146), - GOLD_PLATE(147), - IRON_PLATE(148), - REDSTONE_COMPARATOR_OFF(149), - REDSTONE_COMPARATOR_ON(150), - DAYLIGHT_DETECTOR(151), - REDSTONE_BLOCK(152), - QUARTZ_ORE(153), - HOPPER(154), - QUARTZ_BLOCK(155), - QUARTZ_STAIRS(156, Stairs.class), - ACTIVATOR_RAIL(157, PoweredRail.class), - DROPPER(158, Dispenser.class), - STAINED_CLAY(159), - STAINED_GLASS_PANE(160), - LEAVES_2(161), - LOG_2(162), - ACACIA_STAIRS(163, Stairs.class), - DARK_OAK_STAIRS(164, Stairs.class), - HAY_BLOCK(170), - CARPET(171), - HARD_CLAY(172), - COAL_BLOCK(173), - PACKED_ICE(174), - DOUBLE_PLANT(175), - // ----- Item Separator ----- - IRON_SPADE(256, 1, 250), - IRON_PICKAXE(257, 1, 250), - IRON_AXE(258, 1, 250), - FLINT_AND_STEEL(259, 1, 64), - APPLE(260), - BOW(261, 1, 384), - ARROW(262), - COAL(263, Coal.class), - DIAMOND(264), - IRON_INGOT(265), - GOLD_INGOT(266), - IRON_SWORD(267, 1, 250), - WOOD_SWORD(268, 1, 59), - WOOD_SPADE(269, 1, 59), - WOOD_PICKAXE(270, 1, 59), - WOOD_AXE(271, 1, 59), - STONE_SWORD(272, 1, 131), - STONE_SPADE(273, 1, 131), - STONE_PICKAXE(274, 1, 131), - STONE_AXE(275, 1, 131), - DIAMOND_SWORD(276, 1, 1561), - DIAMOND_SPADE(277, 1, 1561), - DIAMOND_PICKAXE(278, 1, 1561), - DIAMOND_AXE(279, 1, 1561), - STICK(280), - BOWL(281), - MUSHROOM_SOUP(282, 1), - GOLD_SWORD(283, 1, 32), - GOLD_SPADE(284, 1, 32), - GOLD_PICKAXE(285, 1, 32), - GOLD_AXE(286, 1, 32), - STRING(287), - FEATHER(288), - SULPHUR(289), - WOOD_HOE(290, 1, 59), - STONE_HOE(291, 1, 131), - IRON_HOE(292, 1, 250), - DIAMOND_HOE(293, 1, 1561), - GOLD_HOE(294, 1, 32), - SEEDS(295), - WHEAT(296), - BREAD(297), - LEATHER_HELMET(298, 1, 55), - LEATHER_CHESTPLATE(299, 1, 80), - LEATHER_LEGGINGS(300, 1, 75), - LEATHER_BOOTS(301, 1, 65), - CHAINMAIL_HELMET(302, 1, 165), - CHAINMAIL_CHESTPLATE(303, 1, 240), - CHAINMAIL_LEGGINGS(304, 1, 225), - CHAINMAIL_BOOTS(305, 1, 195), - IRON_HELMET(306, 1, 165), - IRON_CHESTPLATE(307, 1, 240), - IRON_LEGGINGS(308, 1, 225), - IRON_BOOTS(309, 1, 195), - DIAMOND_HELMET(310, 1, 363), - DIAMOND_CHESTPLATE(311, 1, 528), - DIAMOND_LEGGINGS(312, 1, 495), - DIAMOND_BOOTS(313, 1, 429), - GOLD_HELMET(314, 1, 77), - GOLD_CHESTPLATE(315, 1, 112), - GOLD_LEGGINGS(316, 1, 105), - GOLD_BOOTS(317, 1, 91), - FLINT(318), - PORK(319), - GRILLED_PORK(320), - PAINTING(321), - GOLDEN_APPLE(322), - SIGN(323, 16), - WOOD_DOOR(324, 1), - BUCKET(325, 16), - WATER_BUCKET(326, 1), - LAVA_BUCKET(327, 1), - MINECART(328, 1), - SADDLE(329, 1), - IRON_DOOR(330, 1), - REDSTONE(331), - SNOW_BALL(332, 16), - BOAT(333, 1), - LEATHER(334), - MILK_BUCKET(335, 1), - CLAY_BRICK(336), - CLAY_BALL(337), - SUGAR_CANE(338), - PAPER(339), - BOOK(340), - SLIME_BALL(341), - STORAGE_MINECART(342, 1), - POWERED_MINECART(343, 1), - EGG(344, 16), - COMPASS(345), - FISHING_ROD(346, 1, 64), - WATCH(347), - GLOWSTONE_DUST(348), - RAW_FISH(349), - COOKED_FISH(350), - INK_SACK(351, Dye.class), - BONE(352), - SUGAR(353), - CAKE(354, 1), - BED(355, 1), - DIODE(356), - COOKIE(357), - /** - * @see MapView - */ - MAP(358, MaterialData.class), - SHEARS(359, 1, 238), - MELON(360), - PUMPKIN_SEEDS(361), - MELON_SEEDS(362), - RAW_BEEF(363), - COOKED_BEEF(364), - RAW_CHICKEN(365), - COOKED_CHICKEN(366), - ROTTEN_FLESH(367), - ENDER_PEARL(368, 16), - BLAZE_ROD(369), - GHAST_TEAR(370), - GOLD_NUGGET(371), - NETHER_STALK(372), - /** - * @see Potion - */ - POTION(373, 1, MaterialData.class), - GLASS_BOTTLE(374), - SPIDER_EYE(375), - FERMENTED_SPIDER_EYE(376), - BLAZE_POWDER(377), - MAGMA_CREAM(378), - BREWING_STAND_ITEM(379), - CAULDRON_ITEM(380), - EYE_OF_ENDER(381), - SPECKLED_MELON(382), - MONSTER_EGG(383, 64, SpawnEgg.class), - EXP_BOTTLE(384, 64), - FIREBALL(385, 64), - BOOK_AND_QUILL(386, 1), - WRITTEN_BOOK(387, 16), - EMERALD(388, 64), - ITEM_FRAME(389), - FLOWER_POT_ITEM(390), - CARROT_ITEM(391), - POTATO_ITEM(392), - BAKED_POTATO(393), - POISONOUS_POTATO(394), - EMPTY_MAP(395), - GOLDEN_CARROT(396), - SKULL_ITEM(397), - CARROT_STICK(398, 1, 25), - NETHER_STAR(399), - PUMPKIN_PIE(400), - FIREWORK(401), - FIREWORK_CHARGE(402), - ENCHANTED_BOOK(403, 1), - REDSTONE_COMPARATOR(404), - NETHER_BRICK_ITEM(405), - QUARTZ(406), - EXPLOSIVE_MINECART(407, 1), - HOPPER_MINECART(408, 1), - IRON_BARDING(417, 1), - GOLD_BARDING(418, 1), - DIAMOND_BARDING(419, 1), - LEASH(420), - NAME_TAG(421), - COMMAND_MINECART(422, 1), - GOLD_RECORD(2256, 1), - GREEN_RECORD(2257, 1), - RECORD_3(2258, 1), - RECORD_4(2259, 1), - RECORD_5(2260, 1), - RECORD_6(2261, 1), - RECORD_7(2262, 1), - RECORD_8(2263, 1), - RECORD_9(2264, 1), - RECORD_10(2265, 1), - RECORD_11(2266, 1), - RECORD_12(2267, 1), - ; - - private final int id; - private final Constructor ctor; - private static Material[] byId = new Material[383]; - private final static Map BY_NAME = Maps.newHashMap(); - private final int maxStack; - private final short durability; - - private Material(final int id) { - this(id, 64); - } - - private Material(final int id, final int stack) { - this(id, stack, MaterialData.class); - } - - private Material(final int id, final int stack, final int durability) { - this(id, stack, durability, MaterialData.class); - } - - private Material(final int id, final Class data) { - this(id, 64, data); - } - - private Material(final int id, final int stack, final Class data) { - this(id, stack, 0, data); - } - - private Material(final int id, final int stack, final int durability, final Class data) { - this.id = id; - this.durability = (short) durability; - this.maxStack = stack; - // try to cache the constructor for this material - try { - this.ctor = data.getConstructor(int.class, byte.class); - } catch (NoSuchMethodException ex) { - throw new AssertionError(ex); - } catch (SecurityException ex) { - throw new AssertionError(ex); - } - } - - /** - * Gets the item ID or block ID of this Material - * - * @return ID of this material - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Gets the maximum amount of this material that can be held in a stack - * - * @return Maximum stack size for this material - */ - public int getMaxStackSize() { - return maxStack; - } - - /** - * Gets the maximum durability of this material - * - * @return Maximum durability for this material - */ - public short getMaxDurability() { - return durability; - } - - /** - * Gets the MaterialData class associated with this Material - * - * @return MaterialData associated with this Material - */ - public Class getData() { - return ctor.getDeclaringClass(); - } - - /** - * Constructs a new MaterialData relevant for this Material, with the - * given initial data - * - * @param raw Initial data to construct the MaterialData with - * @return New MaterialData with the given data - * @deprecated Magic value - */ - @Deprecated - public MaterialData getNewData(final byte raw) { - try { - return ctor.newInstance(id, raw); - } catch (InstantiationException ex) { - final Throwable t = ex.getCause(); - if (t instanceof RuntimeException) { - throw (RuntimeException) t; - } - if (t instanceof Error) { - throw (Error) t; - } - throw new AssertionError(t); - } catch (Throwable t) { - throw new AssertionError(t); - } - } - - /** - * Checks if this Material is a placable block - * - * @return true if this material is a block - */ - public boolean isBlock() { - return id < 256; - } - - /** - * Checks if this Material is edible. - * - * @return true if this Material is edible. - */ - public boolean isEdible() { - switch (this) { - case BREAD: - case CARROT_ITEM: - case BAKED_POTATO: - case POTATO_ITEM: - case POISONOUS_POTATO: - case GOLDEN_CARROT: - case PUMPKIN_PIE: - case COOKIE: - case MELON: - case MUSHROOM_SOUP: - case RAW_CHICKEN: - case COOKED_CHICKEN: - case RAW_BEEF: - case COOKED_BEEF: - case RAW_FISH: - case COOKED_FISH: - case PORK: - case GRILLED_PORK: - case APPLE: - case GOLDEN_APPLE: - case ROTTEN_FLESH: - case SPIDER_EYE: - return true; - default: - return false; - } - } - - /** - * Attempts to get the Material with the given ID - * - * @param id ID of the material to get - * @return Material if found, or null - * @deprecated Magic value - */ - @Deprecated - public static Material getMaterial(final int id) { - if (byId.length > id && id >= 0) { - return byId[id]; - } else { - return null; - } - } - - /** - * Attempts to get the Material with the given name. - *

          - * This is a normal lookup, names must be the precise name they are given - * in the enum. - * - * @param name Name of the material to get - * @return Material if found, or null - */ - public static Material getMaterial(final String name) { - return BY_NAME.get(name); - } - - /** - * Attempts to match the Material with the given name. - *

          - * This is a match lookup; names will be converted to uppercase, then - * stripped of special characters in an attempt to format it like the - * enum. - *

          - * Using this for match by ID is deprecated. - * - * @param name Name of the material to get - * @return Material if found, or null - */ - public static Material matchMaterial(final String name) { - Validate.notNull(name, "Name cannot be null"); - - Material result = null; - - try { - result = getMaterial(Integer.parseInt(name)); - } catch (NumberFormatException ex) {} - - if (result == null) { - String filtered = name.toUpperCase(); - - filtered = filtered.replaceAll("\\s+", "_").replaceAll("\\W", ""); - result = BY_NAME.get(filtered); - } - - return result; - } - - static { - for (Material material : values()) { - if (byId.length > material.id) { - byId[material.id] = material; - } else { - byId = Java15Compat.Arrays_copyOfRange(byId, 0, material.id + 2); - byId[material.id] = material; - } - BY_NAME.put(material.name(), material); - } - } - - /** - * @return True if this material represents a playable music disk. - */ - public boolean isRecord() { - return id >= GOLD_RECORD.id && id <= RECORD_12.id; - } - - /** - * Check if the material is a block and solid (cannot be passed through by - * a player) - * - * @return True if this material is a block and solid - */ - public boolean isSolid() { - if (!isBlock() || id == 0) { - return false; - } - switch (this) { - case STONE: - case GRASS: - case DIRT: - case COBBLESTONE: - case WOOD: - case BEDROCK: - case SAND: - case GRAVEL: - case GOLD_ORE: - case IRON_ORE: - case COAL_ORE: - case LOG: - case LEAVES: - case SPONGE: - case GLASS: - case LAPIS_ORE: - case LAPIS_BLOCK: - case DISPENSER: - case SANDSTONE: - case NOTE_BLOCK: - case BED_BLOCK: - case PISTON_STICKY_BASE: - case PISTON_BASE: - case PISTON_EXTENSION: - case WOOL: - case PISTON_MOVING_PIECE: - case GOLD_BLOCK: - case IRON_BLOCK: - case DOUBLE_STEP: - case STEP: - case BRICK: - case TNT: - case BOOKSHELF: - case MOSSY_COBBLESTONE: - case OBSIDIAN: - case MOB_SPAWNER: - case WOOD_STAIRS: - case CHEST: - case DIAMOND_ORE: - case DIAMOND_BLOCK: - case WORKBENCH: - case SOIL: - case FURNACE: - case BURNING_FURNACE: - case SIGN_POST: - case WOODEN_DOOR: - case COBBLESTONE_STAIRS: - case WALL_SIGN: - case STONE_PLATE: - case IRON_DOOR_BLOCK: - case WOOD_PLATE: - case REDSTONE_ORE: - case GLOWING_REDSTONE_ORE: - case ICE: - case SNOW_BLOCK: - case CACTUS: - case CLAY: - case JUKEBOX: - case FENCE: - case PUMPKIN: - case NETHERRACK: - case SOUL_SAND: - case GLOWSTONE: - case JACK_O_LANTERN: - case CAKE_BLOCK: - case LOCKED_CHEST: - case STAINED_GLASS: - case TRAP_DOOR: - case MONSTER_EGGS: - case SMOOTH_BRICK: - case HUGE_MUSHROOM_1: - case HUGE_MUSHROOM_2: - case IRON_FENCE: - case THIN_GLASS: - case MELON_BLOCK: - case FENCE_GATE: - case BRICK_STAIRS: - case SMOOTH_STAIRS: - case MYCEL: - case NETHER_BRICK: - case NETHER_FENCE: - case NETHER_BRICK_STAIRS: - case ENCHANTMENT_TABLE: - case BREWING_STAND: - case CAULDRON: - case ENDER_PORTAL_FRAME: - case ENDER_STONE: - case DRAGON_EGG: - case REDSTONE_LAMP_OFF: - case REDSTONE_LAMP_ON: - case WOOD_DOUBLE_STEP: - case WOOD_STEP: - case SANDSTONE_STAIRS: - case EMERALD_ORE: - case ENDER_CHEST: - case EMERALD_BLOCK: - case SPRUCE_WOOD_STAIRS: - case BIRCH_WOOD_STAIRS: - case JUNGLE_WOOD_STAIRS: - case COMMAND: - case BEACON: - case COBBLE_WALL: - case ANVIL: - case TRAPPED_CHEST: - case GOLD_PLATE: - case IRON_PLATE: - case DAYLIGHT_DETECTOR: - case REDSTONE_BLOCK: - case QUARTZ_ORE: - case HOPPER: - case QUARTZ_BLOCK: - case QUARTZ_STAIRS: - case DROPPER: - case STAINED_CLAY: - case HAY_BLOCK: - case HARD_CLAY: - case COAL_BLOCK: - case STAINED_GLASS_PANE: - case LEAVES_2: - case LOG_2: - case ACACIA_STAIRS: - case DARK_OAK_STAIRS: - case PACKED_ICE: - return true; - default: - return false; - } - } - - /** - * Check if the material is a block and does not block any light - * - * @return True if this material is a block and does not block any light - */ - public boolean isTransparent() { - if (!isBlock()) { - return false; - } - switch (this) { - case AIR: - case SAPLING: - case POWERED_RAIL: - case DETECTOR_RAIL: - case LONG_GRASS: - case DEAD_BUSH: - case YELLOW_FLOWER: - case RED_ROSE: - case BROWN_MUSHROOM: - case RED_MUSHROOM: - case TORCH: - case FIRE: - case REDSTONE_WIRE: - case CROPS: - case LADDER: - case RAILS: - case LEVER: - case REDSTONE_TORCH_OFF: - case REDSTONE_TORCH_ON: - case STONE_BUTTON: - case SNOW: - case SUGAR_CANE_BLOCK: - case PORTAL: - case DIODE_BLOCK_OFF: - case DIODE_BLOCK_ON: - case PUMPKIN_STEM: - case MELON_STEM: - case VINE: - case WATER_LILY: - case NETHER_WARTS: - case ENDER_PORTAL: - case COCOA: - case TRIPWIRE_HOOK: - case TRIPWIRE: - case FLOWER_POT: - case CARROT: - case POTATO: - case WOOD_BUTTON: - case SKULL: - case REDSTONE_COMPARATOR_OFF: - case REDSTONE_COMPARATOR_ON: - case ACTIVATOR_RAIL: - case CARPET: - case DOUBLE_PLANT: - return true; - default: - return false; - } - } - - /** - * Check if the material is a block and can catch fire - * - * @return True if this material is a block and can catch fire - */ - public boolean isFlammable() { - if (!isBlock()) { - return false; - } - switch (this) { - case WOOD: - case LOG: - case LEAVES: - case NOTE_BLOCK: - case BED_BLOCK: - case LONG_GRASS: - case DEAD_BUSH: - case WOOL: - case TNT: - case BOOKSHELF: - case WOOD_STAIRS: - case CHEST: - case WORKBENCH: - case SIGN_POST: - case WOODEN_DOOR: - case WALL_SIGN: - case WOOD_PLATE: - case JUKEBOX: - case FENCE: - case TRAP_DOOR: - case HUGE_MUSHROOM_1: - case HUGE_MUSHROOM_2: - case VINE: - case FENCE_GATE: - case WOOD_DOUBLE_STEP: - case WOOD_STEP: - case SPRUCE_WOOD_STAIRS: - case BIRCH_WOOD_STAIRS: - case JUNGLE_WOOD_STAIRS: - case TRAPPED_CHEST: - case DAYLIGHT_DETECTOR: - case CARPET: - case LEAVES_2: - case LOG_2: - case ACACIA_STAIRS: - case DARK_OAK_STAIRS: - return true; - default: - return false; - } - } - - /** - * Check if the material is a block and can burn away - * - * @return True if this material is a block and can burn away - */ - public boolean isBurnable() { - if (!isBlock()) { - return false; - } - switch (this) { - case WOOD: - case LOG: - case LEAVES: - case LONG_GRASS: - case WOOL: - case YELLOW_FLOWER: - case RED_ROSE: - case TNT: - case BOOKSHELF: - case WOOD_STAIRS: - case FENCE: - case VINE: - case WOOD_DOUBLE_STEP: - case WOOD_STEP: - case SPRUCE_WOOD_STAIRS: - case BIRCH_WOOD_STAIRS: - case JUNGLE_WOOD_STAIRS: - case HAY_BLOCK: - case COAL_BLOCK: - case LEAVES_2: - case LOG_2: - case CARPET: - case DOUBLE_PLANT: - return true; - default: - return false; - } - } - - /** - * Check if the material is a block and completely blocks vision - * - * @return True if this material is a block and completely blocks vision - */ - public boolean isOccluding() { - if (!isBlock()) { - return false; - } - switch (this) { - case STONE: - case GRASS: - case DIRT: - case COBBLESTONE: - case WOOD: - case BEDROCK: - case SAND: - case GRAVEL: - case GOLD_ORE: - case IRON_ORE: - case COAL_ORE: - case LOG: - case SPONGE: - case LAPIS_ORE: - case LAPIS_BLOCK: - case DISPENSER: - case SANDSTONE: - case NOTE_BLOCK: - case WOOL: - case GOLD_BLOCK: - case IRON_BLOCK: - case DOUBLE_STEP: - case BRICK: - case BOOKSHELF: - case MOSSY_COBBLESTONE: - case OBSIDIAN: - case MOB_SPAWNER: - case DIAMOND_ORE: - case DIAMOND_BLOCK: - case WORKBENCH: - case FURNACE: - case BURNING_FURNACE: - case REDSTONE_ORE: - case GLOWING_REDSTONE_ORE: - case SNOW_BLOCK: - case CLAY: - case JUKEBOX: - case PUMPKIN: - case NETHERRACK: - case SOUL_SAND: - case JACK_O_LANTERN: - case MONSTER_EGGS: - case SMOOTH_BRICK: - case HUGE_MUSHROOM_1: - case HUGE_MUSHROOM_2: - case MELON_BLOCK: - case MYCEL: - case NETHER_BRICK: - case ENDER_PORTAL_FRAME: - case ENDER_STONE: - case REDSTONE_LAMP_OFF: - case REDSTONE_LAMP_ON: - case WOOD_DOUBLE_STEP: - case EMERALD_ORE: - case EMERALD_BLOCK: - case COMMAND: - case QUARTZ_ORE: - case QUARTZ_BLOCK: - case DROPPER: - case STAINED_CLAY: - case HAY_BLOCK: - case HARD_CLAY: - case COAL_BLOCK: - case LOG_2: - case PACKED_ICE: - return true; - default: - return false; - } - } - - /** - * @return True if this material is affected by gravity. - */ - public boolean hasGravity() { - if (!isBlock()) { - return false; - } - switch (this) { - case SAND: - case GRAVEL: - case ANVIL: - return true; - default: - return false; - } - } -} diff --git a/LiveWeather/src/org/bukkit/NetherWartsState.java b/LiveWeather/src/org/bukkit/NetherWartsState.java deleted file mode 100755 index f43209c..0000000 --- a/LiveWeather/src/org/bukkit/NetherWartsState.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit; - -public enum NetherWartsState { - - /** - * State when first seeded - */ - SEEDED, - /** - * First growth stage - */ - STAGE_ONE, - /** - * Second growth stage - */ - STAGE_TWO, - /** - * Ready to harvest - */ - RIPE; -} diff --git a/LiveWeather/src/org/bukkit/Note.java b/LiveWeather/src/org/bukkit/Note.java deleted file mode 100755 index 417936f..0000000 --- a/LiveWeather/src/org/bukkit/Note.java +++ /dev/null @@ -1,276 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import org.apache.commons.lang.Validate; - -import com.google.common.collect.Maps; - -/** - * A note class to store a specific note. - */ -public class Note { - - /** - * An enum holding tones. - */ - public enum Tone { - G(0x1, true), - A(0x3, true), - B(0x5, false), - C(0x6, true), - D(0x8, true), - E(0xA, false), - F(0xB, true); - - private final boolean sharpable; - private final byte id; - - private static final Map BY_DATA = Maps.newHashMap(); - /** The number of tones including sharped tones. */ - public static final byte TONES_COUNT = 12; - - private Tone(int id, boolean sharpable) { - this.id = (byte) (id % TONES_COUNT); - this.sharpable = sharpable; - } - - /** - * Returns the not sharped id of this tone. - * - * @return the not sharped id of this tone. - * @deprecated Magic value - */ - @Deprecated - public byte getId() { - return getId(false); - } - - /** - * Returns the id of this tone. These method allows to return the - * sharped id of the tone. If the tone couldn't be sharped it always - * return the not sharped id of this tone. - * - * @param sharped Set to true to return the sharped id. - * @return the id of this tone. - * @deprecated Magic value - */ - @Deprecated - public byte getId(boolean sharped) { - byte id = (byte) (sharped && sharpable ? this.id + 1 : this.id); - - return (byte) (id % TONES_COUNT); - } - - /** - * Returns if this tone could be sharped. - * - * @return if this tone could be sharped. - */ - public boolean isSharpable() { - return sharpable; - } - - /** - * Returns if this tone id is the sharped id of the tone. - * - * @param id the id of the tone. - * @return if the tone id is the sharped id of the tone. - * @throws IllegalArgumentException if neither the tone nor the - * semitone have the id. - * @deprecated Magic value - */ - @Deprecated - public boolean isSharped(byte id) { - if (id == getId(false)) { - return false; - } else if (id == getId(true)) { - return true; - } else { - // The id isn't matching to the tone! - throw new IllegalArgumentException("The id isn't matching to the tone."); - } - } - - /** - * Returns the tone to id. Also returning the semitones. - * - * @param id the id of the tone. - * @return the tone to id. - * @deprecated Magic value - */ - @Deprecated - public static Tone getById(byte id) { - return BY_DATA.get(id); - } - - static { - for (Tone tone : values()) { - int id = tone.id % TONES_COUNT; - BY_DATA.put((byte) id, tone); - - if (tone.isSharpable()) { - id = (id + 1) % TONES_COUNT; - BY_DATA.put((byte) id, tone); - } - } - } - } - - private final byte note; - - /** - * Creates a new note. - * - * @param note Internal note id. {@link #getId()} always return this - * value. The value has to be in the interval [0; 24]. - */ - public Note(int note) { - Validate.isTrue(note >= 0 && note <= 24, "The note value has to be between 0 and 24."); - - this.note = (byte) note; - } - - /** - * Creates a new note. - * - * @param octave The octave where the note is in. Has to be 0 - 2. - * @param tone The tone within the octave. If the octave is 2 the note has - * to be F#. - * @param sharped Set if the tone is sharped (e.g. for F#). - */ - public Note(int octave, Tone tone, boolean sharped) { - if (sharped && !tone.isSharpable()) { - tone = Tone.values()[tone.ordinal() + 1]; - sharped = false; - } - if (octave < 0 || octave > 2 || (octave == 2 && !(tone == Tone.F && sharped))) { - throw new IllegalArgumentException("Tone and octave have to be between F#0 and F#2"); - } - - this.note = (byte) (octave * Tone.TONES_COUNT + tone.getId(sharped)); - } - - /** - * Creates a new note for a flat tone, such as A-flat. - * - * @param octave The octave where the note is in. Has to be 0 - 1. - * @param tone The tone within the octave. - * @return The new note. - */ - public static Note flat(int octave, Tone tone) { - Validate.isTrue(octave != 2, "Octave cannot be 2 for flats"); - tone = tone == Tone.G ? Tone.F : Tone.values()[tone.ordinal() - 1]; - return new Note(octave, tone, tone.isSharpable()); - } - - /** - * Creates a new note for a sharp tone, such as A-sharp. - * - * @param octave The octave where the note is in. Has to be 0 - 2. - * @param tone The tone within the octave. If the octave is 2 the note has - * to be F#. - * @return The new note. - */ - public static Note sharp(int octave, Tone tone) { - return new Note(octave, tone, true); - } - - /** - * Creates a new note for a natural tone, such as A-natural. - * - * @param octave The octave where the note is in. Has to be 0 - 1. - * @param tone The tone within the octave. - * @return The new note. - */ - public static Note natural(int octave, Tone tone) { - Validate.isTrue(octave != 2, "Octave cannot be 2 for naturals"); - return new Note(octave, tone, false); - } - - /** - * @return The note a semitone above this one. - */ - public Note sharped() { - Validate.isTrue(note < 24, "This note cannot be sharped because it is the highest known note!"); - return new Note(note + 1); - } - - /** - * @return The note a semitone below this one. - */ - public Note flattened() { - Validate.isTrue(note > 0, "This note cannot be flattened because it is the lowest known note!"); - return new Note(note - 1); - } - - /** - * Returns the internal id of this note. - * - * @return the internal id of this note. - * @deprecated Magic value - */ - @Deprecated - public byte getId() { - return note; - } - - /** - * Returns the octave of this note. - * - * @return the octave of this note. - */ - public int getOctave() { - return note / Tone.TONES_COUNT; - } - - private byte getToneByte() { - return (byte) (note % Tone.TONES_COUNT); - } - - /** - * Returns the tone of this note. - * - * @return the tone of this note. - */ - public Tone getTone() { - return Tone.getById(getToneByte()); - } - - /** - * Returns if this note is sharped. - * - * @return if this note is sharped. - */ - public boolean isSharped() { - byte note = getToneByte(); - return Tone.getById(note).isSharped(note); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + note; - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Note other = (Note) obj; - if (note != other.note) - return false; - return true; - } - - @Override - public String toString() { - return "Note{" + getTone().toString() + (isSharped() ? "#" : "") + "}"; - } -} diff --git a/LiveWeather/src/org/bukkit/OfflinePlayer.java b/LiveWeather/src/org/bukkit/OfflinePlayer.java deleted file mode 100755 index e98706a..0000000 --- a/LiveWeather/src/org/bukkit/OfflinePlayer.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.bukkit; - -import java.util.Date; -import java.util.UUID; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.entity.AnimalTamer; -import org.bukkit.entity.Player; -import org.bukkit.permissions.ServerOperator; - -public interface OfflinePlayer extends ServerOperator, AnimalTamer, ConfigurationSerializable { - - /** - * Checks if this player is currently online - * - * @return true if they are online - */ - public boolean isOnline(); - - /** - * Returns the name of this player - *

          - * Names are no longer unique past a single game session. For persistent storage - * it is recommended that you use {@link #getUniqueId()} instead. - * - * @return Player name or null if we have not seen a name for this player yet - */ - public String getName(); - - /** - * Returns the UUID of this player - * - * @return Player UUID - */ - public UUID getUniqueId(); - - /** - * Checks if this player is banned or not - * - * @return true if banned, otherwise false - */ - public boolean isBanned(); - - /** - * Bans or unbans this player - * - * @param banned true if banned - * @deprecated Use {@link org.bukkit.BanList#addBan(String, String, Date, - * String)} or {@link org.bukkit.BanList#pardon(String)} to enhance - * functionality - */ - @Deprecated - public void setBanned(boolean banned); - - /** - * Checks if this player is whitelisted or not - * - * @return true if whitelisted - */ - public boolean isWhitelisted(); - - /** - * Sets if this player is whitelisted or not - * - * @param value true if whitelisted - */ - public void setWhitelisted(boolean value); - - /** - * Gets a {@link Player} object that this represents, if there is one - *

          - * If the player is online, this will return that player. Otherwise, - * it will return null. - * - * @return Online player - */ - public Player getPlayer(); - - /** - * Gets the first date and time that this player was witnessed on this - * server. - *

          - * If the player has never played before, this will return 0. Otherwise, - * it will be the amount of milliseconds since midnight, January 1, 1970 - * UTC. - * - * @return Date of first log-in for this player, or 0 - */ - public long getFirstPlayed(); - - /** - * Gets the last date and time that this player was witnessed on this - * server. - *

          - * If the player has never played before, this will return 0. Otherwise, - * it will be the amount of milliseconds since midnight, January 1, 1970 - * UTC. - * - * @return Date of last log-in for this player, or 0 - */ - public long getLastPlayed(); - - /** - * Checks if this player has played on this server before. - * - * @return True if the player has played before, otherwise false - */ - public boolean hasPlayedBefore(); - - /** - * Gets the Location where the player will spawn at their bed, null if - * they have not slept in one or their current bed spawn is invalid. - * - * @return Bed Spawn Location if bed exists, otherwise null. - */ - public Location getBedSpawnLocation(); - -} diff --git a/LiveWeather/src/org/bukkit/PortalType.java b/LiveWeather/src/org/bukkit/PortalType.java deleted file mode 100755 index bce1675..0000000 --- a/LiveWeather/src/org/bukkit/PortalType.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit; - -/** - * Represents various types of portals that can be made in a world. - */ -public enum PortalType { - - /** - * This is a Nether portal, made of obsidian. - */ - NETHER, - - /** - * This is an Ender portal. - */ - ENDER, - - /** - * This is a custom portal created by a Plugin. - */ - CUSTOM; -} diff --git a/LiveWeather/src/org/bukkit/Rotation.java b/LiveWeather/src/org/bukkit/Rotation.java deleted file mode 100755 index dfdb0e5..0000000 --- a/LiveWeather/src/org/bukkit/Rotation.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bukkit; - -/** - * An enum to specify a rotation based orientation, like that on a clock. - *

          - * It represents how something is viewed, as opposed to cardinal directions. - */ -public enum Rotation { - - /** - * No rotation - */ - NONE, - /** - * Rotated clockwise by 90 degrees - */ - CLOCKWISE, - /** - * Flipped upside-down, a 180 degree rotation - */ - FLIPPED, - /** - * Rotated counter-clockwise by 90 degrees - */ - COUNTER_CLOCKWISE, - ; - - private static final Rotation [] rotations = values(); - - /** - * Rotate clockwise by 90 degrees. - * - * @return the relative rotation - */ - public Rotation rotateClockwise() { - return rotations[(this.ordinal() + 1) & 0x3]; - } - - /** - * Rotate counter-clockwise by 90 degrees. - * - * @return the relative rotation - */ - public Rotation rotateCounterClockwise() { - return rotations[(this.ordinal() - 1) & 0x3]; - } -} diff --git a/LiveWeather/src/org/bukkit/SandstoneType.java b/LiveWeather/src/org/bukkit/SandstoneType.java deleted file mode 100755 index a9ac16e..0000000 --- a/LiveWeather/src/org/bukkit/SandstoneType.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the three different types of Sandstone - */ -public enum SandstoneType { - CRACKED(0x0), - GLYPHED(0x1), - SMOOTH(0x2); - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - private SandstoneType(final int data) { - this.data = (byte) data; - } - - /** - * Gets the associated data value representing this type of sandstone - * - * @return A byte containing the data value of this sandstone type - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the type of sandstone with the given data value - * - * @param data Data value to fetch - * @return The {@link SandstoneType} representing the given value, or null - * if it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static SandstoneType getByData(final byte data) { - return BY_DATA.get(data); - } - - static { - for (SandstoneType type : values()) { - BY_DATA.put(type.data, type); - } - } -} diff --git a/LiveWeather/src/org/bukkit/Server.java b/LiveWeather/src/org/bukkit/Server.java deleted file mode 100755 index e8b9b4e..0000000 --- a/LiveWeather/src/org/bukkit/Server.java +++ /dev/null @@ -1,919 +0,0 @@ -package org.bukkit; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.Serializable; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.logging.Logger; - -import org.bukkit.Warning.WarningState; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.server.ServerListPingEvent; -import org.bukkit.help.HelpMap; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.bukkit.map.MapView; -import org.bukkit.permissions.Permissible; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.ServicesManager; -import org.bukkit.plugin.messaging.Messenger; -import org.bukkit.plugin.messaging.PluginMessageRecipient; -import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.util.CachedServerIcon; - -import com.avaje.ebean.config.ServerConfig; -import com.google.common.collect.ImmutableList; - -import org.bukkit.inventory.ItemFactory; -import org.bukkit.inventory.meta.ItemMeta; - -/** - * Represents a server implementation. - */ -public interface Server extends PluginMessageRecipient { - - /** - * Used for all administrative messages, such as an operator using a - * command. - *

          - * For use in {@link #broadcast(java.lang.String, java.lang.String)}. - */ - public static final String BROADCAST_CHANNEL_ADMINISTRATIVE = "bukkit.broadcast.admin"; - - /** - * Used for all announcement messages, such as informing users that a - * player has joined. - *

          - * For use in {@link #broadcast(java.lang.String, java.lang.String)}. - */ - public static final String BROADCAST_CHANNEL_USERS = "bukkit.broadcast.user"; - - /** - * Gets the name of this server implementation. - * - * @return name of this server implementation - */ - public String getName(); - - /** - * Gets the version string of this server implementation. - * - * @return version of this server implementation - */ - public String getVersion(); - - /** - * Gets the Bukkit version that this server is running. - * - * @return version of Bukkit - */ - public String getBukkitVersion(); - - /** - * Gets an array copy of all currently logged in players. - *

          - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - * - * @deprecated superseded by {@link #getOnlinePlayers()} - * @return an array of Players that are currently online - */ - @Deprecated - public Player[] _INVALID_getOnlinePlayers(); - - /** - * Gets a view of all currently logged in players. This {@linkplain - * Collections#unmodifiableCollection(Collection) view} is a reused - * object, making some operations like {@link Collection#size()} - * zero-allocation. - *

          - * The collection is a view backed by the internal representation, such - * that, changes to the internal state of the server will be reflected - * immediately. However, the reuse of the returned collection (identity) - * is not strictly guaranteed for future or all implementations. Casting - * the collection, or relying on interface implementations (like {@link - * Serializable} or {@link List}), is deprecated. - *

          - * Iteration behavior is undefined outside of self-contained main-thread - * uses. Normal and immediate iterator use without consequences that - * affect the collection are fully supported. The effects following - * (non-exhaustive) {@link Entity#teleport(Location) teleportation}, - * {@link Player#setHealth(double) death}, and {@link Player#kickPlayer( - * String) kicking} are undefined. Any use of this collection from - * asynchronous threads is unsafe. - *

          - * For safe consequential iteration or mimicking the old array behavior, - * using {@link Collection#toArray(Object[])} is recommended. For making - * snapshots, {@link ImmutableList#copyOf(Collection)} is recommended. - * - * @return a view of currently online players. - */ - public Collection getOnlinePlayers(); - - /** - * Get the maximum amount of players which can login to this server. - * - * @return the amount of players this server allows - */ - public int getMaxPlayers(); - - /** - * Get the game port that the server runs on. - * - * @return the port number of this server - */ - public int getPort(); - - /** - * Get the view distance from this server. - * - * @return the view distance from this server. - */ - public int getViewDistance(); - - /** - * Get the IP that this server is bound to, or empty string if not - * specified. - * - * @return the IP string that this server is bound to, otherwise empty - * string - */ - public String getIp(); - - /** - * Get the name of this server. - * - * @return the name of this server - */ - public String getServerName(); - - /** - * Get an ID of this server. The ID is a simple generally alphanumeric ID - * that can be used for uniquely identifying this server. - * - * @return the ID of this server - */ - public String getServerId(); - - /** - * Get world type (level-type setting) for default world. - * - * @return the value of level-type (e.g. DEFAULT, FLAT, DEFAULT_1_1) - */ - public String getWorldType(); - - /** - * Get generate-structures setting. - * - * @return true if structure generation is enabled, false otherwise - */ - public boolean getGenerateStructures(); - - /** - * Gets whether this server allows the End or not. - * - * @return whether this server allows the End or not - */ - public boolean getAllowEnd(); - - /** - * Gets whether this server allows the Nether or not. - * - * @return whether this server allows the Nether or not - */ - public boolean getAllowNether(); - - /** - * Gets whether this server has a whitelist or not. - * - * @return whether this server has a whitelist or not - */ - public boolean hasWhitelist(); - - /** - * Sets if the server is whitelisted. - * - * @param value true for whitelist on, false for off - */ - public void setWhitelist(boolean value); - - /** - * Gets a list of whitelisted players. - * - * @return a set containing all whitelisted players - */ - public Set getWhitelistedPlayers(); - - /** - * Reloads the whitelist from disk. - */ - public void reloadWhitelist(); - - /** - * Broadcast a message to all players. - *

          - * This is the same as calling {@link #broadcast(java.lang.String, - * java.lang.String)} to {@link #BROADCAST_CHANNEL_USERS} - * - * @param message the message - * @return the number of players - */ - public int broadcastMessage(String message); - - /** - * Gets the name of the update folder. The update folder is used to safely - * update plugins at the right moment on a plugin load. - *

          - * The update folder name is relative to the plugins folder. - * - * @return the name of the update folder - */ - public String getUpdateFolder(); - - /** - * Gets the update folder. The update folder is used to safely update - * plugins at the right moment on a plugin load. - * - * @return the update folder - */ - public File getUpdateFolderFile(); - - /** - * Gets the value of the connection throttle setting. - * - * @return the value of the connection throttle setting - */ - public long getConnectionThrottle(); - - /** - * Gets default ticks per animal spawns value. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn monsters - * every tick. - *
          • A value of 400 will mean the server will attempt to spawn monsters - * every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: If set to 0, animal spawning will be disabled. We - * recommend using spawn-animals to control this instead. - *

          - * Minecraft default: 400. - * - * @return the default ticks per animal spawns value - */ - public int getTicksPerAnimalSpawns(); - - /** - * Gets the default ticks per monster spawns value. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn monsters - * every tick. - *
          • A value of 400 will mean the server will attempt to spawn monsters - * every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: If set to 0, monsters spawning will be disabled. We - * recommend using spawn-monsters to control this instead. - *

          - * Minecraft default: 1. - * - * @return the default ticks per monsters spawn value - */ - public int getTicksPerMonsterSpawns(); - - /** - * Gets a player object by the given username. - *

          - * This method may not return objects for offline players. - * - * @deprecated Use {@link #getPlayer(UUID)} as player names are no longer - * guaranteed to be unique - * @param name the name to look up - * @return a player if one was found, null otherwise - */ - @Deprecated - public Player getPlayer(String name); - - /** - * Gets the player with the exact given name, case insensitive. - * - * @deprecated Use {@link #getPlayer(UUID)} as player names are no longer - * guaranteed to be unique - * @param name Exact name of the player to retrieve - * @return a player object if one was found, null otherwise - */ - @Deprecated - public Player getPlayerExact(String name); - - /** - * Attempts to match any players with the given name, and returns a list - * of all possibly matches. - *

          - * This list is not sorted in any particular order. If an exact match is - * found, the returned list will only contain a single result. - * - * @deprecated Use {@link #getPlayer(UUID)} as player names are no longer - * guaranteed to be unique - * @param name the (partial) name to match - * @return list of all possible players - */ - @Deprecated - public List matchPlayer(String name); - - /** - * Gets the player with the given UUID. - * - * @param id UUID of the player to retrieve - * @return a player object if one was found, null otherwise - */ - public Player getPlayer(UUID id); - - /** - * Gets the plugin manager for interfacing with plugins. - * - * @return a plugin manager for this Server instance - */ - public PluginManager getPluginManager(); - - /** - * Gets the scheduler for managing scheduled events. - * - * @return a scheduling service for this server - */ - public BukkitScheduler getScheduler(); - - /** - * Gets a services manager. - * - * @return s services manager - */ - public ServicesManager getServicesManager(); - - /** - * Gets a list of all worlds on this server. - * - * @return a list of worlds - */ - public List getWorlds(); - - /** - * Creates or loads a world with the given name using the specified - * options. - *

          - * If the world is already loaded, it will just return the equivalent of - * getWorld(creator.name()). - * - * @param creator the options to use when creating the world - * @return newly created or loaded world - */ - public World createWorld(WorldCreator creator); - - /** - * Unloads a world with the given name. - * - * @param name Name of the world to unload - * @param save whether to save the chunks before unloading - * @return true if successful, false otherwise - */ - public boolean unloadWorld(String name, boolean save); - - /** - * Unloads the given world. - * - * @param world the world to unload - * @param save whether to save the chunks before unloading - * @return true if successful, false otherwise - */ - public boolean unloadWorld(World world, boolean save); - - /** - * Gets the world with the given name. - * - * @param name the name of the world to retrieve - * @return a world with the given name, or null if none exists - */ - public World getWorld(String name); - - /** - * Gets the world from the given Unique ID. - * - * @param uid a unique-id of the world to retrieve - * @return a world with the given Unique ID, or null if none exists - */ - public World getWorld(UUID uid); - - /** - * Gets the map from the given item ID. - * - * @param id the id of the map to get - * @return a map view if it exists, or null otherwise - * @deprecated Magic value - */ - @Deprecated - public MapView getMap(short id); - - /** - * Create a new map with an automatically assigned ID. - * - * @param world the world the map will belong to - * @return a newly created map view - */ - public MapView createMap(World world); - - /** - * Reloads the server, refreshing settings and plugin information. - */ - public void reload(); - - /** - * Returns the primary logger associated with this server instance. - * - * @return Logger associated with this server - */ - public Logger getLogger(); - - /** - * Gets a {@link PluginCommand} with the given name or alias. - * - * @param name the name of the command to retrieve - * @return a plugin command if found, null otherwise - */ - public PluginCommand getPluginCommand(String name); - - /** - * Writes loaded players to disk. - */ - public void savePlayers(); - - /** - * Dispatches a command on this server, and executes it if found. - * - * @param sender the apparent sender of the command - * @param commandLine the command + arguments. Example: test abc - * 123 - * @return returns false if no target is found - * @throws CommandException thrown when the executor for the given command - * fails with an unhandled exception - */ - public boolean dispatchCommand(CommandSender sender, String commandLine) throws CommandException; - - /** - * Populates a given {@link ServerConfig} with values attributes to this - * server. - * - * @param config the server config to populate - */ - public void configureDbConfig(ServerConfig config); - - /** - * Adds a recipe to the crafting manager. - * - * @param recipe the recipe to add - * @return true if the recipe was added, false if it wasn't for some - * reason - */ - public boolean addRecipe(Recipe recipe); - - /** - * Get a list of all recipes for a given item. The stack size is ignored - * in comparisons. If the durability is -1, it will match any data value. - * - * @param result the item to match against recipe results - * @return a list of recipes with the given result - */ - public List getRecipesFor(ItemStack result); - - /** - * Get an iterator through the list of crafting recipes. - * - * @return an iterator - */ - public Iterator recipeIterator(); - - /** - * Clears the list of crafting recipes. - */ - public void clearRecipes(); - - /** - * Resets the list of crafting recipes to the default. - */ - public void resetRecipes(); - - /** - * Gets a list of command aliases defined in the server properties. - * - * @return a map of aliases to command names - */ - public Map getCommandAliases(); - - /** - * Gets the radius, in blocks, around each worlds spawn point to protect. - * - * @return spawn radius, or 0 if none - */ - public int getSpawnRadius(); - - /** - * Sets the radius, in blocks, around each worlds spawn point to protect. - * - * @param value new spawn radius, or 0 if none - */ - public void setSpawnRadius(int value); - - /** - * Gets whether the Server is in online mode or not. - * - * @return true if the server authenticates clients, false otherwise - */ - public boolean getOnlineMode(); - - /** - * Gets whether this server allows flying or not. - * - * @return true if the server allows flight, false otherwise - */ - public boolean getAllowFlight(); - - /** - * Gets whether the server is in hardcore mode or not. - * - * @return true if the server mode is hardcore, false otherwise - */ - public boolean isHardcore(); - - /** - * Gets whether to use vanilla (false) or exact behaviour (true). - * - *

            - *
          • Vanilla behaviour: check for collisions and move the player if - * needed. - *
          • Exact behaviour: spawn players exactly where they should be. - *
          - * - * @return true if exact location locations are used for spawning, false - * for vanilla collision detection or otherwise - */ - public boolean useExactLoginLocation(); - - /** - * Shutdowns the server, stopping everything. - */ - public void shutdown(); - - /** - * Broadcasts the specified message to every user with the given - * permission name. - * - * @param message message to broadcast - * @param permission the required permission {@link Permissible - * permissibles} must have to receive the broadcast - * @return number of message recipients - */ - public int broadcast(String message, String permission); - - /** - * Gets the player by the given name, regardless if they are offline or - * online. - *

          - * This method may involve a blocking web request to get the UUID for the - * given name. - *

          - * This will return an object even if the player does not exist. To this - * method, all players will exist. - * - * @deprecated Persistent storage of users should be by UUID as names are no longer - * unique past a single session. - * @param name the name the player to retrieve - * @return an offline player - * @see #getOfflinePlayer(java.util.UUID) - */ - @Deprecated - public OfflinePlayer getOfflinePlayer(String name); - - /** - * Gets the player by the given UUID, regardless if they are offline or - * online. - *

          - * This will return an object even if the player does not exist. To this - * method, all players will exist. - * - * @param id the UUID of the player to retrieve - * @return an offline player - */ - public OfflinePlayer getOfflinePlayer(UUID id); - - /** - * Gets a set containing all current IPs that are banned. - * - * @return a set containing banned IP addresses - */ - public Set getIPBans(); - - /** - * Bans the specified address from the server. - * - * @param address the IP address to ban - */ - public void banIP(String address); - - /** - * Unbans the specified address from the server. - * - * @param address the IP address to unban - */ - public void unbanIP(String address); - - /** - * Gets a set containing all banned players. - * - * @return a set containing banned players - */ - public Set getBannedPlayers(); - - /** - * Gets a ban list for the supplied type. - *

          - * Bans by name are no longer supported and this method will return - * null when trying to request them. The replacement is bans by UUID. - * - * @param type the type of list to fetch, cannot be null - * @return a ban list of the specified type - */ - public BanList getBanList(BanList.Type type); - - /** - * Gets a set containing all player operators. - * - * @return a set containing player operators - */ - public Set getOperators(); - - /** - * Gets the default {@link GameMode} for new players. - * - * @return the default game mode - */ - public GameMode getDefaultGameMode(); - - /** - * Sets the default {@link GameMode} for new players. - * - * @param mode the new game mode - */ - public void setDefaultGameMode(GameMode mode); - - /** - * Gets a {@link ConsoleCommandSender} that may be used as an input source - * for this server. - * - * @return a console command sender - */ - public ConsoleCommandSender getConsoleSender(); - - /** - * Gets the folder that contains all of the various {@link World}s. - * - * @return folder that contains all worlds - */ - public File getWorldContainer(); - - /** - * Gets every player that has ever played on this server. - * - * @return an array containing all previous players - */ - public OfflinePlayer[] getOfflinePlayers(); - - /** - * Gets the {@link Messenger} responsible for this server. - * - * @return messenger responsible for this server - */ - public Messenger getMessenger(); - - /** - * Gets the {@link HelpMap} providing help topics for this server. - * - * @return a help map for this server - */ - public HelpMap getHelpMap(); - - /** - * Creates an empty inventory of the specified type. If the type is {@link - * InventoryType#CHEST}, the new inventory has a size of 27; otherwise the - * new inventory has the normal size for its type. - * - * @param owner the holder of the inventory, or null to indicate no holder - * @param type the type of inventory to create - * @return a new inventory - */ - Inventory createInventory(InventoryHolder owner, InventoryType type); - - /** - * Creates an empty inventory with the specified type and title. If the type - * is {@link InventoryType#CHEST}, the new inventory has a size of 27; - * otherwise the new inventory has the normal size for its type.
          - * It should be noted that some inventory types do not support titles and - * may not render with said titles on the Minecraft client. - * - * @param owner The holder of the inventory; can be null if there's no holder. - * @param type The type of inventory to create. - * @param title The title of the inventory, to be displayed when it is viewed. - * @return The new inventory. - */ - Inventory createInventory(InventoryHolder owner, InventoryType type, String title); - - /** - * Creates an empty inventory of type {@link InventoryType#CHEST} with the - * specified size. - * - * @param owner the holder of the inventory, or null to indicate no holder - * @param size a multiple of 9 as the size of inventory to create - * @return a new inventory - * @throws IllegalArgumentException if the size is not a multiple of 9 - */ - Inventory createInventory(InventoryHolder owner, int size) throws IllegalArgumentException; - - /** - * Creates an empty inventory of type {@link InventoryType#CHEST} with the - * specified size and title. - * - * @param owner the holder of the inventory, or null to indicate no holder - * @param size a multiple of 9 as the size of inventory to create - * @param title the title of the inventory, displayed when inventory is - * viewed - * @return a new inventory - * @throws IllegalArgumentException if the size is not a multiple of 9 - */ - Inventory createInventory(InventoryHolder owner, int size, String title) throws IllegalArgumentException; - - /** - * Gets user-specified limit for number of monsters that can spawn in a - * chunk. - * - * @return the monster spawn limit - */ - int getMonsterSpawnLimit(); - - /** - * Gets user-specified limit for number of animals that can spawn in a - * chunk. - * - * @return the animal spawn limit - */ - int getAnimalSpawnLimit(); - - /** - * Gets user-specified limit for number of water animals that can spawn in - * a chunk. - * - * @return the water animal spawn limit - */ - int getWaterAnimalSpawnLimit(); - - /** - * Gets user-specified limit for number of ambient mobs that can spawn in - * a chunk. - * - * @return the ambient spawn limit - */ - int getAmbientSpawnLimit(); - - /** - * Checks the current thread against the expected primary thread for the - * server. - *

          - * Note: this method should not be used to indicate the current - * synchronized state of the runtime. A current thread matching the main - * thread indicates that it is synchronized, but a mismatch does not - * preclude the same assumption. - * - * @return true if the current thread matches the expected primary thread, - * false otherwise - */ - boolean isPrimaryThread(); - - /** - * Gets the message that is displayed on the server list. - * - * @return the servers MOTD - */ - String getMotd(); - - /** - * Gets the default message that is displayed when the server is stopped. - * - * @return the shutdown message - */ - String getShutdownMessage(); - - /** - * Gets the current warning state for the server. - * - * @return the configured warning state - */ - public WarningState getWarningState(); - - /** - * Gets the instance of the item factory (for {@link ItemMeta}). - * - * @return the item factory - * @see ItemFactory - */ - ItemFactory getItemFactory(); - - /** - * Gets the instance of the scoreboard manager. - *

          - * This will only exist after the first world has loaded. - * - * @return the scoreboard manager or null if no worlds are loaded. - */ - ScoreboardManager getScoreboardManager(); - - /** - * Gets an instance of the server's default server-icon. - * - * @return the default server-icon; null values may be used by the - * implementation to indicate no defined icon, but this behavior is - * not guaranteed - */ - CachedServerIcon getServerIcon(); - - /** - * Loads an image from a file, and returns a cached image for the specific - * server-icon. - *

          - * Size and type are implementation defined. An incompatible file is - * guaranteed to throw an implementation-defined {@link Exception}. - * - * @param file the file to load the from - * @throws IllegalArgumentException if image is null - * @throws Exception if the image does not meet current server server-icon - * specifications - * @return a cached server-icon that can be used for a {@link - * ServerListPingEvent#setServerIcon(CachedServerIcon)} - */ - CachedServerIcon loadServerIcon(File file) throws IllegalArgumentException, Exception; - - /** - * Creates a cached server-icon for the specific image. - *

          - * Size and type are implementation defined. An incompatible file is - * guaranteed to throw an implementation-defined {@link Exception}. - * - * @param image the image to use - * @throws IllegalArgumentException if image is null - * @throws Exception if the image does not meet current server - * server-icon specifications - * @return a cached server-icon that can be used for a {@link - * ServerListPingEvent#setServerIcon(CachedServerIcon)} - */ - CachedServerIcon loadServerIcon(BufferedImage image) throws IllegalArgumentException, Exception; - - /** - * Set the idle kick timeout. Any players idle for the specified amount of - * time will be automatically kicked. - *

          - * A value of 0 will disable the idle kick timeout. - * - * @param threshold the idle timeout in minutes - */ - public void setIdleTimeout(int threshold); - - /** - * Gets the idle kick timeout. - * - * @return the idle timeout in minutes - */ - public int getIdleTimeout(); - - /** - * @see UnsafeValues - */ - @Deprecated - UnsafeValues getUnsafe(); -} diff --git a/LiveWeather/src/org/bukkit/SkullType.java b/LiveWeather/src/org/bukkit/SkullType.java deleted file mode 100755 index abd07c2..0000000 --- a/LiveWeather/src/org/bukkit/SkullType.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bukkit; - -/** - * Represents the different types of skulls. - */ -public enum SkullType { - SKELETON, - WITHER, - ZOMBIE, - PLAYER, - CREEPER; -} diff --git a/LiveWeather/src/org/bukkit/Sound.java b/LiveWeather/src/org/bukkit/Sound.java deleted file mode 100755 index f04ed85..0000000 --- a/LiveWeather/src/org/bukkit/Sound.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.bukkit; - -/** - * An Enum of Sounds the server is able to send to players. - *

          - * WARNING: At any time, sounds may be added/removed from this Enum or even - * Minecraft itself! There is no guarantee the sounds will play. There is no - * guarantee values will not be removed from this Enum. As such, you should - * not depend on the ordinal values of this class. - */ -public enum Sound { - AMBIENCE_CAVE, - AMBIENCE_RAIN, - AMBIENCE_THUNDER, - ANVIL_BREAK, - ANVIL_LAND, - ANVIL_USE, - ARROW_HIT, - BURP, - CHEST_CLOSE, - CHEST_OPEN, - CLICK, - DOOR_CLOSE, - DOOR_OPEN, - DRINK, - EAT, - EXPLODE, - FALL_BIG, - FALL_SMALL, - FIRE, - FIRE_IGNITE, - FIZZ, - FUSE, - GLASS, - HURT_FLESH, - ITEM_BREAK, - ITEM_PICKUP, - LAVA, - LAVA_POP, - LEVEL_UP, - MINECART_BASE, - MINECART_INSIDE, - NOTE_BASS, - NOTE_PIANO, - NOTE_BASS_DRUM, - NOTE_STICKS, - NOTE_BASS_GUITAR, - NOTE_SNARE_DRUM, - NOTE_PLING, - ORB_PICKUP, - PISTON_EXTEND, - PISTON_RETRACT, - PORTAL, - PORTAL_TRAVEL, - PORTAL_TRIGGER, - SHOOT_ARROW, - SPLASH, - SPLASH2, - STEP_GRASS, - STEP_GRAVEL, - STEP_LADDER, - STEP_SAND, - STEP_SNOW, - STEP_STONE, - STEP_WOOD, - STEP_WOOL, - SWIM, - WATER, - WOOD_CLICK, - // Mob sounds - BAT_DEATH, - BAT_HURT, - BAT_IDLE, - BAT_LOOP, - BAT_TAKEOFF, - BLAZE_BREATH, - BLAZE_DEATH, - BLAZE_HIT, - CAT_HISS, - CAT_HIT, - CAT_MEOW, - CAT_PURR, - CAT_PURREOW, - CHICKEN_IDLE, - CHICKEN_HURT, - CHICKEN_EGG_POP, - CHICKEN_WALK, - COW_IDLE, - COW_HURT, - COW_WALK, - CREEPER_HISS, - CREEPER_DEATH, - ENDERDRAGON_DEATH, - ENDERDRAGON_GROWL, - ENDERDRAGON_HIT, - ENDERDRAGON_WINGS, - ENDERMAN_DEATH, - ENDERMAN_HIT, - ENDERMAN_IDLE, - ENDERMAN_TELEPORT, - ENDERMAN_SCREAM, - ENDERMAN_STARE, - GHAST_SCREAM, - GHAST_SCREAM2, - GHAST_CHARGE, - GHAST_DEATH, - GHAST_FIREBALL, - GHAST_MOAN, - IRONGOLEM_DEATH, - IRONGOLEM_HIT, - IRONGOLEM_THROW, - IRONGOLEM_WALK, - MAGMACUBE_WALK, - MAGMACUBE_WALK2, - MAGMACUBE_JUMP, - PIG_IDLE, - PIG_DEATH, - PIG_WALK, - SHEEP_IDLE, - SHEEP_SHEAR, - SHEEP_WALK, - SILVERFISH_HIT, - SILVERFISH_KILL, - SILVERFISH_IDLE, - SILVERFISH_WALK, - SKELETON_IDLE, - SKELETON_DEATH, - SKELETON_HURT, - SKELETON_WALK, - SLIME_ATTACK, - SLIME_WALK, - SLIME_WALK2, - SPIDER_IDLE, - SPIDER_DEATH, - SPIDER_WALK, - WITHER_DEATH, - WITHER_HURT, - WITHER_IDLE, - WITHER_SHOOT, - WITHER_SPAWN, - WOLF_BARK, - WOLF_DEATH, - WOLF_GROWL, - WOLF_HOWL, - WOLF_HURT, - WOLF_PANT, - WOLF_SHAKE, - WOLF_WALK, - WOLF_WHINE, - ZOMBIE_METAL, - ZOMBIE_WOOD, - ZOMBIE_WOODBREAK, - ZOMBIE_IDLE, - ZOMBIE_DEATH, - ZOMBIE_HURT, - ZOMBIE_INFECT, - ZOMBIE_UNFECT, - ZOMBIE_REMEDY, - ZOMBIE_WALK, - ZOMBIE_PIG_IDLE, - ZOMBIE_PIG_ANGRY, - ZOMBIE_PIG_DEATH, - ZOMBIE_PIG_HURT, - // Dig Sounds - DIG_WOOL, - DIG_GRASS, - DIG_GRAVEL, - DIG_SAND, - DIG_SNOW, - DIG_STONE, - DIG_WOOD, - // Fireworks - FIREWORK_BLAST, - FIREWORK_BLAST2, - FIREWORK_LARGE_BLAST, - FIREWORK_LARGE_BLAST2, - FIREWORK_TWINKLE, - FIREWORK_TWINKLE2, - FIREWORK_LAUNCH, - SUCCESSFUL_HIT, - // Horses - HORSE_ANGRY, - HORSE_ARMOR, - HORSE_BREATHE, - HORSE_DEATH, - HORSE_GALLOP, - HORSE_HIT, - HORSE_IDLE, - HORSE_JUMP, - HORSE_LAND, - HORSE_SADDLE, - HORSE_SOFT, - HORSE_WOOD, - DONKEY_ANGRY, - DONKEY_DEATH, - DONKEY_HIT, - DONKEY_IDLE, - HORSE_SKELETON_DEATH, - HORSE_SKELETON_HIT, - HORSE_SKELETON_IDLE, - HORSE_ZOMBIE_DEATH, - HORSE_ZOMBIE_HIT, - HORSE_ZOMBIE_IDLE, - // Villager - VILLAGER_DEATH, - VILLAGER_HAGGLE, - VILLAGER_HIT, - VILLAGER_IDLE, - VILLAGER_NO, - VILLAGER_YES, -} diff --git a/LiveWeather/src/org/bukkit/Statistic.java b/LiveWeather/src/org/bukkit/Statistic.java deleted file mode 100755 index 57df72b..0000000 --- a/LiveWeather/src/org/bukkit/Statistic.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bukkit; - -/** - * Represents a countable statistic, which is tracked by the server. - */ -public enum Statistic { - DAMAGE_DEALT, - DAMAGE_TAKEN, - DEATHS, - MOB_KILLS, - PLAYER_KILLS, - FISH_CAUGHT, - ANIMALS_BRED, - TREASURE_FISHED, - JUNK_FISHED, - LEAVE_GAME, - JUMP, - DROP, - PLAY_ONE_TICK, - WALK_ONE_CM, - SWIM_ONE_CM, - FALL_ONE_CM, - CLIMB_ONE_CM, - FLY_ONE_CM, - DIVE_ONE_CM, - MINECART_ONE_CM, - BOAT_ONE_CM, - PIG_ONE_CM, - HORSE_ONE_CM, - MINE_BLOCK(Type.BLOCK), - USE_ITEM(Type.ITEM), - BREAK_ITEM(Type.ITEM), - CRAFT_ITEM(Type.ITEM), - KILL_ENTITY(Type.ENTITY), - ENTITY_KILLED_BY(Type.ENTITY); - - private final Type type; - - private Statistic() { - this(Type.UNTYPED); - } - - private Statistic(Type type) { - this.type = type; - } - - /** - * Gets the type of this statistic. - * - * @return the type of this statistic - */ - public Type getType() { - return type; - } - - /** - * Checks if this is a substatistic. - *

          - * A substatistic exists en masse for each block, item, or entitytype, depending on - * {@link #getType()}. - *

          - * This is a redundant method and equivalent to checking - * getType() != Type.UNTYPED - * - * @return true if this is a substatistic - */ - public boolean isSubstatistic() { - return type != Type.UNTYPED; - } - - /** - * Checks if this is a substatistic dealing with blocks. - *

          - * This is a redundant method and equivalent to checking - * getType() == Type.BLOCK - * - * @return true if this deals with blocks - */ - public boolean isBlock() { - return type == Type.BLOCK; - } - - /** - * The type of statistic. - * - */ - public enum Type { - /** - * Statistics of this type do not require a qualifier. - */ - UNTYPED, - - /** - * Statistics of this type require an Item Material qualifier. - */ - ITEM, - - /** - * Statistics of this type require a Block Material qualifier. - */ - BLOCK, - - /** - * Statistics of this type require an EntityType qualifier. - */ - ENTITY; - } -} diff --git a/LiveWeather/src/org/bukkit/TravelAgent.java b/LiveWeather/src/org/bukkit/TravelAgent.java deleted file mode 100755 index 2dfeffa..0000000 --- a/LiveWeather/src/org/bukkit/TravelAgent.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bukkit; - -/** - * The Travel Agent handles the creation and the research of Nether and End - * portals when Entities try to use one. - *

          - * It is used in {@link org.bukkit.event.entity.EntityPortalEvent} and in - * {@link org.bukkit.event.player.PlayerPortalEvent} to help developers - * reproduce and/or modify Vanilla behaviour. - */ -public interface TravelAgent { - - /** - * Set the Block radius to search in for available portals. - * - * @param radius the radius in which to search for a portal from the - * location - * @return this travel agent - */ - public TravelAgent setSearchRadius(int radius); - - /** - * Gets the search radius value for finding an available portal. - * - * @return the currently set search radius - */ - public int getSearchRadius(); - - /** - * Sets the maximum radius from the given location to create a portal. - * - * @param radius the radius in which to create a portal from the location - * @return this travel agent - */ - public TravelAgent setCreationRadius(int radius); - - /** - * Gets the maximum radius from the given location to create a portal. - * - * @return the currently set creation radius - */ - public int getCreationRadius(); - - /** - * Returns whether the TravelAgent will attempt to create a destination - * portal or not. - * - * @return whether the TravelAgent should create a destination portal or - * not - */ - public boolean getCanCreatePortal(); - - /** - * Sets whether the TravelAgent should attempt to create a destination - * portal or not. - * - * @param create Sets whether the TravelAgent should create a destination - * portal or not - */ - public void setCanCreatePortal(boolean create); - - /** - * Attempt to find a portal near the given location, if a portal is not - * found it will attempt to create one. - * - * @param location the location where the search for a portal should begin - * @return the location of a portal which has been found or returns the - * location passed to the method if unsuccessful - * @see #createPortal(Location) - */ - public Location findOrCreate(Location location); - - /** - * Attempt to find a portal near the given location. - * - * @param location the desired location of the portal - * @return the location of the nearest portal to the location - */ - public Location findPortal(Location location); - - /** - * Attempt to create a portal near the given location. - *

          - * In the case of a Nether portal teleportation, this will attempt to - * create a Nether portal. - *

          - * In the case of an Ender portal teleportation, this will (re-)create the - * obsidian platform and clean blocks above it. - * - * @param location the desired location of the portal - * @return true if a portal was successfully created - */ - public boolean createPortal(Location location); -} diff --git a/LiveWeather/src/org/bukkit/TreeSpecies.java b/LiveWeather/src/org/bukkit/TreeSpecies.java deleted file mode 100755 index f29062a..0000000 --- a/LiveWeather/src/org/bukkit/TreeSpecies.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.bukkit; - -import java.util.Map; - -import com.google.common.collect.Maps; - -/** - * Represents the different species of trees regardless of size. - */ -public enum TreeSpecies { - - /** - * Represents the common tree species. - */ - GENERIC(0x0), - /** - * Represents the darker barked/leaved tree species. - */ - REDWOOD(0x1), - /** - * Represents birches. - */ - BIRCH(0x2), - /** - * Represents jungle trees. - */ - JUNGLE(0x3), - /** - * Represents acacia trees. - */ - ACACIA(0x4), - /** - * Represents dark oak trees. - */ - DARK_OAK(0x5), - ; - - private final byte data; - private final static Map BY_DATA = Maps.newHashMap(); - - private TreeSpecies(final int data) { - this.data = (byte) data; - } - - /** - * Gets the associated data value representing this species - * - * @return A byte containing the data value of this tree species - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Gets the TreeSpecies with the given data value - * - * @param data Data value to fetch - * @return The {@link TreeSpecies} representing the given value, or null - * if it doesn't exist - * @deprecated Magic value - */ - @Deprecated - public static TreeSpecies getByData(final byte data) { - return BY_DATA.get(data); - } - - static { - for (TreeSpecies species : values()) { - BY_DATA.put(species.data, species); - } - } -} diff --git a/LiveWeather/src/org/bukkit/TreeType.java b/LiveWeather/src/org/bukkit/TreeType.java deleted file mode 100755 index 5a5c4d9..0000000 --- a/LiveWeather/src/org/bukkit/TreeType.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit; - -/** - * Tree and organic structure types. - */ -public enum TreeType { - - /** - * Regular tree, no branches - */ - TREE, - /** - * Regular tree, extra tall with branches - */ - BIG_TREE, - /** - * Redwood tree, shaped like a pine tree - */ - REDWOOD, - /** - * Tall redwood tree with just a few leaves at the top - */ - TALL_REDWOOD, - /** - * Birch tree - */ - BIRCH, - /** - * Standard jungle tree; 4 blocks wide and tall - */ - JUNGLE, - /** - * Smaller jungle tree; 1 block wide - */ - SMALL_JUNGLE, - /** - * Jungle tree with cocoa plants; 1 block wide - */ - COCOA_TREE, - /** - * Small bush that grows in the jungle - */ - JUNGLE_BUSH, - /** - * Big red mushroom; short and fat - */ - RED_MUSHROOM, - /** - * Big brown mushroom; tall and umbrella-like - */ - BROWN_MUSHROOM, - /** - * Swamp tree (regular with vines on the side) - */ - SWAMP, - /** - * Acacia tree. - */ - ACACIA, - /** - * Dark Oak tree. - */ - DARK_OAK, - /** - * Mega redwood tree; 4 blocks wide and tall - */ - MEGA_REDWOOD, - /** - * Tall birch tree - */ - TALL_BIRCH, -} diff --git a/LiveWeather/src/org/bukkit/UnsafeValues.java b/LiveWeather/src/org/bukkit/UnsafeValues.java deleted file mode 100755 index fc8a179..0000000 --- a/LiveWeather/src/org/bukkit/UnsafeValues.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.bukkit; - -import java.util.List; - -import org.bukkit.inventory.ItemStack; - -/** - * This interface provides value conversions that may be specific to a - * runtime, or have arbitrary meaning (read: magic values). - *

          - * Their existence and behavior is not guaranteed across future versions. They - * may be poorly named, throw exceptions, have misleading parameters, or any - * other bad programming practice. - *

          - * This interface is unsupported and only for internal use. - * - * @deprecated Unsupported & internal use only - */ -@Deprecated -public interface UnsafeValues { - - Material getMaterialFromInternalName(String name); - - List tabCompleteInternalMaterialName(String token, List completions); - - ItemStack modifyItemStack(ItemStack stack, String arguments); - - Statistic getStatisticFromInternalName(String name); - - Achievement getAchievementFromInternalName(String name); - - List tabCompleteInternalStatisticOrAchievementName(String token, List completions); -} diff --git a/LiveWeather/src/org/bukkit/Utility.java b/LiveWeather/src/org/bukkit/Utility.java deleted file mode 100755 index da66853..0000000 --- a/LiveWeather/src/org/bukkit/Utility.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bukkit; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * This annotation indicates a method (and sometimes constructor) will chain - * its internal operations. - *

          - * This is solely meant for identifying methods that don't need to be - * overridden / handled manually. - */ -@Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) -@Retention(RetentionPolicy.SOURCE) -public @interface Utility { -} diff --git a/LiveWeather/src/org/bukkit/Warning.java b/LiveWeather/src/org/bukkit/Warning.java deleted file mode 100755 index 6a2a3b0..0000000 --- a/LiveWeather/src/org/bukkit/Warning.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.bukkit; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.Map; - -import com.google.common.collect.ImmutableMap; - -/** - * This designates the warning state for a specific item. - *

          - * When the server settings dictate 'default' warnings, warnings are printed - * if the {@link #value()} is true. - */ -@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface Warning { - - /** - * This represents the states that server verbose for warnings may be. - */ - public enum WarningState { - - /** - * Indicates all warnings should be printed for deprecated items. - */ - ON, - /** - * Indicates no warnings should be printed for deprecated items. - */ - OFF, - /** - * Indicates each warning would default to the configured {@link - * Warning} annotation, or always if annotation not found. - */ - DEFAULT; - - private static final Map values = ImmutableMap.builder() - .put("off", OFF) - .put("false", OFF) - .put("f", OFF) - .put("no", OFF) - .put("n", OFF) - .put("on", ON) - .put("true", ON) - .put("t", ON) - .put("yes", ON) - .put("y", ON) - .put("", DEFAULT) - .put("d", DEFAULT) - .put("default", DEFAULT) - .build(); - - /** - * This method checks the provided warning should be printed for this - * state - * - * @param warning The warning annotation added to a deprecated item - * @return

            - *
          • ON is always True - *
          • OFF is always false - *
          • DEFAULT is false if and only if annotation is not null and - * specifies false for {@link Warning#value()}, true otherwise. - *
          - */ - public boolean printFor(Warning warning) { - if (this == DEFAULT) { - return warning == null || warning.value(); - } - return this == ON; - } - - /** - * This method returns the corresponding warning state for the given - * string value. - * - * @param value The string value to check - * @return {@link #DEFAULT} if not found, or the respective - * WarningState - */ - public static WarningState value(final String value) { - if (value == null) { - return DEFAULT; - } - WarningState state = values.get(value.toLowerCase()); - if (state == null) { - return DEFAULT; - } - return state; - } - } - - /** - * This sets if the deprecation warnings when registering events gets - * printed when the setting is in the default state. - * - * @return false normally, or true to encourage warning printout - */ - boolean value() default false; - - /** - * This can provide detailed information on why the event is deprecated. - * - * @return The reason an event is deprecated - */ - String reason() default ""; -} diff --git a/LiveWeather/src/org/bukkit/WeatherType.java b/LiveWeather/src/org/bukkit/WeatherType.java deleted file mode 100755 index 36b993f..0000000 --- a/LiveWeather/src/org/bukkit/WeatherType.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit; - -/** - * An enum of all current weather types - */ -public enum WeatherType { - - /** - * Raining or snowing depending on biome. - */ - DOWNFALL, - /** - * Clear weather, clouds but no rain. - */ - CLEAR, - ; -} diff --git a/LiveWeather/src/org/bukkit/World.java b/LiveWeather/src/org/bukkit/World.java deleted file mode 100755 index 9bf2c41..0000000 --- a/LiveWeather/src/org/bukkit/World.java +++ /dev/null @@ -1,1212 +0,0 @@ -package org.bukkit; - -import java.io.File; -import org.bukkit.generator.ChunkGenerator; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.block.Biome; -import org.bukkit.block.Block; -import org.bukkit.entity.*; -import org.bukkit.generator.BlockPopulator; -import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.Metadatable; -import org.bukkit.plugin.messaging.PluginMessageRecipient; -import org.bukkit.util.Vector; - -/** - * Represents a world, which may contain entities, chunks and blocks - */ -public interface World extends PluginMessageRecipient, Metadatable { - - /** - * Gets the {@link Block} at the given coordinates - * - * @param x X-coordinate of the block - * @param y Y-coordinate of the block - * @param z Z-coordinate of the block - * @return Block at the given coordinates - * @see #getBlockTypeIdAt(int, int, int) Returns the current type ID of - * the block - */ - public Block getBlockAt(int x, int y, int z); - - /** - * Gets the {@link Block} at the given {@link Location} - * - * @param location Location of the block - * @return Block at the given location - * @see #getBlockTypeIdAt(org.bukkit.Location) Returns the current type ID - * of the block - */ - public Block getBlockAt(Location location); - - /** - * Gets the block type ID at the given coordinates - * - * @param x X-coordinate of the block - * @param y Y-coordinate of the block - * @param z Z-coordinate of the block - * @return Type ID of the block at the given coordinates - * @see #getBlockAt(int, int, int) Returns a live Block object at the - * given location - * @deprecated Magic value - */ - @Deprecated - public int getBlockTypeIdAt(int x, int y, int z); - - /** - * Gets the block type ID at the given {@link Location} - * - * @param location Location of the block - * @return Type ID of the block at the given location - * @see #getBlockAt(org.bukkit.Location) Returns a live Block object at - * the given location - * @deprecated Magic value - */ - @Deprecated - public int getBlockTypeIdAt(Location location); - - /** - * Gets the highest non-air coordinate at the given coordinates - * - * @param x X-coordinate of the blocks - * @param z Z-coordinate of the blocks - * @return Y-coordinate of the highest non-air block - */ - public int getHighestBlockYAt(int x, int z); - - /** - * Gets the highest non-air coordinate at the given {@link Location} - * - * @param location Location of the blocks - * @return Y-coordinate of the highest non-air block - */ - public int getHighestBlockYAt(Location location); - - /** - * Gets the highest non-empty block at the given coordinates - * - * @param x X-coordinate of the block - * @param z Z-coordinate of the block - * @return Highest non-empty block - */ - public Block getHighestBlockAt(int x, int z); - - /** - * Gets the highest non-empty block at the given coordinates - * - * @param location Coordinates to get the highest block - * @return Highest non-empty block - */ - public Block getHighestBlockAt(Location location); - - /** - * Gets the {@link Chunk} at the given coordinates - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return Chunk at the given coordinates - */ - public Chunk getChunkAt(int x, int z); - - /** - * Gets the {@link Chunk} at the given {@link Location} - * - * @param location Location of the chunk - * @return Chunk at the given location - */ - public Chunk getChunkAt(Location location); - - /** - * Gets the {@link Chunk} that contains the given {@link Block} - * - * @param block Block to get the containing chunk from - * @return The chunk that contains the given block - */ - public Chunk getChunkAt(Block block); - - /** - * Checks if the specified {@link Chunk} is loaded - * - * @param chunk The chunk to check - * @return true if the chunk is loaded, otherwise false - */ - public boolean isChunkLoaded(Chunk chunk); - - /** - * Gets an array of all loaded {@link Chunk}s - * - * @return Chunk[] containing all loaded chunks - */ - public Chunk[] getLoadedChunks(); - - /** - * Loads the specified {@link Chunk} - * - * @param chunk The chunk to load - */ - public void loadChunk(Chunk chunk); - - /** - * Checks if the {@link Chunk} at the specified coordinates is loaded - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return true if the chunk is loaded, otherwise false - */ - public boolean isChunkLoaded(int x, int z); - - /** - * Checks if the {@link Chunk} at the specified coordinates is loaded and - * in use by one or more players - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return true if the chunk is loaded and in use by one or more players, - * otherwise false - */ - public boolean isChunkInUse(int x, int z); - - /** - * Loads the {@link Chunk} at the specified coordinates - *

          - * If the chunk does not exist, it will be generated. - *

          - * This method is analogous to {@link #loadChunk(int, int, boolean)} where - * generate is true. - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - */ - public void loadChunk(int x, int z); - - /** - * Loads the {@link Chunk} at the specified coordinates - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @param generate Whether or not to generate a chunk if it doesn't - * already exist - * @return true if the chunk has loaded successfully, otherwise false - */ - public boolean loadChunk(int x, int z, boolean generate); - - /** - * Safely unloads and saves the {@link Chunk} at the specified coordinates - *

          - * This method is analogous to {@link #unloadChunk(int, int, boolean, - * boolean)} where safe and saveis true - * - * @param chunk the chunk to unload - * @return true if the chunk has unloaded successfully, otherwise false - */ - public boolean unloadChunk(Chunk chunk); - - /** - * Safely unloads and saves the {@link Chunk} at the specified coordinates - *

          - * This method is analogous to {@link #unloadChunk(int, int, boolean, - * boolean)} where safe and saveis true - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return true if the chunk has unloaded successfully, otherwise false - */ - public boolean unloadChunk(int x, int z); - - /** - * Safely unloads and optionally saves the {@link Chunk} at the specified - * coordinates - *

          - * This method is analogous to {@link #unloadChunk(int, int, boolean, - * boolean)} where save is true - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @param save Whether or not to save the chunk - * @return true if the chunk has unloaded successfully, otherwise false - */ - public boolean unloadChunk(int x, int z, boolean save); - - /** - * Unloads and optionally saves the {@link Chunk} at the specified - * coordinates - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @param save Controls whether the chunk is saved - * @param safe Controls whether to unload the chunk when players are - * nearby - * @return true if the chunk has unloaded successfully, otherwise false - */ - public boolean unloadChunk(int x, int z, boolean save, boolean safe); - - /** - * Safely queues the {@link Chunk} at the specified coordinates for - * unloading - *

          - * This method is analogous to {@link #unloadChunkRequest(int, int, - * boolean)} where safe is true - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return true is the queue attempt was successful, otherwise false - */ - public boolean unloadChunkRequest(int x, int z); - - /** - * Queues the {@link Chunk} at the specified coordinates for unloading - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @param safe Controls whether to queue the chunk when players are nearby - * @return Whether the chunk was actually queued - */ - public boolean unloadChunkRequest(int x, int z, boolean safe); - - /** - * Regenerates the {@link Chunk} at the specified coordinates - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return Whether the chunk was actually regenerated - */ - public boolean regenerateChunk(int x, int z); - - /** - * Resends the {@link Chunk} to all clients - * - * @param x X-coordinate of the chunk - * @param z Z-coordinate of the chunk - * @return Whether the chunk was actually refreshed - */ - public boolean refreshChunk(int x, int z); - - /** - * Drops an item at the specified {@link Location} - * - * @param location Location to drop the item - * @param item ItemStack to drop - * @return ItemDrop entity created as a result of this method - */ - public Item dropItem(Location location, ItemStack item); - - /** - * Drops an item at the specified {@link Location} with a random offset - * - * @param location Location to drop the item - * @param item ItemStack to drop - * @return ItemDrop entity created as a result of this method - */ - public Item dropItemNaturally(Location location, ItemStack item); - - /** - * Creates an {@link Arrow} entity at the given {@link Location} - * - * @param location Location to spawn the arrow - * @param direction Direction to shoot the arrow in - * @param speed Speed of the arrow. A recommend speed is 0.6 - * @param spread Spread of the arrow. A recommend spread is 12 - * @return Arrow entity spawned as a result of this method - */ - public Arrow spawnArrow(Location location, Vector direction, float speed, float spread); - - /** - * Creates a tree at the given {@link Location} - * - * @param location Location to spawn the tree - * @param type Type of the tree to create - * @return true if the tree was created successfully, otherwise false - */ - public boolean generateTree(Location location, TreeType type); - - /** - * Creates a tree at the given {@link Location} - * - * @param loc Location to spawn the tree - * @param type Type of the tree to create - * @param delegate A class to call for each block changed as a result of - * this method - * @return true if the tree was created successfully, otherwise false - */ - public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate); - - /** - * Creates a entity at the given {@link Location} - * - * @param loc The location to spawn the entity - * @param type The entity to spawn - * @return Resulting Entity of this method, or null if it was unsuccessful - */ - public Entity spawnEntity(Location loc, EntityType type); - - /** - * Creates a creature at the given {@link Location} - * - * @param loc The location to spawn the creature - * @param type The creature to spawn - * @return Resulting LivingEntity of this method, or null if it was - * unsuccessful - * @deprecated Has issues spawning non LivingEntities. Use {@link - * #spawnEntity(Location, EntityType) spawnEntity} instead. - */ - @Deprecated - public LivingEntity spawnCreature(Location loc, EntityType type); - - /** - * Creates a creature at the given {@link Location} - * - * @param loc The location to spawn the creature - * @param type The creature to spawn - * @return Resulting LivingEntity of this method, or null if it was - * unsuccessful - */ - @Deprecated - public LivingEntity spawnCreature(Location loc, CreatureType type); - - /** - * Strikes lightning at the given {@link Location} - * - * @param loc The location to strike lightning - * @return The lightning entity. - */ - public LightningStrike strikeLightning(Location loc); - - /** - * Strikes lightning at the given {@link Location} without doing damage - * - * @param loc The location to strike lightning - * @return The lightning entity. - */ - public LightningStrike strikeLightningEffect(Location loc); - - /** - * Get a list of all entities in this World - * - * @return A List of all Entities currently residing in this world - */ - public List getEntities(); - - /** - * Get a list of all living entities in this World - * - * @return A List of all LivingEntities currently residing in this world - */ - public List getLivingEntities(); - - /** - * Get a collection of all entities in this World matching the given - * class/interface - * - * @param classes The classes representing the types of entity to match - * @return A List of all Entities currently residing in this world that - * match the given class/interface - */ - @Deprecated - public Collection getEntitiesByClass(Class... classes); - - /** - * Get a collection of all entities in this World matching the given - * class/interface - * - * @param cls The class representing the type of entity to match - * @return A List of all Entities currently residing in this world that - * match the given class/interface - */ - public Collection getEntitiesByClass(Class cls); - - /** - * Get a collection of all entities in this World matching any of the - * given classes/interfaces - * - * @param classes The classes representing the types of entity to match - * @return A List of all Entities currently residing in this world that - * match one or more of the given classes/interfaces - */ - public Collection getEntitiesByClasses(Class... classes); - - /** - * Get a list of all players in this World - * - * @return A list of all Players currently residing in this world - */ - public List getPlayers(); - - /** - * Gets the unique name of this world - * - * @return Name of this world - */ - public String getName(); - - /** - * Gets the Unique ID of this world - * - * @return Unique ID of this world. - */ - public UUID getUID(); - - /** - * Gets the default spawn {@link Location} of this world - * - * @return The spawn location of this world - */ - public Location getSpawnLocation(); - - /** - * Sets the spawn location of the world - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @return True if it was successfully set. - */ - public boolean setSpawnLocation(int x, int y, int z); - - /** - * Gets the relative in-game time of this world. - *

          - * The relative time is analogous to hours * 1000 - * - * @return The current relative time - * @see #getFullTime() Returns an absolute time of this world - */ - public long getTime(); - - /** - * Sets the relative in-game time on the server. - *

          - * The relative time is analogous to hours * 1000 - *

          - * Note that setting the relative time below the current relative time - * will actually move the clock forward a day. If you require to rewind - * time, please see {@link #setFullTime(long)} - * - * @param time The new relative time to set the in-game time to (in - * hours*1000) - * @see #setFullTime(long) Sets the absolute time of this world - */ - public void setTime(long time); - - /** - * Gets the full in-game time on this world - * - * @return The current absolute time - * @see #getTime() Returns a relative time of this world - */ - public long getFullTime(); - - /** - * Sets the in-game time on the server - *

          - * Note that this sets the full time of the world, which may cause adverse - * effects such as breaking redstone clocks and any scheduled events - * - * @param time The new absolute time to set this world to - * @see #setTime(long) Sets the relative time of this world - */ - public void setFullTime(long time); - - /** - * Returns whether the world has an ongoing storm. - * - * @return Whether there is an ongoing storm - */ - public boolean hasStorm(); - - /** - * Set whether there is a storm. A duration will be set for the new - * current conditions. - * - * @param hasStorm Whether there is rain and snow - */ - public void setStorm(boolean hasStorm); - - /** - * Get the remaining time in ticks of the current conditions. - * - * @return Time in ticks - */ - public int getWeatherDuration(); - - /** - * Set the remaining time in ticks of the current conditions. - * - * @param duration Time in ticks - */ - public void setWeatherDuration(int duration); - - /** - * Returns whether there is thunder. - * - * @return Whether there is thunder - */ - public boolean isThundering(); - - /** - * Set whether it is thundering. - * - * @param thundering Whether it is thundering - */ - public void setThundering(boolean thundering); - - /** - * Get the thundering duration. - * - * @return Duration in ticks - */ - public int getThunderDuration(); - - /** - * Set the thundering duration. - * - * @param duration Duration in ticks - */ - public void setThunderDuration(int duration); - - /** - * Creates explosion at given coordinates with given power - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param power The power of explosion, where 4F is TNT - * @return false if explosion was canceled, otherwise true - */ - public boolean createExplosion(double x, double y, double z, float power); - - /** - * Creates explosion at given coordinates with given power and optionally - * setting blocks on fire. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param power The power of explosion, where 4F is TNT - * @param setFire Whether or not to set blocks on fire - * @return false if explosion was canceled, otherwise true - */ - public boolean createExplosion(double x, double y, double z, float power, boolean setFire); - - /** - * Creates explosion at given coordinates with given power and optionally - * setting blocks on fire or breaking blocks. - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param power The power of explosion, where 4F is TNT - * @param setFire Whether or not to set blocks on fire - * @param breakBlocks Whether or not to have blocks be destroyed - * @return false if explosion was canceled, otherwise true - */ - public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks); - - /** - * Creates explosion at given coordinates with given power - * - * @param loc Location to blow up - * @param power The power of explosion, where 4F is TNT - * @return false if explosion was canceled, otherwise true - */ - public boolean createExplosion(Location loc, float power); - - /** - * Creates explosion at given coordinates with given power and optionally - * setting blocks on fire. - * - * @param loc Location to blow up - * @param power The power of explosion, where 4F is TNT - * @param setFire Whether or not to set blocks on fire - * @return false if explosion was canceled, otherwise true - */ - public boolean createExplosion(Location loc, float power, boolean setFire); - - /** - * Gets the {@link Environment} type of this world - * - * @return This worlds Environment type - */ - public Environment getEnvironment(); - - /** - * Gets the Seed for this world. - * - * @return This worlds Seed - */ - public long getSeed(); - - /** - * Gets the current PVP setting for this world. - * - * @return True if PVP is enabled - */ - public boolean getPVP(); - - /** - * Sets the PVP setting for this world. - * - * @param pvp True/False whether PVP should be Enabled. - */ - public void setPVP(boolean pvp); - - /** - * Gets the chunk generator for this world - * - * @return ChunkGenerator associated with this world - */ - public ChunkGenerator getGenerator(); - - /** - * Saves world to disk - */ - public void save(); - - /** - * Gets a list of all applied {@link BlockPopulator}s for this World - * - * @return List containing any or none BlockPopulators - */ - public List getPopulators(); - - /** - * Spawn an entity of a specific class at the given {@link Location} - * - * @param location the {@link Location} to spawn the entity at - * @param clazz the class of the {@link Entity} to spawn - * @param the class of the {@link Entity} to spawn - * @return an instance of the spawned {@link Entity} - * @throws IllegalArgumentException if either parameter is null or the - * {@link Entity} requested cannot be spawned - */ - public T spawn(Location location, Class clazz) throws IllegalArgumentException; - - /** - * Spawn a {@link FallingBlock} entity at the given {@link Location} of - * the specified {@link Material}. The material dictates what is falling. - * When the FallingBlock hits the ground, it will place that block. - *

          - * The Material must be a block type, check with {@link Material#isBlock() - * material.isBlock()}. The Material may not be air. - * - * @param location The {@link Location} to spawn the FallingBlock - * @param material The block {@link Material} type - * @param data The block data - * @return The spawned {@link FallingBlock} instance - * @throws IllegalArgumentException if {@link Location} or {@link - * Material} are null or {@link Material} is not a block - * @deprecated Magic value - */ - @Deprecated - public FallingBlock spawnFallingBlock(Location location, Material material, byte data) throws IllegalArgumentException; - - /** - * Spawn a {@link FallingBlock} entity at the given {@link Location} of - * the specified blockId (converted to {@link Material}) - * - * @param location The {@link Location} to spawn the FallingBlock - * @param blockId The id of the intended material - * @param blockData The block data - * @return The spawned FallingBlock instance - * @throws IllegalArgumentException if location is null, or blockId is - * invalid - * @see #spawnFallingBlock(org.bukkit.Location, org.bukkit.Material, byte) - * @deprecated Magic value - */ - @Deprecated - public FallingBlock spawnFallingBlock(Location location, int blockId, byte blockData) throws IllegalArgumentException; - - /** - * Plays an effect to all players within a default radius around a given - * location. - * - * @param location the {@link Location} around which players must be to - * hear the sound - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - */ - public void playEffect(Location location, Effect effect, int data); - - /** - * Plays an effect to all players within a given radius around a location. - * - * @param location the {@link Location} around which players must be to - * hear the effect - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - * @param radius the radius around the location - */ - public void playEffect(Location location, Effect effect, int data, int radius); - - /** - * Plays an effect to all players within a default radius around a given - * location. - * - * @param location the {@link Location} around which players must be to - * hear the sound - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - */ - public void playEffect(Location location, Effect effect, T data); - - /** - * Plays an effect to all players within a given radius around a location. - * - * @param location the {@link Location} around which players must be to - * hear the effect - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - * @param radius the radius around the location - */ - public void playEffect(Location location, Effect effect, T data, int radius); - - /** - * Get empty chunk snapshot (equivalent to all air blocks), optionally - * including valid biome data. Used for representing an ungenerated chunk, - * or for fetching only biome data without loading a chunk. - * - * @param x - chunk x coordinate - * @param z - chunk z coordinate - * @param includeBiome - if true, snapshot includes per-coordinate biome - * type - * @param includeBiomeTempRain - if true, snapshot includes per-coordinate - * raw biome temperature and rainfall - * @return The empty snapshot. - */ - public ChunkSnapshot getEmptyChunkSnapshot(int x, int z, boolean includeBiome, boolean includeBiomeTempRain); - - /** - * Sets the spawn flags for this. - * - * @param allowMonsters - if true, monsters are allowed to spawn in this - * world. - * @param allowAnimals - if true, animals are allowed to spawn in this - * world. - */ - public void setSpawnFlags(boolean allowMonsters, boolean allowAnimals); - - /** - * Gets whether animals can spawn in this world. - * - * @return whether animals can spawn in this world. - */ - public boolean getAllowAnimals(); - - /** - * Gets whether monsters can spawn in this world. - * - * @return whether monsters can spawn in this world. - */ - public boolean getAllowMonsters(); - - /** - * Gets the biome for the given block coordinates. - * - * @param x X coordinate of the block - * @param z Z coordinate of the block - * @return Biome of the requested block - */ - Biome getBiome(int x, int z); - - /** - * Sets the biome for the given block coordinates - * - * @param x X coordinate of the block - * @param z Z coordinate of the block - * @param bio new Biome type for this block - */ - void setBiome(int x, int z, Biome bio); - - /** - * Gets the temperature for the given block coordinates. - *

          - * It is safe to run this method when the block does not exist, it will - * not create the block. - * - * @param x X coordinate of the block - * @param z Z coordinate of the block - * @return Temperature of the requested block - */ - public double getTemperature(int x, int z); - - /** - * Gets the humidity for the given block coordinates. - *

          - * It is safe to run this method when the block does not exist, it will - * not create the block. - * - * @param x X coordinate of the block - * @param z Z coordinate of the block - * @return Humidity of the requested block - */ - public double getHumidity(int x, int z); - - /** - * Gets the maximum height of this world. - *

          - * If the max height is 100, there are only blocks from y=0 to y=99. - * - * @return Maximum height of the world - */ - public int getMaxHeight(); - - /** - * Gets the sea level for this world. - *

          - * This is often half of {@link #getMaxHeight()} - * - * @return Sea level - */ - public int getSeaLevel(); - - /** - * Gets whether the world's spawn area should be kept loaded into memory - * or not. - * - * @return true if the world's spawn area will be kept loaded into memory. - */ - public boolean getKeepSpawnInMemory(); - - /** - * Sets whether the world's spawn area should be kept loaded into memory - * or not. - * - * @param keepLoaded if true then the world's spawn area will be kept - * loaded into memory. - */ - public void setKeepSpawnInMemory(boolean keepLoaded); - - /** - * Gets whether or not the world will automatically save - * - * @return true if the world will automatically save, otherwise false - */ - public boolean isAutoSave(); - - /** - * Sets whether or not the world will automatically save - * - * @param value true if the world should automatically save, otherwise - * false - */ - public void setAutoSave(boolean value); - - /** - * Sets the Difficulty of the world. - * - * @param difficulty the new difficulty you want to set the world to - */ - public void setDifficulty(Difficulty difficulty); - - /** - * Gets the Difficulty of the world. - * - * @return The difficulty of the world. - */ - public Difficulty getDifficulty(); - - /** - * Gets the folder of this world on disk. - * - * @return The folder of this world. - */ - public File getWorldFolder(); - - /** - * Gets the type of this world. - * - * @return Type of this world. - */ - public WorldType getWorldType(); - - /** - * Gets whether or not structures are being generated. - * - * @return True if structures are being generated. - */ - public boolean canGenerateStructures(); - - /** - * Gets the world's ticks per animal spawns value - *

          - * This value determines how many ticks there are between attempts to - * spawn animals. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn animals in - * this world every tick. - *
          • A value of 400 will mean the server will attempt to spawn animals - * in this world every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: - * If set to 0, animal spawning will be disabled for this world. We - * recommend using {@link #setSpawnFlags(boolean, boolean)} to control - * this instead. - *

          - * Minecraft default: 400. - * - * @return The world's ticks per animal spawns value - */ - public long getTicksPerAnimalSpawns(); - - /** - * Sets the world's ticks per animal spawns value - *

          - * This value determines how many ticks there are between attempts to - * spawn animals. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn animals in - * this world every tick. - *
          • A value of 400 will mean the server will attempt to spawn animals - * in this world every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: - * If set to 0, animal spawning will be disabled for this world. We - * recommend using {@link #setSpawnFlags(boolean, boolean)} to control - * this instead. - *

          - * Minecraft default: 400. - * - * @param ticksPerAnimalSpawns the ticks per animal spawns value you want - * to set the world to - */ - public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns); - - /** - * Gets the world's ticks per monster spawns value - *

          - * This value determines how many ticks there are between attempts to - * spawn monsters. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn monsters in - * this world every tick. - *
          • A value of 400 will mean the server will attempt to spawn monsters - * in this world every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: - * If set to 0, monsters spawning will be disabled for this world. We - * recommend using {@link #setSpawnFlags(boolean, boolean)} to control - * this instead. - *

          - * Minecraft default: 1. - * - * @return The world's ticks per monster spawns value - */ - public long getTicksPerMonsterSpawns(); - - /** - * Sets the world's ticks per monster spawns value - *

          - * This value determines how many ticks there are between attempts to - * spawn monsters. - *

          - * Example Usage: - *

            - *
          • A value of 1 will mean the server will attempt to spawn monsters in - * this world on every tick. - *
          • A value of 400 will mean the server will attempt to spawn monsters - * in this world every 400th tick. - *
          • A value below 0 will be reset back to Minecraft's default. - *
          - *

          - * Note: - * If set to 0, monsters spawning will be disabled for this world. We - * recommend using {@link #setSpawnFlags(boolean, boolean)} to control - * this instead. - *

          - * Minecraft default: 1. - * - * @param ticksPerMonsterSpawns the ticks per monster spawns value you - * want to set the world to - */ - public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns); - - /** - * Gets limit for number of monsters that can spawn in a chunk in this - * world - * - * @return The monster spawn limit - */ - int getMonsterSpawnLimit(); - - /** - * Sets the limit for number of monsters that can spawn in a chunk in this - * world - *

          - * Note: If set to a negative number the world will use the - * server-wide spawn limit instead. - */ - void setMonsterSpawnLimit(int limit); - - /** - * Gets the limit for number of animals that can spawn in a chunk in this - * world - * - * @return The animal spawn limit - */ - int getAnimalSpawnLimit(); - - /** - * Sets the limit for number of animals that can spawn in a chunk in this - * world - *

          - * Note: If set to a negative number the world will use the - * server-wide spawn limit instead. - */ - void setAnimalSpawnLimit(int limit); - - /** - * Gets the limit for number of water animals that can spawn in a chunk in - * this world - * - * @return The water animal spawn limit - */ - int getWaterAnimalSpawnLimit(); - - /** - * Sets the limit for number of water animals that can spawn in a chunk in - * this world - *

          - * Note: If set to a negative number the world will use the - * server-wide spawn limit instead. - */ - void setWaterAnimalSpawnLimit(int limit); - - /** - * Gets the limit for number of ambient mobs that can spawn in a chunk in - * this world - * - * @return The ambient spawn limit - */ - int getAmbientSpawnLimit(); - - /** - * Sets the limit for number of ambient mobs that can spawn in a chunk in - * this world - *

          - * Note: If set to a negative number the world will use the - * server-wide spawn limit instead. - */ - void setAmbientSpawnLimit(int limit); - - /** - * Play a Sound at the provided Location in the World - *

          - * This function will fail silently if Location or Sound are null. - * - * @param location The location to play the sound - * @param sound The sound to play - * @param volume The volume of the sound - * @param pitch The pitch of the sound - */ - void playSound(Location location, Sound sound, float volume, float pitch); - - /** - * Get existing rules - * - * @return An array of rules - */ - public String[] getGameRules(); - - /** - * Gets the current state of the specified rule - *

          - * Will return null if rule passed is null - * - * @param rule Rule to look up value of - * @return String value of rule - */ - public String getGameRuleValue(String rule); - - /** - * Set the specified gamerule to specified value. - *

          - * The rule may attempt to validate the value passed, will return true if - * value was set. - *

          - * If rule is null, the function will return false. - * - * @param rule Rule to set - * @param value Value to set rule to - * @return True if rule was set - */ - public boolean setGameRuleValue(String rule, String value); - - /** - * Checks if string is a valid game rule - * - * @param rule Rule to check - * @return True if rule exists - */ - public boolean isGameRule(String rule); - - /** - * Represents various map environment types that a world may be - */ - public enum Environment { - - /** - * Represents the "normal"/"surface world" map - */ - NORMAL(0), - /** - * Represents a nether based map ("hell") - */ - NETHER(-1), - /** - * Represents the "end" map - */ - THE_END(1); - - private final int id; - private static final Map lookup = new HashMap(); - - private Environment(int id) { - this.id = id; - } - - /** - * Gets the dimension ID of this environment - * - * @return dimension ID - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Get an environment by ID - * - * @param id The ID of the environment - * @return The environment - * @deprecated Magic value - */ - @Deprecated - public static Environment getEnvironment(int id) { - return lookup.get(id); - } - - static { - for (Environment env : values()) { - lookup.put(env.getId(), env); - } - } - } -} diff --git a/LiveWeather/src/org/bukkit/WorldCreator.java b/LiveWeather/src/org/bukkit/WorldCreator.java deleted file mode 100755 index 9a5afd2..0000000 --- a/LiveWeather/src/org/bukkit/WorldCreator.java +++ /dev/null @@ -1,295 +0,0 @@ -package org.bukkit; - -import java.util.Random; -import org.bukkit.command.CommandSender; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.plugin.Plugin; - -/** - * Represents various types of options that may be used to create a world. - */ -public class WorldCreator { - private final String name; - private long seed; - private World.Environment environment = World.Environment.NORMAL; - private ChunkGenerator generator = null; - private WorldType type = WorldType.NORMAL; - private boolean generateStructures = true; - - /** - * Creates an empty WorldCreationOptions for the given world name - * - * @param name Name of the world that will be created - */ - public WorldCreator(String name) { - if (name == null) { - throw new IllegalArgumentException("World name cannot be null"); - } - - this.name = name; - this.seed = (new Random()).nextLong(); - } - - /** - * Copies the options from the specified world - * - * @param world World to copy options from - * @return This object, for chaining - */ - public WorldCreator copy(World world) { - if (world == null) { - throw new IllegalArgumentException("World cannot be null"); - } - - seed = world.getSeed(); - environment = world.getEnvironment(); - generator = world.getGenerator(); - - return this; - } - - /** - * Copies the options from the specified {@link WorldCreator} - * - * @param creator World creator to copy options from - * @return This object, for chaining - */ - public WorldCreator copy(WorldCreator creator) { - if (creator == null) { - throw new IllegalArgumentException("Creator cannot be null"); - } - - seed = creator.seed(); - environment = creator.environment(); - generator = creator.generator(); - - return this; - } - - /** - * Gets the name of the world that is to be loaded or created. - * - * @return World name - */ - public String name() { - return name; - } - - /** - * Gets the seed that will be used to create this world - * - * @return World seed - */ - public long seed() { - return seed; - } - - /** - * Sets the seed that will be used to create this world - * - * @param seed World seed - * @return This object, for chaining - */ - public WorldCreator seed(long seed) { - this.seed = seed; - - return this; - } - - /** - * Gets the environment that will be used to create or load the world - * - * @return World environment - */ - public World.Environment environment() { - return environment; - } - - /** - * Sets the environment that will be used to create or load the world - * - * @param env World environment - * @return This object, for chaining - */ - public WorldCreator environment(World.Environment env) { - this.environment = env; - - return this; - } - - /** - * Gets the type of the world that will be created or loaded - * - * @return World type - */ - public WorldType type() { - return type; - } - - /** - * Sets the type of the world that will be created or loaded - * - * @param type World type - * @return This object, for chaining - */ - public WorldCreator type(WorldType type) { - this.type = type; - - return this; - } - - /** - * Gets the generator that will be used to create or load the world. - *

          - * This may be null, in which case the "natural" generator for this - * environment will be used. - * - * @return Chunk generator - */ - public ChunkGenerator generator() { - return generator; - } - - /** - * Sets the generator that will be used to create or load the world. - *

          - * This may be null, in which case the "natural" generator for this - * environment will be used. - * - * @param generator Chunk generator - * @return This object, for chaining - */ - public WorldCreator generator(ChunkGenerator generator) { - this.generator = generator; - - return this; - } - - /** - * Sets the generator that will be used to create or load the world. - *

          - * This may be null, in which case the "natural" generator for this - * environment will be used. - *

          - * If the generator cannot be found for the given name, the natural - * environment generator will be used instead and a warning will be - * printed to the console. - * - * @param generator Name of the generator to use, in "plugin:id" notation - * @return This object, for chaining - */ - public WorldCreator generator(String generator) { - this.generator = getGeneratorForName(name, generator, Bukkit.getConsoleSender()); - - return this; - } - - /** - * Sets the generator that will be used to create or load the world. - *

          - * This may be null, in which case the "natural" generator for this - * environment will be used. - *

          - * If the generator cannot be found for the given name, the natural - * environment generator will be used instead and a warning will be - * printed to the specified output - * - * @param generator Name of the generator to use, in "plugin:id" notation - * @param output {@link CommandSender} that will receive any error - * messages - * @return This object, for chaining - */ - public WorldCreator generator(String generator, CommandSender output) { - this.generator = getGeneratorForName(name, generator, output); - - return this; - } - - /** - * Sets whether or not worlds created or loaded with this creator will - * have structures. - * - * @param generate Whether to generate structures - * @return This object, for chaining - */ - public WorldCreator generateStructures(boolean generate) { - this.generateStructures = generate; - - return this; - } - - /** - * Gets whether or not structures will be generated in the world. - * - * @return True if structures will be generated - */ - public boolean generateStructures() { - return generateStructures; - } - - /** - * Creates a world with the specified options. - *

          - * If the world already exists, it will be loaded from disk and some - * options may be ignored. - * - * @return Newly created or loaded world - */ - public World createWorld() { - return Bukkit.createWorld(this); - } - - /** - * Creates a new {@link WorldCreator} for the given world name - * - * @param name Name of the world to load or create - * @return Resulting WorldCreator - */ - public static WorldCreator name(String name) { - return new WorldCreator(name); - } - - /** - * Attempts to get the {@link ChunkGenerator} with the given name. - *

          - * If the generator is not found, null will be returned and a message will - * be printed to the specified {@link CommandSender} explaining why. - *

          - * The name must be in the "plugin:id" notation, or optionally just - * "plugin", where "plugin" is the safe-name of a plugin and "id" is an - * optional unique identifier for the generator you wish to request from - * the plugin. - * - * @param world Name of the world this will be used for - * @param name Name of the generator to retrieve - * @param output Where to output if errors are present - * @return Resulting generator, or null - */ - public static ChunkGenerator getGeneratorForName(String world, String name, CommandSender output) { - ChunkGenerator result = null; - - if (world == null) { - throw new IllegalArgumentException("World name must be specified"); - } - - if (output == null) { - output = Bukkit.getConsoleSender(); - } - - if (name != null) { - String[] split = name.split(":", 2); - String id = (split.length > 1) ? split[1] : null; - Plugin plugin = Bukkit.getPluginManager().getPlugin(split[0]); - - if (plugin == null) { - output.sendMessage("Could not set generator for world '" + world + "': Plugin '" + split[0] + "' does not exist"); - } else if (!plugin.isEnabled()) { - output.sendMessage("Could not set generator for world '" + world + "': Plugin '" + plugin.getDescription().getFullName() + "' is not enabled"); - } else { - result = plugin.getDefaultWorldGenerator(world, id); - } - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/WorldType.java b/LiveWeather/src/org/bukkit/WorldType.java deleted file mode 100755 index 201852d..0000000 --- a/LiveWeather/src/org/bukkit/WorldType.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bukkit; - -import com.google.common.collect.Maps; -import java.util.Map; - -/** - * Represents various types of worlds that may exist - */ -public enum WorldType { - NORMAL("DEFAULT"), - FLAT("FLAT"), - VERSION_1_1("DEFAULT_1_1"), - LARGE_BIOMES("LARGEBIOMES"), - AMPLIFIED("AMPLIFIED"); - - private final static Map BY_NAME = Maps.newHashMap(); - private final String name; - - private WorldType(String name) { - this.name = name; - } - - /** - * Gets the name of this WorldType - * - * @return Name of this type - */ - public String getName() { - return name; - } - - /** - * Gets a Worldtype by its name - * - * @param name Name of the WorldType to get - * @return Requested WorldType, or null if not found - */ - public static WorldType getByName(String name) { - return BY_NAME.get(name.toUpperCase()); - } - - static { - for (WorldType type : values()) { - BY_NAME.put(type.name, type); - } - } -} diff --git a/LiveWeather/src/org/bukkit/block/Beacon.java b/LiveWeather/src/org/bukkit/block/Beacon.java deleted file mode 100755 index 2de0583..0000000 --- a/LiveWeather/src/org/bukkit/block/Beacon.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a beacon. - */ -public interface Beacon extends BlockState, InventoryHolder { -} diff --git a/LiveWeather/src/org/bukkit/block/Biome.java b/LiveWeather/src/org/bukkit/block/Biome.java deleted file mode 100755 index 8b902f4..0000000 --- a/LiveWeather/src/org/bukkit/block/Biome.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.bukkit.block; - -/** - * Holds all accepted Biomes in the default server - */ -public enum Biome { - SWAMPLAND, - FOREST, - TAIGA, - DESERT, - PLAINS, - HELL, - SKY, - OCEAN, - RIVER, - EXTREME_HILLS, - FROZEN_OCEAN, - FROZEN_RIVER, - ICE_PLAINS, - ICE_MOUNTAINS, - MUSHROOM_ISLAND, - MUSHROOM_SHORE, - BEACH, - DESERT_HILLS, - FOREST_HILLS, - TAIGA_HILLS, - SMALL_MOUNTAINS, - JUNGLE, - JUNGLE_HILLS, - JUNGLE_EDGE, - DEEP_OCEAN, - STONE_BEACH, - COLD_BEACH, - BIRCH_FOREST, - BIRCH_FOREST_HILLS, - ROOFED_FOREST, - COLD_TAIGA, - COLD_TAIGA_HILLS, - MEGA_TAIGA, - MEGA_TAIGA_HILLS, - EXTREME_HILLS_PLUS, - SAVANNA, - SAVANNA_PLATEAU, - MESA, - MESA_PLATEAU_FOREST, - MESA_PLATEAU, - SUNFLOWER_PLAINS, - DESERT_MOUNTAINS, - FLOWER_FOREST, - TAIGA_MOUNTAINS, - SWAMPLAND_MOUNTAINS, - ICE_PLAINS_SPIKES, - JUNGLE_MOUNTAINS, - JUNGLE_EDGE_MOUNTAINS, - COLD_TAIGA_MOUNTAINS, - SAVANNA_MOUNTAINS, - SAVANNA_PLATEAU_MOUNTAINS, - MESA_BRYCE, - MESA_PLATEAU_FOREST_MOUNTAINS, - MESA_PLATEAU_MOUNTAINS, - BIRCH_FOREST_MOUNTAINS, - BIRCH_FOREST_HILLS_MOUNTAINS, - ROOFED_FOREST_MOUNTAINS, - MEGA_SPRUCE_TAIGA, - EXTREME_HILLS_MOUNTAINS, - EXTREME_HILLS_PLUS_MOUNTAINS, - MEGA_SPRUCE_TAIGA_HILLS, -} diff --git a/LiveWeather/src/org/bukkit/block/Block.java b/LiveWeather/src/org/bukkit/block/Block.java deleted file mode 100755 index 4a53109..0000000 --- a/LiveWeather/src/org/bukkit/block/Block.java +++ /dev/null @@ -1,384 +0,0 @@ -package org.bukkit.block; - -import java.util.Collection; - -import org.bukkit.Chunk; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.Location; -import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.Metadatable; - -/** - * Represents a block. This is a live object, and only one Block may exist for - * any given location in a world. The state of the block may change - * concurrently to your own handling of it; use block.getState() to get a - * snapshot state of a block which will not be modified. - */ -public interface Block extends Metadatable { - - /** - * Gets the metadata for this block - * - * @return block specific metadata - * @deprecated Magic value - */ - @Deprecated - byte getData(); - - /** - * Gets the block at the given offsets - * - * @param modX X-coordinate offset - * @param modY Y-coordinate offset - * @param modZ Z-coordinate offset - * @return Block at the given offsets - */ - Block getRelative(int modX, int modY, int modZ); - - /** - * Gets the block at the given face - *

          - * This method is equal to getRelative(face, 1) - * - * @param face Face of this block to return - * @return Block at the given face - * @see #getRelative(BlockFace, int) - */ - Block getRelative(BlockFace face); - - /** - * Gets the block at the given distance of the given face - *

          - * For example, the following method places water at 100,102,100; two - * blocks above 100,100,100. - * - *

          -     * Block block = world.getBlockAt(100, 100, 100);
          -     * Block shower = block.getRelative(BlockFace.UP, 2);
          -     * shower.setType(Material.WATER);
          -     * 
          - * - * @param face Face of this block to return - * @param distance Distance to get the block at - * @return Block at the given face - */ - Block getRelative(BlockFace face, int distance); - - /** - * Gets the type of this block - * - * @return block type - */ - Material getType(); - - /** - * Gets the type-id of this block - * - * @return block type-id - * @deprecated Magic value - */ - @Deprecated - int getTypeId(); - - /** - * Gets the light level between 0-15 - * - * @return light level - */ - byte getLightLevel(); - - /** - * Get the amount of light at this block from the sky. - *

          - * Any light given from other sources (such as blocks like torches) will - * be ignored. - * - * @return Sky light level - */ - byte getLightFromSky(); - - /** - * Get the amount of light at this block from nearby blocks. - *

          - * Any light given from other sources (such as the sun) will be ignored. - * - * @return Block light level - */ - byte getLightFromBlocks(); - - /** - * Gets the world which contains this Block - * - * @return World containing this block - */ - World getWorld(); - - /** - * Gets the x-coordinate of this block - * - * @return x-coordinate - */ - int getX(); - - /** - * Gets the y-coordinate of this block - * - * @return y-coordinate - */ - int getY(); - - /** - * Gets the z-coordinate of this block - * - * @return z-coordinate - */ - int getZ(); - - /** - * Gets the Location of the block - * - * @return Location of block - */ - Location getLocation(); - - /** - * Stores the location of the block in the provided Location object. - *

          - * If the provided Location is null this method does nothing and returns - * null. - * - * @return The Location object provided or null - */ - Location getLocation(Location loc); - - /** - * Gets the chunk which contains this block - * - * @return Containing Chunk - */ - Chunk getChunk(); - - /** - * Sets the metadata for this block - * - * @param data New block specific metadata - * @deprecated Magic value - */ - @Deprecated - void setData(byte data); - - /** - * Sets the metadata for this block - * - * @param data New block specific metadata - * @param applyPhysics False to cancel physics from the changed block. - * @deprecated Magic value - */ - @Deprecated - void setData(byte data, boolean applyPhysics); - - /** - * Sets the type of this block - * - * @param type Material to change this block to - */ - void setType(Material type); - - /** - * Sets the type-id of this block - * - * @param type Type-Id to change this block to - * @return whether the block was changed - * @deprecated Magic value - */ - @Deprecated - boolean setTypeId(int type); - - /** - * Sets the type-id of this block - * - * @param type Type-Id to change this block to - * @param applyPhysics False to cancel physics on the changed block. - * @return whether the block was changed - * @deprecated Magic value - */ - @Deprecated - boolean setTypeId(int type, boolean applyPhysics); - - /** - * Sets the type-id of this block - * - * @param type Type-Id to change this block to - * @param data The data value to change this block to - * @param applyPhysics False to cancel physics on the changed block - * @return whether the block was changed - * @deprecated Magic value - */ - @Deprecated - boolean setTypeIdAndData(int type, byte data, boolean applyPhysics); - - /** - * Gets the face relation of this block compared to the given block - *

          - * For example: - *

          -     * Block current = world.getBlockAt(100, 100, 100);
          -     * Block target = world.getBlockAt(100, 101, 100);
          -     *
          -     * current.getFace(target) == BlockFace.Up;
          -     * 
          - *
          - * If the given block is not connected to this block, null may be returned - * - * @param block Block to compare against this block - * @return BlockFace of this block which has the requested block, or null - */ - BlockFace getFace(Block block); - - /** - * Captures the current state of this block. You may then cast that state - * into any accepted type, such as Furnace or Sign. - *

          - * The returned object will never be updated, and you are not guaranteed - * that (for example) a sign is still a sign after you capture its state. - * - * @return BlockState with the current state of this block. - */ - BlockState getState(); - - /** - * Returns the biome that this block resides in - * - * @return Biome type containing this block - */ - Biome getBiome(); - - /** - * Sets the biome that this block resides in - * - * @param bio new Biome type for this block - */ - void setBiome(Biome bio); - - /** - * Returns true if the block is being powered by Redstone. - * - * @return True if the block is powered. - */ - boolean isBlockPowered(); - - /** - * Returns true if the block is being indirectly powered by Redstone. - * - * @return True if the block is indirectly powered. - */ - boolean isBlockIndirectlyPowered(); - - /** - * Returns true if the block face is being powered by Redstone. - * - * @param face The block face - * @return True if the block face is powered. - */ - boolean isBlockFacePowered(BlockFace face); - - /** - * Returns true if the block face is being indirectly powered by Redstone. - * - * @param face The block face - * @return True if the block face is indirectly powered. - */ - boolean isBlockFaceIndirectlyPowered(BlockFace face); - - /** - * Returns the redstone power being provided to this block face - * - * @param face the face of the block to query or BlockFace.SELF for the - * block itself - * @return The power level. - */ - int getBlockPower(BlockFace face); - - /** - * Returns the redstone power being provided to this block - * - * @return The power level. - */ - int getBlockPower(); - - /** - * Checks if this block is empty. - *

          - * A block is considered empty when {@link #getType()} returns {@link - * Material#AIR}. - * - * @return true if this block is empty - */ - boolean isEmpty(); - - /** - * Checks if this block is liquid. - *

          - * A block is considered liquid when {@link #getType()} returns {@link - * Material#WATER}, {@link Material#STATIONARY_WATER}, {@link - * Material#LAVA} or {@link Material#STATIONARY_LAVA}. - * - * @return true if this block is liquid - */ - boolean isLiquid(); - - /** - * Gets the temperature of the biome of this block - * - * @return Temperature of this block - */ - double getTemperature(); - - /** - * Gets the humidity of the biome of this block - * - * @return Humidity of this block - */ - double getHumidity(); - - /** - * Returns the reaction of the block when moved by a piston - * - * @return reaction - */ - PistonMoveReaction getPistonMoveReaction(); - - /** - * Breaks the block and spawns items as if a player had digged it - * - * @return true if the block was destroyed - */ - boolean breakNaturally(); - - /** - * Breaks the block and spawns items as if a player had digged it with a - * specific tool - * - * @param tool The tool or item in hand used for digging - * @return true if the block was destroyed - */ - boolean breakNaturally(ItemStack tool); - - /** - * Returns a list of items which would drop by destroying this block - * - * @return a list of dropped items for this type of block - */ - Collection getDrops(); - - /** - * Returns a list of items which would drop by destroying this block with - * a specific tool - * - * @param tool The tool or item in hand used for digging - * @return a list of dropped items for this type of block - */ - Collection getDrops(ItemStack tool); - -} diff --git a/LiveWeather/src/org/bukkit/block/BlockFace.java b/LiveWeather/src/org/bukkit/block/BlockFace.java deleted file mode 100755 index 58fb195..0000000 --- a/LiveWeather/src/org/bukkit/block/BlockFace.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.bukkit.block; - -/** - * Represents the face of a block - */ -public enum BlockFace { - NORTH(0, 0, -1), - EAST(1, 0, 0), - SOUTH(0, 0, 1), - WEST(-1, 0, 0), - UP(0, 1, 0), - DOWN(0, -1, 0), - NORTH_EAST(NORTH, EAST), - NORTH_WEST(NORTH, WEST), - SOUTH_EAST(SOUTH, EAST), - SOUTH_WEST(SOUTH, WEST), - WEST_NORTH_WEST(WEST, NORTH_WEST), - NORTH_NORTH_WEST(NORTH, NORTH_WEST), - NORTH_NORTH_EAST(NORTH, NORTH_EAST), - EAST_NORTH_EAST(EAST, NORTH_EAST), - EAST_SOUTH_EAST(EAST, SOUTH_EAST), - SOUTH_SOUTH_EAST(SOUTH, SOUTH_EAST), - SOUTH_SOUTH_WEST(SOUTH, SOUTH_WEST), - WEST_SOUTH_WEST(WEST, SOUTH_WEST), - SELF(0, 0, 0); - - private final int modX; - private final int modY; - private final int modZ; - - private BlockFace(final int modX, final int modY, final int modZ) { - this.modX = modX; - this.modY = modY; - this.modZ = modZ; - } - - private BlockFace(final BlockFace face1, final BlockFace face2) { - this.modX = face1.getModX() + face2.getModX(); - this.modY = face1.getModY() + face2.getModY(); - this.modZ = face1.getModZ() + face2.getModZ(); - } - - /** - * Get the amount of X-coordinates to modify to get the represented block - * - * @return Amount of X-coordinates to modify - */ - public int getModX() { - return modX; - } - - /** - * Get the amount of Y-coordinates to modify to get the represented block - * - * @return Amount of Y-coordinates to modify - */ - public int getModY() { - return modY; - } - - /** - * Get the amount of Z-coordinates to modify to get the represented block - * - * @return Amount of Z-coordinates to modify - */ - public int getModZ() { - return modZ; - } - - public BlockFace getOppositeFace() { - switch (this) { - case NORTH: - return BlockFace.SOUTH; - - case SOUTH: - return BlockFace.NORTH; - - case EAST: - return BlockFace.WEST; - - case WEST: - return BlockFace.EAST; - - case UP: - return BlockFace.DOWN; - - case DOWN: - return BlockFace.UP; - - case NORTH_EAST: - return BlockFace.SOUTH_WEST; - - case NORTH_WEST: - return BlockFace.SOUTH_EAST; - - case SOUTH_EAST: - return BlockFace.NORTH_WEST; - - case SOUTH_WEST: - return BlockFace.NORTH_EAST; - - case WEST_NORTH_WEST: - return BlockFace.EAST_SOUTH_EAST; - - case NORTH_NORTH_WEST: - return BlockFace.SOUTH_SOUTH_EAST; - - case NORTH_NORTH_EAST: - return BlockFace.SOUTH_SOUTH_WEST; - - case EAST_NORTH_EAST: - return BlockFace.WEST_SOUTH_WEST; - - case EAST_SOUTH_EAST: - return BlockFace.WEST_NORTH_WEST; - - case SOUTH_SOUTH_EAST: - return BlockFace.NORTH_NORTH_WEST; - - case SOUTH_SOUTH_WEST: - return BlockFace.NORTH_NORTH_EAST; - - case WEST_SOUTH_WEST: - return BlockFace.EAST_NORTH_EAST; - - case SELF: - return BlockFace.SELF; - } - - return BlockFace.SELF; - } -} diff --git a/LiveWeather/src/org/bukkit/block/BlockState.java b/LiveWeather/src/org/bukkit/block/BlockState.java deleted file mode 100755 index ca57173..0000000 --- a/LiveWeather/src/org/bukkit/block/BlockState.java +++ /dev/null @@ -1,194 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.material.MaterialData; -import org.bukkit.metadata.Metadatable; - -/** - * Represents a captured state of a block, which will not change - * automatically. - *

          - * Unlike Block, which only one object can exist per coordinate, BlockState - * can exist multiple times for any given Block. Note that another plugin may - * change the state of the block and you will not know, or they may change the - * block to another type entirely, causing your BlockState to become invalid. - */ -public interface BlockState extends Metadatable { - - /** - * Gets the block represented by this BlockState - * - * @return Block that this BlockState represents - */ - Block getBlock(); - - /** - * Gets the metadata for this block - * - * @return block specific metadata - */ - MaterialData getData(); - - /** - * Gets the type of this block - * - * @return block type - */ - Material getType(); - - /** - * Gets the type-id of this block - * - * @return block type-id - * @deprecated Magic value - */ - @Deprecated - int getTypeId(); - - /** - * Gets the light level between 0-15 - * - * @return light level - */ - byte getLightLevel(); - - /** - * Gets the world which contains this Block - * - * @return World containing this block - */ - World getWorld(); - - /** - * Gets the x-coordinate of this block - * - * @return x-coordinate - */ - int getX(); - - /** - * Gets the y-coordinate of this block - * - * @return y-coordinate - */ - int getY(); - - /** - * Gets the z-coordinate of this block - * - * @return z-coordinate - */ - int getZ(); - - /** - * Gets the location of this block - * - * @return location - */ - Location getLocation(); - - /** - * Stores the location of this block in the provided Location object. - *

          - * If the provided Location is null this method does nothing and returns - * null. - * - * @return The Location object provided or null - */ - Location getLocation(Location loc); - - /** - * Gets the chunk which contains this block - * - * @return Containing Chunk - */ - Chunk getChunk(); - - /** - * Sets the metadata for this block - * - * @param data New block specific metadata - */ - void setData(MaterialData data); - - /** - * Sets the type of this block - * - * @param type Material to change this block to - */ - void setType(Material type); - - /** - * Sets the type-id of this block - * - * @param type Type-Id to change this block to - * @return Whether it worked? - * @deprecated Magic value - */ - @Deprecated - boolean setTypeId(int type); - - /** - * Attempts to update the block represented by this state, setting it to - * the new values as defined by this state. - *

          - * This has the same effect as calling update(false). That is to say, - * this will not modify the state of a block if it is no longer the same - * type as it was when this state was taken. It will return false in this - * eventuality. - * - * @return true if the update was successful, otherwise false - * @see #update(boolean) - */ - boolean update(); - - /** - * Attempts to update the block represented by this state, setting it to - * the new values as defined by this state. - *

          - * This has the same effect as calling update(force, true). That is to - * say, this will trigger a physics update to surrounding blocks. - * - * @param force true to forcefully set the state - * @return true if the update was successful, otherwise false - */ - boolean update(boolean force); - - /** - * Attempts to update the block represented by this state, setting it to - * the new values as defined by this state. - *

          - * Unless force is true, this will not modify the state of a block if it - * is no longer the same type as it was when this state was taken. It will - * return false in this eventuality. - *

          - * If force is true, it will set the type of the block to match the new - * state, set the state data and then return true. - *

          - * If applyPhysics is true, it will trigger a physics update on - * surrounding blocks which could cause them to update or disappear. - * - * @param force true to forcefully set the state - * @param applyPhysics false to cancel updating physics on surrounding - * blocks - * @return true if the update was successful, otherwise false - */ - boolean update(boolean force, boolean applyPhysics); - - /** - * @return The data as a raw byte. - * @deprecated Magic value - */ - @Deprecated - public byte getRawData(); - - /** - * @param data The new data value for the block. - * @deprecated Magic value - */ - @Deprecated - public void setRawData(byte data); -} diff --git a/LiveWeather/src/org/bukkit/block/BrewingStand.java b/LiveWeather/src/org/bukkit/block/BrewingStand.java deleted file mode 100755 index c66a51c..0000000 --- a/LiveWeather/src/org/bukkit/block/BrewingStand.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.BrewerInventory; - -/** - * Represents a brewing stand. - */ -public interface BrewingStand extends BlockState, ContainerBlock { - - /** - * How much time is left in the brewing cycle - * - * @return Brew Time - */ - int getBrewingTime(); - - /** - * Set the time left before brewing completes. - * - * @param brewTime Brewing time - */ - void setBrewingTime(int brewTime); - - public BrewerInventory getInventory(); -} diff --git a/LiveWeather/src/org/bukkit/block/Chest.java b/LiveWeather/src/org/bukkit/block/Chest.java deleted file mode 100755 index 125d5e7..0000000 --- a/LiveWeather/src/org/bukkit/block/Chest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.Inventory; - -/** - * Represents a chest. - */ -public interface Chest extends BlockState, ContainerBlock { - - /** - * Returns the chest's inventory. If this is a double chest, it returns - * just the portion of the inventory linked to this half of the chest. - * - * @return The inventory. - */ - Inventory getBlockInventory(); -} diff --git a/LiveWeather/src/org/bukkit/block/CommandBlock.java b/LiveWeather/src/org/bukkit/block/CommandBlock.java deleted file mode 100755 index 85d5345..0000000 --- a/LiveWeather/src/org/bukkit/block/CommandBlock.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.bukkit.block; - -public interface CommandBlock extends BlockState { - - /** - * Gets the command that this CommandBlock will run when powered. - * This will never return null. If the CommandBlock does not have a - * command, an empty String will be returned instead. - * - * @return Command that this CommandBlock will run when powered. - */ - public String getCommand(); - - /** - * Sets the command that this CommandBlock will run when powered. - * Setting the command to null is the same as setting it to an empty - * String. - * - * @param command Command that this CommandBlock will run when powered. - */ - public void setCommand(String command); - - /** - * Gets the name of this CommandBlock. The name is used with commands - * that this CommandBlock executes. This name will never be null, and - * by default is "@". - * - * @return Name of this CommandBlock. - */ - public String getName(); - - /** - * Sets the name of this CommandBlock. The name is used with commands - * that this CommandBlock executes. Setting the name to null is the - * same as setting it to "@". - * - * @param name New name for this CommandBlock. - */ - public void setName(String name); -} diff --git a/LiveWeather/src/org/bukkit/block/ContainerBlock.java b/LiveWeather/src/org/bukkit/block/ContainerBlock.java deleted file mode 100755 index c69ac9e..0000000 --- a/LiveWeather/src/org/bukkit/block/ContainerBlock.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.InventoryHolder; - -/** - * Indicates a block type that has inventory. - * - * @deprecated in favour of {@link InventoryHolder} - */ -@Deprecated -public interface ContainerBlock extends InventoryHolder {} diff --git a/LiveWeather/src/org/bukkit/block/CreatureSpawner.java b/LiveWeather/src/org/bukkit/block/CreatureSpawner.java deleted file mode 100755 index e54d997..0000000 --- a/LiveWeather/src/org/bukkit/block/CreatureSpawner.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.entity.CreatureType; -import org.bukkit.entity.EntityType; - -/** - * Represents a creature spawner. - */ -public interface CreatureSpawner extends BlockState { - - /** - * Get the spawner's creature type. - * - * @return The creature type. - * @deprecated In favour of {@link #getSpawnedType()}. - */ - @Deprecated - public CreatureType getCreatureType(); - - /** - * Get the spawner's creature type. - * - * @return The creature type. - */ - public EntityType getSpawnedType(); - - /** - * Set the spawner's creature type. - * - * @param creatureType The creature type. - */ - public void setSpawnedType(EntityType creatureType); - - /** - * Set the spawner creature type. - * - * @param creatureType The creature type. - * @deprecated In favour of {@link #setSpawnedType(EntityType)}. - */ - @Deprecated - public void setCreatureType(CreatureType creatureType); - - /** - * Get the spawner's creature type. - * - * @return The creature type's name. - * @deprecated Use {@link #getCreatureTypeName()}. - */ - @Deprecated - public String getCreatureTypeId(); - - /** - * Set the spawner mob type. - * - * @param creatureType The creature type's name. - */ - public void setCreatureTypeByName(String creatureType); - - /** - * Get the spawner's creature type. - * - * @return The creature type's name. - */ - public String getCreatureTypeName(); - - /** - * Set the spawner mob type. - * - * @param creatureType The creature type's name. - * @deprecated Use {@link #setCreatureTypeByName(String)}. - */ - @Deprecated - public void setCreatureTypeId(String creatureType); - - /** - * Get the spawner's delay. - * - * @return The delay. - */ - public int getDelay(); - - /** - * Set the spawner's delay. - * - * @param delay The delay. - */ - public void setDelay(int delay); -} diff --git a/LiveWeather/src/org/bukkit/block/Dispenser.java b/LiveWeather/src/org/bukkit/block/Dispenser.java deleted file mode 100755 index bba753e..0000000 --- a/LiveWeather/src/org/bukkit/block/Dispenser.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.projectiles.BlockProjectileSource; - -/** - * Represents a dispenser. - */ -public interface Dispenser extends BlockState, ContainerBlock { - - /** - * Gets the BlockProjectileSource object for this dispenser. - *

          - * If the block is no longer a dispenser, this will return null. - * - * @return a BlockProjectileSource if valid, otherwise null - */ - public BlockProjectileSource getBlockProjectileSource(); - - /** - * Attempts to dispense the contents of this block. - *

          - * If the block is no longer a dispenser, this will return false. - * - * @return true if successful, otherwise false - */ - public boolean dispense(); -} diff --git a/LiveWeather/src/org/bukkit/block/DoubleChest.java b/LiveWeather/src/org/bukkit/block/DoubleChest.java deleted file mode 100755 index 148099c..0000000 --- a/LiveWeather/src/org/bukkit/block/DoubleChest.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.inventory.DoubleChestInventory; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a double chest. - */ -public class DoubleChest implements InventoryHolder { - private DoubleChestInventory inventory; - - public DoubleChest(DoubleChestInventory chest) { - inventory = chest; - } - - public Inventory getInventory() { - return inventory; - } - - public InventoryHolder getLeftSide() { - return inventory.getLeftSide().getHolder(); - } - - public InventoryHolder getRightSide() { - return inventory.getRightSide().getHolder(); - } - - public Location getLocation() { - return new Location(getWorld(), getX(), getY(), getZ()); - } - - public World getWorld() { - return ((Chest)getLeftSide()).getWorld(); - } - - public double getX() { - return 0.5 * (((Chest)getLeftSide()).getX() + ((Chest)getRightSide()).getX()); - } - - public double getY() { - return 0.5 * (((Chest)getLeftSide()).getY() + ((Chest)getRightSide()).getY()); - } - - public double getZ() { - return 0.5 * (((Chest)getLeftSide()).getZ() + ((Chest)getRightSide()).getZ()); - } -} diff --git a/LiveWeather/src/org/bukkit/block/Dropper.java b/LiveWeather/src/org/bukkit/block/Dropper.java deleted file mode 100755 index 21fbedc..0000000 --- a/LiveWeather/src/org/bukkit/block/Dropper.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a dropper. - */ -public interface Dropper extends BlockState, InventoryHolder { - /** - * Tries to drop a randomly selected item from the Dropper's inventory, - * following the normal behavior of a Dropper. - *

          - * Normal behavior of a Dropper is as follows: - *

          - * If the block that the Dropper is facing is an InventoryHolder or - * ContainerBlock the randomly selected ItemStack is placed within that - * Inventory in the first slot that's available, starting with 0 and - * counting up. If the inventory is full, nothing happens. - *

          - * If the block that the Dropper is facing is not an InventoryHolder or - * ContainerBlock, the randomly selected ItemStack is dropped on - * the ground in the form of an {@link org.bukkit.entity.Item Item}. - */ - public void drop(); -} diff --git a/LiveWeather/src/org/bukkit/block/Furnace.java b/LiveWeather/src/org/bukkit/block/Furnace.java deleted file mode 100755 index 94af85e..0000000 --- a/LiveWeather/src/org/bukkit/block/Furnace.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.FurnaceInventory; - -/** - * Represents a furnace. - */ -public interface Furnace extends BlockState, ContainerBlock { - - /** - * Get burn time. - * - * @return Burn time - */ - public short getBurnTime(); - - /** - * Set burn time. - * - * @param burnTime Burn time - */ - public void setBurnTime(short burnTime); - - /** - * Get cook time. - * - * @return Cook time - */ - public short getCookTime(); - - /** - * Set cook time. - * - * @param cookTime Cook time - */ - public void setCookTime(short cookTime); - - public FurnaceInventory getInventory(); -} diff --git a/LiveWeather/src/org/bukkit/block/Hopper.java b/LiveWeather/src/org/bukkit/block/Hopper.java deleted file mode 100755 index e097157..0000000 --- a/LiveWeather/src/org/bukkit/block/Hopper.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a hopper. - */ -public interface Hopper extends BlockState, InventoryHolder { - -} diff --git a/LiveWeather/src/org/bukkit/block/Jukebox.java b/LiveWeather/src/org/bukkit/block/Jukebox.java deleted file mode 100755 index 7b45b83..0000000 --- a/LiveWeather/src/org/bukkit/block/Jukebox.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.Material; - -/** - * Represents a Jukebox - */ -public interface Jukebox extends BlockState { - /** - * Get the record currently playing - * - * @return The record Material, or AIR if none is playing - */ - public Material getPlaying(); - - /** - * Set the record currently playing - * - * @param record The record Material, or null/AIR to stop playing - */ - public void setPlaying(Material record); - - /** - * Check if the jukebox is currently playing a record - * - * @return True if there is a record playing - */ - public boolean isPlaying(); - - /** - * Stop the jukebox playing and eject the current record - * - * @return True if a record was ejected; false if there was none playing - */ - public boolean eject(); -} diff --git a/LiveWeather/src/org/bukkit/block/NoteBlock.java b/LiveWeather/src/org/bukkit/block/NoteBlock.java deleted file mode 100755 index 8380068..0000000 --- a/LiveWeather/src/org/bukkit/block/NoteBlock.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.Instrument; -import org.bukkit.Note; - -/** - * Represents a note. - */ -public interface NoteBlock extends BlockState { - - /** - * Gets the note. - * - * @return The note. - */ - public Note getNote(); - - /** - * Gets the note. - * - * @return The note ID. - * @deprecated Magic value - */ - @Deprecated - public byte getRawNote(); - - /** - * Set the note. - * - * @param note The note. - */ - public void setNote(Note note); - - /** - * Set the note. - * - * @param note The note ID. - * @deprecated Magic value - */ - @Deprecated - public void setRawNote(byte note); - - /** - * Attempts to play the note at block - *

          - * If the block is no longer a note block, this will return false - * - * @return true if successful, otherwise false - */ - public boolean play(); - - /** - * Plays an arbitrary note with an arbitrary instrument - * - * @param instrument Instrument ID - * @param note Note ID - * @return true if successful, otherwise false - * @deprecated Magic value - */ - @Deprecated - public boolean play(byte instrument, byte note); - - /** - * Plays an arbitrary note with an arbitrary instrument - * - * @param instrument The instrument - * @param note The note - * @return true if successful, otherwise false - * @see Instrument Note - */ - public boolean play(Instrument instrument, Note note); -} diff --git a/LiveWeather/src/org/bukkit/block/PistonMoveReaction.java b/LiveWeather/src/org/bukkit/block/PistonMoveReaction.java deleted file mode 100755 index e5279f7..0000000 --- a/LiveWeather/src/org/bukkit/block/PistonMoveReaction.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bukkit.block; - -import java.util.HashMap; -import java.util.Map; - -public enum PistonMoveReaction { - - /** - * Indicates that the block can be pushed or pulled. - */ - MOVE(0), - /** - * Indicates the block is fragile and will break if pushed on. - */ - BREAK(1), - /** - * Indicates that the block will resist being pushed or pulled. - */ - BLOCK(2); - - private int id; - private static Map byId = new HashMap(); - static { - for (PistonMoveReaction reaction : PistonMoveReaction.values()) { - byId.put(reaction.id, reaction); - } - } - - private PistonMoveReaction(int id) { - this.id = id; - } - - /** - * @return The ID of the move reaction - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return this.id; - } - - /** - * @param id An ID - * @return The move reaction with that ID - * @deprecated Magic value - */ - @Deprecated - public static PistonMoveReaction getById(int id) { - return byId.get(id); - } -} diff --git a/LiveWeather/src/org/bukkit/block/Sign.java b/LiveWeather/src/org/bukkit/block/Sign.java deleted file mode 100755 index 5d7a633..0000000 --- a/LiveWeather/src/org/bukkit/block/Sign.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.block; - -/** - * Represents either a SignPost or a WallSign - */ -public interface Sign extends BlockState { - - /** - * Gets all the lines of text currently on this sign. - * - * @return Array of Strings containing each line of text - */ - public String[] getLines(); - - /** - * Gets the line of text at the specified index. - *

          - * For example, getLine(0) will return the first line of text. - * - * @param index Line number to get the text from, starting at 0 - * @throws IndexOutOfBoundsException Thrown when the line does not exist - * @return Text on the given line - */ - public String getLine(int index) throws IndexOutOfBoundsException; - - /** - * Sets the line of text at the specified index. - *

          - * For example, setLine(0, "Line One") will set the first line of text to - * "Line One". - * - * @param index Line number to set the text at, starting from 0 - * @param line New text to set at the specified index - * @throws IndexOutOfBoundsException If the index is out of the range 0..3 - */ - public void setLine(int index, String line) throws IndexOutOfBoundsException; -} diff --git a/LiveWeather/src/org/bukkit/block/Skull.java b/LiveWeather/src/org/bukkit/block/Skull.java deleted file mode 100755 index 4f4896f..0000000 --- a/LiveWeather/src/org/bukkit/block/Skull.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.block; - -import org.bukkit.SkullType; - -/** - * Represents a Skull - */ -public interface Skull extends BlockState { - - /** - * Checks to see if the skull has an owner - * - * @return true if the skull has an owner - */ - public boolean hasOwner(); - - /** - * Gets the owner of the skull, if one exists - * - * @return the owner of the skull or null if the skull does not have an owner - */ - public String getOwner(); - - /** - * Sets the owner of the skull - *

          - * Involves a potentially blocking web request to acquire the profile data for - * the provided name. - * - * @param name the new owner of the skull - * @return true if the owner was successfully set - */ - public boolean setOwner(String name); - - /** - * Gets the rotation of the skull in the world - * - * @return the rotation of the skull - */ - public BlockFace getRotation(); - - /** - * Sets the rotation of the skull in the world - * - * @param rotation the rotation of the skull - */ - public void setRotation(BlockFace rotation); - - /** - * Gets the type of skull - * - * @return the type of skull - */ - public SkullType getSkullType(); - - /** - * Sets the type of skull - * - * @param skullType the type of skull - */ - public void setSkullType(SkullType skullType); -} diff --git a/LiveWeather/src/org/bukkit/command/BlockCommandSender.java b/LiveWeather/src/org/bukkit/command/BlockCommandSender.java deleted file mode 100755 index ce229d2..0000000 --- a/LiveWeather/src/org/bukkit/command/BlockCommandSender.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.command; - -import org.bukkit.block.Block; - -public interface BlockCommandSender extends CommandSender { - - /** - * Returns the block this command sender belongs to - * - * @return Block for the command sender - */ - public Block getBlock(); -} diff --git a/LiveWeather/src/org/bukkit/command/Command.java b/LiveWeather/src/org/bukkit/command/Command.java deleted file mode 100755 index 87c33d9..0000000 --- a/LiveWeather/src/org/bukkit/command/Command.java +++ /dev/null @@ -1,396 +0,0 @@ -package org.bukkit.command; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Server; -import org.bukkit.entity.Player; -import org.bukkit.entity.minecart.CommandMinecart; -import org.bukkit.permissions.Permissible; -import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -/** - * Represents a Command, which executes various tasks upon user input - */ -public abstract class Command { - private final String name; - private String nextLabel; - private String label; - private List aliases; - private List activeAliases; - private CommandMap commandMap = null; - protected String description = ""; - protected String usageMessage; - private String permission; - private String permissionMessage; - - protected Command(String name) { - this(name, "", "/" + name, new ArrayList()); - } - - protected Command(String name, String description, String usageMessage, List aliases) { - this.name = name; - this.nextLabel = name; - this.label = name; - this.description = description; - this.usageMessage = usageMessage; - this.aliases = aliases; - this.activeAliases = new ArrayList(aliases); - } - - /** - * Executes the command, returning its success - * - * @param sender Source object which is executing this command - * @param commandLabel The alias of the command used - * @param args All arguments passed to the command, split via ' ' - * @return true if the command was successful, otherwise false - */ - public abstract boolean execute(CommandSender sender, String commandLabel, String[] args); - - /** - * @deprecated This method is not supported and returns null - */ - @Deprecated - public List tabComplete(CommandSender sender, String[] args) { - return null; - } - - /** - * Executed on tab completion for this command, returning a list of - * options the player can tab through. - * - * @param sender Source object which is executing this command - * @param alias the alias being used - * @param args All arguments passed to the command, split via ' ' - * @return a list of tab-completions for the specified arguments. This - * will never be null. List may be immutable. - * @throws IllegalArgumentException if sender, alias, or args is null - */ - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 0) { - return ImmutableList.of(); - } - - String lastWord = args[args.length - 1]; - - Player senderPlayer = sender instanceof Player ? (Player) sender : null; - - ArrayList matchedPlayers = new ArrayList(); - for (Player player : sender.getServer().getOnlinePlayers()) { - String name = player.getName(); - if ((senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(name, lastWord)) { - matchedPlayers.add(name); - } - } - - Collections.sort(matchedPlayers, String.CASE_INSENSITIVE_ORDER); - return matchedPlayers; - } - - /** - * Returns the name of this command - * - * @return Name of this command - */ - public String getName() { - return name; - } - - /** - * Gets the permission required by users to be able to perform this - * command - * - * @return Permission name, or null if none - */ - public String getPermission() { - return permission; - } - - /** - * Sets the permission required by users to be able to perform this - * command - * - * @param permission Permission name or null - */ - public void setPermission(String permission) { - this.permission = permission; - } - - /** - * Tests the given {@link CommandSender} to see if they can perform this - * command. - *

          - * If they do not have permission, they will be informed that they cannot - * do this. - * - * @param target User to test - * @return true if they can use it, otherwise false - */ - public boolean testPermission(CommandSender target) { - if (testPermissionSilent(target)) { - return true; - } - - if (permissionMessage == null) { - target.sendMessage(ChatColor.RED + "I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error."); - } else if (permissionMessage.length() != 0) { - for (String line : permissionMessage.replace("", permission).split("\n")) { - target.sendMessage(line); - } - } - - return false; - } - - /** - * Tests the given {@link CommandSender} to see if they can perform this - * command. - *

          - * No error is sent to the sender. - * - * @param target User to test - * @return true if they can use it, otherwise false - */ - public boolean testPermissionSilent(CommandSender target) { - if ((permission == null) || (permission.length() == 0)) { - return true; - } - - for (String p : permission.split(";")) { - if (target.hasPermission(p)) { - return true; - } - } - - return false; - } - - /** - * Returns the current label for this command - * - * @return Label of this command or null if not registered - */ - public String getLabel() { - return label; - } - - /** - * Sets the label of this command. - *

          - * If the command is currently registered the label change will only take - * effect after its been re-registered e.g. after a /reload - * - * @param name The command's name - * @return returns true if the name change happened instantly or false if - * it was scheduled for re-registration - */ - public boolean setLabel(String name) { - this.nextLabel = name; - if (!isRegistered()) { - this.label = name; - return true; - } - return false; - } - - /** - * Registers this command to a CommandMap. - * Once called it only allows changes the registered CommandMap - * - * @param commandMap the CommandMap to register this command to - * @return true if the registration was successful (the current registered - * CommandMap was the passed CommandMap or null) false otherwise - */ - public boolean register(CommandMap commandMap) { - if (allowChangesFrom(commandMap)) { - this.commandMap = commandMap; - return true; - } - - return false; - } - - /** - * Unregisters this command from the passed CommandMap applying any - * outstanding changes - * - * @param commandMap the CommandMap to unregister - * @return true if the unregistration was successfull (the current - * registered CommandMap was the passed CommandMap or null) false - * otherwise - */ - public boolean unregister(CommandMap commandMap) { - if (allowChangesFrom(commandMap)) { - this.commandMap = null; - this.activeAliases = new ArrayList(this.aliases); - this.label = this.nextLabel; - return true; - } - - return false; - } - - private boolean allowChangesFrom(CommandMap commandMap) { - return (null == this.commandMap || this.commandMap == commandMap); - } - - /** - * Returns the current registered state of this command - * - * @return true if this command is currently registered false otherwise - */ - public boolean isRegistered() { - return (null != this.commandMap); - } - - /** - * Returns a list of active aliases of this command - * - * @return List of aliases - */ - public List getAliases() { - return activeAliases; - } - - /** - * Returns a message to be displayed on a failed permission check for this - * command - * - * @return Permission check failed message - */ - public String getPermissionMessage() { - return permissionMessage; - } - - /** - * Gets a brief description of this command - * - * @return Description of this command - */ - public String getDescription() { - return description; - } - - /** - * Gets an example usage of this command - * - * @return One or more example usages - */ - public String getUsage() { - return usageMessage; - } - - /** - * Sets the list of aliases to request on registration for this command. - * This is not effective outside of defining aliases in the {@link - * PluginDescriptionFile#getCommands()} (under the - * `aliases' node) is equivalent to this method. - * - * @param aliases aliases to register to this command - * @return this command object, for chaining - */ - public Command setAliases(List aliases) { - this.aliases = aliases; - if (!isRegistered()) { - this.activeAliases = new ArrayList(aliases); - } - return this; - } - - /** - * Sets a brief description of this command. Defining a description in the - * {@link PluginDescriptionFile#getCommands()} (under the - * `description' node) is equivalent to this method. - * - * @param description new command description - * @return this command object, for chaining - */ - public Command setDescription(String description) { - this.description = description; - return this; - } - - /** - * Sets the message sent when a permission check fails - * - * @param permissionMessage new permission message, null to indicate - * default message, or an empty string to indicate no message - * @return this command object, for chaining - */ - public Command setPermissionMessage(String permissionMessage) { - this.permissionMessage = permissionMessage; - return this; - } - - /** - * Sets the example usage of this command - * - * @param usage new example usage - * @return this command object, for chaining - */ - public Command setUsage(String usage) { - this.usageMessage = usage; - return this; - } - - public static void broadcastCommandMessage(CommandSender source, String message) { - broadcastCommandMessage(source, message, true); - } - - public static void broadcastCommandMessage(CommandSender source, String message, boolean sendToSource) { - String result = source.getName() + ": " + message; - - if (source instanceof BlockCommandSender) { - BlockCommandSender blockCommandSender = (BlockCommandSender) source; - - if (blockCommandSender.getBlock().getWorld().getGameRuleValue("commandBlockOutput").equalsIgnoreCase("false")) { - Bukkit.getConsoleSender().sendMessage(result); - return; - } - } else if (source instanceof CommandMinecart) { - CommandMinecart commandMinecart = (CommandMinecart) source; - - if (commandMinecart.getWorld().getGameRuleValue("commandBlockOutput").equalsIgnoreCase("false")) { - Bukkit.getConsoleSender().sendMessage(result); - return; - } - } - - Set users = Bukkit.getPluginManager().getPermissionSubscriptions(Server.BROADCAST_CHANNEL_ADMINISTRATIVE); - String colored = ChatColor.GRAY + "" + ChatColor.ITALIC + "[" + result + ChatColor.GRAY + ChatColor.ITALIC + "]"; - - if (sendToSource && !(source instanceof ConsoleCommandSender)) { - source.sendMessage(message); - } - - for (Permissible user : users) { - if (user instanceof CommandSender) { - CommandSender target = (CommandSender) user; - - if (target instanceof ConsoleCommandSender) { - target.sendMessage(result); - } else if (target != source) { - target.sendMessage(colored); - } - } - } - } - - @Override - public String toString() { - return getClass().getName() + '(' + name + ')'; - } -} diff --git a/LiveWeather/src/org/bukkit/command/CommandException.java b/LiveWeather/src/org/bukkit/command/CommandException.java deleted file mode 100755 index b63015f..0000000 --- a/LiveWeather/src/org/bukkit/command/CommandException.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.command; - -/** - * Thrown when an unhandled exception occurs during the execution of a Command - */ -@SuppressWarnings("serial") -public class CommandException extends RuntimeException { - - /** - * Creates a new instance of CommandException without detail - * message. - */ - public CommandException() {} - - /** - * Constructs an instance of CommandException with the - * specified detail message. - * - * @param msg the detail message. - */ - public CommandException(String msg) { - super(msg); - } - - public CommandException(String msg, Throwable cause) { - super(msg, cause); - } -} diff --git a/LiveWeather/src/org/bukkit/command/CommandExecutor.java b/LiveWeather/src/org/bukkit/command/CommandExecutor.java deleted file mode 100755 index c75586f..0000000 --- a/LiveWeather/src/org/bukkit/command/CommandExecutor.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bukkit.command; - -/** - * Represents a class which contains a single method for executing commands - */ -public interface CommandExecutor { - - /** - * Executes the given command, returning its success - * - * @param sender Source of the command - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args Passed command arguments - * @return true if a valid command, otherwise false - */ - public boolean onCommand(CommandSender sender, Command command, String label, String[] args); -} diff --git a/LiveWeather/src/org/bukkit/command/CommandMap.java b/LiveWeather/src/org/bukkit/command/CommandMap.java deleted file mode 100755 index e7e20d8..0000000 --- a/LiveWeather/src/org/bukkit/command/CommandMap.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.bukkit.command; - -import java.util.List; - -public interface CommandMap { - - /** - * Registers all the commands belonging to a certain plugin. - *

          - * Caller can use:- - *

            - *
          • command.getName() to determine the label registered for this - * command - *
          • command.getAliases() to determine the aliases which where - * registered - *
          - * - * @param fallbackPrefix a prefix which is prepended to each command with - * a ':' one or more times to make the command unique - * @param commands a list of commands to register - */ - public void registerAll(String fallbackPrefix, List commands); - - /** - * Registers a command. Returns true on success; false if name is already - * taken and fallback had to be used. - *

          - * Caller can use:- - *

            - *
          • command.getName() to determine the label registered for this - * command - *
          • command.getAliases() to determine the aliases which where - * registered - *
          - * - * @param label the label of the command, without the '/'-prefix. - * @param fallbackPrefix a prefix which is prepended to the command with a - * ':' one or more times to make the command unique - * @param command the command to register - * @return true if command was registered with the passed in label, false - * otherwise, which indicates the fallbackPrefix was used one or more - * times - */ - public boolean register(String label, String fallbackPrefix, Command command); - - /** - * Registers a command. Returns true on success; false if name is already - * taken and fallback had to be used. - *

          - * Caller can use:- - *

            - *
          • command.getName() to determine the label registered for this - * command - *
          • command.getAliases() to determine the aliases which where - * registered - *
          - * - * @param fallbackPrefix a prefix which is prepended to the command with a - * ':' one or more times to make the command unique - * @param command the command to register, from which label is determined - * from the command name - * @return true if command was registered with the passed in label, false - * otherwise, which indicates the fallbackPrefix was used one or more - * times - */ - public boolean register(String fallbackPrefix, Command command); - - /** - * Looks for the requested command and executes it if found. - * - * @param sender The command's sender - * @param cmdLine command + arguments. Example: "/test abc 123" - * @return returns false if no target is found, true otherwise. - * @throws CommandException Thrown when the executor for the given command - * fails with an unhandled exception - */ - public boolean dispatch(CommandSender sender, String cmdLine) throws CommandException; - - /** - * Clears all registered commands. - */ - public void clearCommands(); - - /** - * Gets the command registered to the specified name - * - * @param name Name of the command to retrieve - * @return Command with the specified name or null if a command with that - * label doesn't exist - */ - public Command getCommand(String name); - - - /** - * Looks for the requested command and executes an appropriate - * tab-completer if found. This method will also tab-complete partial - * commands. - * - * @param sender The command's sender. - * @param cmdLine The entire command string to tab-complete, excluding - * initial slash. - * @return a list of possible tab-completions. This list may be immutable. - * Will be null if no matching command of which sender has permission. - * @throws CommandException Thrown when the tab-completer for the given - * command fails with an unhandled exception - * @throws IllegalArgumentException if either sender or cmdLine are null - */ - public List tabComplete(CommandSender sender, String cmdLine) throws IllegalArgumentException; -} diff --git a/LiveWeather/src/org/bukkit/command/CommandSender.java b/LiveWeather/src/org/bukkit/command/CommandSender.java deleted file mode 100755 index 148756b..0000000 --- a/LiveWeather/src/org/bukkit/command/CommandSender.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.command; - -import org.bukkit.Server; -import org.bukkit.permissions.Permissible; - -public interface CommandSender extends Permissible { - - /** - * Sends this sender a message - * - * @param message Message to be displayed - */ - public void sendMessage(String message); - - /** - * Sends this sender multiple messages - * - * @param messages An array of messages to be displayed - */ - public void sendMessage(String[] messages); - - /** - * Returns the server instance that this command is running on - * - * @return Server instance - */ - public Server getServer(); - - /** - * Gets the name of this command sender - * - * @return Name of the sender - */ - public String getName(); -} diff --git a/LiveWeather/src/org/bukkit/command/ConsoleCommandSender.java b/LiveWeather/src/org/bukkit/command/ConsoleCommandSender.java deleted file mode 100755 index f309c2e..0000000 --- a/LiveWeather/src/org/bukkit/command/ConsoleCommandSender.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.command; - -import org.bukkit.conversations.Conversable; - -public interface ConsoleCommandSender extends CommandSender, Conversable { -} diff --git a/LiveWeather/src/org/bukkit/command/FormattedCommandAlias.java b/LiveWeather/src/org/bukkit/command/FormattedCommandAlias.java deleted file mode 100755 index 3f07d7f..0000000 --- a/LiveWeather/src/org/bukkit/command/FormattedCommandAlias.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit.command; - -import java.util.ArrayList; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.server.RemoteServerCommandEvent; -import org.bukkit.event.server.ServerCommandEvent; - -public class FormattedCommandAlias extends Command { - private final String[] formatStrings; - - public FormattedCommandAlias(String alias, String[] formatStrings) { - super(alias); - this.formatStrings = formatStrings; - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - boolean result = false; - ArrayList commands = new ArrayList(); - for (String formatString : formatStrings) { - try { - commands.add(buildCommand(formatString, args)); - } catch (Throwable throwable) { - if (throwable instanceof IllegalArgumentException) { - sender.sendMessage(throwable.getMessage()); - } else { - sender.sendMessage(org.bukkit.ChatColor.RED + "An internal error occurred while attempting to perform this command"); - } - return false; - } - } - - for (String command : commands) { - result |= Bukkit.dispatchCommand(sender, command); - } - - return result; - } - - private String buildCommand(String formatString, String[] args) { - int index = formatString.indexOf("$"); - while (index != -1) { - int start = index; - - if (index > 0 && formatString.charAt(start - 1) == '\\') { - formatString = formatString.substring(0, start - 1) + formatString.substring(start); - index = formatString.indexOf("$", index); - continue; - } - - boolean required = false; - if (formatString.charAt(index + 1) == '$') { - required = true; - // Move index past the second $ - index++; - } - - // Move index past the $ - index++; - int argStart = index; - while (index < formatString.length() && inRange(((int) formatString.charAt(index)) - 48, 0, 9)) { - // Move index past current digit - index++; - } - - // No numbers found - if (argStart == index) { - throw new IllegalArgumentException("Invalid replacement token"); - } - - int position = Integer.valueOf(formatString.substring(argStart, index)); - - // Arguments are not 0 indexed - if (position == 0) { - throw new IllegalArgumentException("Invalid replacement token"); - } - - // Convert position to 0 index - position--; - - boolean rest = false; - if (index < formatString.length() && formatString.charAt(index) == '-') { - rest = true; - // Move index past the - - index++; - } - - int end = index; - - if (required && position >= args.length) { - throw new IllegalArgumentException("Missing required argument " + (position + 1)); - } - - StringBuilder replacement = new StringBuilder(); - if (rest && position < args.length) { - for (int i = position; i < args.length; i++) { - if (i != position) { - replacement.append(' '); - } - replacement.append(args[i]); - } - } else if (position < args.length) { - replacement.append(args[position]); - } - - formatString = formatString.substring(0, start) + replacement.toString() + formatString.substring(end); - // Move index past the replaced data so we don't process it again - index = start + replacement.length(); - - // Move to the next replacement token - index = formatString.indexOf("$", index); - } - - return formatString; - } - - private static boolean inRange(int i, int j, int k) { - return i >= j && i <= k; - } -} diff --git a/LiveWeather/src/org/bukkit/command/MultipleCommandAlias.java b/LiveWeather/src/org/bukkit/command/MultipleCommandAlias.java deleted file mode 100755 index a0a4129..0000000 --- a/LiveWeather/src/org/bukkit/command/MultipleCommandAlias.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.bukkit.command; - -/** - * Represents a command that delegates to one or more other commands - */ -public class MultipleCommandAlias extends Command { - private Command[] commands; - - public MultipleCommandAlias(String name, Command[] commands) { - super(name); - this.commands = commands; - } - - /** - * Gets the commands associated with the multi-command alias. - * - * @return commands associated with alias - */ - public Command[] getCommands() { - return commands; - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - boolean result = false; - - for (Command command : commands) { - result |= command.execute(sender, commandLabel, args); - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/command/PluginCommand.java b/LiveWeather/src/org/bukkit/command/PluginCommand.java deleted file mode 100755 index 3bfa31f..0000000 --- a/LiveWeather/src/org/bukkit/command/PluginCommand.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.bukkit.command; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.plugin.Plugin; - -/** - * Represents a {@link Command} belonging to a plugin - */ -public final class PluginCommand extends Command implements PluginIdentifiableCommand { - private final Plugin owningPlugin; - private CommandExecutor executor; - private TabCompleter completer; - - protected PluginCommand(String name, Plugin owner) { - super(name); - this.executor = owner; - this.owningPlugin = owner; - this.usageMessage = ""; - } - - /** - * Executes the command, returning its success - * - * @param sender Source object which is executing this command - * @param commandLabel The alias of the command used - * @param args All arguments passed to the command, split via ' ' - * @return true if the command was successful, otherwise false - */ - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - boolean success = false; - - if (!owningPlugin.isEnabled()) { - return false; - } - - if (!testPermission(sender)) { - return true; - } - - try { - success = executor.onCommand(sender, this, commandLabel, args); - } catch (Throwable ex) { - throw new CommandException("Unhandled exception executing command '" + commandLabel + "' in plugin " + owningPlugin.getDescription().getFullName(), ex); - } - - if (!success && usageMessage.length() > 0) { - for (String line : usageMessage.replace("", commandLabel).split("\n")) { - sender.sendMessage(line); - } - } - - return success; - } - - /** - * Sets the {@link CommandExecutor} to run when parsing this command - * - * @param executor New executor to run - */ - public void setExecutor(CommandExecutor executor) { - this.executor = executor == null ? owningPlugin : executor; - } - - /** - * Gets the {@link CommandExecutor} associated with this command - * - * @return CommandExecutor object linked to this command - */ - public CommandExecutor getExecutor() { - return executor; - } - - /** - * Sets the {@link TabCompleter} to run when tab-completing this command. - *

          - * If no TabCompleter is specified, and the command's executor implements - * TabCompleter, then the executor will be used for tab completion. - * - * @param completer New tab completer - */ - public void setTabCompleter(TabCompleter completer) { - this.completer = completer; - } - - /** - * Gets the {@link TabCompleter} associated with this command. - * - * @return TabCompleter object linked to this command - */ - public TabCompleter getTabCompleter() { - return completer; - } - - /** - * Gets the owner of this PluginCommand - * - * @return Plugin that owns this command - */ - public Plugin getPlugin() { - return owningPlugin; - } - - /** - * {@inheritDoc} - *

          - * Delegates to the tab completer if present. - *

          - * If it is not present or returns null, will delegate to the current - * command executor if it implements {@link TabCompleter}. If a non-null - * list has not been found, will default to standard player name - * completion in {@link - * Command#tabComplete(CommandSender, String, String[])}. - *

          - * This method does not consider permissions. - * - * @throws CommandException if the completer or executor throw an - * exception during the process of tab-completing. - * @throws IllegalArgumentException if sender, alias, or args is null - */ - @Override - public java.util.List tabComplete(CommandSender sender, String alias, String[] args) throws CommandException, IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - List completions = null; - try { - if (completer != null) { - completions = completer.onTabComplete(sender, this, alias, args); - } - if (completions == null && executor instanceof TabCompleter) { - completions = ((TabCompleter) executor).onTabComplete(sender, this, alias, args); - } - } catch (Throwable ex) { - StringBuilder message = new StringBuilder(); - message.append("Unhandled exception during tab completion for command '/").append(alias).append(' '); - for (String arg : args) { - message.append(arg).append(' '); - } - message.deleteCharAt(message.length() - 1).append("' in plugin ").append(owningPlugin.getDescription().getFullName()); - throw new CommandException(message.toString(), ex); - } - - if (completions == null) { - return super.tabComplete(sender, alias, args); - } - return completions; - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(super.toString()); - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - stringBuilder.append(", ").append(owningPlugin.getDescription().getFullName()).append(')'); - return stringBuilder.toString(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/PluginCommandYamlParser.java b/LiveWeather/src/org/bukkit/command/PluginCommandYamlParser.java deleted file mode 100755 index 5854583..0000000 --- a/LiveWeather/src/org/bukkit/command/PluginCommandYamlParser.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bukkit.command; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -public class PluginCommandYamlParser { - - public static List parse(Plugin plugin) { - List pluginCmds = new ArrayList(); - - Map> map = plugin.getDescription().getCommands(); - - if (map == null) { - return pluginCmds; - } - - for (Entry> entry : map.entrySet()) { - if (entry.getKey().contains(":")) { - Bukkit.getServer().getLogger().severe("Could not load command " + entry.getKey() + " for plugin " + plugin.getName() + ": Illegal Characters"); - continue; - } - Command newCmd = new PluginCommand(entry.getKey(), plugin); - Object description = entry.getValue().get("description"); - Object usage = entry.getValue().get("usage"); - Object aliases = entry.getValue().get("aliases"); - Object permission = entry.getValue().get("permission"); - Object permissionMessage = entry.getValue().get("permission-message"); - - if (description != null) { - newCmd.setDescription(description.toString()); - } - - if (usage != null) { - newCmd.setUsage(usage.toString()); - } - - if (aliases != null) { - List aliasList = new ArrayList(); - - if (aliases instanceof List) { - for (Object o : (List) aliases) { - if (o.toString().contains(":")) { - Bukkit.getServer().getLogger().severe("Could not load alias " + o.toString() + " for plugin " + plugin.getName() + ": Illegal Characters"); - continue; - } - aliasList.add(o.toString()); - } - } else { - if (aliases.toString().contains(":")) { - Bukkit.getServer().getLogger().severe("Could not load alias " + aliases.toString() + " for plugin " + plugin.getName() + ": Illegal Characters"); - } else { - aliasList.add(aliases.toString()); - } - } - - newCmd.setAliases(aliasList); - } - - if (permission != null) { - newCmd.setPermission(permission.toString()); - } - - if (permissionMessage != null) { - newCmd.setPermissionMessage(permissionMessage.toString()); - } - - pluginCmds.add(newCmd); - } - return pluginCmds; - } -} diff --git a/LiveWeather/src/org/bukkit/command/PluginIdentifiableCommand.java b/LiveWeather/src/org/bukkit/command/PluginIdentifiableCommand.java deleted file mode 100755 index c5e0d2c..0000000 --- a/LiveWeather/src/org/bukkit/command/PluginIdentifiableCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bukkit.command; - -import org.bukkit.plugin.Plugin; - -/** - * This interface is used by the help system to group commands into - * sub-indexes based on the {@link Plugin} they are a part of. Custom command - * implementations will need to implement this interface to have a sub-index - * automatically generated on the plugin's behalf. - */ -public interface PluginIdentifiableCommand { - - /** - * Gets the owner of this PluginIdentifiableCommand. - * - * @return Plugin that owns this PluginIdentifiableCommand. - */ - public Plugin getPlugin(); -} diff --git a/LiveWeather/src/org/bukkit/command/RemoteConsoleCommandSender.java b/LiveWeather/src/org/bukkit/command/RemoteConsoleCommandSender.java deleted file mode 100755 index dc3bc1d..0000000 --- a/LiveWeather/src/org/bukkit/command/RemoteConsoleCommandSender.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.bukkit.command; - -public interface RemoteConsoleCommandSender extends CommandSender { -} diff --git a/LiveWeather/src/org/bukkit/command/SimpleCommandMap.java b/LiveWeather/src/org/bukkit/command/SimpleCommandMap.java deleted file mode 100755 index d75380c..0000000 --- a/LiveWeather/src/org/bukkit/command/SimpleCommandMap.java +++ /dev/null @@ -1,301 +0,0 @@ -package org.bukkit.command; - -import static org.bukkit.util.Java15Compat.Arrays_copyOfRange; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -import org.apache.commons.lang.Validate; -import org.bukkit.Server; -import org.bukkit.command.defaults.*; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -public class SimpleCommandMap implements CommandMap { - private static final Pattern PATTERN_ON_SPACE = Pattern.compile(" ", Pattern.LITERAL); - protected final Map knownCommands = new HashMap(); - private final Server server; - - public SimpleCommandMap(final Server server) { - this.server = server; - setDefaultCommands(); - } - - private void setDefaultCommands() { - register("bukkit", new SaveCommand()); - register("bukkit", new SaveOnCommand()); - register("bukkit", new SaveOffCommand()); - register("bukkit", new StopCommand()); - register("bukkit", new VersionCommand("version")); - register("bukkit", new ReloadCommand("reload")); - register("bukkit", new PluginsCommand("plugins")); - register("bukkit", new TimingsCommand("timings")); - } - - public void setFallbackCommands() { - register("bukkit", new ListCommand()); - register("bukkit", new OpCommand()); - register("bukkit", new DeopCommand()); - register("bukkit", new BanIpCommand()); - register("bukkit", new PardonIpCommand()); - register("bukkit", new BanCommand()); - register("bukkit", new PardonCommand()); - register("bukkit", new KickCommand()); - register("bukkit", new TeleportCommand()); - register("bukkit", new GiveCommand()); - register("bukkit", new TimeCommand()); - register("bukkit", new SayCommand()); - register("bukkit", new WhitelistCommand()); - register("bukkit", new TellCommand()); - register("bukkit", new MeCommand()); - register("bukkit", new KillCommand()); - register("bukkit", new GameModeCommand()); - register("bukkit", new HelpCommand()); - register("bukkit", new ExpCommand()); - register("bukkit", new ToggleDownfallCommand()); - register("bukkit", new BanListCommand()); - register("bukkit", new DefaultGameModeCommand()); - register("bukkit", new SeedCommand()); - register("bukkit", new DifficultyCommand()); - register("bukkit", new WeatherCommand()); - register("bukkit", new SpawnpointCommand()); - register("bukkit", new ClearCommand()); - register("bukkit", new GameRuleCommand()); - register("bukkit", new EnchantCommand()); - register("bukkit", new TestForCommand()); - register("bukkit", new EffectCommand()); - register("bukkit", new ScoreboardCommand()); - register("bukkit", new PlaySoundCommand()); - register("bukkit", new SpreadPlayersCommand()); - register("bukkit", new SetWorldSpawnCommand()); - register("bukkit", new SetIdleTimeoutCommand()); - register("bukkit", new AchievementCommand()); - } - - /** - * {@inheritDoc} - */ - public void registerAll(String fallbackPrefix, List commands) { - if (commands != null) { - for (Command c : commands) { - register(fallbackPrefix, c); - } - } - } - - /** - * {@inheritDoc} - */ - public boolean register(String fallbackPrefix, Command command) { - return register(command.getName(), fallbackPrefix, command); - } - - /** - * {@inheritDoc} - */ - public boolean register(String label, String fallbackPrefix, Command command) { - label = label.toLowerCase().trim(); - fallbackPrefix = fallbackPrefix.toLowerCase().trim(); - boolean registered = register(label, command, false, fallbackPrefix); - - Iterator iterator = command.getAliases().iterator(); - while (iterator.hasNext()) { - if (!register(iterator.next(), command, true, fallbackPrefix)) { - iterator.remove(); - } - } - - // If we failed to register under the real name, we need to set the command label to the direct address - if (!registered) { - command.setLabel(fallbackPrefix + ":" + label); - } - - // Register to us so further updates of the commands label and aliases are postponed until its reregistered - command.register(this); - - return registered; - } - - /** - * Registers a command with the given name is possible. Also uses - * fallbackPrefix to create a unique name. - * - * @param label the name of the command, without the '/'-prefix. - * @param command the command to register - * @param isAlias whether the command is an alias - * @param fallbackPrefix a prefix which is prepended to the command for a - * unique address - * @return true if command was registered, false otherwise. - */ - private synchronized boolean register(String label, Command command, boolean isAlias, String fallbackPrefix) { - knownCommands.put(fallbackPrefix + ":" + label, command); - if ((command instanceof VanillaCommand || isAlias) && knownCommands.containsKey(label)) { - // Request is for an alias/fallback command and it conflicts with - // a existing command or previous alias ignore it - // Note: This will mean it gets removed from the commands list of active aliases - return false; - } - - boolean registered = true; - - // If the command exists but is an alias we overwrite it, otherwise we return - Command conflict = knownCommands.get(label); - if (conflict != null && conflict.getLabel().equals(label)) { - return false; - } - - if (!isAlias) { - command.setLabel(label); - } - knownCommands.put(label, command); - - return registered; - } - - /** - * {@inheritDoc} - */ - public boolean dispatch(CommandSender sender, String commandLine) throws CommandException { - String[] args = PATTERN_ON_SPACE.split(commandLine); - - if (args.length == 0) { - return false; - } - - String sentCommandLabel = args[0].toLowerCase(); - Command target = getCommand(sentCommandLabel); - - if (target == null) { - return false; - } - - try { - // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) - target.execute(sender, sentCommandLabel, Arrays_copyOfRange(args, 1, args.length)); - } catch (CommandException ex) { - throw ex; - } catch (Throwable ex) { - throw new CommandException("Unhandled exception executing '" + commandLine + "' in " + target, ex); - } - - // return true as command was handled - return true; - } - - public synchronized void clearCommands() { - for (Map.Entry entry : knownCommands.entrySet()) { - entry.getValue().unregister(this); - } - knownCommands.clear(); - setDefaultCommands(); - } - - public Command getCommand(String name) { - Command target = knownCommands.get(name.toLowerCase()); - return target; - } - - public List tabComplete(CommandSender sender, String cmdLine) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(cmdLine, "Command line cannot null"); - - int spaceIndex = cmdLine.indexOf(' '); - - if (spaceIndex == -1) { - ArrayList completions = new ArrayList(); - Map knownCommands = this.knownCommands; - - final String prefix = (sender instanceof Player ? "/" : ""); - - for (Map.Entry commandEntry : knownCommands.entrySet()) { - Command command = commandEntry.getValue(); - - if (!command.testPermissionSilent(sender)) { - continue; - } - - String name = commandEntry.getKey(); // Use the alias, not command name - - if (StringUtil.startsWithIgnoreCase(name, cmdLine)) { - completions.add(prefix + name); - } - } - - Collections.sort(completions, String.CASE_INSENSITIVE_ORDER); - return completions; - } - - String commandName = cmdLine.substring(0, spaceIndex); - Command target = getCommand(commandName); - - if (target == null) { - return null; - } - - if (!target.testPermissionSilent(sender)) { - return null; - } - - String argLine = cmdLine.substring(spaceIndex + 1, cmdLine.length()); - String[] args = PATTERN_ON_SPACE.split(argLine, -1); - - try { - return target.tabComplete(sender, commandName, args); - } catch (CommandException ex) { - throw ex; - } catch (Throwable ex) { - throw new CommandException("Unhandled exception executing tab-completer for '" + cmdLine + "' in " + target, ex); - } - } - - public Collection getCommands() { - return Collections.unmodifiableCollection(knownCommands.values()); - } - - public void registerServerAliases() { - Map values = server.getCommandAliases(); - - for (String alias : values.keySet()) { - if (alias.contains(":") || alias.contains(" ")) { - server.getLogger().warning("Could not register alias " + alias + " because it contains illegal characters"); - continue; - } - - String[] commandStrings = values.get(alias); - List targets = new ArrayList(); - StringBuilder bad = new StringBuilder(); - - for (String commandString : commandStrings) { - String[] commandArgs = commandString.split(" "); - Command command = getCommand(commandArgs[0]); - - if (command == null) { - if (bad.length() > 0) { - bad.append(", "); - } - bad.append(commandString); - } else { - targets.add(commandString); - } - } - - if (bad.length() > 0) { - server.getLogger().warning("Could not register alias " + alias + " because it contains commands that do not exist: " + bad); - continue; - } - - // We register these as commands so they have absolute priority. - if (targets.size() > 0) { - knownCommands.put(alias.toLowerCase(), new FormattedCommandAlias(alias.toLowerCase(), targets.toArray(new String[targets.size()]))); - } else { - knownCommands.remove(alias.toLowerCase()); - } - } - } -} diff --git a/LiveWeather/src/org/bukkit/command/TabCommandExecutor.java b/LiveWeather/src/org/bukkit/command/TabCommandExecutor.java deleted file mode 100755 index d24d795..0000000 --- a/LiveWeather/src/org/bukkit/command/TabCommandExecutor.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bukkit.command; - -import java.util.List; - -/** - * Represents a class which can handle command tab completion and commands - * - * @deprecated Remains for plugins that would have implemented it even without - * functionality - * @see TabExecutor - */ -@Deprecated -public interface TabCommandExecutor extends CommandExecutor { - public List onTabComplete(); - -} diff --git a/LiveWeather/src/org/bukkit/command/TabCompleter.java b/LiveWeather/src/org/bukkit/command/TabCompleter.java deleted file mode 100755 index 6d61e3a..0000000 --- a/LiveWeather/src/org/bukkit/command/TabCompleter.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.command; - -import java.util.List; - -/** - * Represents a class which can suggest tab completions for commands. - */ -public interface TabCompleter { - - /** - * Requests a list of possible completions for a command argument. - * - * @param sender Source of the command - * @param command Command which was executed - * @param alias The alias used - * @param args The arguments passed to the command, including final - * partial argument to be completed and command label - * @return A List of possible completions for the final argument, or null - * to default to the command executor - */ - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args); -} diff --git a/LiveWeather/src/org/bukkit/command/TabExecutor.java b/LiveWeather/src/org/bukkit/command/TabExecutor.java deleted file mode 100755 index 6b8e3fb..0000000 --- a/LiveWeather/src/org/bukkit/command/TabExecutor.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.command; - -/** - * This class is provided as a convenience to implement both TabCompleter and - * CommandExecutor. - */ -public interface TabExecutor extends TabCompleter, CommandExecutor { -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/AchievementCommand.java b/LiveWeather/src/org/bukkit/command/defaults/AchievementCommand.java deleted file mode 100755 index d490732..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/AchievementCommand.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Achievement; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Statistic; -import org.bukkit.Material; -import org.bukkit.Statistic.Type; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerAchievementAwardedEvent; -import org.bukkit.event.player.PlayerStatisticIncrementEvent; - -import com.google.common.collect.ImmutableList; - -public class AchievementCommand extends VanillaCommand { - public AchievementCommand() { - super("achievement"); - this.description = "Gives the specified player an achievement or changes a statistic value. Use '*' to give all achievements."; - this.usageMessage = "/achievement give [player]"; - this.setPermission("bukkit.command.achievement"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length < 2) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - if (!args[0].equalsIgnoreCase("give")) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - String statisticString = args[1]; - Player player = null; - - if (args.length > 2) { - player = Bukkit.getPlayer(args[1]); - } else if (sender instanceof Player) { - player = (Player) sender; - } - - if (player == null) { - sender.sendMessage("You must specify which player you wish to perform this action on."); - return true; - } - - if (statisticString.equals("*")) { - for (Achievement achievement : Achievement.values()) { - if (player.hasAchievement(achievement)) { - continue; - } - PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - player.awardAchievement(achievement); - } - } - Command.broadcastCommandMessage(sender, String.format("Successfully given all achievements to %s", player.getName())); - return true; - } - - Achievement achievement = Bukkit.getUnsafe().getAchievementFromInternalName(statisticString); - Statistic statistic = Bukkit.getUnsafe().getStatisticFromInternalName(statisticString); - - if (achievement != null) { - if (player.hasAchievement(achievement)) { - sender.sendMessage(String.format("%s already has achievement %s", player.getName(), statisticString)); - return true; - } - - PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - sender.sendMessage(String.format("Unable to award %s the achievement %s", player.getName(), statisticString)); - return true; - } - player.awardAchievement(achievement); - - Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); - return true; - } - - if (statistic == null) { - sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); - return true; - } - - if (statistic.getType() == Type.UNTYPED) { - PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName())); - return true; - } - player.incrementStatistic(statistic); - Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); - return true; - } - - if (statistic.getType() == Type.ENTITY) { - EntityType entityType = EntityType.fromName(statisticString.substring(statisticString.lastIndexOf(".") + 1)); - - if (entityType == null) { - sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); - return true; - } - - PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, entityType); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName())); - return true; - } - - try { - player.incrementStatistic(statistic, entityType); - } catch (IllegalArgumentException e) { - sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); - return true; - } - } else { - int id; - try { - id = getInteger(sender, statisticString.substring(statisticString.lastIndexOf(".") + 1), 0, Integer.MAX_VALUE, true); - } catch (NumberFormatException e) { - sender.sendMessage(e.getMessage()); - return true; - } - - Material material = Material.getMaterial(id); - - if (material == null) { - sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); - return true; - } - - PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, material); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName())); - return true; - } - - try { - player.incrementStatistic(statistic, material); - } catch (IllegalArgumentException e) { - sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString)); - return true; - } - } - - Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString)); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return Arrays.asList("give"); - } - - if (args.length == 2) { - return Bukkit.getUnsafe().tabCompleteInternalStatisticOrAchievementName(args[1], new ArrayList()); - } - - if (args.length == 3) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/BanCommand.java b/LiveWeather/src/org/bukkit/command/defaults/BanCommand.java deleted file mode 100755 index df891b8..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/BanCommand.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; -import org.bukkit.BanList; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class BanCommand extends VanillaCommand { - public BanCommand() { - super("ban"); - this.description = "Prevents the specified player from using this server"; - this.usageMessage = "/ban [reason ...]"; - this.setPermission("bukkit.command.ban.player"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - String reason = args.length > 0 ? StringUtils.join(args, ' ', 1, args.length) : null; - Bukkit.getBanList(BanList.Type.NAME).addBan(args[0], reason, null, sender.getName()); - - Player player = Bukkit.getPlayer(args[0]); - if (player != null) { - player.kickPlayer("Banned by admin."); - } - - Command.broadcastCommandMessage(sender, "Banned player " + args[0]); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length >= 1) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/BanIpCommand.java b/LiveWeather/src/org/bukkit/command/defaults/BanIpCommand.java deleted file mode 100755 index 6f7c8bd..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/BanIpCommand.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; -import java.util.regex.Pattern; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; -import org.bukkit.BanList; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class BanIpCommand extends VanillaCommand { - public static final Pattern ipValidity = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); - - public BanIpCommand() { - super("ban-ip"); - this.description = "Prevents the specified IP address from using this server"; - this.usageMessage = "/ban-ip [reason ...]"; - this.setPermission("bukkit.command.ban.ip"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - String reason = args.length > 0 ? StringUtils.join(args, ' ', 1, args.length) : null; - - if (ipValidity.matcher(args[0]).matches()) { - processIPBan(args[0], sender, reason); - } else { - Player player = Bukkit.getPlayer(args[0]); - - if (player == null) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - processIPBan(player.getAddress().getAddress().getHostAddress(), sender, reason); - } - - return true; - } - - private void processIPBan(String ip, CommandSender sender, String reason) { - Bukkit.getBanList(BanList.Type.IP).addBan(ip, reason, null, sender.getName()); - - // Find all matching players and kick - for (Player player : Bukkit.getOnlinePlayers()) { - if (player.getAddress().getAddress().getHostAddress().equals(ip)) { - player.kickPlayer("You have been IP banned."); - } - } - - Command.broadcastCommandMessage(sender, "Banned IP Address " + ip); - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/BanListCommand.java b/LiveWeather/src/org/bukkit/command/defaults/BanListCommand.java deleted file mode 100755 index dfab7bc..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/BanListCommand.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.apache.commons.lang.Validate; -import org.bukkit.BanEntry; -import org.bukkit.BanList; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class BanListCommand extends VanillaCommand { - private static final List BANLIST_TYPES = ImmutableList.of("ips", "players"); - - public BanListCommand() { - super("banlist"); - this.description = "View all players banned from this server"; - this.usageMessage = "/banlist [ips|players]"; - this.setPermission("bukkit.command.ban.list"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - BanList.Type banType = BanList.Type.NAME; - if (args.length > 0) { - if (args[0].equalsIgnoreCase("ips")) { - banType = BanList.Type.IP; - } else if (!args[0].equalsIgnoreCase("players")) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - } - - StringBuilder message = new StringBuilder(); - BanEntry[] banlist = Bukkit.getBanList(banType).getBanEntries().toArray(new BanEntry[0]); - - for (int x = 0; x < banlist.length; x++) { - if (x != 0) { - if (x == banlist.length - 1) { - message.append(" and "); - } else { - message.append(", "); - } - } - - message.append(banlist[x].getTarget()); - } - - sender.sendMessage("There are " + banlist.length + " total banned players:"); - sender.sendMessage(message.toString()); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], BANLIST_TYPES, new ArrayList(BANLIST_TYPES.size())); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/BukkitCommand.java b/LiveWeather/src/org/bukkit/command/defaults/BukkitCommand.java deleted file mode 100755 index 23c8580..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/BukkitCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.bukkit.command.Command; - -public abstract class BukkitCommand extends Command { - protected BukkitCommand(String name) { - super(name); - } - - protected BukkitCommand(String name, String description, String usageMessage, List aliases) { - super(name, description, usageMessage, aliases); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ClearCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ClearCommand.java deleted file mode 100755 index a9df4f9..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ClearCommand.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class ClearCommand extends VanillaCommand { - private static List materials; - static { - ArrayList materialList = new ArrayList(); - for (Material material : Material.values()) { - materialList.add(material.name()); - } - Collections.sort(materialList); - materials = ImmutableList.copyOf(materialList); - } - - public ClearCommand() { - super("clear"); - this.description = "Clears the player's inventory. Can specify item and data filters too."; - this.usageMessage = "/clear [item] [data]"; - this.setPermission("bukkit.command.clear"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Player player = null; - if (args.length > 0) { - player = Bukkit.getPlayer(args[0]); - } else if (sender instanceof Player) { - player = (Player) sender; - } - - if (player != null) { - int id; - - if (args.length > 1 && !(args[1].equals("-1"))) { - Material material = Material.matchMaterial(args[1]); - if (material == null) { - sender.sendMessage(ChatColor.RED + "There's no item called " + args[1]); - return false; - } - - id = material.getId(); - } else { - id = -1; - } - - int data = args.length >= 3 ? getInteger(sender, args[2], 0) : -1; - int count = player.getInventory().clear(id, data); - - Command.broadcastCommandMessage(sender, "Cleared the inventory of " + player.getDisplayName() + ", removing " + count + " items"); - } else if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Please provide a player!"); - } else { - sender.sendMessage(ChatColor.RED + "Can't find player " + args[0]); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return super.tabComplete(sender, alias, args); - } - if (args.length == 2) { - final String arg = args[1]; - final List materials = ClearCommand.materials; - List completion = null; - - final int size = materials.size(); - int i = Collections.binarySearch(materials, arg, String.CASE_INSENSITIVE_ORDER); - - if (i < 0) { - // Insertion (start) index - i = -1 - i; - } - - for ( ; i < size; i++) { - String material = materials.get(i); - if (StringUtil.startsWithIgnoreCase(material, arg)) { - if (completion == null) { - completion = new ArrayList(); - } - completion.add(material); - } else { - break; - } - } - - if (completion != null) { - return completion; - } - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/DefaultGameModeCommand.java b/LiveWeather/src/org/bukkit/command/defaults/DefaultGameModeCommand.java deleted file mode 100755 index 77ba678..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/DefaultGameModeCommand.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class DefaultGameModeCommand extends VanillaCommand { - private static final List GAMEMODE_NAMES = ImmutableList.of("adventure", "creative", "survival"); - - public DefaultGameModeCommand() { - super("defaultgamemode"); - this.description = "Set the default gamemode"; - this.usageMessage = "/defaultgamemode "; - this.setPermission("bukkit.command.defaultgamemode"); - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - if (!testPermission(sender)) return true; - if (args.length == 0) { - sender.sendMessage("Usage: " + usageMessage); - return false; - } - - String modeArg = args[0]; - int value = -1; - - try { - value = Integer.parseInt(modeArg); - } catch (NumberFormatException ex) {} - - GameMode mode = GameMode.getByValue(value); - - if (mode == null) { - if (modeArg.equalsIgnoreCase("creative") || modeArg.equalsIgnoreCase("c")) { - mode = GameMode.CREATIVE; - } else if (modeArg.equalsIgnoreCase("adventure") || modeArg.equalsIgnoreCase("a")) { - mode = GameMode.ADVENTURE; - } else { - mode = GameMode.SURVIVAL; - } - } - - Bukkit.getServer().setDefaultGameMode(mode); - Command.broadcastCommandMessage(sender, "Default game mode set to " + mode.toString().toLowerCase()); - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], GAMEMODE_NAMES, new ArrayList(GAMEMODE_NAMES.size())); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/DeopCommand.java b/LiveWeather/src/org/bukkit/command/defaults/DeopCommand.java deleted file mode 100755 index 1b71d49..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/DeopCommand.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class DeopCommand extends VanillaCommand { - public DeopCommand() { - super("deop"); - this.description = "Takes the specified player's operator status"; - this.usageMessage = "/deop "; - this.setPermission("bukkit.command.op.take"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1 || args[0].length() == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - player.setOp(false); - - if (player instanceof Player) { - ((Player) player).sendMessage(ChatColor.YELLOW + "You are no longer op!"); - } - - Command.broadcastCommandMessage(sender, "De-opped " + args[0]); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - List completions = new ArrayList(); - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - String playerName = player.getName(); - if (player.isOp() && StringUtil.startsWithIgnoreCase(playerName, args[0])) { - completions.add(playerName); - } - } - return completions; - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/DifficultyCommand.java b/LiveWeather/src/org/bukkit/command/defaults/DifficultyCommand.java deleted file mode 100755 index ca98559..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/DifficultyCommand.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; -import org.bukkit.Difficulty; - -import java.util.ArrayList; -import java.util.List; - -public class DifficultyCommand extends VanillaCommand { - private static final List DIFFICULTY_NAMES = ImmutableList.of("peaceful", "easy", "normal", "hard"); - - public DifficultyCommand() { - super("difficulty"); - this.description = "Sets the game difficulty"; - this.usageMessage = "/difficulty "; - this.setPermission("bukkit.command.difficulty"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1 || args[0].length() == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Difficulty difficulty = Difficulty.getByValue(getDifficultyForString(sender, args[0])); - - if (Bukkit.isHardcore()) { - difficulty = Difficulty.HARD; - } - - Bukkit.getWorlds().get(0).setDifficulty(difficulty); - - int levelCount = 1; - if (Bukkit.getAllowNether()) { - Bukkit.getWorlds().get(levelCount).setDifficulty(difficulty); - levelCount++; - } - - if (Bukkit.getAllowEnd()) { - Bukkit.getWorlds().get(levelCount).setDifficulty(difficulty); - } - - Command.broadcastCommandMessage(sender, "Set difficulty to " + difficulty.toString()); - return true; - } - - protected int getDifficultyForString(CommandSender sender, String name) { - if (name.equalsIgnoreCase("peaceful") || name.equalsIgnoreCase("p")) { - return 0; - } else if (name.equalsIgnoreCase("easy") || name.equalsIgnoreCase("e")) { - return 1; - } else if (name.equalsIgnoreCase("normal") || name.equalsIgnoreCase("n")) { - return 2; - } else if (name.equalsIgnoreCase("hard") || name.equalsIgnoreCase("h")) { - return 3; - } else { - return getInteger(sender, name, 0, 3); - } - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], DIFFICULTY_NAMES, new ArrayList(DIFFICULTY_NAMES.size())); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/EffectCommand.java b/LiveWeather/src/org/bukkit/command/defaults/EffectCommand.java deleted file mode 100755 index 7d0662e..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/EffectCommand.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import java.util.ArrayList; -import java.util.List; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.util.StringUtil; - -public class EffectCommand extends VanillaCommand { - private static final List effects; - - public EffectCommand() { - super("effect"); - this.description = "Adds/Removes effects on players"; - this.usageMessage = "/effect [seconds] [amplifier]"; - this.setPermission("bukkit.command.effect"); - } - - static { - ImmutableList.Builder builder = ImmutableList.builder(); - - for (PotionEffectType type : PotionEffectType.values()) { - if (type != null) { - builder.add(type.getName()); - } - } - - effects = builder.build(); - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - if (!testPermission(sender)) { - return true; - } - - if (args.length < 2) { - sender.sendMessage(getUsage()); - return true; - } - - final Player player = sender.getServer().getPlayer(args[0]); - - if (player == null) { - sender.sendMessage(ChatColor.RED + String.format("Player, %s, not found", args[0])); - return true; - } - - if ("clear".equalsIgnoreCase(args[1])) { - for (PotionEffect effect : player.getActivePotionEffects()) { - player.removePotionEffect(effect.getType()); - } - sender.sendMessage(String.format("Took all effects from %s", args[0])); - return true; - } - - PotionEffectType effect = PotionEffectType.getByName(args[1]); - - if (effect == null) { - effect = PotionEffectType.getById(getInteger(sender, args[1], 0)); - } - - if (effect == null) { - sender.sendMessage(ChatColor.RED + String.format("Effect, %s, not found", args[1])); - return true; - } - - int duration = 600; - int duration_temp = 30; - int amplification = 0; - - if (args.length >= 3) { - duration_temp = getInteger(sender, args[2], 0, 1000000); - if (effect.isInstant()) { - duration = duration_temp; - } else { - duration = duration_temp * 20; - } - } else if (effect.isInstant()) { - duration = 1; - } - - if (args.length >= 4) { - amplification = getInteger(sender, args[3], 0, 255); - } - - if (duration_temp == 0) { - if (!player.hasPotionEffect(effect)) { - sender.sendMessage(String.format("Couldn't take %s from %s as they do not have the effect", effect.getName(), args[0])); - return true; - } - - player.removePotionEffect(effect); - broadcastCommandMessage(sender, String.format("Took %s from %s", effect.getName(), args[0])); - } else { - final PotionEffect applyEffect = new PotionEffect(effect, duration, amplification); - - player.addPotionEffect(applyEffect, true); - broadcastCommandMessage(sender, String.format("Given %s (ID %d) * %d to %s for %d seconds", effect.getName(), effect.getId(), amplification, args[0], duration_temp)); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String commandLabel, String[] args) { - if (args.length == 1) { - return super.tabComplete(sender, commandLabel, args); - } else if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], effects, new ArrayList(effects.size())); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/EnchantCommand.java b/LiveWeather/src/org/bukkit/command/defaults/EnchantCommand.java deleted file mode 100755 index 2976649..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/EnchantCommand.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.apache.commons.lang.WordUtils; -import com.google.common.collect.ImmutableList; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.StringUtil; - -public class EnchantCommand extends VanillaCommand { - private static final List ENCHANTMENT_NAMES = new ArrayList(); - - public EnchantCommand() { - super("enchant"); - this.description = "Adds enchantments to the item the player is currently holding. Specify 0 for the level to remove an enchantment. Specify force to ignore normal enchantment restrictions"; - this.usageMessage = "/enchant [level|max|0] [force]"; - this.setPermission("bukkit.command.enchant"); - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 2) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - boolean force = false; - if (args.length > 2) { - force = args[args.length > 3 ? 3 : 2].equalsIgnoreCase("force"); - } - - Player player = Bukkit.getPlayerExact(args[0]); - if (player == null) { - sender.sendMessage("Can't find player " + args[0]); - } else { - ItemStack item = player.getItemInHand(); - if (item.getType() == Material.AIR) { - sender.sendMessage("The player isn't holding an item"); - } else { - String itemName = item.getType().toString().replaceAll("_", " "); - itemName = WordUtils.capitalizeFully(itemName); - - Enchantment enchantment = getEnchantment(args[1].toUpperCase()); - if (enchantment == null) { - sender.sendMessage(String.format("Enchantment does not exist: %s", args[1])); - } else { - String enchantmentName = enchantment.getName().replaceAll("_", " "); - enchantmentName = WordUtils.capitalizeFully(enchantmentName); - - if (!force && !enchantment.canEnchantItem(item)) { - sender.sendMessage(String.format("%s cannot be applied to %s", enchantmentName, itemName)); - } else { - int level = 1; - if (args.length > 2) { - Integer integer = getInteger(args[2]); - int minLevel = enchantment.getStartLevel(); - int maxLevel = force ? Short.MAX_VALUE : enchantment.getMaxLevel(); - - if (integer != null) { - if (integer == 0) { - item.removeEnchantment(enchantment); - Command.broadcastCommandMessage(sender, String.format("Removed %s on %s's %s", enchantmentName, player.getName(), itemName)); - return true; - } - - if (integer < minLevel || integer > maxLevel) { - sender.sendMessage(String.format("Level for enchantment %s must be between %d and %d", enchantmentName, minLevel, maxLevel)); - sender.sendMessage("Specify 0 for level to remove an enchantment"); - return true; - } - - level = integer; - } - - if ("max".equals(args[2])) { - level = maxLevel; - } - } - - Map enchantments = item.getEnchantments(); - boolean conflicts = false; - - if (!force && !enchantments.isEmpty()) { // TODO: Improve this to use a "hasEnchantments" call - for (Map.Entry entry : enchantments.entrySet()) { - Enchantment enchant = entry.getKey(); - - if (enchant.equals(enchantment)) continue; - if (enchant.conflictsWith(enchantment)) { - sender.sendMessage(String.format("Can't apply the enchantment %s on an item with the enchantment %s", enchantmentName, WordUtils.capitalizeFully(enchant.getName().replaceAll("_", " ")))); - conflicts = true; - break; - } - } - } - - if (!conflicts) { - item.addUnsafeEnchantment(enchantment, level); - - Command.broadcastCommandMessage(sender, String.format("Applied %s (Lvl %d) on %s's %s", enchantmentName, level, player.getName(), itemName), false); - sender.sendMessage(String.format("Enchanting succeeded, applied %s (Lvl %d) onto your %s", enchantmentName, level, itemName)); - } - } - } - } - } - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return super.tabComplete(sender, alias, args); - } - - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], ENCHANTMENT_NAMES, new ArrayList(ENCHANTMENT_NAMES.size())); - } - - if (args.length == 3 || args.length == 4) { - if (!args[args.length - 2].equalsIgnoreCase("force")) { - return ImmutableList.of("force"); - } - } - - return ImmutableList.of(); - } - - private Enchantment getEnchantment(String lookup) { - Enchantment enchantment = Enchantment.getByName(lookup); - - if (enchantment == null) { - Integer id = getInteger(lookup); - if (id != null) { - enchantment = Enchantment.getById(id); - } - } - - return enchantment; - } - - public static void buildEnchantments() { - if (!ENCHANTMENT_NAMES.isEmpty()) { - throw new IllegalStateException("Enchantments have already been built!"); - } - - for (Enchantment enchantment : Enchantment.values()) { - ENCHANTMENT_NAMES.add(enchantment.getName()); - } - - Collections.sort(ENCHANTMENT_NAMES); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ExpCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ExpCommand.java deleted file mode 100755 index 2749760..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ExpCommand.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class ExpCommand extends VanillaCommand { - public ExpCommand() { - super("xp"); - this.description = "Gives the specified player a certain amount of experience. Specify L to give levels instead, with a negative amount resulting in taking levels."; - this.usageMessage = "/xp [player] OR /xp L [player]"; - this.setPermission("bukkit.command.xp"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length > 0) { - String inputAmount = args[0]; - Player player = null; - - boolean isLevel = inputAmount.endsWith("l") || inputAmount.endsWith("L"); - if (isLevel && inputAmount.length() > 1) { - inputAmount = inputAmount.substring(0, inputAmount.length() - 1); - } - - int amount = getInteger(sender, inputAmount, Integer.MIN_VALUE, Integer.MAX_VALUE); - boolean isTaking = amount < 0; - - if (isTaking) { - amount *= -1; - } - - if (args.length > 1) { - player = Bukkit.getPlayer(args[1]); - } else if (sender instanceof Player) { - player = (Player) sender; - } - - if (player != null) { - if (isLevel) { - if (isTaking) { - player.giveExpLevels(-amount); - Command.broadcastCommandMessage(sender, "Taken " + amount + " level(s) from " + player.getName()); - } else { - player.giveExpLevels(amount); - Command.broadcastCommandMessage(sender, "Given " + amount + " level(s) to " + player.getName()); - } - } else { - if (isTaking) { - sender.sendMessage(ChatColor.RED + "Taking experience can only be done by levels, cannot give players negative experience points"); - return false; - } else { - player.giveExp(amount); - Command.broadcastCommandMessage(sender, "Given " + amount + " experience to " + player.getName()); - } - } - } else { - sender.sendMessage("Can't find player, was one provided?\n" + ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - return true; - } - - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 2) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/GameModeCommand.java b/LiveWeather/src/org/bukkit/command/defaults/GameModeCommand.java deleted file mode 100755 index c58f906..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/GameModeCommand.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class GameModeCommand extends VanillaCommand { - private static final List GAMEMODE_NAMES = ImmutableList.of("adventure", "creative", "survival"); - - public GameModeCommand() { - super("gamemode"); - this.description = "Changes the player to a specific game mode"; - this.usageMessage = "/gamemode [player]"; - this.setPermission("bukkit.command.gamemode"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - String modeArg = args[0]; - String playerArg = sender.getName(); - - if (args.length == 2) { - playerArg = args[1]; - } - - Player player = Bukkit.getPlayerExact(playerArg); - - if (player != null) { - int value = -1; - - try { - value = Integer.parseInt(modeArg); - } catch (NumberFormatException ex) {} - - GameMode mode = GameMode.getByValue(value); - - if (mode == null) { - if (modeArg.equalsIgnoreCase("creative") || modeArg.equalsIgnoreCase("c")) { - mode = GameMode.CREATIVE; - } else if (modeArg.equalsIgnoreCase("adventure") || modeArg.equalsIgnoreCase("a")) { - mode = GameMode.ADVENTURE; - } else { - mode = GameMode.SURVIVAL; - } - } - - if (mode != player.getGameMode()) { - player.setGameMode(mode); - - if (mode != player.getGameMode()) { - sender.sendMessage("Game mode change for " + player.getName() + " failed!"); - } else { - if (player == sender) { - Command.broadcastCommandMessage(sender, "Set own game mode to " + mode.toString() + " mode"); - } else { - Command.broadcastCommandMessage(sender, "Set " + player.getName() + "'s game mode to " + mode.toString() + " mode"); - } - } - } else { - sender.sendMessage(player.getName() + " already has game mode " + mode.getValue()); - } - } else { - sender.sendMessage("Can't find player " + playerArg); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], GAMEMODE_NAMES, new ArrayList(GAMEMODE_NAMES.size())); - } else if (args.length == 2) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/GameRuleCommand.java b/LiveWeather/src/org/bukkit/command/defaults/GameRuleCommand.java deleted file mode 100755 index 40c531b..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/GameRuleCommand.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.ChatColor; -import org.bukkit.command.BlockCommandSender; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.HumanEntity; - -public class GameRuleCommand extends VanillaCommand { - private static final List GAMERULE_STATES = ImmutableList.of("true", "false"); - - public GameRuleCommand() { - super("gamerule"); - this.description = "Sets a server's game rules"; - this.usageMessage = "/gamerule OR /gamerule "; - this.setPermission("bukkit.command.gamerule"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length > 0) { - String rule = args[0]; - World world = getGameWorld(sender); - - if (world.isGameRule(rule)) { - if (args.length > 1) { - String value = args[1]; - - world.setGameRuleValue(rule, value); - Command.broadcastCommandMessage(sender, "Game rule " + rule + " has been set to: " + value); - } else { - String value = world.getGameRuleValue(rule); - sender.sendMessage(rule + " = " + value); - } - } else { - sender.sendMessage(ChatColor.RED + "No game rule called " + rule + " is available"); - } - - return true; - } else { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - sender.sendMessage("Rules: " + this.createString(getGameWorld(sender).getGameRules(), 0, ", ")); - - return true; - } - } - - private World getGameWorld(CommandSender sender) { - if (sender instanceof HumanEntity) { - World world = ((HumanEntity) sender).getWorld(); - if (world != null) { - return world; - } - } else if (sender instanceof BlockCommandSender) { - return ((BlockCommandSender) sender).getBlock().getWorld(); - } - - return Bukkit.getWorlds().get(0); - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], Arrays.asList(getGameWorld(sender).getGameRules()), new ArrayList()); - } - - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], GAMERULE_STATES, new ArrayList(GAMERULE_STATES.size())); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/GiveCommand.java b/LiveWeather/src/org/bukkit/command/defaults/GiveCommand.java deleted file mode 100755 index 14f27be..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/GiveCommand.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.StringUtil; - -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; - -public class GiveCommand extends VanillaCommand { - private static List materials; - static { - ArrayList materialList = new ArrayList(); - for (Material material : Material.values()) { - materialList.add(material.name()); - } - Collections.sort(materialList); - materials = ImmutableList.copyOf(materialList); - } - - public GiveCommand() { - super("give"); - this.description = "Gives the specified player a certain amount of items"; - this.usageMessage = "/give [amount [data]]"; - this.setPermission("bukkit.command.give"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if ((args.length < 2)) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Player player = Bukkit.getPlayerExact(args[0]); - - if (player != null) { - Material material = Material.matchMaterial(args[1]); - - if (material == null) { - material = Bukkit.getUnsafe().getMaterialFromInternalName(args[1]); - } - - if (material != null) { - int amount = 1; - short data = 0; - - if (args.length >= 3) { - amount = this.getInteger(sender, args[2], 1, 64); - - if (args.length >= 4) { - try { - data = Short.parseShort(args[3]); - } catch (NumberFormatException ex) {} - } - } - - ItemStack stack = new ItemStack(material, amount, data); - - if (args.length >= 5) { - try { - stack = Bukkit.getUnsafe().modifyItemStack(stack, Joiner.on(' ').join(Arrays.asList(args).subList(4, args.length))); - } catch (Throwable t) { - player.sendMessage("Not a valid tag"); - return true; - } - } - - player.getInventory().addItem(stack); - - Command.broadcastCommandMessage(sender, "Gave " + player.getName() + " some " + material.getId() + " (" + material + ")"); - } else { - sender.sendMessage("There's no item called " + args[1]); - } - } else { - sender.sendMessage("Can't find player " + args[0]); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return super.tabComplete(sender, alias, args); - } - if (args.length == 2) { - final String arg = args[1]; - final List materials = GiveCommand.materials; - List completion = new ArrayList(); - - final int size = materials.size(); - int i = Collections.binarySearch(materials, arg, String.CASE_INSENSITIVE_ORDER); - - if (i < 0) { - // Insertion (start) index - i = -1 - i; - } - - for ( ; i < size; i++) { - String material = materials.get(i); - if (StringUtil.startsWithIgnoreCase(material, arg)) { - completion.add(material); - } else { - break; - } - } - - return Bukkit.getUnsafe().tabCompleteInternalMaterialName(arg, completion); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/HelpCommand.java b/LiveWeather/src/org/bukkit/command/defaults/HelpCommand.java deleted file mode 100755 index ff73b26..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/HelpCommand.java +++ /dev/null @@ -1,228 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; -import org.apache.commons.lang.math.NumberUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.help.HelpMap; -import org.bukkit.help.HelpTopic; -import org.bukkit.help.HelpTopicComparator; -import org.bukkit.help.IndexHelpTopic; -import org.bukkit.util.ChatPaginator; - -import com.google.common.collect.ImmutableList; - -public class HelpCommand extends VanillaCommand { - public HelpCommand() { - super("help"); - this.description = "Shows the help menu"; - this.usageMessage = "/help \n/help \n/help "; - this.setAliases(Arrays.asList(new String[] { "?" })); - this.setPermission("bukkit.command.help"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - String command; - int pageNumber; - int pageHeight; - int pageWidth; - - if (args.length == 0) { - command = ""; - pageNumber = 1; - } else if (NumberUtils.isDigits(args[args.length - 1])) { - command = StringUtils.join(ArrayUtils.subarray(args, 0, args.length - 1), " "); - try { - pageNumber = NumberUtils.createInteger(args[args.length - 1]); - } catch (NumberFormatException exception) { - pageNumber = 1; - } - if (pageNumber <= 0) { - pageNumber = 1; - } - } else { - command = StringUtils.join(args, " "); - pageNumber = 1; - } - - if (sender instanceof ConsoleCommandSender) { - pageHeight = ChatPaginator.UNBOUNDED_PAGE_HEIGHT; - pageWidth = ChatPaginator.UNBOUNDED_PAGE_WIDTH; - } else { - pageHeight = ChatPaginator.CLOSED_CHAT_PAGE_HEIGHT - 1; - pageWidth = ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH; - } - - HelpMap helpMap = Bukkit.getServer().getHelpMap(); - HelpTopic topic = helpMap.getHelpTopic(command); - - if (topic == null) { - topic = helpMap.getHelpTopic("/" + command); - } - - if (topic == null) { - topic = findPossibleMatches(command); - } - - if (topic == null || !topic.canSee(sender)) { - sender.sendMessage(ChatColor.RED + "No help for " + command); - return true; - } - - ChatPaginator.ChatPage page = ChatPaginator.paginate(topic.getFullText(sender), pageNumber, pageWidth, pageHeight); - - StringBuilder header = new StringBuilder(); - header.append(ChatColor.YELLOW); - header.append("--------- "); - header.append(ChatColor.WHITE); - header.append("Help: "); - header.append(topic.getName()); - header.append(" "); - if (page.getTotalPages() > 1) { - header.append("("); - header.append(page.getPageNumber()); - header.append("/"); - header.append(page.getTotalPages()); - header.append(") "); - } - header.append(ChatColor.YELLOW); - for (int i = header.length(); i < ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH; i++) { - header.append("-"); - } - sender.sendMessage(header.toString()); - - sender.sendMessage(page.getLines()); - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - List matchedTopics = new ArrayList(); - String searchString = args[0]; - for (HelpTopic topic : Bukkit.getServer().getHelpMap().getHelpTopics()) { - String trimmedTopic = topic.getName().startsWith("/") ? topic.getName().substring(1) : topic.getName(); - - if (trimmedTopic.startsWith(searchString)) { - matchedTopics.add(trimmedTopic); - } - } - return matchedTopics; - } - return ImmutableList.of(); - } - - protected HelpTopic findPossibleMatches(String searchString) { - int maxDistance = (searchString.length() / 5) + 3; - Set possibleMatches = new TreeSet(HelpTopicComparator.helpTopicComparatorInstance()); - - if (searchString.startsWith("/")) { - searchString = searchString.substring(1); - } - - for (HelpTopic topic : Bukkit.getServer().getHelpMap().getHelpTopics()) { - String trimmedTopic = topic.getName().startsWith("/") ? topic.getName().substring(1) : topic.getName(); - - if (trimmedTopic.length() < searchString.length()) { - continue; - } - - if (Character.toLowerCase(trimmedTopic.charAt(0)) != Character.toLowerCase(searchString.charAt(0))) { - continue; - } - - if (damerauLevenshteinDistance(searchString, trimmedTopic.substring(0, searchString.length())) < maxDistance) { - possibleMatches.add(topic); - } - } - - if (possibleMatches.size() > 0) { - return new IndexHelpTopic("Search", null, null, possibleMatches, "Search for: " + searchString); - } else { - return null; - } - } - - /** - * Computes the Dameraur-Levenshtein Distance between two strings. Adapted - * from the algorithm at Wikipedia: Damerau–Levenshtein distance - * - * @param s1 The first string being compared. - * @param s2 The second string being compared. - * @return The number of substitutions, deletions, insertions, and - * transpositions required to get from s1 to s2. - */ - protected static int damerauLevenshteinDistance(String s1, String s2) { - if (s1 == null && s2 == null) { - return 0; - } - if (s1 != null && s2 == null) { - return s1.length(); - } - if (s1 == null && s2 != null) { - return s2.length(); - } - - int s1Len = s1.length(); - int s2Len = s2.length(); - int[][] H = new int[s1Len + 2][s2Len + 2]; - - int INF = s1Len + s2Len; - H[0][0] = INF; - for (int i = 0; i <= s1Len; i++) { - H[i + 1][1] = i; - H[i + 1][0] = INF; - } - for (int j = 0; j <= s2Len; j++) { - H[1][j + 1] = j; - H[0][j + 1] = INF; - } - - Map sd = new HashMap(); - for (char Letter : (s1 + s2).toCharArray()) { - if (!sd.containsKey(Letter)) { - sd.put(Letter, 0); - } - } - - for (int i = 1; i <= s1Len; i++) { - int DB = 0; - for (int j = 1; j <= s2Len; j++) { - int i1 = sd.get(s2.charAt(j - 1)); - int j1 = DB; - - if (s1.charAt(i - 1) == s2.charAt(j - 1)) { - H[i + 1][j + 1] = H[i][j]; - DB = j; - } else { - H[i + 1][j + 1] = Math.min(H[i][j], Math.min(H[i + 1][j], H[i][j + 1])) + 1; - } - - H[i + 1][j + 1] = Math.min(H[i + 1][j + 1], H[i1][j1] + (i - i1 - 1) + 1 + (j - j1 - 1)); - } - sd.put(s1.charAt(i - 1), i); - } - - return H[s1Len + 1][s2Len + 1]; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/KickCommand.java b/LiveWeather/src/org/bukkit/command/defaults/KickCommand.java deleted file mode 100755 index b6c3f79..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/KickCommand.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class KickCommand extends VanillaCommand { - public KickCommand() { - super("kick"); - this.description = "Removes the specified player from the server"; - this.usageMessage = "/kick [reason ...]"; - this.setPermission("bukkit.command.kick"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 1 || args[0].length() == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Player player = Bukkit.getPlayerExact(args[0]); - - if (player != null) { - String reason = "Kicked by an operator."; - - if (args.length > 1) { - reason = createString(args, 1); - } - - player.kickPlayer(reason); - Command.broadcastCommandMessage(sender, "Kicked player " + player.getName() + ". With reason:\n" + reason); - } else { - sender.sendMessage( args[0] + " not found."); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length >= 1) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/KillCommand.java b/LiveWeather/src/org/bukkit/command/defaults/KillCommand.java deleted file mode 100755 index 3270db5..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/KillCommand.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.entity.EntityDamageEvent; - -import com.google.common.collect.ImmutableList; - -public class KillCommand extends VanillaCommand { - public KillCommand() { - super("kill"); - this.description = "Commits suicide, only usable as a player"; - this.usageMessage = "/kill"; - this.setPermission("bukkit.command.kill"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (sender instanceof Player) { - Player player = (Player) sender; - - EntityDamageEvent ede = new EntityDamageEvent(player, EntityDamageEvent.DamageCause.SUICIDE, 1000); - Bukkit.getPluginManager().callEvent(ede); - if (ede.isCancelled()) return true; - - ede.getEntity().setLastDamageCause(ede); - player.setHealth(0); - sender.sendMessage("Ouch. That look like it hurt."); - } else { - sender.sendMessage("You can only perform this command as a player"); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ListCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ListCommand.java deleted file mode 100755 index eb8a6a9..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ListCommand.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.Collection; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class ListCommand extends VanillaCommand { - public ListCommand() { - super("list"); - this.description = "Lists all online players"; - this.usageMessage = "/list"; - this.setPermission("bukkit.command.list"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - StringBuilder online = new StringBuilder(); - - final Collection players = Bukkit.getOnlinePlayers(); - - for (Player player : players) { - // If a player is hidden from the sender don't show them in the list - if (sender instanceof Player && !((Player) sender).canSee(player)) - continue; - - if (online.length() > 0) { - online.append(", "); - } - - online.append(player.getDisplayName()); - } - - sender.sendMessage("There are " + players.size() + "/" + Bukkit.getMaxPlayers() + " players online:\n" + online.toString()); - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/MeCommand.java b/LiveWeather/src/org/bukkit/command/defaults/MeCommand.java deleted file mode 100755 index ddcd9ad..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/MeCommand.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.command.defaults; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; - -public class MeCommand extends VanillaCommand { - public MeCommand() { - super("me"); - this.description = "Performs the specified action in chat"; - this.usageMessage = "/me "; - this.setPermission("bukkit.command.me"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - StringBuilder message = new StringBuilder(); - message.append(sender.getName()); - - for (String arg : args) { - message.append(" "); - message.append(arg); - } - - Bukkit.broadcastMessage("* " + message.toString()); - - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/OpCommand.java b/LiveWeather/src/org/bukkit/command/defaults/OpCommand.java deleted file mode 100755 index e1f8452..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/OpCommand.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class OpCommand extends VanillaCommand { - public OpCommand() { - super("op"); - this.description = "Gives the specified player operator status"; - this.usageMessage = "/op "; - this.setPermission("bukkit.command.op.give"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1 || args[0].length() == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - player.setOp(true); - - Command.broadcastCommandMessage(sender, "Opped " + args[0]); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - if (!(sender instanceof Player)) { - return ImmutableList.of(); - } - - String lastWord = args[0]; - if (lastWord.length() == 0) { - return ImmutableList.of(); - } - - Player senderPlayer = (Player) sender; - - ArrayList matchedPlayers = new ArrayList(); - for (Player player : sender.getServer().getOnlinePlayers()) { - String name = player.getName(); - if (!senderPlayer.canSee(player) || player.isOp()) { - continue; - } - if (StringUtil.startsWithIgnoreCase(name, lastWord)) { - matchedPlayers.add(name); - } - } - - Collections.sort(matchedPlayers, String.CASE_INSENSITIVE_ORDER); - return matchedPlayers; - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/PardonCommand.java b/LiveWeather/src/org/bukkit/command/defaults/PardonCommand.java deleted file mode 100755 index 82c7a95..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/PardonCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.BanList; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class PardonCommand extends VanillaCommand { - public PardonCommand() { - super("pardon"); - this.description = "Allows the specified player to use this server"; - this.usageMessage = "/pardon "; - this.setPermission("bukkit.command.unban.player"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Bukkit.getBanList(BanList.Type.NAME).pardon(args[0]); - Command.broadcastCommandMessage(sender, "Pardoned " + args[0]); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - List completions = new ArrayList(); - for (OfflinePlayer player : Bukkit.getBannedPlayers()) { - String name = player.getName(); - if (StringUtil.startsWithIgnoreCase(name, args[0])) { - completions.add(name); - } - } - return completions; - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/PardonIpCommand.java b/LiveWeather/src/org/bukkit/command/defaults/PardonIpCommand.java deleted file mode 100755 index 689a0bd..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/PardonIpCommand.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class PardonIpCommand extends VanillaCommand { - public PardonIpCommand() { - super("pardon-ip"); - this.description = "Allows the specified IP address to use this server"; - this.usageMessage = "/pardon-ip

          "; - this.setPermission("bukkit.command.unban.ip"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - if (BanIpCommand.ipValidity.matcher(args[0]).matches()) { - Bukkit.unbanIP(args[0]); - Command.broadcastCommandMessage(sender, "Pardoned ip " + args[0]); - } else { - sender.sendMessage("Invalid ip"); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], Bukkit.getIPBans(), new ArrayList()); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/PlaySoundCommand.java b/LiveWeather/src/org/bukkit/command/defaults/PlaySoundCommand.java deleted file mode 100755 index 0cb5ca2..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/PlaySoundCommand.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bukkit.command.defaults; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class PlaySoundCommand extends VanillaCommand { - public PlaySoundCommand() { - super("playsound"); - this.description = "Plays a sound to a given player"; - this.usageMessage = "/playsound [x] [y] [z] [volume] [pitch] [minimumVolume]"; - this.setPermission("bukkit.command.playsound"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) { - return true; - } - - if (args.length < 2) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - final String soundArg = args[0]; - final String playerArg = args[1]; - - final Player player = Bukkit.getPlayerExact(playerArg); - if (player == null) { - sender.sendMessage(ChatColor.RED + "Can't find player " + playerArg); - return false; - } - - final Location location = player.getLocation(); - - double x = Math.floor(location.getX()); - double y = Math.floor(location.getY() + 0.5D); - double z = Math.floor(location.getZ()); - double volume = 1.0D; - double pitch = 1.0D; - double minimumVolume = 0.0D; - - switch (args.length) { - default: - case 8: - minimumVolume = getDouble(sender, args[7], 0.0D, 1.0D); - case 7: - pitch = getDouble(sender, args[6], 0.0D, 2.0D); - case 6: - volume = getDouble(sender, args[5], 0.0D, Float.MAX_VALUE); - case 5: - z = getRelativeDouble(z, sender, args[4]); - case 4: - y = getRelativeDouble(y, sender, args[3]); - case 3: - x = getRelativeDouble(x, sender, args[2]); - case 2: - // Noop - } - - final double fixedVolume = volume > 1.0D ? volume * 16.0D : 16.0D; - final Location soundLocation = new Location(player.getWorld(), x, y, z); - if (location.distanceSquared(soundLocation) > fixedVolume * fixedVolume) { - if (minimumVolume <= 0.0D) { - sender.sendMessage(ChatColor.RED + playerArg + " is too far away to hear the sound"); - return false; - } - - final double deltaX = x - location.getX(); - final double deltaY = y - location.getY(); - final double deltaZ = z - location.getZ(); - final double delta = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / 2.0D; - - if (delta > 0.0D) { - location.add(deltaX / delta, deltaY / delta, deltaZ / delta); - } - - player.playSound(location, soundArg, (float) minimumVolume, (float) pitch); - } else { - player.playSound(soundLocation, soundArg, (float) volume, (float) pitch); - } - sender.sendMessage(String.format("Played '%s' to %s", soundArg, playerArg)); - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/PluginsCommand.java b/LiveWeather/src/org/bukkit/command/defaults/PluginsCommand.java deleted file mode 100755 index b888da1..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/PluginsCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; - -public class PluginsCommand extends BukkitCommand { - public PluginsCommand(String name) { - super(name); - this.description = "Gets a list of plugins running on the server"; - this.usageMessage = "/plugins"; - this.setPermission("bukkit.command.plugins"); - this.setAliases(Arrays.asList("pl")); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - sender.sendMessage("Plugins " + getPluginList()); - return true; - } - - private String getPluginList() { - StringBuilder pluginList = new StringBuilder(); - Plugin[] plugins = Bukkit.getPluginManager().getPlugins(); - - for (Plugin plugin : plugins) { - if (pluginList.length() > 0) { - pluginList.append(ChatColor.WHITE); - pluginList.append(", "); - } - - pluginList.append(plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED); - pluginList.append(plugin.getDescription().getName()); - } - - return "(" + plugins.length + "): " + pluginList.toString(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ReloadCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ReloadCommand.java deleted file mode 100755 index fb3c90f..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ReloadCommand.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public class ReloadCommand extends BukkitCommand { - public ReloadCommand(String name) { - super(name); - this.description = "Reloads the server configuration and plugins"; - this.usageMessage = "/reload"; - this.setPermission("bukkit.command.reload"); - this.setAliases(Arrays.asList("rl")); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Bukkit.reload(); - Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Reload complete."); - - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SaveCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SaveCommand.java deleted file mode 100755 index 8a44f9c..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SaveCommand.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import com.google.common.collect.ImmutableList; - -public class SaveCommand extends VanillaCommand { - public SaveCommand() { - super("save-all"); - this.description = "Saves the server to disk"; - this.usageMessage = "/save-all"; - this.setPermission("bukkit.command.save.perform"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Command.broadcastCommandMessage(sender, "Forcing save.."); - - Bukkit.savePlayers(); - - for (World world : Bukkit.getWorlds()) { - world.save(); - } - - Command.broadcastCommandMessage(sender, "Save complete."); - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SaveOffCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SaveOffCommand.java deleted file mode 100755 index 1fbb3f0..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SaveOffCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import com.google.common.collect.ImmutableList; - -public class SaveOffCommand extends VanillaCommand { - public SaveOffCommand() { - super("save-off"); - this.description = "Disables server autosaving"; - this.usageMessage = "/save-off"; - this.setPermission("bukkit.command.save.disable"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - for (World world : Bukkit.getWorlds()) { - world.setAutoSave(false); - } - - Command.broadcastCommandMessage(sender, "Disabled level saving.."); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SaveOnCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SaveOnCommand.java deleted file mode 100755 index 9774f67..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SaveOnCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import com.google.common.collect.ImmutableList; - -public class SaveOnCommand extends VanillaCommand { - public SaveOnCommand() { - super("save-on"); - this.description = "Enables server autosaving"; - this.usageMessage = "/save-on"; - this.setPermission("bukkit.command.save.enable"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - for (World world : Bukkit.getWorlds()) { - world.setAutoSave(true); - } - - Command.broadcastCommandMessage(sender, "Enabled level saving.."); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SayCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SayCommand.java deleted file mode 100755 index 658fe21..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SayCommand.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class SayCommand extends VanillaCommand { - public SayCommand() { - super("say"); - this.description = "Broadcasts the given message as the sender"; - this.usageMessage = "/say "; - this.setPermission("bukkit.command.say"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - StringBuilder message = new StringBuilder(); - message.append(ChatColor.LIGHT_PURPLE).append("["); - if (sender instanceof ConsoleCommandSender) { - message.append("Server"); - } else if (sender instanceof Player) { - message.append(((Player) sender).getDisplayName()); - } else { - message.append(sender.getName()); - } - message.append(ChatColor.LIGHT_PURPLE).append("] "); - - if (args.length > 0) { - message.append(args[0]); - for (int i = 1; i < args.length; i++) { - message.append(" ").append(args[i]); - } - } - - Bukkit.broadcastMessage(message.toString()); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - - if (args.length >= 1) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ScoreboardCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ScoreboardCommand.java deleted file mode 100755 index f0490cf..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ScoreboardCommand.java +++ /dev/null @@ -1,617 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Score; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - -public class ScoreboardCommand extends VanillaCommand { - - private static final List MAIN_CHOICES = ImmutableList.of("objectives", "players", "teams"); - private static final List OBJECTIVES_CHOICES = ImmutableList.of("list", "add", "remove", "setdisplay"); - private static final List OBJECTIVES_CRITERIA = ImmutableList.of("health", "playerKillCount", "totalKillCount", "deathCount", "dummy"); - private static final List PLAYERS_CHOICES = ImmutableList.of("set", "add", "remove", "reset", "list"); - private static final List TEAMS_CHOICES = ImmutableList.of("add", "remove", "join", "leave", "empty", "list", "option"); - private static final List TEAMS_OPTION_CHOICES = ImmutableList.of("color", "friendlyfire", "seeFriendlyInvisibles"); - private static final Map OBJECTIVES_DISPLAYSLOT = ImmutableMap.of("belowName", DisplaySlot.BELOW_NAME, "list", DisplaySlot.PLAYER_LIST, "sidebar", DisplaySlot.SIDEBAR); - private static final Map TEAMS_OPTION_COLOR = ImmutableMap.builder() - .put("aqua", ChatColor.AQUA) - .put("black", ChatColor.BLACK) - .put("blue", ChatColor.BLUE) - .put("bold", ChatColor.BOLD) - .put("dark_aqua", ChatColor.DARK_AQUA) - .put("dark_blue", ChatColor.DARK_BLUE) - .put("dark_gray", ChatColor.DARK_GRAY) - .put("dark_green", ChatColor.DARK_GREEN) - .put("dark_purple", ChatColor.DARK_PURPLE) - .put("dark_red", ChatColor.DARK_RED) - .put("gold", ChatColor.GOLD) - .put("gray", ChatColor.GRAY) - .put("green", ChatColor.GREEN) - .put("italic", ChatColor.ITALIC) - .put("light_purple", ChatColor.LIGHT_PURPLE) - .put("obfuscated", ChatColor.MAGIC) // This is the important line - .put("red", ChatColor.RED) - .put("reset", ChatColor.RESET) - .put("strikethrough", ChatColor.STRIKETHROUGH) - .put("underline", ChatColor.UNDERLINE) - .put("white", ChatColor.WHITE) - .put("yellow", ChatColor.YELLOW) - .build(); - private static final List BOOLEAN = ImmutableList.of("true", "false"); - - public ScoreboardCommand() { - super("scoreboard"); - this.description = "Scoreboard control"; - this.usageMessage = "/scoreboard"; - this.setPermission("bukkit.command.scoreboard"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) - return true; - if (args.length < 1 || args[0].length() == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /scoreboard "); - return false; - } - - final Scoreboard mainScoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); - - if (args[0].equalsIgnoreCase("objectives")) { - if (args.length == 1) { - sender.sendMessage(ChatColor.RED + "Usage: /scoreboard objectives "); - return false; - } - if (args[1].equalsIgnoreCase("list")) { - Set objectives = mainScoreboard.getObjectives(); - if (objectives.isEmpty()) { - sender.sendMessage(ChatColor.RED + "There are no objectives on the scoreboard"); - return false; - } - sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + objectives.size() + " objective(s) on scoreboard"); - for (Objective objective : objectives) { - sender.sendMessage("- " + objective.getName() + ": displays as '" + objective.getDisplayName() + "' and is type '" + objective.getCriteria() + "'"); - } - } else if (args[1].equalsIgnoreCase("add")) { - if (args.length < 4) { - sender.sendMessage(ChatColor.RED + "/scoreboard objectives add [display name ...]"); - return false; - } - String name = args[2]; - String criteria = args[3]; - - if (criteria == null) { - sender.sendMessage(ChatColor.RED + "Invalid objective criteria type. Valid types are: " + stringCollectionToString(OBJECTIVES_CRITERIA)); - } else if (name.length() > 16) { - sender.sendMessage(ChatColor.RED + "The name '" + name + "' is too long for an objective, it can be at most 16 characters long"); - } else if (mainScoreboard.getObjective(name) != null) { - sender.sendMessage(ChatColor.RED + "An objective with the name '" + name + "' already exists"); - } else { - String displayName = null; - if (args.length > 4) { - displayName = StringUtils.join(ArrayUtils.subarray(args, 4, args.length), ' '); - if (displayName.length() > 32) { - sender.sendMessage(ChatColor.RED + "The name '" + displayName + "' is too long for an objective, it can be at most 32 characters long"); - return false; - } - } - Objective objective = mainScoreboard.registerNewObjective(name, criteria); - if (displayName != null && displayName.length() > 0) { - objective.setDisplayName(displayName); - } - sender.sendMessage("Added new objective '" + name + "' successfully"); - } - } else if (args[1].equalsIgnoreCase("remove")) { - if (args.length != 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard objectives remove "); - return false; - } - String name = args[2]; - Objective objective = mainScoreboard.getObjective(name); - if (objective == null) { - sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + name + "'"); - } else { - objective.unregister(); - sender.sendMessage("Removed objective '" + name + "' successfully"); - } - } else if (args[1].equalsIgnoreCase("setdisplay")) { - if (args.length != 3 && args.length != 4) { - sender.sendMessage(ChatColor.RED + "/scoreboard objectives setdisplay [objective]"); - return false; - } - String slotName = args[2]; - DisplaySlot slot = OBJECTIVES_DISPLAYSLOT.get(slotName); - if (slot == null) { - sender.sendMessage(ChatColor.RED + "No such display slot '" + slotName + "'"); - } else { - if (args.length == 4) { - String objectiveName = args[3]; - Objective objective = mainScoreboard.getObjective(objectiveName); - if (objective == null) { - sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + objectiveName + "'"); - return false; - } - - objective.setDisplaySlot(slot); - sender.sendMessage("Set the display objective in slot '" + slotName + "' to '" + objective.getName() + "'"); - } else { - Objective objective = mainScoreboard.getObjective(slot); - if (objective != null) { - objective.setDisplaySlot(null); - } - sender.sendMessage("Cleared objective display slot '" + slotName + "'"); - } - } - } - } else if (args[0].equalsIgnoreCase("players")) { - if (args.length == 1) { - sender.sendMessage(ChatColor.RED + "/scoreboard players "); - return false; - } - if (args[1].equalsIgnoreCase("set") || args[1].equalsIgnoreCase("add") || args[1].equalsIgnoreCase("remove")) { - if (args.length != 5) { - if (args[1].equalsIgnoreCase("set")) { - sender.sendMessage(ChatColor.RED + "/scoreboard players set "); - } else if (args[1].equalsIgnoreCase("add")) { - sender.sendMessage(ChatColor.RED + "/scoreboard players add "); - } else { - sender.sendMessage(ChatColor.RED + "/scoreboard players remove "); - } - return false; - } - String objectiveName = args[3]; - Objective objective = mainScoreboard.getObjective(objectiveName); - if (objective == null) { - sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + objectiveName + "'"); - return false; - } else if (!objective.isModifiable()) { - sender.sendMessage(ChatColor.RED + "The objective '" + objectiveName + "' is read-only and cannot be set"); - return false; - } - - String valueString = args[4]; - int value; - try { - value = Integer.parseInt(valueString); - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "'" + valueString + "' is not a valid number"); - return false; - } - if (value < 1 && !args[1].equalsIgnoreCase("set")) { - sender.sendMessage(ChatColor.RED + "The number you have entered (" + value + ") is too small, it must be at least 1"); - return false; - } - - String playerName = args[2]; - if (playerName.length() > 16) { - sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name"); - return false; - } - Score score = objective.getScore(playerName); - int newScore; - if (args[1].equalsIgnoreCase("set")) { - newScore = value; - } else if (args[1].equalsIgnoreCase("add")) { - newScore = score.getScore() + value; - } else { - newScore = score.getScore() - value; - } - score.setScore(newScore); - sender.sendMessage("Set score of " + objectiveName + " for player " + playerName + " to " + newScore); - } else if (args[1].equalsIgnoreCase("reset")) { - if (args.length != 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard players reset "); - return false; - } - String playerName = args[2]; - if (playerName.length() > 16) { - sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name"); - return false; - } - mainScoreboard.resetScores(playerName); - sender.sendMessage("Reset all scores of player " + playerName); - } else if (args[1].equalsIgnoreCase("list")) { - if (args.length > 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard players list "); - return false; - } - if (args.length == 2) { - Set entries = mainScoreboard.getEntries(); - if (entries.isEmpty()) { - sender.sendMessage(ChatColor.RED + "There are no tracked players on the scoreboard"); - } else { - sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + entries.size() + " tracked players on the scoreboard"); - sender.sendMessage(stringCollectionToString(entries)); - } - } else { - String playerName = args[2]; - if (playerName.length() > 16) { - sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name"); - return false; - } - Set scores = mainScoreboard.getScores(playerName); - if (scores.isEmpty()) { - sender.sendMessage(ChatColor.RED + "Player " + playerName + " has no scores recorded"); - } else { - sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + scores.size() + " tracked objective(s) for " + playerName); - for (Score score : scores) { - sender.sendMessage("- " + score.getObjective().getDisplayName() + ": " + score.getScore() + " (" + score.getObjective().getName() + ")"); - } - } - } - } - } else if (args[0].equalsIgnoreCase("teams")) { - if (args.length == 1) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams "); - return false; - } - if (args[1].equalsIgnoreCase("list")) { - if (args.length == 2) { - Set teams = mainScoreboard.getTeams(); - if (teams.isEmpty()) { - sender.sendMessage(ChatColor.RED + "There are no teams registered on the scoreboard"); - } else { - sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + teams.size() + " teams on the scoreboard"); - for (Team team : teams) { - sender.sendMessage("- " + team.getName() + ": '" + team.getDisplayName() + "' has " + team.getSize() + " players"); - } - } - } else if (args.length == 3) { - String teamName = args[2]; - Team team = mainScoreboard.getTeam(teamName); - if (team == null) { - sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'"); - } else { - Set players = team.getPlayers(); - if (players.isEmpty()) { - sender.sendMessage(ChatColor.RED + "Team " + team.getName() + " has no players"); - } else { - sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + players.size() + " player(s) in team " + team.getName()); - sender.sendMessage(offlinePlayerSetToString(players)); - } - } - } else { - sender.sendMessage(ChatColor.RED + "/scoreboard teams list [name]"); - return false; - } - } else if (args[1].equalsIgnoreCase("add")) { - if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams add [display name ...]"); - return false; - } - String name = args[2]; - if (name.length() > 16) { - sender.sendMessage(ChatColor.RED + "The name '" + name + "' is too long for a team, it can be at most 16 characters long"); - } else if (mainScoreboard.getTeam(name) != null) { - sender.sendMessage(ChatColor.RED + "A team with the name '" + name + "' already exists"); - } else { - String displayName = null; - if (args.length > 3) { - displayName = StringUtils.join(ArrayUtils.subarray(args, 3, args.length), ' '); - if (displayName.length() > 32) { - sender.sendMessage(ChatColor.RED + "The display name '" + displayName + "' is too long for a team, it can be at most 32 characters long"); - return false; - } - } - Team team = mainScoreboard.registerNewTeam(name); - if (displayName != null && displayName.length() > 0) { - team.setDisplayName(displayName); - } - sender.sendMessage("Added new team '" + team.getName() + "' successfully"); - } - } else if (args[1].equalsIgnoreCase("remove")) { - if (args.length != 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams remove "); - return false; - } - String name = args[2]; - Team team = mainScoreboard.getTeam(name); - if (team == null) { - sender.sendMessage(ChatColor.RED + "No team was found by the name '" + name + "'"); - } else { - team.unregister(); - sender.sendMessage("Removed team " + name); - } - } else if (args[1].equalsIgnoreCase("empty")) { - if (args.length != 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams clear "); - return false; - } - String name = args[2]; - Team team = mainScoreboard.getTeam(name); - if (team == null) { - sender.sendMessage(ChatColor.RED + "No team was found by the name '" + name + "'"); - } else { - Set players = team.getPlayers(); - if (players.isEmpty()) { - sender.sendMessage(ChatColor.RED + "Team " + team.getName() + " is already empty, cannot remove nonexistant players"); - } else { - for (OfflinePlayer player : players) { - team.removePlayer(player); - } - sender.sendMessage("Removed all " + players.size() + " player(s) from team " + team.getName()); - } - } - } else if (args[1].equalsIgnoreCase("join")) { - if ((sender instanceof Player) ? args.length < 3 : args.length < 4) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams join [player...]"); - return false; - } - String teamName = args[2]; - Team team = mainScoreboard.getTeam(teamName); - if (team == null) { - sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'"); - } else { - Set addedPlayers = new HashSet(); - if ((sender instanceof Player) && args.length == 3) { - team.addPlayer((Player) sender); - addedPlayers.add(sender.getName()); - } else { - for (int i = 3; i < args.length; i++) { - String playerName = args[i]; - OfflinePlayer offlinePlayer; - Player player = Bukkit.getPlayerExact(playerName); - if (player != null) { - offlinePlayer = player; - } else { - offlinePlayer = Bukkit.getOfflinePlayer(playerName); - } - team.addPlayer(offlinePlayer); - addedPlayers.add(offlinePlayer.getName()); - } - } - sender.sendMessage("Added " + addedPlayers.size() + " player(s) to team " + team.getName() + ": " + stringCollectionToString(addedPlayers)); - } - } else if (args[1].equalsIgnoreCase("leave")) { - if (!(sender instanceof Player) && args.length < 3) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams leave [player...]"); - return false; - } - Set left = new HashSet(); - Set noTeam = new HashSet(); - if ((sender instanceof Player) && args.length == 2) { - Team team = mainScoreboard.getPlayerTeam((Player) sender); - if (team != null) { - team.removePlayer((Player) sender); - left.add(sender.getName()); - } else { - noTeam.add(sender.getName()); - } - } else { - for (int i = 2; i < args.length; i++) { - String playerName = args[i]; - OfflinePlayer offlinePlayer; - Player player = Bukkit.getPlayerExact(playerName); - if (player != null) { - offlinePlayer = player; - } else { - offlinePlayer = Bukkit.getOfflinePlayer(playerName); - } - Team team = mainScoreboard.getPlayerTeam(offlinePlayer); - if (team != null) { - team.removePlayer(offlinePlayer); - left.add(offlinePlayer.getName()); - } else { - noTeam.add(offlinePlayer.getName()); - } - } - } - if (!left.isEmpty()) { - sender.sendMessage("Removed " + left.size() + " player(s) from their teams: " + stringCollectionToString(left)); - } - if (!noTeam.isEmpty()) { - sender.sendMessage("Could not remove " + noTeam.size() + " player(s) from their teams: " + stringCollectionToString(noTeam)); - } - } else if (args[1].equalsIgnoreCase("option")) { - if (args.length != 4 && args.length != 5) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams option "); - return false; - } - String teamName = args[2]; - Team team = mainScoreboard.getTeam(teamName); - if (team == null) { - sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'"); - return false; - } - String option = args[3].toLowerCase(); - if (!option.equals("friendlyfire") && !option.equals("color") && !option.equals("seefriendlyinvisibles")) { - sender.sendMessage(ChatColor.RED + "/scoreboard teams option "); - return false; - } - if (args.length == 4) { - if (option.equals("color")) { - sender.sendMessage(ChatColor.RED + "Valid values for option color are: " + stringCollectionToString(TEAMS_OPTION_COLOR.keySet())); - } else { - sender.sendMessage(ChatColor.RED + "Valid values for option " + option + " are: true and false"); - } - } else { - String value = args[4].toLowerCase(); - if (option.equals("color")) { - ChatColor color = TEAMS_OPTION_COLOR.get(value); - if (color == null) { - sender.sendMessage(ChatColor.RED + "Valid values for option color are: " + stringCollectionToString(TEAMS_OPTION_COLOR.keySet())); - return false; - } - team.setPrefix(color.toString()); - team.setSuffix(ChatColor.RESET.toString()); - } else { - if (!value.equals("true") && !value.equals("false")) { - sender.sendMessage(ChatColor.RED + "Valid values for option " + option + " are: true and false"); - return false; - } - if (option.equals("friendlyfire")) { - team.setAllowFriendlyFire(value.equals("true")); - } else { - team.setCanSeeFriendlyInvisibles(value.equals("true")); - } - } - sender.sendMessage("Set option " + option + " for team " + team.getName() + " to " + value); - } - } - } else { - sender.sendMessage(ChatColor.RED + "Usage: /scoreboard "); - return false; - } - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], MAIN_CHOICES, new ArrayList()); - } - if (args.length > 1) { - if (args[0].equalsIgnoreCase("objectives")) { - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], OBJECTIVES_CHOICES, new ArrayList()); - } - if (args[1].equalsIgnoreCase("add")) { - if (args.length == 4) { - return StringUtil.copyPartialMatches(args[3], OBJECTIVES_CRITERIA, new ArrayList()); - } - } else if (args[1].equalsIgnoreCase("remove")) { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], this.getCurrentObjectives(), new ArrayList()); - } - } else if (args[1].equalsIgnoreCase("setdisplay")) { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], OBJECTIVES_DISPLAYSLOT.keySet(), new ArrayList()); - } - if (args.length == 4) { - return StringUtil.copyPartialMatches(args[3], this.getCurrentObjectives(), new ArrayList()); - } - } - } else if (args[0].equalsIgnoreCase("players")) { - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], PLAYERS_CHOICES, new ArrayList()); - } - if (args[1].equalsIgnoreCase("set") || args[1].equalsIgnoreCase("add") || args[1].equalsIgnoreCase("remove")) { - if (args.length == 3) { - return super.tabComplete(sender, alias, args); - } - if (args.length == 4) { - return StringUtil.copyPartialMatches(args[3], this.getCurrentObjectives(), new ArrayList()); - } - } else { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], this.getCurrentEntries(), new ArrayList()); - } - } - } else if (args[0].equalsIgnoreCase("teams")) { - if (args.length == 2) { - return StringUtil.copyPartialMatches(args[1], TEAMS_CHOICES, new ArrayList()); - } - if (args[1].equalsIgnoreCase("join")) { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], this.getCurrentTeams(), new ArrayList()); - } - if (args.length >= 4) { - return super.tabComplete(sender, alias, args); - } - } else if (args[1].equalsIgnoreCase("leave")) { - return super.tabComplete(sender, alias, args); - } else if (args[1].equalsIgnoreCase("option")) { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], this.getCurrentTeams(), new ArrayList()); - } - if (args.length == 4) { - return StringUtil.copyPartialMatches(args[3], TEAMS_OPTION_CHOICES, new ArrayList()); - } - if (args.length == 5) { - if (args[3].equalsIgnoreCase("color")) { - return StringUtil.copyPartialMatches(args[4], TEAMS_OPTION_COLOR.keySet(), new ArrayList()); - } else { - return StringUtil.copyPartialMatches(args[4], BOOLEAN, new ArrayList()); - } - } - } else { - if (args.length == 3) { - return StringUtil.copyPartialMatches(args[2], this.getCurrentTeams(), new ArrayList()); - } - } - } - } - - return ImmutableList.of(); - } - - private static String offlinePlayerSetToString(Set set) { - StringBuilder string = new StringBuilder(); - String lastValue = null; - for (OfflinePlayer value : set) { - string.append(lastValue = value.getName()).append(", "); - } - string.delete(string.length() - 2, Integer.MAX_VALUE); - if (string.length() != lastValue.length()) { - string.insert(string.length() - lastValue.length(), "and "); - } - return string.toString(); - - } - - private static String stringCollectionToString(Collection set) { - StringBuilder string = new StringBuilder(); - String lastValue = null; - for (String value : set) { - string.append(lastValue = value).append(", "); - } - string.delete(string.length() - 2, Integer.MAX_VALUE); - if (string.length() != lastValue.length()) { - string.insert(string.length() - lastValue.length(), "and "); - } - return string.toString(); - } - - private List getCurrentObjectives() { - List list = new ArrayList(); - for (Objective objective : Bukkit.getScoreboardManager().getMainScoreboard().getObjectives()) { - list.add(objective.getName()); - } - Collections.sort(list, String.CASE_INSENSITIVE_ORDER); - return list; - } - - private List getCurrentEntries() { - List list = new ArrayList(); - for (String entry : Bukkit.getScoreboardManager().getMainScoreboard().getEntries()) { - list.add(entry); - } - Collections.sort(list, String.CASE_INSENSITIVE_ORDER); - return list; - } - - private List getCurrentTeams() { - List list = new ArrayList(); - for (Team team : Bukkit.getScoreboardManager().getMainScoreboard().getTeams()) { - list.add(team.getName()); - } - Collections.sort(list, String.CASE_INSENSITIVE_ORDER); - return list; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SeedCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SeedCommand.java deleted file mode 100755 index b64fd40..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SeedCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class SeedCommand extends VanillaCommand { - public SeedCommand() { - super("seed"); - this.description = "Shows the world seed"; - this.usageMessage = "/seed"; - this.setPermission("bukkit.command.seed"); - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - if (!testPermission(sender)) return true; - long seed; - if (sender instanceof Player) { - seed = ((Player) sender).getWorld().getSeed(); - } else { - seed = Bukkit.getWorlds().get(0).getSeed(); - } - sender.sendMessage("Seed: " + seed); - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SetIdleTimeoutCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SetIdleTimeoutCommand.java deleted file mode 100755 index 6b8bb2d..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SetIdleTimeoutCommand.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import java.util.List; - -public class SetIdleTimeoutCommand extends VanillaCommand { - - public SetIdleTimeoutCommand() { - super("setidletimeout"); - this.description = "Sets the server's idle timeout"; - this.usageMessage = "/setidletimeout "; - this.setPermission("bukkit.command.setidletimeout"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length == 1) { - int minutes; - - try { - minutes = getInteger(sender, args[0], 0, Integer.MAX_VALUE, true); - } catch (NumberFormatException ex) { - sender.sendMessage(ex.getMessage()); - return true; - } - - Bukkit.getServer().setIdleTimeout(minutes); - - Command.broadcastCommandMessage(sender, "Successfully set the idle timeout to " + minutes + " minutes."); - return true; - } - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SetWorldSpawnCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SetWorldSpawnCommand.java deleted file mode 100755 index 59c5059..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SetWorldSpawnCommand.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.List; - -public class SetWorldSpawnCommand extends VanillaCommand { - - public SetWorldSpawnCommand() { - super("setworldspawn"); - this.description = "Sets a worlds's spawn point. If no coordinates are specified, the player's coordinates will be used."; - this.usageMessage = "/setworldspawn OR /setworldspawn "; - this.setPermission("bukkit.command.setworldspawn"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Player player = null; - World world; - if (sender instanceof Player) { - player = (Player) sender; - world = player.getWorld(); - } else { - world = Bukkit.getWorlds().get(0); - } - - final int x, y, z; - - if (args.length == 0) { - if (player == null) { - sender.sendMessage("You can only perform this command as a player"); - return true; - } - - Location location = player.getLocation(); - - x = location.getBlockX(); - y = location.getBlockY(); - z = location.getBlockZ(); - } else if (args.length == 3) { - try { - x = getInteger(sender, args[0], MIN_COORD, MAX_COORD, true); - y = getInteger(sender, args[1], 0, world.getMaxHeight(), true); - z = getInteger(sender, args[2], MIN_COORD, MAX_COORD, true); - } catch (NumberFormatException ex) { - sender.sendMessage(ex.getMessage()); - return true; - } - } else { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - world.setSpawnLocation(x, y, z); - - Command.broadcastCommandMessage(sender, "Set world " + world.getName() + "'s spawnpoint to (" + x + ", " + y + ", " + z + ")"); - return true; - - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SpawnpointCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SpawnpointCommand.java deleted file mode 100755 index 4214bee..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SpawnpointCommand.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.List; - -public class SpawnpointCommand extends VanillaCommand { - - public SpawnpointCommand() { - super("spawnpoint"); - this.description = "Sets a player's spawn point"; - this.usageMessage = "/spawnpoint OR /spawnpoint OR /spawnpoint "; - this.setPermission("bukkit.command.spawnpoint"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Player player; - - if (args.length == 0) { - if (sender instanceof Player) { - player = (Player) sender; - } else { - sender.sendMessage("Please provide a player!"); - return true; - } - } else { - player = Bukkit.getPlayerExact(args[0]); - if (player == null) { - sender.sendMessage("Can't find player " + args[0]); - return true; - } - } - - World world = player.getWorld(); - - if (args.length == 4) { - if (world != null) { - int pos = 1; - final int x, y, z; - try { - x = getInteger(sender, args[pos++], MIN_COORD, MAX_COORD, true); - y = getInteger(sender, args[pos++], 0, world.getMaxHeight()); - z = getInteger(sender, args[pos], MIN_COORD, MAX_COORD, true); - } catch(NumberFormatException ex) { - sender.sendMessage(ex.getMessage()); - return true; - } - - player.setBedSpawnLocation(new Location(world, x, y, z), true); - Command.broadcastCommandMessage(sender, "Set " + player.getDisplayName() + "'s spawnpoint to " + x + ", " + y + ", " + z); - } - } else if (args.length <= 1) { - Location location = player.getLocation(); - player.setBedSpawnLocation(location, true); - Command.broadcastCommandMessage(sender, "Set " + player.getDisplayName() + "'s spawnpoint to " + location.getX() + ", " + location.getY() + ", " + location.getZ()); - } else { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return super.tabComplete(sender, alias, args); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/SpreadPlayersCommand.java b/LiveWeather/src/org/bukkit/command/defaults/SpreadPlayersCommand.java deleted file mode 100755 index 5297cf7..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/SpreadPlayersCommand.java +++ /dev/null @@ -1,265 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Team; - -public class SpreadPlayersCommand extends VanillaCommand { - private static final Random random = new Random(); - - public SpreadPlayersCommand() { - super("spreadplayers"); - this.description = "Spreads players around a point"; - this.usageMessage = "/spreadplayers "; - this.setPermission("bukkit.command.spreadplayers"); - } - - @Override - public boolean execute(CommandSender sender, String commandLabel, String[] args) { - if (!testPermission(sender)) { - return true; - } - - if (args.length < 6) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - final double x = getDouble(sender, args[0], -30000000, 30000000); - final double z = getDouble(sender, args[1], -30000000, 30000000); - final double distance = getDouble(sender, args[2]); - final double range = getDouble(sender, args[3]); - - if (distance < 0.0D) { - sender.sendMessage(ChatColor.RED + "Distance is too small."); - return false; - } - - if (range < distance + 1.0D) { - sender.sendMessage(ChatColor.RED + "Max range is too small."); - return false; - } - - final String respectTeams = args[4]; - boolean teams = false; - - if (respectTeams.equalsIgnoreCase("true")) { - teams = true; - } else if (!respectTeams.equalsIgnoreCase("false")) { - sender.sendMessage(String.format(ChatColor.RED + "'%s' is not true or false", args[4])); - return false; - } - - List players = Lists.newArrayList(); - World world = null; - - for (int i = 5; i < args.length; i++) { - Player player = Bukkit.getPlayerExact(args[i]); - if (player == null) { - continue; - } - - if (world == null) { - world = player.getWorld(); - } - players.add(player); - } - - if (world == null) { - return true; - } - - final double xRangeMin = x - range; - final double zRangeMin = z - range; - final double xRangeMax = x + range; - final double zRangeMax = z + range; - - final int spreadSize = teams ? getTeams(players) : players.size(); - - final Location[] locations = getSpreadLocations(world, spreadSize, xRangeMin, zRangeMin, xRangeMax, zRangeMax); - final int rangeSpread = range(world, distance, xRangeMin, zRangeMin, xRangeMax, zRangeMax, locations); - - if (rangeSpread == -1) { - sender.sendMessage(String.format("Could not spread %d %s around %s,%s (too many players for space - try using spread of at most %s)", spreadSize, teams ? "teams" : "players", x, z)); - return false; - } - - final double distanceSpread = spread(world, players, locations, teams); - - sender.sendMessage(String.format("Succesfully spread %d %s around %s,%s", locations.length, teams ? "teams" : "players", x, z)); - if (locations.length > 1) { - sender.sendMessage(String.format("(Average distance between %s is %s blocks apart after %s iterations)", teams ? "teams" : "players", String.format("%.2f", distanceSpread), rangeSpread)); - } - return true; - } - - private int range(World world, double distance, double xRangeMin, double zRangeMin, double xRangeMax, double zRangeMax, Location[] locations) { - boolean flag = true; - double max; - - int i; - - for (i = 0; i < 10000 && flag; ++i) { - flag = false; - max = Float.MAX_VALUE; - - Location loc1; - int j; - - for (int k = 0; k < locations.length; ++k) { - Location loc2 = locations[k]; - - j = 0; - loc1 = new Location(world, 0, 0, 0); - - for (int l = 0; l < locations.length; ++l) { - if (k != l) { - Location loc3 = locations[l]; - double dis = loc2.distanceSquared(loc3); - - max = Math.min(dis, max); - if (dis < distance) { - ++j; - loc1.add(loc3.getX() - loc2.getX(), 0, 0); - loc1.add(loc3.getZ() - loc2.getZ(), 0, 0); - } - } - } - - if (j > 0) { - loc2.setX(loc2.getX() / j); - loc2.setZ(loc2.getZ() / j); - double d7 = Math.sqrt(loc1.getX() * loc1.getX() + loc1.getZ() * loc1.getZ()); - - if (d7 > 0.0D) { - loc1.setX(loc1.getX() / d7); - loc2.add(-loc1.getX(), 0, -loc1.getZ()); - } else { - double x = xRangeMin >= xRangeMax ? xRangeMin : random.nextDouble() * (xRangeMax - xRangeMin) + xRangeMin; - double z = zRangeMin >= zRangeMax ? zRangeMin : random.nextDouble() * (zRangeMax - zRangeMin) + zRangeMin; - loc2.setX(x); - loc2.setZ(z); - } - - flag = true; - } - - boolean swap = false; - - if (loc2.getX() < xRangeMin) { - loc2.setX(xRangeMin); - swap = true; - } else if (loc2.getX() > xRangeMax) { - loc2.setX(xRangeMax); - swap = true; - } - - if (loc2.getZ() < zRangeMin) { - loc2.setZ(zRangeMin); - swap = true; - } else if (loc2.getZ() > zRangeMax) { - loc2.setZ(zRangeMax); - swap = true; - } - if (swap) { - flag = true; - } - } - - if (!flag) { - Location[] locs = locations; - int i1 = locations.length; - - for (j = 0; j < i1; ++j) { - loc1 = locs[j]; - if (world.getHighestBlockYAt(loc1) == 0) { - double x = xRangeMin >= xRangeMax ? xRangeMin : random.nextDouble() * (xRangeMax - xRangeMin) + xRangeMin; - double z = zRangeMin >= zRangeMax ? zRangeMin : random.nextDouble() * (zRangeMax - zRangeMin) + zRangeMin; - locations[i] = (new Location(world, x, 0, z)); - loc1.setX(x); - loc1.setZ(z); - flag = true; - } - } - } - } - - if (i >= 10000) { - return -1; - } else { - return i; - } - } - - private double spread(World world, List list, Location[] locations, boolean teams) { - double distance = 0.0D; - int i = 0; - Map hashmap = Maps.newHashMap(); - - for (int j = 0; j < list.size(); ++j) { - Player player = list.get(j); - Location location; - - if (teams) { - Team team = player.getScoreboard().getPlayerTeam(player); - - if (!hashmap.containsKey(team)) { - hashmap.put(team, locations[i++]); - } - - location = hashmap.get(team); - } else { - location = locations[i++]; - } - - player.teleport(new Location(world, Math.floor(location.getX()) + 0.5D, world.getHighestBlockYAt((int) location.getX(), (int) location.getZ()), Math.floor(location.getZ()) + 0.5D)); - double value = Double.MAX_VALUE; - - for (int k = 0; k < locations.length; ++k) { - if (location != locations[k]) { - double d = location.distanceSquared(locations[k]); - value = Math.min(d, value); - } - } - - distance += value; - } - - distance /= list.size(); - return distance; - } - - private int getTeams(List players) { - Set teams = Sets.newHashSet(); - - for (Player player : players) { - teams.add(player.getScoreboard().getPlayerTeam(player)); - } - - return teams.size(); - } - - private Location[] getSpreadLocations(World world, int size, double xRangeMin, double zRangeMin, double xRangeMax, double zRangeMax) { - Location[] locations = new Location[size]; - - for (int i = 0; i < size; ++i) { - double x = xRangeMin >= xRangeMax ? xRangeMin : random.nextDouble() * (xRangeMax - xRangeMin) + xRangeMin; - double z = zRangeMin >= zRangeMax ? zRangeMin : random.nextDouble() * (zRangeMax - zRangeMin) + zRangeMin; - locations[i] = (new Location(world, x, 0, z)); - } - - return locations; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/StopCommand.java b/LiveWeather/src/org/bukkit/command/defaults/StopCommand.java deleted file mode 100755 index be70e63..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/StopCommand.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class StopCommand extends VanillaCommand { - public StopCommand() { - super("stop"); - this.description = "Stops the server with optional reason"; - this.usageMessage = "/stop [reason]"; - this.setPermission("bukkit.command.stop"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - Command.broadcastCommandMessage(sender, "Stopping the server.."); - Bukkit.shutdown(); - - String reason = this.createString(args, 0); - if (StringUtils.isNotEmpty(reason)) { - for (Player player : Bukkit.getOnlinePlayers()) { - player.kickPlayer(reason); - } - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/TeleportCommand.java b/LiveWeather/src/org/bukkit/command/defaults/TeleportCommand.java deleted file mode 100755 index fd1b9bd..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/TeleportCommand.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; - -import com.google.common.collect.ImmutableList; - -public class TeleportCommand extends VanillaCommand { - - public TeleportCommand() { - super("tp"); - this.description = "Teleports the given player (or yourself) to another player or coordinates"; - this.usageMessage = "/tp [player] and/or "; - this.setPermission("bukkit.command.teleport"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 1 || args.length > 4) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Player player; - - if (args.length == 1 || args.length == 3) { - if (sender instanceof Player) { - player = (Player) sender; - } else { - sender.sendMessage("Please provide a player!"); - return true; - } - } else { - player = Bukkit.getPlayerExact(args[0]); - } - - if (player == null) { - sender.sendMessage("Player not found: " + args[0]); - return true; - } - - if (args.length < 3) { - Player target = Bukkit.getPlayerExact(args[args.length - 1]); - if (target == null) { - sender.sendMessage("Can't find player " + args[args.length - 1] + ". No tp."); - return true; - } - player.teleport(target, TeleportCause.COMMAND); - Command.broadcastCommandMessage(sender, "Teleported " + player.getDisplayName() + " to " + target.getDisplayName()); - } else if (player.getWorld() != null) { - Location playerLocation = player.getLocation(); - double x = getCoordinate(sender, playerLocation.getX(), args[args.length - 3]); - double y = getCoordinate(sender, playerLocation.getY(), args[args.length - 2], 0, 0); - double z = getCoordinate(sender, playerLocation.getZ(), args[args.length - 1]); - - if (x == MIN_COORD_MINUS_ONE || y == MIN_COORD_MINUS_ONE || z == MIN_COORD_MINUS_ONE) { - sender.sendMessage("Please provide a valid location!"); - return true; - } - - playerLocation.setX(x); - playerLocation.setY(y); - playerLocation.setZ(z); - - player.teleport(playerLocation, TeleportCause.COMMAND); - Command.broadcastCommandMessage(sender, String.format("Teleported %s to %.2f, %.2f, %.2f", player.getDisplayName(), x, y, z)); - } - return true; - } - - private double getCoordinate(CommandSender sender, double current, String input) { - return getCoordinate(sender, current, input, MIN_COORD, MAX_COORD); - } - - private double getCoordinate(CommandSender sender, double current, String input, int min, int max) { - boolean relative = input.startsWith("~"); - double result = relative ? current : 0; - - if (!relative || input.length() > 1) { - boolean exact = input.contains("."); - if (relative) input = input.substring(1); - - double testResult = getDouble(sender, input); - if (testResult == MIN_COORD_MINUS_ONE) { - return MIN_COORD_MINUS_ONE; - } - result += testResult; - - if (!exact && !relative) result += 0.5f; - } - if (min != 0 || max != 0) { - if (result < min) { - result = MIN_COORD_MINUS_ONE; - } - - if (result > max) { - result = MIN_COORD_MINUS_ONE; - } - } - - return result; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1 || args.length == 2) { - return super.tabComplete(sender, alias, args); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/TellCommand.java b/LiveWeather/src/org/bukkit/command/defaults/TellCommand.java deleted file mode 100755 index 287f49f..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/TellCommand.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.Arrays; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class TellCommand extends VanillaCommand { - public TellCommand() { - super("tell"); - this.description = "Sends a private message to the given player"; - this.usageMessage = "/tell "; - this.setAliases(Arrays.asList(new String[] { "w", "msg" })); - this.setPermission("bukkit.command.tell"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 2) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - Player player = Bukkit.getPlayerExact(args[0]); - - // If a player is hidden from the sender pretend they are offline - if (player == null || (sender instanceof Player && !((Player) sender).canSee(player))) { - sender.sendMessage("There's no player by that name online."); - } else { - StringBuilder message = new StringBuilder(); - - for (int i = 1; i < args.length; i++) { - if (i > 1) message.append(" "); - message.append(args[i]); - } - - String result = ChatColor.GRAY + sender.getName() + " whispers " + message; - - sender.sendMessage("[" + sender.getName() + "->" + player.getName() + "] " + message); - player.sendMessage(result); - } - - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/TestForCommand.java b/LiveWeather/src/org/bukkit/command/defaults/TestForCommand.java deleted file mode 100755 index c9ac1ce..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/TestForCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.bukkit.command.defaults; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; - -public class TestForCommand extends VanillaCommand { - public TestForCommand() { - super("testfor"); - this.description = "Tests whether a specifed player is online"; - this.usageMessage = "/testfor "; - this.setPermission("bukkit.command.testfor"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length < 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - sender.sendMessage(ChatColor.RED + "/testfor is only usable by commandblocks with analog output."); - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/TimeCommand.java b/LiveWeather/src/org/bukkit/command/defaults/TimeCommand.java deleted file mode 100755 index 86083b4..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/TimeCommand.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class TimeCommand extends VanillaCommand { - private static final List TABCOMPLETE_ADD_SET = ImmutableList.of("add", "set"); - private static final List TABCOMPLETE_DAY_NIGHT = ImmutableList.of("day", "night"); - - public TimeCommand() { - super("time"); - this.description = "Changes the time on each world"; - this.usageMessage = "/time set \n/time add "; - this.setPermission("bukkit.command.time.add;bukkit.command.time.set"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (args.length < 2) { - sender.sendMessage(ChatColor.RED + "Incorrect usage. Correct usage:\n" + usageMessage); - return false; - } - - int value; - - if (args[0].equals("set")) { - if (!sender.hasPermission("bukkit.command.time.set")) { - sender.sendMessage(ChatColor.RED + "You don't have permission to set the time"); - return true; - } - - if (args[1].equals("day")) { - value = 0; - } else if (args[1].equals("night")) { - value = 12500; - } else { - value = getInteger(sender, args[1], 0); - } - - for (World world : Bukkit.getWorlds()) { - world.setTime(value); - } - - Command.broadcastCommandMessage(sender, "Set time to " + value); - } else if (args[0].equals("add")) { - if (!sender.hasPermission("bukkit.command.time.add")) { - sender.sendMessage(ChatColor.RED + "You don't have permission to set the time"); - return true; - } - - value = getInteger(sender, args[1], 0); - - for (World world : Bukkit.getWorlds()) { - world.setFullTime(world.getFullTime() + value); - } - - Command.broadcastCommandMessage(sender, "Added " + value + " to time"); - } else { - sender.sendMessage("Unknown method. Usage: " + usageMessage); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], TABCOMPLETE_ADD_SET, new ArrayList(TABCOMPLETE_ADD_SET.size())); - } else if (args.length == 2 && args[0].equalsIgnoreCase("set")) { - return StringUtil.copyPartialMatches(args[1], TABCOMPLETE_DAY_NIGHT, new ArrayList(TABCOMPLETE_DAY_NIGHT.size())); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/TimingsCommand.java b/LiveWeather/src/org/bukkit/command/defaults/TimingsCommand.java deleted file mode 100755 index 05cfcb0..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/TimingsCommand.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bukkit.command.defaults; - -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.RegisteredListener; -import org.bukkit.plugin.TimedRegisteredListener; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class TimingsCommand extends BukkitCommand { - private static final List TIMINGS_SUBCOMMANDS = ImmutableList.of("merged", "reset", "separate"); - - public TimingsCommand(String name) { - super(name); - this.description = "Records timings for all plugin events"; - this.usageMessage = "/timings "; - this.setPermission("bukkit.command.timings"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - if (!sender.getServer().getPluginManager().useTimings()) { - sender.sendMessage("Please enable timings by setting \"settings.plugin-profiling\" to true in bukkit.yml"); - return true; - } - - boolean separate = "separate".equals(args[0]); - if ("reset".equals(args[0])) { - for (HandlerList handlerList : HandlerList.getHandlerLists()) { - for (RegisteredListener listener : handlerList.getRegisteredListeners()) { - if (listener instanceof TimedRegisteredListener) { - ((TimedRegisteredListener)listener).reset(); - } - } - } - sender.sendMessage("Timings reset"); - } else if ("merged".equals(args[0]) || separate) { - - int index = 0; - int pluginIdx = 0; - File timingFolder = new File("timings"); - timingFolder.mkdirs(); - File timings = new File(timingFolder, "timings.txt"); - File names = null; - while (timings.exists()) timings = new File(timingFolder, "timings" + (++index) + ".txt"); - PrintStream fileTimings = null; - PrintStream fileNames = null; - try { - fileTimings = new PrintStream(timings); - if (separate) { - names = new File(timingFolder, "names" + index + ".txt"); - fileNames = new PrintStream(names); - } - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { - pluginIdx++; - long totalTime = 0; - if (separate) { - fileNames.println(pluginIdx + " " + plugin.getDescription().getFullName()); - fileTimings.println("Plugin " + pluginIdx); - } - else fileTimings.println(plugin.getDescription().getFullName()); - for (RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) { - if (listener instanceof TimedRegisteredListener) { - TimedRegisteredListener trl = (TimedRegisteredListener) listener; - long time = trl.getTotalTime(); - int count = trl.getCount(); - if (count == 0) continue; - long avg = time / count; - totalTime += time; - Class eventClass = trl.getEventClass(); - if (count > 0 && eventClass != null) { - fileTimings.println(" " + eventClass.getSimpleName() + (trl.hasMultiple() ? " (and sub-classes)" : "") + " Time: " + time + " Count: " + count + " Avg: " + avg); - } - } - } - fileTimings.println(" Total time " + totalTime + " (" + totalTime / 1000000000 + "s)"); - } - sender.sendMessage("Timings written to " + timings.getPath()); - if (separate) sender.sendMessage("Names written to " + names.getPath()); - } catch (IOException e) { - } finally { - if (fileTimings != null) { - fileTimings.close(); - } - if (fileNames != null) { - fileNames.close(); - } - } - } - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], TIMINGS_SUBCOMMANDS, new ArrayList(TIMINGS_SUBCOMMANDS.size())); - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/ToggleDownfallCommand.java b/LiveWeather/src/org/bukkit/command/defaults/ToggleDownfallCommand.java deleted file mode 100755 index ac78bfb..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/ToggleDownfallCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import com.google.common.collect.ImmutableList; - -public class ToggleDownfallCommand extends VanillaCommand { - public ToggleDownfallCommand() { - super("toggledownfall"); - this.description = "Toggles rain on/off on a given world"; - this.usageMessage = "/toggledownfall"; - this.setPermission("bukkit.command.toggledownfall"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - World world = null; - - if (args.length == 1) { - world = Bukkit.getWorld(args[0]); - - if (world == null) { - sender.sendMessage(ChatColor.RED + "No world exists with the name '" + args[0] + "'"); - return true; - } - } else if (sender instanceof Player) { - world = ((Player) sender).getWorld(); - } else { - world = Bukkit.getWorlds().get(0); - } - - Command.broadcastCommandMessage(sender, "Toggling downfall " + (world.hasStorm() ? "off" : "on") + " for world '" + world.getName() + "'"); - world.setStorm(!world.hasStorm()); - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/VanillaCommand.java b/LiveWeather/src/org/bukkit/command/defaults/VanillaCommand.java deleted file mode 100755 index 9b13ac6..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/VanillaCommand.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.List; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -public abstract class VanillaCommand extends Command { - static final int MAX_COORD = 30000000; - static final int MIN_COORD_MINUS_ONE = -30000001; - static final int MIN_COORD = -30000000; - - protected VanillaCommand(String name) { - super(name); - } - - protected VanillaCommand(String name, String description, String usageMessage, List aliases) { - super(name, description, usageMessage, aliases); - } - - public boolean matches(String input) { - return input.equalsIgnoreCase(this.getName()); - } - - protected int getInteger(CommandSender sender, String value, int min) { - return getInteger(sender, value, min, Integer.MAX_VALUE); - } - - int getInteger(CommandSender sender, String value, int min, int max) { - return getInteger(sender, value, min, max, false); - } - - int getInteger(CommandSender sender, String value, int min, int max, boolean Throws) { - int i = min; - - try { - i = Integer.valueOf(value); - } catch (NumberFormatException ex) { - if (Throws) { - throw new NumberFormatException(String.format("%s is not a valid number", value)); - } - } - - if (i < min) { - i = min; - } else if (i > max) { - i = max; - } - - return i; - } - - Integer getInteger(String value) { - try { - return Integer.valueOf(value); - } catch (NumberFormatException ex) { - return null; - } - } - - public static double getRelativeDouble(double original, CommandSender sender, String input) { - if (input.startsWith("~")) { - double value = getDouble(sender, input.substring(1)); - if (value == MIN_COORD_MINUS_ONE) { - return MIN_COORD_MINUS_ONE; - } - return original + value; - } else { - return getDouble(sender, input); - } - } - - public static double getDouble(CommandSender sender, String input) { - try { - return Double.parseDouble(input); - } catch (NumberFormatException ex) { - return MIN_COORD_MINUS_ONE; - } - } - - public static double getDouble(CommandSender sender, String input, double min, double max) { - double result = getDouble(sender, input); - - // TODO: This should throw an exception instead. - if (result < min) { - result = min; - } else if (result > max) { - result = max; - } - - return result; - } - - String createString(String[] args, int start) { - return createString(args, start, " "); - } - - String createString(String[] args, int start, String glue) { - StringBuilder string = new StringBuilder(); - - for (int x = start; x < args.length; x++) { - string.append(args[x]); - if (x != args.length - 1) { - string.append(glue); - } - } - - return string.toString(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/VersionCommand.java b/LiveWeather/src/org/bukkit/command/defaults/VersionCommand.java deleted file mode 100755 index 902f9d1..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/VersionCommand.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class VersionCommand extends BukkitCommand { - public VersionCommand(String name) { - super(name); - - this.description = "Gets the version of this server including any plugins in use"; - this.usageMessage = "/version [plugin name]"; - this.setPermission("bukkit.command.version"); - this.setAliases(Arrays.asList("ver", "about")); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length == 0) { - sender.sendMessage("This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); - } else { - StringBuilder name = new StringBuilder(); - - for (String arg : args) { - if (name.length() > 0) { - name.append(' '); - } - - name.append(arg); - } - - String pluginName = name.toString(); - Plugin exactPlugin = Bukkit.getPluginManager().getPlugin(pluginName); - if (exactPlugin != null) { - describeToSender(exactPlugin, sender); - return true; - } - - boolean found = false; - pluginName = pluginName.toLowerCase(); - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { - if (plugin.getName().toLowerCase().contains(pluginName)) { - describeToSender(plugin, sender); - found = true; - } - } - - if (!found) { - sender.sendMessage("This server is not running any plugin by that name."); - sender.sendMessage("Use /plugins to get a list of plugins."); - } - } - return true; - } - - private void describeToSender(Plugin plugin, CommandSender sender) { - PluginDescriptionFile desc = plugin.getDescription(); - sender.sendMessage(ChatColor.GREEN + desc.getName() + ChatColor.WHITE + " version " + ChatColor.GREEN + desc.getVersion()); - - if (desc.getDescription() != null) { - sender.sendMessage(desc.getDescription()); - } - - if (desc.getWebsite() != null) { - sender.sendMessage("Website: " + ChatColor.GREEN + desc.getWebsite()); - } - - if (!desc.getAuthors().isEmpty()) { - if (desc.getAuthors().size() == 1) { - sender.sendMessage("Author: " + getAuthors(desc)); - } else { - sender.sendMessage("Authors: " + getAuthors(desc)); - } - } - } - - private String getAuthors(final PluginDescriptionFile desc) { - StringBuilder result = new StringBuilder(); - List authors = desc.getAuthors(); - - for (int i = 0; i < authors.size(); i++) { - if (result.length() > 0) { - result.append(ChatColor.WHITE); - - if (i < authors.size() - 1) { - result.append(", "); - } else { - result.append(" and "); - } - } - - result.append(ChatColor.GREEN); - result.append(authors.get(i)); - } - - return result.toString(); - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - List completions = new ArrayList(); - String toComplete = args[0].toLowerCase(); - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { - if (StringUtil.startsWithIgnoreCase(plugin.getName(), toComplete)) { - completions.add(plugin.getName()); - } - } - return completions; - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/WeatherCommand.java b/LiveWeather/src/org/bukkit/command/defaults/WeatherCommand.java deleted file mode 100755 index a39c1b0..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/WeatherCommand.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.command.defaults; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class WeatherCommand extends VanillaCommand { - private static final List WEATHER_TYPES = ImmutableList.of("clear", "rain", "thunder"); - - public WeatherCommand() { - super("weather"); - this.description = "Changes the weather"; - this.usageMessage = "/weather [duration in seconds]"; - this.setPermission("bukkit.command.weather"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); - return false; - } - - int duration = (300 + new Random().nextInt(600)) * 20; - if (args.length >= 2) { - duration = getInteger(sender, args[1], 1, 1000000) * 20; - } - - World world = Bukkit.getWorlds().get(0); - - world.setWeatherDuration(duration); - world.setThunderDuration(duration); - - if ("clear".equalsIgnoreCase(args[0])) { - world.setStorm(false); - world.setThundering(false); - Command.broadcastCommandMessage(sender, "Changed weather to clear for " + (duration / 20) + " seconds."); - } else if ("rain".equalsIgnoreCase(args[0])) { - world.setStorm(true); - world.setThundering(false); - Command.broadcastCommandMessage(sender, "Changed weather to rainy for " + (duration / 20) + " seconds."); - } else if ("thunder".equalsIgnoreCase(args[0])) { - world.setStorm(true); - world.setThundering(true); - Command.broadcastCommandMessage(sender, "Changed weather to thundering " + (duration / 20) + " seconds."); - } - - return true; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], WEATHER_TYPES, new ArrayList(WEATHER_TYPES.size())); - } - - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/command/defaults/WhitelistCommand.java b/LiveWeather/src/org/bukkit/command/defaults/WhitelistCommand.java deleted file mode 100755 index b3fa4f8..0000000 --- a/LiveWeather/src/org/bukkit/command/defaults/WhitelistCommand.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.bukkit.command.defaults; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.util.StringUtil; - -import com.google.common.collect.ImmutableList; - -public class WhitelistCommand extends VanillaCommand { - private static final List WHITELIST_SUBCOMMANDS = ImmutableList.of("add", "remove", "on", "off", "list", "reload"); - - public WhitelistCommand() { - super("whitelist"); - this.description = "Manages the list of players allowed to use this server"; - this.usageMessage = "/whitelist (add|remove) \n/whitelist (on|off|list|reload)"; - this.setPermission("bukkit.command.whitelist.reload;bukkit.command.whitelist.enable;bukkit.command.whitelist.disable;bukkit.command.whitelist.list;bukkit.command.whitelist.add;bukkit.command.whitelist.remove"); - } - - @Override - public boolean execute(CommandSender sender, String currentAlias, String[] args) { - if (!testPermission(sender)) return true; - - if (args.length == 1) { - if (args[0].equalsIgnoreCase("reload")) { - if (badPerm(sender, "reload")) return true; - - Bukkit.reloadWhitelist(); - Command.broadcastCommandMessage(sender, "Reloaded white-list from file"); - return true; - } else if (args[0].equalsIgnoreCase("on")) { - if (badPerm(sender, "enable")) return true; - - Bukkit.setWhitelist(true); - Command.broadcastCommandMessage(sender, "Turned on white-listing"); - return true; - } else if (args[0].equalsIgnoreCase("off")) { - if (badPerm(sender, "disable")) return true; - - Bukkit.setWhitelist(false); - Command.broadcastCommandMessage(sender, "Turned off white-listing"); - return true; - } else if (args[0].equalsIgnoreCase("list")) { - if (badPerm(sender, "list")) return true; - - StringBuilder result = new StringBuilder(); - - for (OfflinePlayer player : Bukkit.getWhitelistedPlayers()) { - if (result.length() > 0) { - result.append(", "); - } - - result.append(player.getName()); - } - - sender.sendMessage("White-listed players: " + result.toString()); - return true; - } - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("add")) { - if (badPerm(sender, "add")) return true; - - Bukkit.getOfflinePlayer(args[1]).setWhitelisted(true); - - Command.broadcastCommandMessage(sender, "Added " + args[1] + " to white-list"); - return true; - } else if (args[0].equalsIgnoreCase("remove")) { - if (badPerm(sender, "remove")) return true; - - Bukkit.getOfflinePlayer(args[1]).setWhitelisted(false); - - Command.broadcastCommandMessage(sender, "Removed " + args[1] + " from white-list"); - return true; - } - } - - sender.sendMessage(ChatColor.RED + "Correct command usage:\n" + usageMessage); - return false; - } - - private boolean badPerm(CommandSender sender, String perm) { - if (!sender.hasPermission("bukkit.command.whitelist." + perm)) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this action."); - return true; - } - - return false; - } - - @Override - public List tabComplete(CommandSender sender, String alias, String[] args) { - Validate.notNull(sender, "Sender cannot be null"); - Validate.notNull(args, "Arguments cannot be null"); - Validate.notNull(alias, "Alias cannot be null"); - - if (args.length == 1) { - return StringUtil.copyPartialMatches(args[0], WHITELIST_SUBCOMMANDS, new ArrayList(WHITELIST_SUBCOMMANDS.size())); - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("add")) { - List completions = new ArrayList(); - for (OfflinePlayer player : Bukkit.getOfflinePlayers()) { - String name = player.getName(); - if (StringUtil.startsWithIgnoreCase(name, args[1]) && !player.isWhitelisted()) { - completions.add(name); - } - } - return completions; - } else if (args[0].equalsIgnoreCase("remove")) { - List completions = new ArrayList(); - for (OfflinePlayer player : Bukkit.getWhitelistedPlayers()) { - String name = player.getName(); - if (StringUtil.startsWithIgnoreCase(name, args[1])) { - completions.add(name); - } - } - return completions; - } - } - return ImmutableList.of(); - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/Configuration.java b/LiveWeather/src/org/bukkit/configuration/Configuration.java deleted file mode 100755 index 9289c21..0000000 --- a/LiveWeather/src/org/bukkit/configuration/Configuration.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bukkit.configuration; - -import java.util.Map; - -/** - * Represents a source of configurable options and settings - */ -public interface Configuration extends ConfigurationSection { - /** - * Sets the default value of the given path as provided. - *

          - * If no source {@link Configuration} was provided as a default - * collection, then a new {@link MemoryConfiguration} will be created to - * hold the new default value. - *

          - * If value is null, the value will be removed from the default - * Configuration source. - * - * @param path Path of the value to set. - * @param value Value to set the default to. - * @throws IllegalArgumentException Thrown if path is null. - */ - public void addDefault(String path, Object value); - - /** - * Sets the default values of the given paths as provided. - *

          - * If no source {@link Configuration} was provided as a default - * collection, then a new {@link MemoryConfiguration} will be created to - * hold the new default values. - * - * @param defaults A map of Path->Values to add to defaults. - * @throws IllegalArgumentException Thrown if defaults is null. - */ - public void addDefaults(Map defaults); - - /** - * Sets the default values of the given paths as provided. - *

          - * If no source {@link Configuration} was provided as a default - * collection, then a new {@link MemoryConfiguration} will be created to - * hold the new default value. - *

          - * This method will not hold a reference to the specified Configuration, - * nor will it automatically update if that Configuration ever changes. If - * you require this, you should set the default source with {@link - * #setDefaults(org.bukkit.configuration.Configuration)}. - * - * @param defaults A configuration holding a list of defaults to copy. - * @throws IllegalArgumentException Thrown if defaults is null or this. - */ - public void addDefaults(Configuration defaults); - - /** - * Sets the source of all default values for this {@link Configuration}. - *

          - * If a previous source was set, or previous default values were defined, - * then they will not be copied to the new source. - * - * @param defaults New source of default values for this configuration. - * @throws IllegalArgumentException Thrown if defaults is null or this. - */ - public void setDefaults(Configuration defaults); - - /** - * Gets the source {@link Configuration} for this configuration. - *

          - * If no configuration source was set, but default values were added, then - * a {@link MemoryConfiguration} will be returned. If no source was set - * and no defaults were set, then this method will return null. - * - * @return Configuration source for default values, or null if none exist. - */ - public Configuration getDefaults(); - - /** - * Gets the {@link ConfigurationOptions} for this {@link Configuration}. - *

          - * All setters through this method are chainable. - * - * @return Options for this configuration - */ - public ConfigurationOptions options(); -} diff --git a/LiveWeather/src/org/bukkit/configuration/ConfigurationOptions.java b/LiveWeather/src/org/bukkit/configuration/ConfigurationOptions.java deleted file mode 100755 index 2f59382..0000000 --- a/LiveWeather/src/org/bukkit/configuration/ConfigurationOptions.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.bukkit.configuration; - -/** - * Various settings for controlling the input and output of a {@link - * Configuration} - */ -public class ConfigurationOptions { - private char pathSeparator = '.'; - private boolean copyDefaults = false; - private final Configuration configuration; - - protected ConfigurationOptions(Configuration configuration) { - this.configuration = configuration; - } - - /** - * Returns the {@link Configuration} that this object is responsible for. - * - * @return Parent configuration - */ - public Configuration configuration() { - return configuration; - } - - /** - * Gets the char that will be used to separate {@link - * ConfigurationSection}s - *

          - * This value does not affect how the {@link Configuration} is stored, - * only in how you access the data. The default value is '.'. - * - * @return Path separator - */ - public char pathSeparator() { - return pathSeparator; - } - - /** - * Sets the char that will be used to separate {@link - * ConfigurationSection}s - *

          - * This value does not affect how the {@link Configuration} is stored, - * only in how you access the data. The default value is '.'. - * - * @param value Path separator - * @return This object, for chaining - */ - public ConfigurationOptions pathSeparator(char value) { - this.pathSeparator = value; - return this; - } - - /** - * Checks if the {@link Configuration} should copy values from its default - * {@link Configuration} directly. - *

          - * If this is true, all values in the default Configuration will be - * directly copied, making it impossible to distinguish between values - * that were set and values that are provided by default. As a result, - * {@link ConfigurationSection#contains(java.lang.String)} will always - * return the same value as {@link - * ConfigurationSection#isSet(java.lang.String)}. The default value is - * false. - * - * @return Whether or not defaults are directly copied - */ - public boolean copyDefaults() { - return copyDefaults; - } - - /** - * Sets if the {@link Configuration} should copy values from its default - * {@link Configuration} directly. - *

          - * If this is true, all values in the default Configuration will be - * directly copied, making it impossible to distinguish between values - * that were set and values that are provided by default. As a result, - * {@link ConfigurationSection#contains(java.lang.String)} will always - * return the same value as {@link - * ConfigurationSection#isSet(java.lang.String)}. The default value is - * false. - * - * @param value Whether or not defaults are directly copied - * @return This object, for chaining - */ - public ConfigurationOptions copyDefaults(boolean value) { - this.copyDefaults = value; - return this; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/ConfigurationSection.java b/LiveWeather/src/org/bukkit/configuration/ConfigurationSection.java deleted file mode 100755 index 1bd7fb5..0000000 --- a/LiveWeather/src/org/bukkit/configuration/ConfigurationSection.java +++ /dev/null @@ -1,809 +0,0 @@ -package org.bukkit.configuration; - -import java.util.Map; -import java.util.Set; -import java.util.List; - -import org.bukkit.Color; -import org.bukkit.OfflinePlayer; -import org.bukkit.util.Vector; -import org.bukkit.inventory.ItemStack; - -/** - * Represents a section of a {@link Configuration} - */ -public interface ConfigurationSection { - /** - * Gets a set containing all keys in this section. - *

          - * If deep is set to true, then this will contain all the keys within any - * child {@link ConfigurationSection}s (and their children, etc). These - * will be in a valid path notation for you to use. - *

          - * If deep is set to false, then this will contain only the keys of any - * direct children, and not their own children. - * - * @param deep Whether or not to get a deep list, as opposed to a shallow - * list. - * @return Set of keys contained within this ConfigurationSection. - */ - public Set getKeys(boolean deep); - - /** - * Gets a Map containing all keys and their values for this section. - *

          - * If deep is set to true, then this will contain all the keys and values - * within any child {@link ConfigurationSection}s (and their children, - * etc). These keys will be in a valid path notation for you to use. - *

          - * If deep is set to false, then this will contain only the keys and - * values of any direct children, and not their own children. - * - * @param deep Whether or not to get a deep list, as opposed to a shallow - * list. - * @return Map of keys and values of this section. - */ - public Map getValues(boolean deep); - - /** - * Checks if this {@link ConfigurationSection} contains the given path. - *

          - * If the value for the requested path does not exist but a default value - * has been specified, this will return true. - * - * @param path Path to check for existence. - * @return True if this section contains the requested path, either via - * default or being set. - * @throws IllegalArgumentException Thrown when path is null. - */ - public boolean contains(String path); - - /** - * Checks if this {@link ConfigurationSection} has a value set for the - * given path. - *

          - * If the value for the requested path does not exist but a default value - * has been specified, this will still return false. - * - * @param path Path to check for existence. - * @return True if this section contains the requested path, regardless of - * having a default. - * @throws IllegalArgumentException Thrown when path is null. - */ - public boolean isSet(String path); - - /** - * Gets the path of this {@link ConfigurationSection} from its root {@link - * Configuration} - *

          - * For any {@link Configuration} themselves, this will return an empty - * string. - *

          - * If the section is no longer contained within its root for any reason, - * such as being replaced with a different value, this may return null. - *

          - * To retrieve the single name of this section, that is, the final part of - * the path returned by this method, you may use {@link #getName()}. - * - * @return Path of this section relative to its root - */ - public String getCurrentPath(); - - /** - * Gets the name of this individual {@link ConfigurationSection}, in the - * path. - *

          - * This will always be the final part of {@link #getCurrentPath()}, unless - * the section is orphaned. - * - * @return Name of this section - */ - public String getName(); - - /** - * Gets the root {@link Configuration} that contains this {@link - * ConfigurationSection} - *

          - * For any {@link Configuration} themselves, this will return its own - * object. - *

          - * If the section is no longer contained within its root for any reason, - * such as being replaced with a different value, this may return null. - * - * @return Root configuration containing this section. - */ - public Configuration getRoot(); - - /** - * Gets the parent {@link ConfigurationSection} that directly contains - * this {@link ConfigurationSection}. - *

          - * For any {@link Configuration} themselves, this will return null. - *

          - * If the section is no longer contained within its parent for any reason, - * such as being replaced with a different value, this may return null. - * - * @return Parent section containing this section. - */ - public ConfigurationSection getParent(); - - /** - * Gets the requested Object by path. - *

          - * If the Object does not exist but a default value has been specified, - * this will return the default value. If the Object does not exist and no - * default value was specified, this will return null. - * - * @param path Path of the Object to get. - * @return Requested Object. - */ - public Object get(String path); - - /** - * Gets the requested Object by path, returning a default value if not - * found. - *

          - * If the Object does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the Object to get. - * @param def The default value to return if the path is not found. - * @return Requested Object. - */ - public Object get(String path, Object def); - - /** - * Sets the specified path to the given value. - *

          - * If value is null, the entry will be removed. Any existing entry will be - * replaced, regardless of what the new value is. - *

          - * Some implementations may have limitations on what you may store. See - * their individual javadocs for details. No implementations should allow - * you to store {@link Configuration}s or {@link ConfigurationSection}s, - * please use {@link #createSection(java.lang.String)} for that. - * - * @param path Path of the object to set. - * @param value New value to set the path to. - */ - public void set(String path, Object value); - - /** - * Creates an empty {@link ConfigurationSection} at the specified path. - *

          - * Any value that was previously set at this path will be overwritten. If - * the previous value was itself a {@link ConfigurationSection}, it will - * be orphaned. - * - * @param path Path to create the section at. - * @return Newly created section - */ - public ConfigurationSection createSection(String path); - - /** - * Creates a {@link ConfigurationSection} at the specified path, with - * specified values. - *

          - * Any value that was previously set at this path will be overwritten. If - * the previous value was itself a {@link ConfigurationSection}, it will - * be orphaned. - * - * @param path Path to create the section at. - * @param map The values to used. - * @return Newly created section - */ - public ConfigurationSection createSection(String path, Map map); - - // Primitives - /** - * Gets the requested String by path. - *

          - * If the String does not exist but a default value has been specified, - * this will return the default value. If the String does not exist and no - * default value was specified, this will return null. - * - * @param path Path of the String to get. - * @return Requested String. - */ - public String getString(String path); - - /** - * Gets the requested String by path, returning a default value if not - * found. - *

          - * If the String does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the String to get. - * @param def The default value to return if the path is not found or is - * not a String. - * @return Requested String. - */ - public String getString(String path, String def); - - /** - * Checks if the specified path is a String. - *

          - * If the path exists but is not a String, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a String and return appropriately. - * - * @param path Path of the String to check. - * @return Whether or not the specified path is a String. - */ - public boolean isString(String path); - - /** - * Gets the requested int by path. - *

          - * If the int does not exist but a default value has been specified, this - * will return the default value. If the int does not exist and no default - * value was specified, this will return 0. - * - * @param path Path of the int to get. - * @return Requested int. - */ - public int getInt(String path); - - /** - * Gets the requested int by path, returning a default value if not found. - *

          - * If the int does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the int to get. - * @param def The default value to return if the path is not found or is - * not an int. - * @return Requested int. - */ - public int getInt(String path, int def); - - /** - * Checks if the specified path is an int. - *

          - * If the path exists but is not a int, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a int and return appropriately. - * - * @param path Path of the int to check. - * @return Whether or not the specified path is an int. - */ - public boolean isInt(String path); - - /** - * Gets the requested boolean by path. - *

          - * If the boolean does not exist but a default value has been specified, - * this will return the default value. If the boolean does not exist and - * no default value was specified, this will return false. - * - * @param path Path of the boolean to get. - * @return Requested boolean. - */ - public boolean getBoolean(String path); - - /** - * Gets the requested boolean by path, returning a default value if not - * found. - *

          - * If the boolean does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the boolean to get. - * @param def The default value to return if the path is not found or is - * not a boolean. - * @return Requested boolean. - */ - public boolean getBoolean(String path, boolean def); - - /** - * Checks if the specified path is a boolean. - *

          - * If the path exists but is not a boolean, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a boolean and return appropriately. - * - * @param path Path of the boolean to check. - * @return Whether or not the specified path is a boolean. - */ - public boolean isBoolean(String path); - - /** - * Gets the requested double by path. - *

          - * If the double does not exist but a default value has been specified, - * this will return the default value. If the double does not exist and no - * default value was specified, this will return 0. - * - * @param path Path of the double to get. - * @return Requested double. - */ - public double getDouble(String path); - - /** - * Gets the requested double by path, returning a default value if not - * found. - *

          - * If the double does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the double to get. - * @param def The default value to return if the path is not found or is - * not a double. - * @return Requested double. - */ - public double getDouble(String path, double def); - - /** - * Checks if the specified path is a double. - *

          - * If the path exists but is not a double, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a double and return appropriately. - * - * @param path Path of the double to check. - * @return Whether or not the specified path is a double. - */ - public boolean isDouble(String path); - - /** - * Gets the requested long by path. - *

          - * If the long does not exist but a default value has been specified, this - * will return the default value. If the long does not exist and no - * default value was specified, this will return 0. - * - * @param path Path of the long to get. - * @return Requested long. - */ - public long getLong(String path); - - /** - * Gets the requested long by path, returning a default value if not - * found. - *

          - * If the long does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the long to get. - * @param def The default value to return if the path is not found or is - * not a long. - * @return Requested long. - */ - public long getLong(String path, long def); - - /** - * Checks if the specified path is a long. - *

          - * If the path exists but is not a long, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a long and return appropriately. - * - * @param path Path of the long to check. - * @return Whether or not the specified path is a long. - */ - public boolean isLong(String path); - - // Java - /** - * Gets the requested List by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return null. - * - * @param path Path of the List to get. - * @return Requested List. - */ - public List getList(String path); - - /** - * Gets the requested List by path, returning a default value if not - * found. - *

          - * If the List does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the List to get. - * @param def The default value to return if the path is not found or is - * not a List. - * @return Requested List. - */ - public List getList(String path, List def); - - /** - * Checks if the specified path is a List. - *

          - * If the path exists but is not a List, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a List and return appropriately. - * - * @param path Path of the List to check. - * @return Whether or not the specified path is a List. - */ - public boolean isList(String path); - - /** - * Gets the requested List of String by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a String if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of String. - */ - public List getStringList(String path); - - /** - * Gets the requested List of Integer by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Integer if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Integer. - */ - public List getIntegerList(String path); - - /** - * Gets the requested List of Boolean by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Boolean if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Boolean. - */ - public List getBooleanList(String path); - - /** - * Gets the requested List of Double by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Double if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Double. - */ - public List getDoubleList(String path); - - /** - * Gets the requested List of Float by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Float if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Float. - */ - public List getFloatList(String path); - - /** - * Gets the requested List of Long by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Long if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Long. - */ - public List getLongList(String path); - - /** - * Gets the requested List of Byte by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Byte if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Byte. - */ - public List getByteList(String path); - - /** - * Gets the requested List of Character by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Character if - * possible, but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Character. - */ - public List getCharacterList(String path); - - /** - * Gets the requested List of Short by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Short if possible, - * but may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Short. - */ - public List getShortList(String path); - - /** - * Gets the requested List of Maps by path. - *

          - * If the List does not exist but a default value has been specified, this - * will return the default value. If the List does not exist and no - * default value was specified, this will return an empty List. - *

          - * This method will attempt to cast any values into a Map if possible, but - * may miss any values out if they are not compatible. - * - * @param path Path of the List to get. - * @return Requested List of Maps. - */ - public List> getMapList(String path); - - // Bukkit - /** - * Gets the requested Vector by path. - *

          - * If the Vector does not exist but a default value has been specified, - * this will return the default value. If the Vector does not exist and no - * default value was specified, this will return null. - * - * @param path Path of the Vector to get. - * @return Requested Vector. - */ - public Vector getVector(String path); - - /** - * Gets the requested {@link Vector} by path, returning a default value if - * not found. - *

          - * If the Vector does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the Vector to get. - * @param def The default value to return if the path is not found or is - * not a Vector. - * @return Requested Vector. - */ - public Vector getVector(String path, Vector def); - - /** - * Checks if the specified path is a Vector. - *

          - * If the path exists but is not a Vector, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a Vector and return appropriately. - * - * @param path Path of the Vector to check. - * @return Whether or not the specified path is a Vector. - */ - public boolean isVector(String path); - - /** - * Gets the requested OfflinePlayer by path. - *

          - * If the OfflinePlayer does not exist but a default value has been - * specified, this will return the default value. If the OfflinePlayer - * does not exist and no default value was specified, this will return - * null. - * - * @param path Path of the OfflinePlayer to get. - * @return Requested OfflinePlayer. - */ - public OfflinePlayer getOfflinePlayer(String path); - - /** - * Gets the requested {@link OfflinePlayer} by path, returning a default - * value if not found. - *

          - * If the OfflinePlayer does not exist then the specified default value - * will returned regardless of if a default has been identified in the - * root {@link Configuration}. - * - * @param path Path of the OfflinePlayer to get. - * @param def The default value to return if the path is not found or is - * not an OfflinePlayer. - * @return Requested OfflinePlayer. - */ - public OfflinePlayer getOfflinePlayer(String path, OfflinePlayer def); - - /** - * Checks if the specified path is an OfflinePlayer. - *

          - * If the path exists but is not a OfflinePlayer, this will return false. - * If the path does not exist, this will return false. If the path does - * not exist but a default value has been specified, this will check if - * that default value is a OfflinePlayer and return appropriately. - * - * @param path Path of the OfflinePlayer to check. - * @return Whether or not the specified path is an OfflinePlayer. - */ - public boolean isOfflinePlayer(String path); - - /** - * Gets the requested ItemStack by path. - *

          - * If the ItemStack does not exist but a default value has been specified, - * this will return the default value. If the ItemStack does not exist and - * no default value was specified, this will return null. - * - * @param path Path of the ItemStack to get. - * @return Requested ItemStack. - */ - public ItemStack getItemStack(String path); - - /** - * Gets the requested {@link ItemStack} by path, returning a default value - * if not found. - *

          - * If the ItemStack does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the ItemStack to get. - * @param def The default value to return if the path is not found or is - * not an ItemStack. - * @return Requested ItemStack. - */ - public ItemStack getItemStack(String path, ItemStack def); - - /** - * Checks if the specified path is an ItemStack. - *

          - * If the path exists but is not a ItemStack, this will return false. If - * the path does not exist, this will return false. If the path does not - * exist but a default value has been specified, this will check if that - * default value is a ItemStack and return appropriately. - * - * @param path Path of the ItemStack to check. - * @return Whether or not the specified path is an ItemStack. - */ - public boolean isItemStack(String path); - - /** - * Gets the requested Color by path. - *

          - * If the Color does not exist but a default value has been specified, - * this will return the default value. If the Color does not exist and no - * default value was specified, this will return null. - * - * @param path Path of the Color to get. - * @return Requested Color. - */ - public Color getColor(String path); - - /** - * Gets the requested {@link Color} by path, returning a default value if - * not found. - *

          - * If the Color does not exist then the specified default value will - * returned regardless of if a default has been identified in the root - * {@link Configuration}. - * - * @param path Path of the Color to get. - * @param def The default value to return if the path is not found or is - * not a Color. - * @return Requested Color. - */ - public Color getColor(String path, Color def); - - /** - * Checks if the specified path is a Color. - *

          - * If the path exists but is not a Color, this will return false. If the - * path does not exist, this will return false. If the path does not exist - * but a default value has been specified, this will check if that default - * value is a Color and return appropriately. - * - * @param path Path of the Color to check. - * @return Whether or not the specified path is a Color. - */ - public boolean isColor(String path); - - /** - * Gets the requested ConfigurationSection by path. - *

          - * If the ConfigurationSection does not exist but a default value has been - * specified, this will return the default value. If the - * ConfigurationSection does not exist and no default value was specified, - * this will return null. - * - * @param path Path of the ConfigurationSection to get. - * @return Requested ConfigurationSection. - */ - public ConfigurationSection getConfigurationSection(String path); - - /** - * Checks if the specified path is a ConfigurationSection. - *

          - * If the path exists but is not a ConfigurationSection, this will return - * false. If the path does not exist, this will return false. If the path - * does not exist but a default value has been specified, this will check - * if that default value is a ConfigurationSection and return - * appropriately. - * - * @param path Path of the ConfigurationSection to check. - * @return Whether or not the specified path is a ConfigurationSection. - */ - public boolean isConfigurationSection(String path); - - /** - * Gets the equivalent {@link ConfigurationSection} from the default - * {@link Configuration} defined in {@link #getRoot()}. - *

          - * If the root contains no defaults, or the defaults doesn't contain a - * value for this path, or the value at this path is not a {@link - * ConfigurationSection} then this will return null. - * - * @return Equivalent section in root configuration - */ - public ConfigurationSection getDefaultSection(); - - /** - * Sets the default value in the root at the given path as provided. - *

          - * If no source {@link Configuration} was provided as a default - * collection, then a new {@link MemoryConfiguration} will be created to - * hold the new default value. - *

          - * If value is null, the value will be removed from the default - * Configuration source. - *

          - * If the value as returned by {@link #getDefaultSection()} is null, then - * this will create a new section at the path, replacing anything that may - * have existed there previously. - * - * @param path Path of the value to set. - * @param value Value to set the default to. - * @throws IllegalArgumentException Thrown if path is null. - */ - public void addDefault(String path, Object value); -} diff --git a/LiveWeather/src/org/bukkit/configuration/InvalidConfigurationException.java b/LiveWeather/src/org/bukkit/configuration/InvalidConfigurationException.java deleted file mode 100755 index d23480e..0000000 --- a/LiveWeather/src/org/bukkit/configuration/InvalidConfigurationException.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.configuration; - -/** - * Exception thrown when attempting to load an invalid {@link Configuration} - */ -@SuppressWarnings("serial") -public class InvalidConfigurationException extends Exception { - - /** - * Creates a new instance of InvalidConfigurationException without a - * message or cause. - */ - public InvalidConfigurationException() {} - - /** - * Constructs an instance of InvalidConfigurationException with the - * specified message. - * - * @param msg The details of the exception. - */ - public InvalidConfigurationException(String msg) { - super(msg); - } - - /** - * Constructs an instance of InvalidConfigurationException with the - * specified cause. - * - * @param cause The cause of the exception. - */ - public InvalidConfigurationException(Throwable cause) { - super(cause); - } - - /** - * Constructs an instance of InvalidConfigurationException with the - * specified message and cause. - * - * @param cause The cause of the exception. - * @param msg The details of the exception. - */ - public InvalidConfigurationException(String msg, Throwable cause) { - super(msg, cause); - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/MemoryConfiguration.java b/LiveWeather/src/org/bukkit/configuration/MemoryConfiguration.java deleted file mode 100755 index 19c27a1..0000000 --- a/LiveWeather/src/org/bukkit/configuration/MemoryConfiguration.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.configuration; - -import java.util.Map; - -import org.apache.commons.lang.Validate; - -/** - * This is a {@link Configuration} implementation that does not save or load - * from any source, and stores all values in memory only. - * This is useful for temporary Configurations for providing defaults. - */ -public class MemoryConfiguration extends MemorySection implements Configuration { - protected Configuration defaults; - protected MemoryConfigurationOptions options; - - /** - * Creates an empty {@link MemoryConfiguration} with no default values. - */ - public MemoryConfiguration() {} - - /** - * Creates an empty {@link MemoryConfiguration} using the specified {@link - * Configuration} as a source for all default values. - * - * @param defaults Default value provider - * @throws IllegalArgumentException Thrown if defaults is null - */ - public MemoryConfiguration(Configuration defaults) { - this.defaults = defaults; - } - - @Override - public void addDefault(String path, Object value) { - Validate.notNull(path, "Path may not be null"); - - if (defaults == null) { - defaults = new MemoryConfiguration(); - } - - defaults.set(path, value); - } - - public void addDefaults(Map defaults) { - Validate.notNull(defaults, "Defaults may not be null"); - - for (Map.Entry entry : defaults.entrySet()) { - addDefault(entry.getKey(), entry.getValue()); - } - } - - public void addDefaults(Configuration defaults) { - Validate.notNull(defaults, "Defaults may not be null"); - - addDefaults(defaults.getValues(true)); - } - - public void setDefaults(Configuration defaults) { - Validate.notNull(defaults, "Defaults may not be null"); - - this.defaults = defaults; - } - - public Configuration getDefaults() { - return defaults; - } - - @Override - public ConfigurationSection getParent() { - return null; - } - - public MemoryConfigurationOptions options() { - if (options == null) { - options = new MemoryConfigurationOptions(this); - } - - return options; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/MemoryConfigurationOptions.java b/LiveWeather/src/org/bukkit/configuration/MemoryConfigurationOptions.java deleted file mode 100755 index 44c046c..0000000 --- a/LiveWeather/src/org/bukkit/configuration/MemoryConfigurationOptions.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.configuration; - -/** - * Various settings for controlling the input and output of a {@link - * MemoryConfiguration} - */ -public class MemoryConfigurationOptions extends ConfigurationOptions { - protected MemoryConfigurationOptions(MemoryConfiguration configuration) { - super(configuration); - } - - @Override - public MemoryConfiguration configuration() { - return (MemoryConfiguration) super.configuration(); - } - - @Override - public MemoryConfigurationOptions copyDefaults(boolean value) { - super.copyDefaults(value); - return this; - } - - @Override - public MemoryConfigurationOptions pathSeparator(char value) { - super.pathSeparator(value); - return this; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/MemorySection.java b/LiveWeather/src/org/bukkit/configuration/MemorySection.java deleted file mode 100755 index f180bf5..0000000 --- a/LiveWeather/src/org/bukkit/configuration/MemorySection.java +++ /dev/null @@ -1,820 +0,0 @@ -package org.bukkit.configuration; - -import static org.bukkit.util.NumberConversions.*; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.Color; -import org.bukkit.OfflinePlayer; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - -/** - * A type of {@link ConfigurationSection} that is stored in memory. - */ -public class MemorySection implements ConfigurationSection { - protected final Map map = new LinkedHashMap(); - private final Configuration root; - private final ConfigurationSection parent; - private final String path; - private final String fullPath; - - /** - * Creates an empty MemorySection for use as a root {@link Configuration} - * section. - *

          - * Note that calling this without being yourself a {@link Configuration} - * will throw an exception! - * - * @throws IllegalStateException Thrown if this is not a {@link - * Configuration} root. - */ - protected MemorySection() { - if (!(this instanceof Configuration)) { - throw new IllegalStateException("Cannot construct a root MemorySection when not a Configuration"); - } - - this.path = ""; - this.fullPath = ""; - this.parent = null; - this.root = (Configuration) this; - } - - /** - * Creates an empty MemorySection with the specified parent and path. - * - * @param parent Parent section that contains this own section. - * @param path Path that you may access this section from via the root - * {@link Configuration}. - * @throws IllegalArgumentException Thrown is parent or path is null, or - * if parent contains no root Configuration. - */ - protected MemorySection(ConfigurationSection parent, String path) { - Validate.notNull(parent, "Parent cannot be null"); - Validate.notNull(path, "Path cannot be null"); - - this.path = path; - this.parent = parent; - this.root = parent.getRoot(); - - Validate.notNull(root, "Path cannot be orphaned"); - - this.fullPath = createPath(parent, path); - } - - public Set getKeys(boolean deep) { - Set result = new LinkedHashSet(); - - Configuration root = getRoot(); - if (root != null && root.options().copyDefaults()) { - ConfigurationSection defaults = getDefaultSection(); - - if (defaults != null) { - result.addAll(defaults.getKeys(deep)); - } - } - - mapChildrenKeys(result, this, deep); - - return result; - } - - public Map getValues(boolean deep) { - Map result = new LinkedHashMap(); - - Configuration root = getRoot(); - if (root != null && root.options().copyDefaults()) { - ConfigurationSection defaults = getDefaultSection(); - - if (defaults != null) { - result.putAll(defaults.getValues(deep)); - } - } - - mapChildrenValues(result, this, deep); - - return result; - } - - public boolean contains(String path) { - return get(path) != null; - } - - public boolean isSet(String path) { - Configuration root = getRoot(); - if (root == null) { - return false; - } - if (root.options().copyDefaults()) { - return contains(path); - } - return get(path, null) != null; - } - - public String getCurrentPath() { - return fullPath; - } - - public String getName() { - return path; - } - - public Configuration getRoot() { - return root; - } - - public ConfigurationSection getParent() { - return parent; - } - - public void addDefault(String path, Object value) { - Validate.notNull(path, "Path cannot be null"); - - Configuration root = getRoot(); - if (root == null) { - throw new IllegalStateException("Cannot add default without root"); - } - if (root == this) { - throw new UnsupportedOperationException("Unsupported addDefault(String, Object) implementation"); - } - root.addDefault(createPath(this, path), value); - } - - public ConfigurationSection getDefaultSection() { - Configuration root = getRoot(); - Configuration defaults = root == null ? null : root.getDefaults(); - - if (defaults != null) { - if (defaults.isConfigurationSection(getCurrentPath())) { - return defaults.getConfigurationSection(getCurrentPath()); - } - } - - return null; - } - - public void set(String path, Object value) { - Validate.notEmpty(path, "Cannot set to an empty path"); - - Configuration root = getRoot(); - if (root == null) { - throw new IllegalStateException("Cannot use section without a root"); - } - - final char separator = root.options().pathSeparator(); - // i1 is the leading (higher) index - // i2 is the trailing (lower) index - int i1 = -1, i2; - ConfigurationSection section = this; - while ((i1 = path.indexOf(separator, i2 = i1 + 1)) != -1) { - String node = path.substring(i2, i1); - ConfigurationSection subSection = section.getConfigurationSection(node); - if (subSection == null) { - section = section.createSection(node); - } else { - section = subSection; - } - } - - String key = path.substring(i2); - if (section == this) { - if (value == null) { - map.remove(key); - } else { - map.put(key, value); - } - } else { - section.set(key, value); - } - } - - public Object get(String path) { - return get(path, getDefault(path)); - } - - public Object get(String path, Object def) { - Validate.notNull(path, "Path cannot be null"); - - if (path.length() == 0) { - return this; - } - - Configuration root = getRoot(); - if (root == null) { - throw new IllegalStateException("Cannot access section without a root"); - } - - final char separator = root.options().pathSeparator(); - // i1 is the leading (higher) index - // i2 is the trailing (lower) index - int i1 = -1, i2; - ConfigurationSection section = this; - while ((i1 = path.indexOf(separator, i2 = i1 + 1)) != -1) { - section = section.getConfigurationSection(path.substring(i2, i1)); - if (section == null) { - return def; - } - } - - String key = path.substring(i2); - if (section == this) { - Object result = map.get(key); - return (result == null) ? def : result; - } - return section.get(key, def); - } - - public ConfigurationSection createSection(String path) { - Validate.notEmpty(path, "Cannot create section at empty path"); - Configuration root = getRoot(); - if (root == null) { - throw new IllegalStateException("Cannot create section without a root"); - } - - final char separator = root.options().pathSeparator(); - // i1 is the leading (higher) index - // i2 is the trailing (lower) index - int i1 = -1, i2; - ConfigurationSection section = this; - while ((i1 = path.indexOf(separator, i2 = i1 + 1)) != -1) { - String node = path.substring(i2, i1); - ConfigurationSection subSection = section.getConfigurationSection(node); - if (subSection == null) { - section = section.createSection(node); - } else { - section = subSection; - } - } - - String key = path.substring(i2); - if (section == this) { - ConfigurationSection result = new MemorySection(this, key); - map.put(key, result); - return result; - } - return section.createSection(key); - } - - public ConfigurationSection createSection(String path, Map map) { - ConfigurationSection section = createSection(path); - - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() instanceof Map) { - section.createSection(entry.getKey().toString(), (Map) entry.getValue()); - } else { - section.set(entry.getKey().toString(), entry.getValue()); - } - } - - return section; - } - - // Primitives - public String getString(String path) { - Object def = getDefault(path); - return getString(path, def != null ? def.toString() : null); - } - - public String getString(String path, String def) { - Object val = get(path, def); - return (val != null) ? val.toString() : def; - } - - public boolean isString(String path) { - Object val = get(path); - return val instanceof String; - } - - public int getInt(String path) { - Object def = getDefault(path); - return getInt(path, (def instanceof Number) ? toInt(def) : 0); - } - - public int getInt(String path, int def) { - Object val = get(path, def); - return (val instanceof Number) ? toInt(val) : def; - } - - public boolean isInt(String path) { - Object val = get(path); - return val instanceof Integer; - } - - public boolean getBoolean(String path) { - Object def = getDefault(path); - return getBoolean(path, (def instanceof Boolean) ? (Boolean) def : false); - } - - public boolean getBoolean(String path, boolean def) { - Object val = get(path, def); - return (val instanceof Boolean) ? (Boolean) val : def; - } - - public boolean isBoolean(String path) { - Object val = get(path); - return val instanceof Boolean; - } - - public double getDouble(String path) { - Object def = getDefault(path); - return getDouble(path, (def instanceof Number) ? toDouble(def) : 0); - } - - public double getDouble(String path, double def) { - Object val = get(path, def); - return (val instanceof Number) ? toDouble(val) : def; - } - - public boolean isDouble(String path) { - Object val = get(path); - return val instanceof Double; - } - - public long getLong(String path) { - Object def = getDefault(path); - return getLong(path, (def instanceof Number) ? toLong(def) : 0); - } - - public long getLong(String path, long def) { - Object val = get(path, def); - return (val instanceof Number) ? toLong(val) : def; - } - - public boolean isLong(String path) { - Object val = get(path); - return val instanceof Long; - } - - // Java - public List getList(String path) { - Object def = getDefault(path); - return getList(path, (def instanceof List) ? (List) def : null); - } - - public List getList(String path, List def) { - Object val = get(path, def); - return (List) ((val instanceof List) ? val : def); - } - - public boolean isList(String path) { - Object val = get(path); - return val instanceof List; - } - - public List getStringList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if ((object instanceof String) || (isPrimitiveWrapper(object))) { - result.add(String.valueOf(object)); - } - } - - return result; - } - - public List getIntegerList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Integer) { - result.add((Integer) object); - } else if (object instanceof String) { - try { - result.add(Integer.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((int) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).intValue()); - } - } - - return result; - } - - public List getBooleanList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Boolean) { - result.add((Boolean) object); - } else if (object instanceof String) { - if (Boolean.TRUE.toString().equals(object)) { - result.add(true); - } else if (Boolean.FALSE.toString().equals(object)) { - result.add(false); - } - } - } - - return result; - } - - public List getDoubleList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Double) { - result.add((Double) object); - } else if (object instanceof String) { - try { - result.add(Double.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((double) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).doubleValue()); - } - } - - return result; - } - - public List getFloatList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Float) { - result.add((Float) object); - } else if (object instanceof String) { - try { - result.add(Float.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((float) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).floatValue()); - } - } - - return result; - } - - public List getLongList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Long) { - result.add((Long) object); - } else if (object instanceof String) { - try { - result.add(Long.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((long) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).longValue()); - } - } - - return result; - } - - public List getByteList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Byte) { - result.add((Byte) object); - } else if (object instanceof String) { - try { - result.add(Byte.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((byte) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).byteValue()); - } - } - - return result; - } - - public List getCharacterList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Character) { - result.add((Character) object); - } else if (object instanceof String) { - String str = (String) object; - - if (str.length() == 1) { - result.add(str.charAt(0)); - } - } else if (object instanceof Number) { - result.add((char) ((Number) object).intValue()); - } - } - - return result; - } - - public List getShortList(String path) { - List list = getList(path); - - if (list == null) { - return new ArrayList(0); - } - - List result = new ArrayList(); - - for (Object object : list) { - if (object instanceof Short) { - result.add((Short) object); - } else if (object instanceof String) { - try { - result.add(Short.valueOf((String) object)); - } catch (Exception ex) { - } - } else if (object instanceof Character) { - result.add((short) ((Character) object).charValue()); - } else if (object instanceof Number) { - result.add(((Number) object).shortValue()); - } - } - - return result; - } - - public List> getMapList(String path) { - List list = getList(path); - List> result = new ArrayList>(); - - if (list == null) { - return result; - } - - for (Object object : list) { - if (object instanceof Map) { - result.add((Map) object); - } - } - - return result; - } - - // Bukkit - public Vector getVector(String path) { - Object def = getDefault(path); - return getVector(path, (def instanceof Vector) ? (Vector) def : null); - } - - public Vector getVector(String path, Vector def) { - Object val = get(path, def); - return (val instanceof Vector) ? (Vector) val : def; - } - - public boolean isVector(String path) { - Object val = get(path); - return val instanceof Vector; - } - - public OfflinePlayer getOfflinePlayer(String path) { - Object def = getDefault(path); - return getOfflinePlayer(path, (def instanceof OfflinePlayer) ? (OfflinePlayer) def : null); - } - - public OfflinePlayer getOfflinePlayer(String path, OfflinePlayer def) { - Object val = get(path, def); - return (val instanceof OfflinePlayer) ? (OfflinePlayer) val : def; - } - - public boolean isOfflinePlayer(String path) { - Object val = get(path); - return val instanceof OfflinePlayer; - } - - public ItemStack getItemStack(String path) { - Object def = getDefault(path); - return getItemStack(path, (def instanceof ItemStack) ? (ItemStack) def : null); - } - - public ItemStack getItemStack(String path, ItemStack def) { - Object val = get(path, def); - return (val instanceof ItemStack) ? (ItemStack) val : def; - } - - public boolean isItemStack(String path) { - Object val = get(path); - return val instanceof ItemStack; - } - - public Color getColor(String path) { - Object def = getDefault(path); - return getColor(path, (def instanceof Color) ? (Color) def : null); - } - - public Color getColor(String path, Color def) { - Object val = get(path, def); - return (val instanceof Color) ? (Color) val : def; - } - - public boolean isColor(String path) { - Object val = get(path); - return val instanceof Color; - } - - public ConfigurationSection getConfigurationSection(String path) { - Object val = get(path, null); - if (val != null) { - return (val instanceof ConfigurationSection) ? (ConfigurationSection) val : null; - } - - val = get(path, getDefault(path)); - return (val instanceof ConfigurationSection) ? createSection(path) : null; - } - - public boolean isConfigurationSection(String path) { - Object val = get(path); - return val instanceof ConfigurationSection; - } - - protected boolean isPrimitiveWrapper(Object input) { - return input instanceof Integer || input instanceof Boolean || - input instanceof Character || input instanceof Byte || - input instanceof Short || input instanceof Double || - input instanceof Long || input instanceof Float; - } - - protected Object getDefault(String path) { - Validate.notNull(path, "Path cannot be null"); - - Configuration root = getRoot(); - Configuration defaults = root == null ? null : root.getDefaults(); - return (defaults == null) ? null : defaults.get(createPath(this, path)); - } - - protected void mapChildrenKeys(Set output, ConfigurationSection section, boolean deep) { - if (section instanceof MemorySection) { - MemorySection sec = (MemorySection) section; - - for (Map.Entry entry : sec.map.entrySet()) { - output.add(createPath(section, entry.getKey(), this)); - - if ((deep) && (entry.getValue() instanceof ConfigurationSection)) { - ConfigurationSection subsection = (ConfigurationSection) entry.getValue(); - mapChildrenKeys(output, subsection, deep); - } - } - } else { - Set keys = section.getKeys(deep); - - for (String key : keys) { - output.add(createPath(section, key, this)); - } - } - } - - protected void mapChildrenValues(Map output, ConfigurationSection section, boolean deep) { - if (section instanceof MemorySection) { - MemorySection sec = (MemorySection) section; - - for (Map.Entry entry : sec.map.entrySet()) { - output.put(createPath(section, entry.getKey(), this), entry.getValue()); - - if (entry.getValue() instanceof ConfigurationSection) { - if (deep) { - mapChildrenValues(output, (ConfigurationSection) entry.getValue(), deep); - } - } - } - } else { - Map values = section.getValues(deep); - - for (Map.Entry entry : values.entrySet()) { - output.put(createPath(section, entry.getKey(), this), entry.getValue()); - } - } - } - - /** - * Creates a full path to the given {@link ConfigurationSection} from its - * root {@link Configuration}. - *

          - * You may use this method for any given {@link ConfigurationSection}, not - * only {@link MemorySection}. - * - * @param section Section to create a path for. - * @param key Name of the specified section. - * @return Full path of the section from its root. - */ - public static String createPath(ConfigurationSection section, String key) { - return createPath(section, key, (section == null) ? null : section.getRoot()); - } - - /** - * Creates a relative path to the given {@link ConfigurationSection} from - * the given relative section. - *

          - * You may use this method for any given {@link ConfigurationSection}, not - * only {@link MemorySection}. - * - * @param section Section to create a path for. - * @param key Name of the specified section. - * @param relativeTo Section to create the path relative to. - * @return Full path of the section from its root. - */ - public static String createPath(ConfigurationSection section, String key, ConfigurationSection relativeTo) { - Validate.notNull(section, "Cannot create path without a section"); - Configuration root = section.getRoot(); - if (root == null) { - throw new IllegalStateException("Cannot create path without a root"); - } - char separator = root.options().pathSeparator(); - - StringBuilder builder = new StringBuilder(); - if (section != null) { - for (ConfigurationSection parent = section; (parent != null) && (parent != relativeTo); parent = parent.getParent()) { - if (builder.length() > 0) { - builder.insert(0, separator); - } - - builder.insert(0, parent.getName()); - } - } - - if ((key != null) && (key.length() > 0)) { - if (builder.length() > 0) { - builder.append(separator); - } - - builder.append(key); - } - - return builder.toString(); - } - - @Override - public String toString() { - Configuration root = getRoot(); - return new StringBuilder() - .append(getClass().getSimpleName()) - .append("[path='") - .append(getCurrentPath()) - .append("', root='") - .append(root == null ? null : root.getClass().getSimpleName()) - .append("']") - .toString(); - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/file/FileConfiguration.java b/LiveWeather/src/org/bukkit/configuration/file/FileConfiguration.java deleted file mode 100755 index 9d6d1c6..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/FileConfiguration.java +++ /dev/null @@ -1,290 +0,0 @@ -package org.bukkit.configuration.file; - -import com.google.common.base.Charsets; -import com.google.common.io.Files; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.InvalidConfigurationException; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.nio.charset.Charset; - -import org.bukkit.configuration.Configuration; -import org.bukkit.configuration.MemoryConfiguration; -import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; - -/** - * This is a base class for all File based implementations of {@link - * Configuration} - */ -public abstract class FileConfiguration extends MemoryConfiguration { - /** - * This value specified that the system default encoding should be - * completely ignored, as it cannot handle the ASCII character set, or it - * is a strict-subset of UTF8 already (plain ASCII). - * - * @deprecated temporary compatibility measure - */ - @Deprecated - public static final boolean UTF8_OVERRIDE; - /** - * This value specifies if the system default encoding is unicode, but - * cannot parse standard ASCII. - * - * @deprecated temporary compatibility measure - */ - @Deprecated - public static final boolean UTF_BIG; - /** - * This value specifies if the system supports unicode. - * - * @deprecated temporary compatibility measure - */ - @Deprecated - public static final boolean SYSTEM_UTF; - static { - final byte[] testBytes = Base64Coder.decode("ICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4NCg=="); - final String testString = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\r\n"; - final Charset defaultCharset = Charset.defaultCharset(); - final String resultString = new String(testBytes, defaultCharset); - final boolean trueUTF = defaultCharset.name().contains("UTF"); - UTF8_OVERRIDE = !testString.equals(resultString) || defaultCharset.equals(Charset.forName("US-ASCII")); - SYSTEM_UTF = trueUTF || UTF8_OVERRIDE; - UTF_BIG = trueUTF && UTF8_OVERRIDE; - } - - /** - * Creates an empty {@link FileConfiguration} with no default values. - */ - public FileConfiguration() { - super(); - } - - /** - * Creates an empty {@link FileConfiguration} using the specified {@link - * Configuration} as a source for all default values. - * - * @param defaults Default value provider - */ - public FileConfiguration(Configuration defaults) { - super(defaults); - } - - /** - * Saves this {@link FileConfiguration} to the specified location. - *

          - * If the file does not exist, it will be created. If already exists, it - * will be overwritten. If it cannot be overwritten or created, an - * exception will be thrown. - *

          - * This method will save using the system default encoding, or possibly - * using UTF8. - * - * @param file File to save to. - * @throws IOException Thrown when the given file cannot be written to for - * any reason. - * @throws IllegalArgumentException Thrown when file is null. - */ - public void save(File file) throws IOException { - Validate.notNull(file, "File cannot be null"); - - Files.createParentDirs(file); - - String data = saveToString(); - - Writer writer = new OutputStreamWriter(new FileOutputStream(file), UTF8_OVERRIDE && !UTF_BIG ? Charsets.UTF_8 : Charset.defaultCharset()); - - try { - writer.write(data); - } finally { - writer.close(); - } - } - - /** - * Saves this {@link FileConfiguration} to the specified location. - *

          - * If the file does not exist, it will be created. If already exists, it - * will be overwritten. If it cannot be overwritten or created, an - * exception will be thrown. - *

          - * This method will save using the system default encoding, or possibly - * using UTF8. - * - * @param file File to save to. - * @throws IOException Thrown when the given file cannot be written to for - * any reason. - * @throws IllegalArgumentException Thrown when file is null. - */ - public void save(String file) throws IOException { - Validate.notNull(file, "File cannot be null"); - - save(new File(file)); - } - - /** - * Saves this {@link FileConfiguration} to a string, and returns it. - * - * @return String containing this configuration. - */ - public abstract String saveToString(); - - /** - * Loads this {@link FileConfiguration} from the specified location. - *

          - * All the values contained within this configuration will be removed, - * leaving only settings and defaults, and the new values will be loaded - * from the given file. - *

          - * If the file cannot be loaded for any reason, an exception will be - * thrown. - *

          - * This will attempt to use the {@link Charset#defaultCharset()} for - * files, unless {@link #UTF8_OVERRIDE} but not {@link #UTF_BIG} is - * specified. - * - * @param file File to load from. - * @throws FileNotFoundException Thrown when the given file cannot be - * opened. - * @throws IOException Thrown when the given file cannot be read. - * @throws InvalidConfigurationException Thrown when the given file is not - * a valid Configuration. - * @throws IllegalArgumentException Thrown when file is null. - */ - public void load(File file) throws FileNotFoundException, IOException, InvalidConfigurationException { - Validate.notNull(file, "File cannot be null"); - - final FileInputStream stream = new FileInputStream(file); - - load(new InputStreamReader(stream, UTF8_OVERRIDE && !UTF_BIG ? Charsets.UTF_8 : Charset.defaultCharset())); - } - - /** - * Loads this {@link FileConfiguration} from the specified stream. - *

          - * All the values contained within this configuration will be removed, - * leaving only settings and defaults, and the new values will be loaded - * from the given stream. - *

          - * This will attempt to use the {@link Charset#defaultCharset()}, unless - * {@link #UTF8_OVERRIDE} or {@link #UTF_BIG} is specified. - * - * @param stream Stream to load from - * @throws IOException Thrown when the given file cannot be read. - * @throws InvalidConfigurationException Thrown when the given file is not - * a valid Configuration. - * @throws IllegalArgumentException Thrown when stream is null. - * @deprecated This does not consider encoding - * @see #load(Reader) - */ - @Deprecated - public void load(InputStream stream) throws IOException, InvalidConfigurationException { - Validate.notNull(stream, "Stream cannot be null"); - - load(new InputStreamReader(stream, UTF8_OVERRIDE ? Charsets.UTF_8 : Charset.defaultCharset())); - } - - /** - * Loads this {@link FileConfiguration} from the specified reader. - *

          - * All the values contained within this configuration will be removed, - * leaving only settings and defaults, and the new values will be loaded - * from the given stream. - * - * @param reader the reader to load from - * @throws IOException thrown when underlying reader throws an IOException - * @throws InvalidConfigurationException thrown when the reader does not - * represent a valid Configuration - * @throws IllegalArgumentException thrown when reader is null - */ - public void load(Reader reader) throws IOException, InvalidConfigurationException { - BufferedReader input = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader); - - StringBuilder builder = new StringBuilder(); - - try { - String line; - - while ((line = input.readLine()) != null) { - builder.append(line); - builder.append('\n'); - } - } finally { - input.close(); - } - - loadFromString(builder.toString()); - } - - /** - * Loads this {@link FileConfiguration} from the specified location. - *

          - * All the values contained within this configuration will be removed, - * leaving only settings and defaults, and the new values will be loaded - * from the given file. - *

          - * If the file cannot be loaded for any reason, an exception will be - * thrown. - * - * @param file File to load from. - * @throws FileNotFoundException Thrown when the given file cannot be - * opened. - * @throws IOException Thrown when the given file cannot be read. - * @throws InvalidConfigurationException Thrown when the given file is not - * a valid Configuration. - * @throws IllegalArgumentException Thrown when file is null. - */ - public void load(String file) throws FileNotFoundException, IOException, InvalidConfigurationException { - Validate.notNull(file, "File cannot be null"); - - load(new File(file)); - } - - /** - * Loads this {@link FileConfiguration} from the specified string, as - * opposed to from file. - *

          - * All the values contained within this configuration will be removed, - * leaving only settings and defaults, and the new values will be loaded - * from the given string. - *

          - * If the string is invalid in any way, an exception will be thrown. - * - * @param contents Contents of a Configuration to load. - * @throws InvalidConfigurationException Thrown if the specified string is - * invalid. - * @throws IllegalArgumentException Thrown if contents is null. - */ - public abstract void loadFromString(String contents) throws InvalidConfigurationException; - - /** - * Compiles the header for this {@link FileConfiguration} and returns the - * result. - *

          - * This will use the header from {@link #options()} -> {@link - * FileConfigurationOptions#header()}, respecting the rules of {@link - * FileConfigurationOptions#copyHeader()} if set. - * - * @return Compiled header - */ - protected abstract String buildHeader(); - - @Override - public FileConfigurationOptions options() { - if (options == null) { - options = new FileConfigurationOptions(this); - } - - return (FileConfigurationOptions) options; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/configuration/file/FileConfigurationOptions.java b/LiveWeather/src/org/bukkit/configuration/file/FileConfigurationOptions.java deleted file mode 100755 index ccf81e0..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/FileConfigurationOptions.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.bukkit.configuration.file; - -import org.bukkit.configuration.*; - -/** - * Various settings for controlling the input and output of a {@link - * FileConfiguration} - */ -public class FileConfigurationOptions extends MemoryConfigurationOptions { - private String header = null; - private boolean copyHeader = true; - - protected FileConfigurationOptions(MemoryConfiguration configuration) { - super(configuration); - } - - @Override - public FileConfiguration configuration() { - return (FileConfiguration) super.configuration(); - } - - @Override - public FileConfigurationOptions copyDefaults(boolean value) { - super.copyDefaults(value); - return this; - } - - @Override - public FileConfigurationOptions pathSeparator(char value) { - super.pathSeparator(value); - return this; - } - - /** - * Gets the header that will be applied to the top of the saved output. - *

          - * This header will be commented out and applied directly at the top of - * the generated output of the {@link FileConfiguration}. It is not - * required to include a newline at the end of the header as it will - * automatically be applied, but you may include one if you wish for extra - * spacing. - *

          - * Null is a valid value which will indicate that no header is to be - * applied. The default value is null. - * - * @return Header - */ - public String header() { - return header; - } - - /** - * Sets the header that will be applied to the top of the saved output. - *

          - * This header will be commented out and applied directly at the top of - * the generated output of the {@link FileConfiguration}. It is not - * required to include a newline at the end of the header as it will - * automatically be applied, but you may include one if you wish for extra - * spacing. - *

          - * Null is a valid value which will indicate that no header is to be - * applied. - * - * @param value New header - * @return This object, for chaining - */ - public FileConfigurationOptions header(String value) { - this.header = value; - return this; - } - - /** - * Gets whether or not the header should be copied from a default source. - *

          - * If this is true, if a default {@link FileConfiguration} is passed to - * {@link - * FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)} - * then upon saving it will use the header from that config, instead of - * the one provided here. - *

          - * If no default is set on the configuration, or the default is not of - * type FileConfiguration, or that config has no header ({@link #header()} - * returns null) then the header specified in this configuration will be - * used. - *

          - * Defaults to true. - * - * @return Whether or not to copy the header - */ - public boolean copyHeader() { - return copyHeader; - } - - /** - * Sets whether or not the header should be copied from a default source. - *

          - * If this is true, if a default {@link FileConfiguration} is passed to - * {@link - * FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)} - * then upon saving it will use the header from that config, instead of - * the one provided here. - *

          - * If no default is set on the configuration, or the default is not of - * type FileConfiguration, or that config has no header ({@link #header()} - * returns null) then the header specified in this configuration will be - * used. - *

          - * Defaults to true. - * - * @param value Whether or not to copy the header - * @return This object, for chaining - */ - public FileConfigurationOptions copyHeader(boolean value) { - copyHeader = value; - - return this; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/file/YamlConfiguration.java b/LiveWeather/src/org/bukkit/configuration/file/YamlConfiguration.java deleted file mode 100755 index ea4c2b3..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/YamlConfiguration.java +++ /dev/null @@ -1,249 +0,0 @@ -package org.bukkit.configuration.file; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.util.Map; -import java.util.logging.Level; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.configuration.Configuration; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.error.YAMLException; -import org.yaml.snakeyaml.representer.Representer; - -/** - * An implementation of {@link Configuration} which saves all files in Yaml. - * Note that this implementation is not synchronized. - */ -public class YamlConfiguration extends FileConfiguration { - protected static final String COMMENT_PREFIX = "# "; - protected static final String BLANK_CONFIG = "{}\n"; - private final DumperOptions yamlOptions = new DumperOptions(); - private final Representer yamlRepresenter = new YamlRepresenter(); - private final Yaml yaml = new Yaml(new YamlConstructor(), yamlRepresenter, yamlOptions); - - @Override - public String saveToString() { - yamlOptions.setIndent(options().indent()); - yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - yamlOptions.setAllowUnicode(SYSTEM_UTF); - yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - - String header = buildHeader(); - String dump = yaml.dump(getValues(false)); - - if (dump.equals(BLANK_CONFIG)) { - dump = ""; - } - - return header + dump; - } - - @Override - public void loadFromString(String contents) throws InvalidConfigurationException { - Validate.notNull(contents, "Contents cannot be null"); - - Map input; - try { - input = (Map) yaml.load(contents); - } catch (YAMLException e) { - throw new InvalidConfigurationException(e); - } catch (ClassCastException e) { - throw new InvalidConfigurationException("Top level is not a Map."); - } - - String header = parseHeader(contents); - if (header.length() > 0) { - options().header(header); - } - - if (input != null) { - convertMapsToSections(input, this); - } - } - - protected void convertMapsToSections(Map input, ConfigurationSection section) { - for (Map.Entry entry : input.entrySet()) { - String key = entry.getKey().toString(); - Object value = entry.getValue(); - - if (value instanceof Map) { - convertMapsToSections((Map) value, section.createSection(key)); - } else { - section.set(key, value); - } - } - } - - protected String parseHeader(String input) { - String[] lines = input.split("\r?\n", -1); - StringBuilder result = new StringBuilder(); - boolean readingHeader = true; - boolean foundHeader = false; - - for (int i = 0; (i < lines.length) && (readingHeader); i++) { - String line = lines[i]; - - if (line.startsWith(COMMENT_PREFIX)) { - if (i > 0) { - result.append("\n"); - } - - if (line.length() > COMMENT_PREFIX.length()) { - result.append(line.substring(COMMENT_PREFIX.length())); - } - - foundHeader = true; - } else if ((foundHeader) && (line.length() == 0)) { - result.append("\n"); - } else if (foundHeader) { - readingHeader = false; - } - } - - return result.toString(); - } - - @Override - protected String buildHeader() { - String header = options().header(); - - if (options().copyHeader()) { - Configuration def = getDefaults(); - - if ((def != null) && (def instanceof FileConfiguration)) { - FileConfiguration filedefaults = (FileConfiguration) def; - String defaultsHeader = filedefaults.buildHeader(); - - if ((defaultsHeader != null) && (defaultsHeader.length() > 0)) { - return defaultsHeader; - } - } - } - - if (header == null) { - return ""; - } - - StringBuilder builder = new StringBuilder(); - String[] lines = header.split("\r?\n", -1); - boolean startedHeader = false; - - for (int i = lines.length - 1; i >= 0; i--) { - builder.insert(0, "\n"); - - if ((startedHeader) || (lines[i].length() != 0)) { - builder.insert(0, lines[i]); - builder.insert(0, COMMENT_PREFIX); - startedHeader = true; - } - } - - return builder.toString(); - } - - @Override - public YamlConfigurationOptions options() { - if (options == null) { - options = new YamlConfigurationOptions(this); - } - - return (YamlConfigurationOptions) options; - } - - /** - * Creates a new {@link YamlConfiguration}, loading from the given file. - *

          - * Any errors loading the Configuration will be logged and then ignored. - * If the specified input is not a valid config, a blank config will be - * returned. - *

          - * The encoding used may follow the system dependent default. - * - * @param file Input file - * @return Resulting configuration - * @throws IllegalArgumentException Thrown if file is null - */ - public static YamlConfiguration loadConfiguration(File file) { - Validate.notNull(file, "File cannot be null"); - - YamlConfiguration config = new YamlConfiguration(); - - try { - config.load(file); - } catch (FileNotFoundException ex) { - } catch (IOException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file, ex); - } catch (InvalidConfigurationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load " + file , ex); - } - - return config; - } - - /** - * Creates a new {@link YamlConfiguration}, loading from the given stream. - *

          - * Any errors loading the Configuration will be logged and then ignored. - * If the specified input is not a valid config, a blank config will be - * returned. - * - * @param stream Input stream - * @return Resulting configuration - * @throws IllegalArgumentException Thrown if stream is null - * @deprecated does not properly consider encoding - * @see #load(InputStream) - * @see #loadConfiguration(Reader) - */ - @Deprecated - public static YamlConfiguration loadConfiguration(InputStream stream) { - Validate.notNull(stream, "Stream cannot be null"); - - YamlConfiguration config = new YamlConfiguration(); - - try { - config.load(stream); - } catch (IOException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load configuration from stream", ex); - } catch (InvalidConfigurationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load configuration from stream", ex); - } - - return config; - } - - - /** - * Creates a new {@link YamlConfiguration}, loading from the given reader. - *

          - * Any errors loading the Configuration will be logged and then ignored. - * If the specified input is not a valid config, a blank config will be - * returned. - * - * @param reader input - * @return resulting configuration - * @throws IllegalArgumentException Thrown if stream is null - */ - public static YamlConfiguration loadConfiguration(Reader reader) { - Validate.notNull(reader, "Stream cannot be null"); - - YamlConfiguration config = new YamlConfiguration(); - - try { - config.load(reader); - } catch (IOException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load configuration from stream", ex); - } catch (InvalidConfigurationException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Cannot load configuration from stream", ex); - } - - return config; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/file/YamlConfigurationOptions.java b/LiveWeather/src/org/bukkit/configuration/file/YamlConfigurationOptions.java deleted file mode 100755 index 57894e3..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/YamlConfigurationOptions.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bukkit.configuration.file; - -import org.apache.commons.lang.Validate; - -/** - * Various settings for controlling the input and output of a {@link - * YamlConfiguration} - */ -public class YamlConfigurationOptions extends FileConfigurationOptions { - private int indent = 2; - - protected YamlConfigurationOptions(YamlConfiguration configuration) { - super(configuration); - } - - @Override - public YamlConfiguration configuration() { - return (YamlConfiguration) super.configuration(); - } - - @Override - public YamlConfigurationOptions copyDefaults(boolean value) { - super.copyDefaults(value); - return this; - } - - @Override - public YamlConfigurationOptions pathSeparator(char value) { - super.pathSeparator(value); - return this; - } - - @Override - public YamlConfigurationOptions header(String value) { - super.header(value); - return this; - } - - @Override - public YamlConfigurationOptions copyHeader(boolean value) { - super.copyHeader(value); - return this; - } - - /** - * Gets how much spaces should be used to indent each line. - *

          - * The minimum value this may be is 2, and the maximum is 9. - * - * @return How much to indent by - */ - public int indent() { - return indent; - } - - /** - * Sets how much spaces should be used to indent each line. - *

          - * The minimum value this may be is 2, and the maximum is 9. - * - * @param value New indent - * @return This object, for chaining - */ - public YamlConfigurationOptions indent(int value) { - Validate.isTrue(value >= 2, "Indent must be at least 2 characters"); - Validate.isTrue(value <= 9, "Indent cannot be greater than 9 characters"); - - this.indent = value; - return this; - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/file/YamlConstructor.java b/LiveWeather/src/org/bukkit/configuration/file/YamlConstructor.java deleted file mode 100755 index 73ad722..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/YamlConstructor.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.bukkit.configuration.file; - -import java.util.LinkedHashMap; -import java.util.Map; - -import org.yaml.snakeyaml.nodes.Node; -import org.yaml.snakeyaml.constructor.SafeConstructor; -import org.yaml.snakeyaml.error.YAMLException; -import org.yaml.snakeyaml.nodes.Tag; - -import org.bukkit.configuration.serialization.ConfigurationSerialization; - -public class YamlConstructor extends SafeConstructor { - - public YamlConstructor() { - this.yamlConstructors.put(Tag.MAP, new ConstructCustomObject()); - } - - private class ConstructCustomObject extends ConstructYamlMap { - @Override - public Object construct(Node node) { - if (node.isTwoStepsConstruction()) { - throw new YAMLException("Unexpected referential mapping structure. Node: " + node); - } - - Map raw = (Map) super.construct(node); - - if (raw.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) { - Map typed = new LinkedHashMap(raw.size()); - for (Map.Entry entry : raw.entrySet()) { - typed.put(entry.getKey().toString(), entry.getValue()); - } - - try { - return ConfigurationSerialization.deserializeObject(typed); - } catch (IllegalArgumentException ex) { - throw new YAMLException("Could not deserialize object", ex); - } - } - - return raw; - } - - @Override - public void construct2ndStep(Node node, Object object) { - throw new YAMLException("Unexpected referential mapping structure. Node: " + node); - } - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/file/YamlRepresenter.java b/LiveWeather/src/org/bukkit/configuration/file/YamlRepresenter.java deleted file mode 100755 index bc9c098..0000000 --- a/LiveWeather/src/org/bukkit/configuration/file/YamlRepresenter.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.configuration.file; - -import java.util.LinkedHashMap; -import java.util.Map; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; - -import org.yaml.snakeyaml.nodes.Node; -import org.yaml.snakeyaml.representer.Representer; - -public class YamlRepresenter extends Representer { - - public YamlRepresenter() { - this.multiRepresenters.put(ConfigurationSection.class, new RepresentConfigurationSection()); - this.multiRepresenters.put(ConfigurationSerializable.class, new RepresentConfigurationSerializable()); - } - - private class RepresentConfigurationSection extends RepresentMap { - @Override - public Node representData(Object data) { - return super.representData(((ConfigurationSection) data).getValues(false)); - } - } - - private class RepresentConfigurationSerializable extends RepresentMap { - @Override - public Node representData(Object data) { - ConfigurationSerializable serializable = (ConfigurationSerializable) data; - Map values = new LinkedHashMap(); - values.put(ConfigurationSerialization.SERIALIZED_TYPE_KEY, ConfigurationSerialization.getAlias(serializable.getClass())); - values.putAll(serializable.serialize()); - - return super.representData(values); - } - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerializable.java b/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerializable.java deleted file mode 100755 index ba3c8c4..0000000 --- a/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerializable.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.configuration.serialization; - -import java.util.Map; - -/** - * Represents an object that may be serialized. - *

          - * These objects MUST implement one of the following, in addition to the - * methods as defined by this interface: - *

            - *
          • A static method "deserialize" that accepts a single {@link Map}< - * {@link String}, {@link Object}> and returns the class.
          • - *
          • A static method "valueOf" that accepts a single {@link Map}<{@link - * String}, {@link Object}> and returns the class.
          • - *
          • A constructor that accepts a single {@link Map}<{@link String}, - * {@link Object}>.
          • - *
          - * In addition to implementing this interface, you must register the class - * with {@link ConfigurationSerialization#registerClass(Class)}. - * - * @see DelegateDeserialization - * @see SerializableAs - */ -public interface ConfigurationSerializable { - - /** - * Creates a Map representation of this class. - *

          - * This class must provide a method to restore this class, as defined in - * the {@link ConfigurationSerializable} interface javadocs. - * - * @return Map containing the current state of this class - */ - public Map serialize(); -} diff --git a/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerialization.java b/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerialization.java deleted file mode 100755 index 96a806f..0000000 --- a/LiveWeather/src/org/bukkit/configuration/serialization/ConfigurationSerialization.java +++ /dev/null @@ -1,281 +0,0 @@ -package org.bukkit.configuration.serialization; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.lang.Validate; -import org.bukkit.Color; -import org.bukkit.FireworkEffect; -import org.bukkit.configuration.Configuration; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.util.BlockVector; -import org.bukkit.util.Vector; - -/** - * Utility class for storing and retrieving classes for {@link Configuration}. - */ -public class ConfigurationSerialization { - public static final String SERIALIZED_TYPE_KEY = "=="; - private final Class clazz; - private static Map> aliases = new HashMap>(); - - static { - registerClass(Vector.class); - registerClass(BlockVector.class); - registerClass(ItemStack.class); - registerClass(Color.class); - registerClass(PotionEffect.class); - registerClass(FireworkEffect.class); - } - - protected ConfigurationSerialization(Class clazz) { - this.clazz = clazz; - } - - protected Method getMethod(String name, boolean isStatic) { - try { - Method method = clazz.getDeclaredMethod(name, Map.class); - - if (!ConfigurationSerializable.class.isAssignableFrom(method.getReturnType())) { - return null; - } - if (Modifier.isStatic(method.getModifiers()) != isStatic) { - return null; - } - - return method; - } catch (NoSuchMethodException ex) { - return null; - } catch (SecurityException ex) { - return null; - } - } - - protected Constructor getConstructor() { - try { - return clazz.getConstructor(Map.class); - } catch (NoSuchMethodException ex) { - return null; - } catch (SecurityException ex) { - return null; - } - } - - protected ConfigurationSerializable deserializeViaMethod(Method method, Map args) { - try { - ConfigurationSerializable result = (ConfigurationSerializable) method.invoke(null, args); - - if (result == null) { - Logger.getLogger(ConfigurationSerialization.class.getName()).log(Level.SEVERE, "Could not call method '" + method.toString() + "' of " + clazz + " for deserialization: method returned null"); - } else { - return result; - } - } catch (Throwable ex) { - Logger.getLogger(ConfigurationSerialization.class.getName()).log( - Level.SEVERE, - "Could not call method '" + method.toString() + "' of " + clazz + " for deserialization", - ex instanceof InvocationTargetException ? ex.getCause() : ex); - } - - return null; - } - - protected ConfigurationSerializable deserializeViaCtor(Constructor ctor, Map args) { - try { - return ctor.newInstance(args); - } catch (Throwable ex) { - Logger.getLogger(ConfigurationSerialization.class.getName()).log( - Level.SEVERE, - "Could not call constructor '" + ctor.toString() + "' of " + clazz + " for deserialization", - ex instanceof InvocationTargetException ? ex.getCause() : ex); - } - - return null; - } - - public ConfigurationSerializable deserialize(Map args) { - Validate.notNull(args, "Args must not be null"); - - ConfigurationSerializable result = null; - Method method = null; - - if (result == null) { - method = getMethod("deserialize", true); - - if (method != null) { - result = deserializeViaMethod(method, args); - } - } - - if (result == null) { - method = getMethod("valueOf", true); - - if (method != null) { - result = deserializeViaMethod(method, args); - } - } - - if (result == null) { - Constructor constructor = getConstructor(); - - if (constructor != null) { - result = deserializeViaCtor(constructor, args); - } - } - - return result; - } - - /** - * Attempts to deserialize the given arguments into a new instance of the - * given class. - *

          - * The class must implement {@link ConfigurationSerializable}, including - * the extra methods as specified in the javadoc of - * ConfigurationSerializable. - *

          - * If a new instance could not be made, an example being the class not - * fully implementing the interface, null will be returned. - * - * @param args Arguments for deserialization - * @param clazz Class to deserialize into - * @return New instance of the specified class - */ - public static ConfigurationSerializable deserializeObject(Map args, Class clazz) { - return new ConfigurationSerialization(clazz).deserialize(args); - } - - /** - * Attempts to deserialize the given arguments into a new instance of the - * given class. - *

          - * The class must implement {@link ConfigurationSerializable}, including - * the extra methods as specified in the javadoc of - * ConfigurationSerializable. - *

          - * If a new instance could not be made, an example being the class not - * fully implementing the interface, null will be returned. - * - * @param args Arguments for deserialization - * @return New instance of the specified class - */ - public static ConfigurationSerializable deserializeObject(Map args) { - Class clazz = null; - - if (args.containsKey(SERIALIZED_TYPE_KEY)) { - try { - String alias = (String) args.get(SERIALIZED_TYPE_KEY); - - if (alias == null) { - throw new IllegalArgumentException("Cannot have null alias"); - } - clazz = getClassByAlias(alias); - if (clazz == null) { - throw new IllegalArgumentException("Specified class does not exist ('" + alias + "')"); - } - } catch (ClassCastException ex) { - ex.fillInStackTrace(); - throw ex; - } - } else { - throw new IllegalArgumentException("Args doesn't contain type key ('" + SERIALIZED_TYPE_KEY + "')"); - } - - return new ConfigurationSerialization(clazz).deserialize(args); - } - - /** - * Registers the given {@link ConfigurationSerializable} class by its - * alias - * - * @param clazz Class to register - */ - public static void registerClass(Class clazz) { - DelegateDeserialization delegate = clazz.getAnnotation(DelegateDeserialization.class); - - if (delegate == null) { - registerClass(clazz, getAlias(clazz)); - registerClass(clazz, clazz.getName()); - } - } - - /** - * Registers the given alias to the specified {@link - * ConfigurationSerializable} class - * - * @param clazz Class to register - * @param alias Alias to register as - * @see SerializableAs - */ - public static void registerClass(Class clazz, String alias) { - aliases.put(alias, clazz); - } - - /** - * Unregisters the specified alias to a {@link ConfigurationSerializable} - * - * @param alias Alias to unregister - */ - public static void unregisterClass(String alias) { - aliases.remove(alias); - } - - /** - * Unregisters any aliases for the specified {@link - * ConfigurationSerializable} class - * - * @param clazz Class to unregister - */ - public static void unregisterClass(Class clazz) { - while (aliases.values().remove(clazz)) { - ; - } - } - - /** - * Attempts to get a registered {@link ConfigurationSerializable} class by - * its alias - * - * @param alias Alias of the serializable - * @return Registered class, or null if not found - */ - public static Class getClassByAlias(String alias) { - return aliases.get(alias); - } - - /** - * Gets the correct alias for the given {@link ConfigurationSerializable} - * class - * - * @param clazz Class to get alias for - * @return Alias to use for the class - */ - public static String getAlias(Class clazz) { - DelegateDeserialization delegate = clazz.getAnnotation(DelegateDeserialization.class); - - if (delegate != null) { - if ((delegate.value() == null) || (delegate.value() == clazz)) { - delegate = null; - } else { - return getAlias(delegate.value()); - } - } - - if (delegate == null) { - SerializableAs alias = clazz.getAnnotation(SerializableAs.class); - - if ((alias != null) && (alias.value() != null)) { - return alias.value(); - } - } - - return clazz.getName(); - } -} diff --git a/LiveWeather/src/org/bukkit/configuration/serialization/DelegateDeserialization.java b/LiveWeather/src/org/bukkit/configuration/serialization/DelegateDeserialization.java deleted file mode 100755 index 1cfae94..0000000 --- a/LiveWeather/src/org/bukkit/configuration/serialization/DelegateDeserialization.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.configuration.serialization; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Applies to a {@link ConfigurationSerializable} that will delegate all - * deserialization to another {@link ConfigurationSerializable}. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface DelegateDeserialization { - /** - * Which class should be used as a delegate for this classes - * deserialization - * - * @return Delegate class - */ - public Class value(); -} diff --git a/LiveWeather/src/org/bukkit/configuration/serialization/SerializableAs.java b/LiveWeather/src/org/bukkit/configuration/serialization/SerializableAs.java deleted file mode 100755 index c5ee998..0000000 --- a/LiveWeather/src/org/bukkit/configuration/serialization/SerializableAs.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.configuration.serialization; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Represents an "alias" that a {@link ConfigurationSerializable} may be - * stored as. - * If this is not present on a {@link ConfigurationSerializable} class, it - * will use the fully qualified name of the class. - *

          - * This value will be stored in the configuration so that the configuration - * deserialization can determine what type it is. - *

          - * Using this annotation on any other class than a {@link - * ConfigurationSerializable} will have no effect. - * - * @see ConfigurationSerialization#registerClass(Class, String) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface SerializableAs { - /** - * This is the name your class will be stored and retrieved as. - *

          - * This name MUST be unique. We recommend using names such as - * "MyPluginThing" instead of "Thing". - * - * @return Name to serialize the class as. - */ - public String value(); -} diff --git a/LiveWeather/src/org/bukkit/conversations/BooleanPrompt.java b/LiveWeather/src/org/bukkit/conversations/BooleanPrompt.java deleted file mode 100755 index 3f2c97f..0000000 --- a/LiveWeather/src/org/bukkit/conversations/BooleanPrompt.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.conversations; - -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.BooleanUtils; - -/** - * BooleanPrompt is the base class for any prompt that requires a boolean - * response from the user. - */ -public abstract class BooleanPrompt extends ValidatingPrompt{ - - public BooleanPrompt() { - super(); - } - - @Override - protected boolean isInputValid(ConversationContext context, String input) { - String[] accepted = {"true", "false", "on", "off", "yes", "no"}; - return ArrayUtils.contains(accepted, input.toLowerCase()); - } - - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - return acceptValidatedInput(context, BooleanUtils.toBoolean(input)); - } - - /** - * Override this method to perform some action with the user's boolean - * response. - * - * @param context Context information about the conversation. - * @param input The user's boolean response. - * @return The next {@link Prompt} in the prompt graph. - */ - protected abstract Prompt acceptValidatedInput(ConversationContext context, boolean input); -} diff --git a/LiveWeather/src/org/bukkit/conversations/Conversable.java b/LiveWeather/src/org/bukkit/conversations/Conversable.java deleted file mode 100755 index 55674b5..0000000 --- a/LiveWeather/src/org/bukkit/conversations/Conversable.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.command.CommandSender; - -/** - * The Conversable interface is used to indicate objects that can have - * conversations. - */ -public interface Conversable { - - /** - * Tests to see of a Conversable object is actively engaged in a - * conversation. - * - * @return True if a conversation is in progress - */ - public boolean isConversing(); - - /** - * Accepts input into the active conversation. If no conversation is in - * progress, this method does nothing. - * - * @param input The input message into the conversation - */ - public void acceptConversationInput(String input); - - /** - * Enters into a dialog with a Conversation object. - * - * @param conversation The conversation to begin - * @return True if the conversation should proceed, false if it has been - * enqueued - */ - public boolean beginConversation(Conversation conversation); - - /** - * Abandons an active conversation. - * - * @param conversation The conversation to abandon - */ - public void abandonConversation(Conversation conversation); - - /** - * Abandons an active conversation. - * - * @param conversation The conversation to abandon - * @param details Details about why the conversation was abandoned - */ - public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details); - - /** - * Sends this sender a message raw - * - * @param message Message to be displayed - */ - public void sendRawMessage(String message); -} diff --git a/LiveWeather/src/org/bukkit/conversations/Conversation.java b/LiveWeather/src/org/bukkit/conversations/Conversation.java deleted file mode 100755 index d4c1f6d..0000000 --- a/LiveWeather/src/org/bukkit/conversations/Conversation.java +++ /dev/null @@ -1,297 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.plugin.Plugin; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * The Conversation class is responsible for tracking the current state of a - * conversation, displaying prompts to the user, and dispatching the user's - * response to the appropriate place. Conversation objects are not typically - * instantiated directly. Instead a {@link ConversationFactory} is used to - * construct identical conversations on demand. - *

          - * Conversation flow consists of a directed graph of {@link Prompt} objects. - * Each time a prompt gets input from the user, it must return the next prompt - * in the graph. Since each Prompt chooses the next Prompt, complex - * conversation trees can be implemented where the nature of the player's - * response directs the flow of the conversation. - *

          - * Each conversation has a {@link ConversationPrefix} that prepends all output - * from the conversation to the player. The ConversationPrefix can be used to - * display the plugin name or conversation status as the conversation evolves. - *

          - * Each conversation has a timeout measured in the number of inactive seconds - * to wait before abandoning the conversation. If the inactivity timeout is - * reached, the conversation is abandoned and the user's incoming and outgoing - * chat is returned to normal. - *

          - * You should not construct a conversation manually. Instead, use the {@link - * ConversationFactory} for access to all available options. - */ -public class Conversation { - - private Prompt firstPrompt; - private boolean abandoned; - protected Prompt currentPrompt; - protected ConversationContext context; - protected boolean modal; - protected boolean localEchoEnabled; - protected ConversationPrefix prefix; - protected List cancellers; - protected List abandonedListeners; - - /** - * Initializes a new Conversation. - * - * @param plugin The plugin that owns this conversation. - * @param forWhom The entity for whom this conversation is mediating. - * @param firstPrompt The first prompt in the conversation graph. - */ - public Conversation(Plugin plugin, Conversable forWhom, Prompt firstPrompt) { - this(plugin, forWhom, firstPrompt, new HashMap()); - } - - /** - * Initializes a new Conversation. - * - * @param plugin The plugin that owns this conversation. - * @param forWhom The entity for whom this conversation is mediating. - * @param firstPrompt The first prompt in the conversation graph. - * @param initialSessionData Any initial values to put in the conversation - * context sessionData map. - */ - public Conversation(Plugin plugin, Conversable forWhom, Prompt firstPrompt, Map initialSessionData) { - this.firstPrompt = firstPrompt; - this.context = new ConversationContext(plugin, forWhom, initialSessionData); - this.modal = true; - this.localEchoEnabled = true; - this.prefix = new NullConversationPrefix(); - this.cancellers = new ArrayList(); - this.abandonedListeners = new ArrayList(); - } - - /** - * Gets the entity for whom this conversation is mediating. - * - * @return The entity. - */ - public Conversable getForWhom() { - return context.getForWhom(); - } - - /** - * Gets the modality of this conversation. If a conversation is modal, all - * messages directed to the player are suppressed for the duration of the - * conversation. - * - * @return The conversation modality. - */ - public boolean isModal() { - return modal; - } - - /** - * Sets the modality of this conversation. If a conversation is modal, - * all messages directed to the player are suppressed for the duration of - * the conversation. - * - * @param modal The new conversation modality. - */ - void setModal(boolean modal) { - this.modal = modal; - } - - /** - * Gets the status of local echo for this conversation. If local echo is - * enabled, any text submitted to a conversation gets echoed back into the - * submitter's chat window. - * - * @return The status of local echo. - */ - public boolean isLocalEchoEnabled() { - return localEchoEnabled; - } - - /** - * Sets the status of local echo for this conversation. If local echo is - * enabled, any text submitted to a conversation gets echoed back into the - * submitter's chat window. - * - * @param localEchoEnabled The status of local echo. - */ - public void setLocalEchoEnabled(boolean localEchoEnabled) { - this.localEchoEnabled = localEchoEnabled; - } - - /** - * Gets the {@link ConversationPrefix} that prepends all output from this - * conversation. - * - * @return The ConversationPrefix in use. - */ - public ConversationPrefix getPrefix() { - return prefix; - } - - /** - * Sets the {@link ConversationPrefix} that prepends all output from this - * conversation. - * - * @param prefix The ConversationPrefix to use. - */ - void setPrefix(ConversationPrefix prefix) { - this.prefix = prefix; - } - - /** - * Adds a {@link ConversationCanceller} to the cancellers collection. - * - * @param canceller The {@link ConversationCanceller} to add. - */ - void addConversationCanceller(ConversationCanceller canceller) { - canceller.setConversation(this); - this.cancellers.add(canceller); - } - - /** - * Gets the list of {@link ConversationCanceller}s - * - * @return The list. - */ - public List getCancellers() { - return cancellers; - } - - /** - * Returns the Conversation's {@link ConversationContext}. - * - * @return The ConversationContext. - */ - public ConversationContext getContext() { - return context; - } - - /** - * Displays the first prompt of this conversation and begins redirecting - * the user's chat responses. - */ - public void begin() { - if (currentPrompt == null) { - abandoned = false; - currentPrompt = firstPrompt; - context.getForWhom().beginConversation(this); - } - } - - /** - * Returns Returns the current state of the conversation. - * - * @return The current state of the conversation. - */ - public ConversationState getState() { - if (currentPrompt != null) { - return ConversationState.STARTED; - } else if (abandoned) { - return ConversationState.ABANDONED; - } else { - return ConversationState.UNSTARTED; - } - } - - /** - * Passes player input into the current prompt. The next prompt (as - * determined by the current prompt) is then displayed to the user. - * - * @param input The user's chat text. - */ - public void acceptInput(String input) { - if (currentPrompt != null) { - - // Echo the user's input - if (localEchoEnabled) { - context.getForWhom().sendRawMessage(prefix.getPrefix(context) + input); - } - - // Test for conversation abandonment based on input - for(ConversationCanceller canceller : cancellers) { - if (canceller.cancelBasedOnInput(context, input)) { - abandon(new ConversationAbandonedEvent(this, canceller)); - return; - } - } - - // Not abandoned, output the next prompt - currentPrompt = currentPrompt.acceptInput(context, input); - outputNextPrompt(); - } - } - - /** - * Adds a {@link ConversationAbandonedListener}. - * - * @param listener The listener to add. - */ - public synchronized void addConversationAbandonedListener(ConversationAbandonedListener listener) { - abandonedListeners.add(listener); - } - - /** - * Removes a {@link ConversationAbandonedListener}. - * - * @param listener The listener to remove. - */ - public synchronized void removeConversationAbandonedListener(ConversationAbandonedListener listener) { - abandonedListeners.remove(listener); - } - - /** - * Abandons and resets the current conversation. Restores the user's - * normal chat behavior. - */ - public void abandon() { - abandon(new ConversationAbandonedEvent(this, new ManuallyAbandonedConversationCanceller())); - } - - /** - * Abandons and resets the current conversation. Restores the user's - * normal chat behavior. - * - * @param details Details about why the conversation was abandoned - */ - public synchronized void abandon(ConversationAbandonedEvent details) { - if (!abandoned) { - abandoned = true; - currentPrompt = null; - context.getForWhom().abandonConversation(this); - for (ConversationAbandonedListener listener : abandonedListeners) { - listener.conversationAbandoned(details); - } - } - } - - /** - * Displays the next user prompt and abandons the conversation if the next - * prompt is null. - */ - public void outputNextPrompt() { - if (currentPrompt == null) { - abandon(new ConversationAbandonedEvent(this)); - } else { - context.getForWhom().sendRawMessage(prefix.getPrefix(context) + currentPrompt.getPromptText(context)); - if (!currentPrompt.blocksForInput(context)) { - currentPrompt = currentPrompt.acceptInput(context, null); - outputNextPrompt(); - } - } - } - - public enum ConversationState { - UNSTARTED, - STARTED, - ABANDONED - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedEvent.java b/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedEvent.java deleted file mode 100755 index 63c4a2a..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bukkit.conversations; - -import java.util.EventObject; - -/** - * ConversationAbandonedEvent contains information about an abandoned - * conversation. - */ -public class ConversationAbandonedEvent extends EventObject { - - private ConversationContext context; - private ConversationCanceller canceller; - - public ConversationAbandonedEvent(Conversation conversation) { - this(conversation, null); - } - - public ConversationAbandonedEvent(Conversation conversation, ConversationCanceller canceller) { - super(conversation); - this.context = conversation.getContext(); - this.canceller = canceller; - } - - /** - * Gets the object that caused the conversation to be abandoned. - * - * @return The object that abandoned the conversation. - */ - public ConversationCanceller getCanceller() { - return canceller; - } - - /** - * Gets the abandoned conversation's conversation context. - * - * @return The abandoned conversation's conversation context. - */ - public ConversationContext getContext() { - return context; - } - - /** - * Indicates how the conversation was abandoned - naturally as part of the - * prompt chain or prematurely via a {@link ConversationCanceller}. - * - * @return True if the conversation is abandoned gracefully by a {@link - * Prompt} returning null or the next prompt. False of the - * conversations is abandoned prematurely by a ConversationCanceller. - */ - public boolean gracefulExit() { - return canceller == null; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedListener.java b/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedListener.java deleted file mode 100755 index dc046b1..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationAbandonedListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.conversations; - -import java.util.EventListener; - -/** - */ -public interface ConversationAbandonedListener extends EventListener { - /** - * Called whenever a {@link Conversation} is abandoned. - * - * @param abandonedEvent Contains details about the abandoned - * conversation. - */ - public void conversationAbandoned(ConversationAbandonedEvent abandonedEvent); -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationCanceller.java b/LiveWeather/src/org/bukkit/conversations/ConversationCanceller.java deleted file mode 100755 index db43bb1..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationCanceller.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.conversations; - -/** - * A ConversationCanceller is a class that cancels an active {@link - * Conversation}. A Conversation can have more than one ConversationCanceller. - */ -public interface ConversationCanceller extends Cloneable { - - /** - * Sets the conversation this ConversationCanceller can optionally cancel. - * - * @param conversation A conversation. - */ - public void setConversation(Conversation conversation); - - /** - * Cancels a conversation based on user input. - * - * @param context Context information about the conversation. - * @param input The input text from the user. - * @return True to cancel the conversation, False otherwise. - */ - public boolean cancelBasedOnInput(ConversationContext context, String input); - - /** - * Allows the {@link ConversationFactory} to duplicate this - * ConversationCanceller when creating a new {@link Conversation}. - *

          - * Implementing this method should reset any internal object state. - * - * @return A clone. - */ - public ConversationCanceller clone(); -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationContext.java b/LiveWeather/src/org/bukkit/conversations/ConversationContext.java deleted file mode 100755 index 4f33ff4..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationContext.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.plugin.Plugin; - -import java.util.Map; - -/** - * A ConversationContext provides continuity between nodes in the prompt graph - * by giving the developer access to the subject of the conversation and a - * generic map for storing values that are shared between all {@link Prompt} - * invocations. - */ -public class ConversationContext { - private Conversable forWhom; - private Map sessionData; - private Plugin plugin; - - /** - * @param plugin The owning plugin. - * @param forWhom The subject of the conversation. - * @param initialSessionData Any initial values to put in the sessionData - * map. - */ - public ConversationContext(Plugin plugin, Conversable forWhom, Map initialSessionData) { - this.plugin = plugin; - this.forWhom = forWhom; - this.sessionData = initialSessionData; - } - - /** - * Gets the plugin that owns this conversation. - * - * @return The owning plugin. - */ - public Plugin getPlugin() { - return plugin; - } - - /** - * Gets the subject of the conversation. - * - * @return The subject of the conversation. - */ - public Conversable getForWhom() { - return forWhom; - } - - /** - * Gets session data shared between all {@link Prompt} invocations. Use - * this as a way to pass data through each Prompt as the conversation - * develops. - * - * @param key The session data key. - * @return The requested session data. - */ - public Object getSessionData(Object key) { - return sessionData.get(key); - } - - /** - * Sets session data shared between all {@link Prompt} invocations. Use - * this as a way to pass data through each prompt as the conversation - * develops. - * - * @param key The session data key. - * @param value The session data value. - */ - public void setSessionData(Object key, Object value) { - sessionData.put(key, value); - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationFactory.java b/LiveWeather/src/org/bukkit/conversations/ConversationFactory.java deleted file mode 100755 index e7cbd52..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationFactory.java +++ /dev/null @@ -1,228 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * A ConversationFactory is responsible for creating a {@link Conversation} - * from a predefined template. A ConversationFactory is typically created when - * a plugin is instantiated and builds a Conversation each time a user - * initiates a conversation with the plugin. Each Conversation maintains its - * own state and calls back as needed into the plugin. - *

          - * The ConversationFactory implements a fluid API, allowing parameters to be - * set as an extension to the constructor. - */ -public class ConversationFactory { - - protected Plugin plugin; - protected boolean isModal; - protected boolean localEchoEnabled; - protected ConversationPrefix prefix; - protected Prompt firstPrompt; - protected Map initialSessionData; - protected String playerOnlyMessage; - protected List cancellers; - protected List abandonedListeners; - - /** - * Constructs a ConversationFactory. - * - * @param plugin The plugin that owns the factory. - */ - public ConversationFactory(Plugin plugin) - { - this.plugin = plugin; - isModal = true; - localEchoEnabled = true; - prefix = new NullConversationPrefix(); - firstPrompt = Prompt.END_OF_CONVERSATION; - initialSessionData = new HashMap(); - playerOnlyMessage = null; - cancellers = new ArrayList(); - abandonedListeners = new ArrayList(); - } - - /** - * Sets the modality of all {@link Conversation}s created by this factory. - * If a conversation is modal, all messages directed to the player are - * suppressed for the duration of the conversation. - *

          - * The default is True. - * - * @param modal The modality of all conversations to be created. - * @return This object. - */ - public ConversationFactory withModality(boolean modal) - { - isModal = modal; - return this; - } - - /** - * Sets the local echo status for all {@link Conversation}s created by - * this factory. If local echo is enabled, any text submitted to a - * conversation gets echoed back into the submitter's chat window. - * - * @param localEchoEnabled The status of local echo. - * @return This object. - */ - public ConversationFactory withLocalEcho(boolean localEchoEnabled) { - this.localEchoEnabled = localEchoEnabled; - return this; - } - - /** - * Sets the {@link ConversationPrefix} that prepends all output from all - * generated conversations. - *

          - * The default is a {@link NullConversationPrefix}; - * - * @param prefix The ConversationPrefix to use. - * @return This object. - */ - public ConversationFactory withPrefix(ConversationPrefix prefix) { - this.prefix = prefix; - return this; - } - - /** - * Sets the number of inactive seconds to wait before automatically - * abandoning all generated conversations. - *

          - * The default is 600 seconds (5 minutes). - * - * @param timeoutSeconds The number of seconds to wait. - * @return This object. - */ - public ConversationFactory withTimeout(int timeoutSeconds) { - return withConversationCanceller(new InactivityConversationCanceller(plugin, timeoutSeconds)); - } - - /** - * Sets the first prompt to use in all generated conversations. - *

          - * The default is Prompt.END_OF_CONVERSATION. - * - * @param firstPrompt The first prompt. - * @return This object. - */ - public ConversationFactory withFirstPrompt(Prompt firstPrompt) { - this.firstPrompt = firstPrompt; - return this; - } - - /** - * Sets any initial data with which to populate the conversation context - * sessionData map. - * - * @param initialSessionData The conversation context's initial - * sessionData. - * @return This object. - */ - public ConversationFactory withInitialSessionData(Map initialSessionData) { - this.initialSessionData = initialSessionData; - return this; - } - - /** - * Sets the player input that, when received, will immediately terminate - * the conversation. - * - * @param escapeSequence Input to terminate the conversation. - * @return This object. - */ - public ConversationFactory withEscapeSequence(String escapeSequence) { - return withConversationCanceller(new ExactMatchConversationCanceller(escapeSequence)); - } - - - /** - * Adds a {@link ConversationCanceller} to constructed conversations. - * - * @param canceller The {@link ConversationCanceller} to add. - * @return This object. - */ - public ConversationFactory withConversationCanceller(ConversationCanceller canceller) { - cancellers.add(canceller); - return this; - } - - /** - * Prevents this factory from creating a conversation for non-player - * {@link Conversable} objects. - * - * @param playerOnlyMessage The message to return to a non-play in lieu of - * starting a conversation. - * @return This object. - */ - public ConversationFactory thatExcludesNonPlayersWithMessage(String playerOnlyMessage) { - this.playerOnlyMessage = playerOnlyMessage; - return this; - } - - /** - * Adds a {@link ConversationAbandonedListener} to all conversations - * constructed by this factory. - * - * @param listener The listener to add. - * @return This object. - */ - public ConversationFactory addConversationAbandonedListener(ConversationAbandonedListener listener) { - abandonedListeners.add(listener); - return this; - } - - /** - * Constructs a {@link Conversation} in accordance with the defaults set - * for this factory. - * - * @param forWhom The entity for whom the new conversation is mediating. - * @return A new conversation. - */ - public Conversation buildConversation(Conversable forWhom) { - //Abort conversation construction if we aren't supposed to talk to non-players - if (playerOnlyMessage != null && !(forWhom instanceof Player)) { - return new Conversation(plugin, forWhom, new NotPlayerMessagePrompt()); - } - - //Clone any initial session data - Map copiedInitialSessionData = new HashMap(); - copiedInitialSessionData.putAll(initialSessionData); - - //Build and return a conversation - Conversation conversation = new Conversation(plugin, forWhom, firstPrompt, copiedInitialSessionData); - conversation.setModal(isModal); - conversation.setLocalEchoEnabled(localEchoEnabled); - conversation.setPrefix(prefix); - - //Clone the conversation cancellers - for (ConversationCanceller canceller : cancellers) { - conversation.addConversationCanceller(canceller.clone()); - } - - //Add the ConversationAbandonedListeners - for (ConversationAbandonedListener listener : abandonedListeners) { - conversation.addConversationAbandonedListener(listener); - } - - return conversation; - } - - private class NotPlayerMessagePrompt extends MessagePrompt { - - public String getPromptText(ConversationContext context) { - return playerOnlyMessage; - } - - @Override - protected Prompt getNextPrompt(ConversationContext context) { - return Prompt.END_OF_CONVERSATION; - } - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ConversationPrefix.java b/LiveWeather/src/org/bukkit/conversations/ConversationPrefix.java deleted file mode 100755 index 9889f17..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ConversationPrefix.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.command.CommandSender; - -/** - * A ConversationPrefix implementation prepends all output from the - * conversation to the player. The ConversationPrefix can be used to display - * the plugin name or conversation status as the conversation evolves. - */ -public interface ConversationPrefix { - - /** - * Gets the prefix to use before each message to the player. - * - * @param context Context information about the conversation. - * @return The prefix text. - */ - String getPrefix(ConversationContext context); -} diff --git a/LiveWeather/src/org/bukkit/conversations/ExactMatchConversationCanceller.java b/LiveWeather/src/org/bukkit/conversations/ExactMatchConversationCanceller.java deleted file mode 100755 index 327b9d9..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ExactMatchConversationCanceller.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.conversations; - -/** - * An ExactMatchConversationCanceller cancels a conversation if the user - * enters an exact input string - */ -public class ExactMatchConversationCanceller implements ConversationCanceller { - private String escapeSequence; - - /** - * Builds an ExactMatchConversationCanceller. - * - * @param escapeSequence The string that, if entered by the user, will - * cancel the conversation. - */ - public ExactMatchConversationCanceller(String escapeSequence) { - this.escapeSequence = escapeSequence; - } - - public void setConversation(Conversation conversation) {} - - public boolean cancelBasedOnInput(ConversationContext context, String input) { - return input.equals(escapeSequence); - } - - public ConversationCanceller clone() { - return new ExactMatchConversationCanceller(escapeSequence); - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/FixedSetPrompt.java b/LiveWeather/src/org/bukkit/conversations/FixedSetPrompt.java deleted file mode 100755 index b867c11..0000000 --- a/LiveWeather/src/org/bukkit/conversations/FixedSetPrompt.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.conversations; - -import org.apache.commons.lang.StringUtils; - -import java.util.Arrays; -import java.util.List; - -/** - * FixedSetPrompt is the base class for any prompt that requires a fixed set - * response from the user. - */ -public abstract class FixedSetPrompt extends ValidatingPrompt { - - protected List fixedSet; - - /** - * Creates a FixedSetPrompt from a set of strings. - *

          - * foo = new FixedSetPrompt("bar", "cheese", "panda"); - * - * @param fixedSet A fixed set of strings, one of which the user must - * type. - */ - public FixedSetPrompt(String... fixedSet) { - super(); - this.fixedSet = Arrays.asList(fixedSet); - } - - private FixedSetPrompt() {} - - @Override - protected boolean isInputValid(ConversationContext context, String input) { - return fixedSet.contains(input); - } - - /** - * Utility function to create a formatted string containing all the - * options declared in the constructor. - * - * @return the options formatted like "[bar, cheese, panda]" if bar, - * cheese, and panda were the options used - */ - protected String formatFixedSet() { - return "[" + StringUtils.join(fixedSet, ", ") + "]"; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/InactivityConversationCanceller.java b/LiveWeather/src/org/bukkit/conversations/InactivityConversationCanceller.java deleted file mode 100755 index 760a518..0000000 --- a/LiveWeather/src/org/bukkit/conversations/InactivityConversationCanceller.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.Server; -import org.bukkit.plugin.Plugin; - -/** - * An InactivityConversationCanceller will cancel a {@link Conversation} after - * a period of inactivity by the user. - */ -public class InactivityConversationCanceller implements ConversationCanceller { - protected Plugin plugin; - protected int timeoutSeconds; - protected Conversation conversation; - private int taskId = -1; - - /** - * Creates an InactivityConversationCanceller. - * - * @param plugin The owning plugin. - * @param timeoutSeconds The number of seconds of inactivity to wait. - */ - public InactivityConversationCanceller(Plugin plugin, int timeoutSeconds) { - this.plugin = plugin; - this.timeoutSeconds = timeoutSeconds; - } - - public void setConversation(Conversation conversation) { - this.conversation = conversation; - startTimer(); - } - - public boolean cancelBasedOnInput(ConversationContext context, String input) { - // Reset the inactivity timer - stopTimer(); - startTimer(); - return false; - } - - public ConversationCanceller clone() { - return new InactivityConversationCanceller(plugin, timeoutSeconds); - } - - /** - * Starts an inactivity timer. - */ - private void startTimer() { - taskId = plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - public void run() { - if (conversation.getState() == Conversation.ConversationState.UNSTARTED) { - startTimer(); - } else if (conversation.getState() == Conversation.ConversationState.STARTED) { - cancelling(conversation); - conversation.abandon(new ConversationAbandonedEvent(conversation, InactivityConversationCanceller.this)); - } - } - }, timeoutSeconds * 20); - } - - /** - * Stops the active inactivity timer. - */ - private void stopTimer() { - if (taskId != -1) { - plugin.getServer().getScheduler().cancelTask(taskId); - taskId = -1; - } - } - - /** - * Subclasses of InactivityConversationCanceller can override this method - * to take additional actions when the inactivity timer abandons the - * conversation. - * - * @param conversation The conversation being abandoned. - */ - protected void cancelling(Conversation conversation) { - - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java b/LiveWeather/src/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java deleted file mode 100755 index 3e80de1..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.conversations; - -/** - * The ManuallyAbandonedConversationCanceller is only used as part of a {@link - * ConversationAbandonedEvent} to indicate that the conversation was manually - * abandoned by programmatically calling the abandon() method on it. - */ -public class ManuallyAbandonedConversationCanceller implements ConversationCanceller{ - public void setConversation(Conversation conversation) { - throw new UnsupportedOperationException(); - } - - public boolean cancelBasedOnInput(ConversationContext context, String input) { - throw new UnsupportedOperationException(); - } - - public ConversationCanceller clone() { - throw new UnsupportedOperationException(); - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/MessagePrompt.java b/LiveWeather/src/org/bukkit/conversations/MessagePrompt.java deleted file mode 100755 index fa1775a..0000000 --- a/LiveWeather/src/org/bukkit/conversations/MessagePrompt.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bukkit.conversations; - -/** - * MessagePrompt is the base class for any prompt that only displays a message - * to the user and requires no input. - */ -public abstract class MessagePrompt implements Prompt{ - - public MessagePrompt() { - super(); - } - - /** - * Message prompts never wait for user input before continuing. - * - * @param context Context information about the conversation. - * @return Always false. - */ - public boolean blocksForInput(ConversationContext context) { - return false; - } - - /** - * Accepts and ignores any user input, returning the next prompt in the - * prompt graph instead. - * - * @param context Context information about the conversation. - * @param input Ignored. - * @return The next prompt in the prompt graph. - */ - public Prompt acceptInput(ConversationContext context, String input) { - return getNextPrompt(context); - } - - /** - * Override this method to return the next prompt in the prompt graph. - * - * @param context Context information about the conversation. - * @return The next prompt in the prompt graph. - */ - protected abstract Prompt getNextPrompt(ConversationContext context); -} diff --git a/LiveWeather/src/org/bukkit/conversations/NullConversationPrefix.java b/LiveWeather/src/org/bukkit/conversations/NullConversationPrefix.java deleted file mode 100755 index 7d8a7d8..0000000 --- a/LiveWeather/src/org/bukkit/conversations/NullConversationPrefix.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.command.CommandSender; - -/** - * NullConversationPrefix is a {@link ConversationPrefix} implementation that - * displays nothing in front of conversation output. - */ -public class NullConversationPrefix implements ConversationPrefix{ - - /** - * Prepends each conversation message with an empty string. - * - * @param context Context information about the conversation. - * @return An empty string. - */ - public String getPrefix(ConversationContext context) { - return ""; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/NumericPrompt.java b/LiveWeather/src/org/bukkit/conversations/NumericPrompt.java deleted file mode 100755 index f0fdea1..0000000 --- a/LiveWeather/src/org/bukkit/conversations/NumericPrompt.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.bukkit.conversations; - -import org.apache.commons.lang.math.NumberUtils; - -/** - * NumericPrompt is the base class for any prompt that requires a {@link - * Number} response from the user. - */ -public abstract class NumericPrompt extends ValidatingPrompt{ - public NumericPrompt() { - super(); - } - - @Override - protected boolean isInputValid(ConversationContext context, String input) { - return NumberUtils.isNumber(input) && isNumberValid(context, NumberUtils.createNumber(input)); - } - - /** - * Override this method to do further validation on the numeric player - * input after the input has been determined to actually be a number. - * - * @param context Context information about the conversation. - * @param input The number the player provided. - * @return The validity of the player's input. - */ - protected boolean isNumberValid(ConversationContext context, Number input) { - return true; - } - - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - try - { - return acceptValidatedInput(context, NumberUtils.createNumber(input)); - } catch (NumberFormatException e) { - return acceptValidatedInput(context, NumberUtils.INTEGER_ZERO); - } - } - - /** - * Override this method to perform some action with the user's integer - * response. - * - * @param context Context information about the conversation. - * @param input The user's response as a {@link Number}. - * @return The next {@link Prompt} in the prompt graph. - */ - protected abstract Prompt acceptValidatedInput(ConversationContext context, Number input); - - @Override - protected String getFailedValidationText(ConversationContext context, String invalidInput) { - if (NumberUtils.isNumber(invalidInput)) { - return getFailedValidationText(context, NumberUtils.createNumber(invalidInput)); - } else { - return getInputNotNumericText(context, invalidInput); - } - } - - /** - * Optionally override this method to display an additional message if the - * user enters an invalid number. - * - * @param context Context information about the conversation. - * @param invalidInput The invalid input provided by the user. - * @return A message explaining how to correct the input. - */ - protected String getInputNotNumericText(ConversationContext context, String invalidInput) { - return null; - } - - /** - * Optionally override this method to display an additional message if the - * user enters an invalid numeric input. - * - * @param context Context information about the conversation. - * @param invalidInput The invalid input provided by the user. - * @return A message explaining how to correct the input. - */ - protected String getFailedValidationText(ConversationContext context, Number invalidInput) { - return null; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/PlayerNamePrompt.java b/LiveWeather/src/org/bukkit/conversations/PlayerNamePrompt.java deleted file mode 100755 index feeb715..0000000 --- a/LiveWeather/src/org/bukkit/conversations/PlayerNamePrompt.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -/** - * PlayerNamePrompt is the base class for any prompt that requires the player - * to enter another player's name. - */ -public abstract class PlayerNamePrompt extends ValidatingPrompt{ - private Plugin plugin; - - public PlayerNamePrompt(Plugin plugin) { - super(); - this.plugin = plugin; - } - - @Override - protected boolean isInputValid(ConversationContext context, String input) { - return plugin.getServer().getPlayer(input) != null; - - } - - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - return acceptValidatedInput(context, plugin.getServer().getPlayer(input)); - } - - /** - * Override this method to perform some action with the user's player name - * response. - * - * @param context Context information about the conversation. - * @param input The user's player name response. - * @return The next {@link Prompt} in the prompt graph. - */ - protected abstract Prompt acceptValidatedInput(ConversationContext context, Player input); -} diff --git a/LiveWeather/src/org/bukkit/conversations/PluginNameConversationPrefix.java b/LiveWeather/src/org/bukkit/conversations/PluginNameConversationPrefix.java deleted file mode 100755 index 2290979..0000000 --- a/LiveWeather/src/org/bukkit/conversations/PluginNameConversationPrefix.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; - -/** - * PluginNameConversationPrefix is a {@link ConversationPrefix} implementation - * that displays the plugin name in front of conversation output. - */ -public class PluginNameConversationPrefix implements ConversationPrefix { - - protected String separator; - protected ChatColor prefixColor; - protected Plugin plugin; - - private String cachedPrefix; - - public PluginNameConversationPrefix(Plugin plugin) { - this(plugin, " > ", ChatColor.LIGHT_PURPLE); - } - - public PluginNameConversationPrefix(Plugin plugin, String separator, ChatColor prefixColor) { - this.separator = separator; - this.prefixColor = prefixColor; - this.plugin = plugin; - - cachedPrefix = prefixColor + plugin.getDescription().getName() + separator + ChatColor.WHITE; - } - - /** - * Prepends each conversation message with the plugin name. - * - * @param context Context information about the conversation. - * @return An empty string. - */ - public String getPrefix(ConversationContext context) { - return cachedPrefix; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/Prompt.java b/LiveWeather/src/org/bukkit/conversations/Prompt.java deleted file mode 100755 index 7519c84..0000000 --- a/LiveWeather/src/org/bukkit/conversations/Prompt.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.conversations; - -/** - * A Prompt is the main constituent of a {@link Conversation}. Each prompt - * displays text to the user and optionally waits for a user's response. - * Prompts are chained together into a directed graph that represents the - * conversation flow. To halt a conversation, END_OF_CONVERSATION is returned - * in liu of another Prompt object. - */ -public interface Prompt extends Cloneable { - - /** - * A convenience constant for indicating the end of a conversation. - */ - static final Prompt END_OF_CONVERSATION = null; - - /** - * Gets the text to display to the user when this prompt is first - * presented. - * - * @param context Context information about the conversation. - * @return The text to display. - */ - String getPromptText(ConversationContext context); - - /** - * Checks to see if this prompt implementation should wait for user input - * or immediately display the next prompt. - * - * @param context Context information about the conversation. - * @return If true, the {@link Conversation} will wait for input before - * continuing. - */ - boolean blocksForInput(ConversationContext context); - - /** - * Accepts and processes input from the user. Using the input, the next - * Prompt in the prompt graph is returned. - * - * @param context Context information about the conversation. - * @param input The input text from the user. - * @return The next Prompt in the prompt graph. - */ - Prompt acceptInput(ConversationContext context, String input); -} diff --git a/LiveWeather/src/org/bukkit/conversations/RegexPrompt.java b/LiveWeather/src/org/bukkit/conversations/RegexPrompt.java deleted file mode 100755 index a3c7d1f..0000000 --- a/LiveWeather/src/org/bukkit/conversations/RegexPrompt.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.conversations; - -import java.util.regex.Pattern; - -/** - * RegexPrompt is the base class for any prompt that requires an input - * validated by a regular expression. - */ -public abstract class RegexPrompt extends ValidatingPrompt { - - private Pattern pattern; - - public RegexPrompt(String regex) { - this(Pattern.compile(regex)); - } - - public RegexPrompt(Pattern pattern) { - super(); - this.pattern = pattern; - } - - private RegexPrompt() {} - - @Override - protected boolean isInputValid(ConversationContext context, String input) { - return pattern.matcher(input).matches(); - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/StringPrompt.java b/LiveWeather/src/org/bukkit/conversations/StringPrompt.java deleted file mode 100755 index 2934459..0000000 --- a/LiveWeather/src/org/bukkit/conversations/StringPrompt.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bukkit.conversations; - -/** - * StringPrompt is the base class for any prompt that accepts an arbitrary - * string from the user. - */ -public abstract class StringPrompt implements Prompt{ - - /** - * Ensures that the prompt waits for the user to provide input. - * - * @param context Context information about the conversation. - * @return True. - */ - public boolean blocksForInput(ConversationContext context) { - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/conversations/ValidatingPrompt.java b/LiveWeather/src/org/bukkit/conversations/ValidatingPrompt.java deleted file mode 100755 index f41adb4..0000000 --- a/LiveWeather/src/org/bukkit/conversations/ValidatingPrompt.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bukkit.conversations; - -import org.bukkit.ChatColor; - -/** - * ValidatingPrompt is the base class for any prompt that requires validation. - * ValidatingPrompt will keep replaying the prompt text until the user enters - * a valid response. - */ -public abstract class ValidatingPrompt implements Prompt { - public ValidatingPrompt() { - super(); - } - - /** - * Accepts and processes input from the user and validates it. If - * validation fails, this prompt is returned for re-execution, otherwise - * the next Prompt in the prompt graph is returned. - * - * @param context Context information about the conversation. - * @param input The input text from the user. - * @return This prompt or the next Prompt in the prompt graph. - */ - public Prompt acceptInput(ConversationContext context, String input) { - if (isInputValid(context, input)) { - return acceptValidatedInput(context, input); - } else { - String failPrompt = getFailedValidationText(context, input); - if (failPrompt != null) { - context.getForWhom().sendRawMessage(ChatColor.RED + failPrompt); - } - // Redisplay this prompt to the user to re-collect input - return this; - } - } - - /** - * Ensures that the prompt waits for the user to provide input. - * - * @param context Context information about the conversation. - * @return True. - */ - public boolean blocksForInput(ConversationContext context) { - return true; - } - - /** - * Override this method to check the validity of the player's input. - * - * @param context Context information about the conversation. - * @param input The player's raw console input. - * @return True or false depending on the validity of the input. - */ - protected abstract boolean isInputValid(ConversationContext context, String input); - - /** - * Override this method to accept and processes the validated input from - * the user. Using the input, the next Prompt in the prompt graph should - * be returned. - * - * @param context Context information about the conversation. - * @param input The validated input text from the user. - * @return The next Prompt in the prompt graph. - */ - protected abstract Prompt acceptValidatedInput(ConversationContext context, String input); - - /** - * Optionally override this method to display an additional message if the - * user enters an invalid input. - * - * @param context Context information about the conversation. - * @param invalidInput The invalid input provided by the user. - * @return A message explaining how to correct the input. - */ - protected String getFailedValidationText(ConversationContext context, String invalidInput) { - return null; - } -} diff --git a/LiveWeather/src/org/bukkit/enchantments/Enchantment.java b/LiveWeather/src/org/bukkit/enchantments/Enchantment.java deleted file mode 100755 index e038412..0000000 --- a/LiveWeather/src/org/bukkit/enchantments/Enchantment.java +++ /dev/null @@ -1,292 +0,0 @@ -package org.bukkit.enchantments; - -import java.util.HashMap; -import java.util.Map; - -import org.bukkit.command.defaults.EnchantCommand; -import org.bukkit.inventory.ItemStack; - -/** - * The various type of enchantments that may be added to armour or weapons - */ -public abstract class Enchantment { - /** - * Provides protection against environmental damage - */ - public static final Enchantment PROTECTION_ENVIRONMENTAL = new EnchantmentWrapper(0); - - /** - * Provides protection against fire damage - */ - public static final Enchantment PROTECTION_FIRE = new EnchantmentWrapper(1); - - /** - * Provides protection against fall damage - */ - public static final Enchantment PROTECTION_FALL = new EnchantmentWrapper(2); - - /** - * Provides protection against explosive damage - */ - public static final Enchantment PROTECTION_EXPLOSIONS = new EnchantmentWrapper(3); - - /** - * Provides protection against projectile damage - */ - public static final Enchantment PROTECTION_PROJECTILE = new EnchantmentWrapper(4); - - /** - * Decreases the rate of air loss whilst underwater - */ - public static final Enchantment OXYGEN = new EnchantmentWrapper(5); - - /** - * Increases the speed at which a player may mine underwater - */ - public static final Enchantment WATER_WORKER = new EnchantmentWrapper(6); - - /** - * Damages the attacker - */ - public static final Enchantment THORNS = new EnchantmentWrapper(7); - - /** - * Increases damage against all targets - */ - public static final Enchantment DAMAGE_ALL = new EnchantmentWrapper(16); - - /** - * Increases damage against undead targets - */ - public static final Enchantment DAMAGE_UNDEAD = new EnchantmentWrapper(17); - - /** - * Increases damage against arthropod targets - */ - public static final Enchantment DAMAGE_ARTHROPODS = new EnchantmentWrapper(18); - - /** - * All damage to other targets will knock them back when hit - */ - public static final Enchantment KNOCKBACK = new EnchantmentWrapper(19); - - /** - * When attacking a target, has a chance to set them on fire - */ - public static final Enchantment FIRE_ASPECT = new EnchantmentWrapper(20); - - /** - * Provides a chance of gaining extra loot when killing monsters - */ - public static final Enchantment LOOT_BONUS_MOBS = new EnchantmentWrapper(21); - - /** - * Increases the rate at which you mine/dig - */ - public static final Enchantment DIG_SPEED = new EnchantmentWrapper(32); - - /** - * Allows blocks to drop themselves instead of fragments (for example, - * stone instead of cobblestone) - */ - public static final Enchantment SILK_TOUCH = new EnchantmentWrapper(33); - - /** - * Decreases the rate at which a tool looses durability - */ - public static final Enchantment DURABILITY = new EnchantmentWrapper(34); - - /** - * Provides a chance of gaining extra loot when destroying blocks - */ - public static final Enchantment LOOT_BONUS_BLOCKS = new EnchantmentWrapper(35); - - /** - * Provides extra damage when shooting arrows from bows - */ - public static final Enchantment ARROW_DAMAGE = new EnchantmentWrapper(48); - - /** - * Provides a knockback when an entity is hit by an arrow from a bow - */ - public static final Enchantment ARROW_KNOCKBACK = new EnchantmentWrapper(49); - - /** - * Sets entities on fire when hit by arrows shot from a bow - */ - public static final Enchantment ARROW_FIRE = new EnchantmentWrapper(50); - - /** - * Provides infinite arrows when shooting a bow - */ - public static final Enchantment ARROW_INFINITE = new EnchantmentWrapper(51); - - /** - * Decreases odds of catching worthless junk - */ - public static final Enchantment LUCK = new EnchantmentWrapper(61); - - /** - * Increases rate of fish biting your hook - */ - public static final Enchantment LURE = new EnchantmentWrapper(62); - - private static final Map byId = new HashMap(); - private static final Map byName = new HashMap(); - private static boolean acceptingNew = true; - private final int id; - - public Enchantment(int id) { - this.id = id; - } - - /** - * Gets the unique ID of this enchantment - * - * @return Unique ID - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Gets the unique name of this enchantment - * - * @return Unique name - */ - public abstract String getName(); - - /** - * Gets the maximum level that this Enchantment may become. - * - * @return Maximum level of the Enchantment - */ - public abstract int getMaxLevel(); - - /** - * Gets the level that this Enchantment should start at - * - * @return Starting level of the Enchantment - */ - public abstract int getStartLevel(); - - /** - * Gets the type of {@link ItemStack} that may fit this Enchantment. - * - * @return Target type of the Enchantment - */ - public abstract EnchantmentTarget getItemTarget(); - - /** - * Check if this enchantment conflicts with another enchantment. - * - * @param other The enchantment to check against - * @return True if there is a conflict. - */ - public abstract boolean conflictsWith(Enchantment other); - - /** - * Checks if this Enchantment may be applied to the given {@link - * ItemStack}. - *

          - * This does not check if it conflicts with any enchantments already - * applied to the item. - * - * @param item Item to test - * @return True if the enchantment may be applied, otherwise False - */ - public abstract boolean canEnchantItem(ItemStack item); - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (!(obj instanceof Enchantment)) { - return false; - } - final Enchantment other = (Enchantment) obj; - if (this.id != other.id) { - return false; - } - return true; - } - - @Override - public int hashCode() { - return id; - } - - @Override - public String toString() { - return "Enchantment[" + id + ", " + getName() + "]"; - } - - /** - * Registers an enchantment with the given ID and object. - *

          - * Generally not to be used from within a plugin. - * - * @param enchantment Enchantment to register - */ - public static void registerEnchantment(Enchantment enchantment) { - if (byId.containsKey(enchantment.id) || byName.containsKey(enchantment.getName())) { - throw new IllegalArgumentException("Cannot set already-set enchantment"); - } else if (!isAcceptingRegistrations()) { - throw new IllegalStateException("No longer accepting new enchantments (can only be done by the server implementation)"); - } - - byId.put(enchantment.id, enchantment); - byName.put(enchantment.getName(), enchantment); - } - - /** - * Checks if this is accepting Enchantment registrations. - * - * @return True if the server Implementation may add enchantments - */ - public static boolean isAcceptingRegistrations() { - return acceptingNew; - } - - /** - * Stops accepting any enchantment registrations - */ - public static void stopAcceptingRegistrations() { - acceptingNew = false; - EnchantCommand.buildEnchantments(); - } - - /** - * Gets the Enchantment at the specified ID - * - * @param id ID to fetch - * @return Resulting Enchantment, or null if not found - * @deprecated Magic value - */ - @Deprecated - public static Enchantment getById(int id) { - return byId.get(id); - } - - /** - * Gets the Enchantment at the specified name - * - * @param name Name to fetch - * @return Resulting Enchantment, or null if not found - */ - public static Enchantment getByName(String name) { - return byName.get(name); - } - - /** - * Gets an array of all the registered {@link Enchantment}s - * - * @return Array of enchantments - */ - public static Enchantment[] values() { - return byId.values().toArray(new Enchantment[byId.size()]); - } -} diff --git a/LiveWeather/src/org/bukkit/enchantments/EnchantmentTarget.java b/LiveWeather/src/org/bukkit/enchantments/EnchantmentTarget.java deleted file mode 100755 index d9b98ed..0000000 --- a/LiveWeather/src/org/bukkit/enchantments/EnchantmentTarget.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.bukkit.enchantments; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -/** - * Represents the applicable target for a {@link Enchantment} - */ -public enum EnchantmentTarget { - /** - * Allows the Enchantment to be placed on all items - */ - ALL { - @Override - public boolean includes(Material item) { - return true; - } - }, - - /** - * Allows the Enchantment to be placed on armor - */ - ARMOR { - @Override - public boolean includes(Material item) { - return ARMOR_FEET.includes(item) - || ARMOR_LEGS.includes(item) - || ARMOR_HEAD.includes(item) - || ARMOR_TORSO.includes(item); - } - }, - - /** - * Allows the Enchantment to be placed on feet slot armor - */ - ARMOR_FEET { - @Override - public boolean includes(Material item) { - return item.equals(Material.LEATHER_BOOTS) - || item.equals(Material.CHAINMAIL_BOOTS) - || item.equals(Material.IRON_BOOTS) - || item.equals(Material.DIAMOND_BOOTS) - || item.equals(Material.GOLD_BOOTS); - } - }, - - /** - * Allows the Enchantment to be placed on leg slot armor - */ - ARMOR_LEGS { - @Override - public boolean includes(Material item) { - return item.equals(Material.LEATHER_LEGGINGS) - || item.equals(Material.CHAINMAIL_LEGGINGS) - || item.equals(Material.IRON_LEGGINGS) - || item.equals(Material.DIAMOND_LEGGINGS) - || item.equals(Material.GOLD_LEGGINGS); - } - }, - - /** - * Allows the Enchantment to be placed on torso slot armor - */ - ARMOR_TORSO { - @Override - public boolean includes(Material item) { - return item.equals(Material.LEATHER_CHESTPLATE) - || item.equals(Material.CHAINMAIL_CHESTPLATE) - || item.equals(Material.IRON_CHESTPLATE) - || item.equals(Material.DIAMOND_CHESTPLATE) - || item.equals(Material.GOLD_CHESTPLATE); - } - }, - - /** - * Allows the Enchantment to be placed on head slot armor - */ - ARMOR_HEAD { - @Override - public boolean includes(Material item) { - return item.equals(Material.LEATHER_HELMET) - || item.equals(Material.CHAINMAIL_HELMET) - || item.equals(Material.DIAMOND_HELMET) - || item.equals(Material.IRON_HELMET) - || item.equals(Material.GOLD_HELMET); - } - }, - - /** - * Allows the Enchantment to be placed on weapons (swords) - */ - WEAPON { - @Override - public boolean includes(Material item) { - return item.equals(Material.WOOD_SWORD) - || item.equals(Material.STONE_SWORD) - || item.equals(Material.IRON_SWORD) - || item.equals(Material.DIAMOND_SWORD) - || item.equals(Material.GOLD_SWORD); - } - }, - - /** - * Allows the Enchantment to be placed on tools (spades, pickaxe, hoes, - * axes) - */ - TOOL { - @Override - public boolean includes(Material item) { - return item.equals(Material.WOOD_SPADE) - || item.equals(Material.STONE_SPADE) - || item.equals(Material.IRON_SPADE) - || item.equals(Material.DIAMOND_SPADE) - || item.equals(Material.GOLD_SPADE) - || item.equals(Material.WOOD_PICKAXE) - || item.equals(Material.STONE_PICKAXE) - || item.equals(Material.IRON_PICKAXE) - || item.equals(Material.DIAMOND_PICKAXE) - || item.equals(Material.GOLD_PICKAXE) - || item.equals(Material.WOOD_HOE) // NOTE: No vanilla enchantments for this - || item.equals(Material.STONE_HOE) // NOTE: No vanilla enchantments for this - || item.equals(Material.IRON_HOE) // NOTE: No vanilla enchantments for this - || item.equals(Material.DIAMOND_HOE) // NOTE: No vanilla enchantments for this - || item.equals(Material.GOLD_HOE) // NOTE: No vanilla enchantments for this - || item.equals(Material.WOOD_AXE) - || item.equals(Material.STONE_AXE) - || item.equals(Material.IRON_AXE) - || item.equals(Material.DIAMOND_AXE) - || item.equals(Material.GOLD_AXE) - || item.equals(Material.SHEARS) // NOTE: No vanilla enchantments for this - || item.equals(Material.FLINT_AND_STEEL); // NOTE: No vanilla enchantments for this - } - }, - - /** - * Allows the Enchantment to be placed on bows. - */ - BOW { - @Override - public boolean includes(Material item) { - return item.equals(Material.BOW); - } - }, - - /** - * Allows the Enchantment to be placed on fishing rods. - */ - FISHING_ROD { - @Override - public boolean includes(Material item) { - return item.equals(Material.FISHING_ROD); - } - }; - - /** - * Check whether this target includes the specified item. - * - * @param item The item to check - * @return True if the target includes the item - */ - public abstract boolean includes(Material item); - - /** - * Check whether this target includes the specified item. - * - * @param item The item to check - * @return True if the target includes the item - */ - public boolean includes(ItemStack item) { - return includes(item.getType()); - } -} diff --git a/LiveWeather/src/org/bukkit/enchantments/EnchantmentWrapper.java b/LiveWeather/src/org/bukkit/enchantments/EnchantmentWrapper.java deleted file mode 100755 index 6a0aeb3..0000000 --- a/LiveWeather/src/org/bukkit/enchantments/EnchantmentWrapper.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bukkit.enchantments; - -import org.bukkit.inventory.ItemStack; - -/** - * A simple wrapper for ease of selecting {@link Enchantment}s - */ -public class EnchantmentWrapper extends Enchantment { - public EnchantmentWrapper(int id) { - super(id); - } - - /** - * Gets the enchantment bound to this wrapper - * - * @return Enchantment - */ - public Enchantment getEnchantment() { - return Enchantment.getById(getId()); - } - - @Override - public int getMaxLevel() { - return getEnchantment().getMaxLevel(); - } - - @Override - public int getStartLevel() { - return getEnchantment().getStartLevel(); - } - - @Override - public EnchantmentTarget getItemTarget() { - return getEnchantment().getItemTarget(); - } - - @Override - public boolean canEnchantItem(ItemStack item) { - return getEnchantment().canEnchantItem(item); - } - - @Override - public String getName() { - return getEnchantment().getName(); - } - - @Override - public boolean conflictsWith(Enchantment other) { - return getEnchantment().conflictsWith(other); - } -} diff --git a/LiveWeather/src/org/bukkit/entity/Ageable.java b/LiveWeather/src/org/bukkit/entity/Ageable.java deleted file mode 100755 index e9fccb2..0000000 --- a/LiveWeather/src/org/bukkit/entity/Ageable.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an entity that can age and breed. - */ -public interface Ageable extends Creature { - /** - * Gets the age of this animal. - * - * @return Age - */ - public int getAge(); - - /** - * Sets the age of this animal. - * - * @param age New age - */ - public void setAge(int age); - - /** - * Lock the age of the animal, setting this will prevent the animal from - * maturing or getting ready for mating. - * - * @param lock new lock - */ - public void setAgeLock(boolean lock); - - /** - * Gets the current agelock. - * - * @return the current agelock - */ - public boolean getAgeLock(); - - /** - * Sets the age of the animal to a baby - */ - public void setBaby(); - - /** - * Sets the age of the animal to an adult - */ - public void setAdult(); - - /** - * Returns true if the animal is an adult. - * - * @return return true if the animal is an adult - */ - public boolean isAdult(); - - /** - * Return the ability to breed of the animal. - * - * @return the ability to breed of the animal - */ - public boolean canBreed(); - - /** - * Set breedability of the animal, if the animal is a baby and set to - * breed it will instantly grow up. - * - * @param breed breedability of the animal - */ - public void setBreed(boolean breed); -} diff --git a/LiveWeather/src/org/bukkit/entity/Ambient.java b/LiveWeather/src/org/bukkit/entity/Ambient.java deleted file mode 100755 index 779e389..0000000 --- a/LiveWeather/src/org/bukkit/entity/Ambient.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an ambient mob - */ -public interface Ambient extends LivingEntity {} diff --git a/LiveWeather/src/org/bukkit/entity/AnimalTamer.java b/LiveWeather/src/org/bukkit/entity/AnimalTamer.java deleted file mode 100755 index 5f74f0d..0000000 --- a/LiveWeather/src/org/bukkit/entity/AnimalTamer.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.entity; - -import java.util.UUID; - -public interface AnimalTamer { - - /** - * This is the name of the specified AnimalTamer. - * - * @return The name to reference on tamed animals or null if a name cannot be obtained - */ - public String getName(); - - /** - * This is the UUID of the specified AnimalTamer. - * - * @return The UUID to reference on tamed animals - */ - public UUID getUniqueId(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Animals.java b/LiveWeather/src/org/bukkit/entity/Animals.java deleted file mode 100755 index f0dc157..0000000 --- a/LiveWeather/src/org/bukkit/entity/Animals.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an Animal. - */ -public interface Animals extends Ageable {} diff --git a/LiveWeather/src/org/bukkit/entity/Arrow.java b/LiveWeather/src/org/bukkit/entity/Arrow.java deleted file mode 100755 index e49eef0..0000000 --- a/LiveWeather/src/org/bukkit/entity/Arrow.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an arrow. - */ -public interface Arrow extends Projectile { - - /** - * Gets the knockback strength for an arrow, which is the - * {@link org.bukkit.enchantments.Enchantment#KNOCKBACK KnockBack} level - * of the bow that shot it. - * - * @return the knockback strength value - */ - public int getKnockbackStrength(); - - /** - * Sets the knockback strength for an arrow. - * - * @param knockbackStrength the knockback strength value - */ - public void setKnockbackStrength(int knockbackStrength); - - /** - * Gets whether this arrow is critical. - *

          - * Critical arrows have increased damage and cause particle effects. - *

          - * Critical arrows generally occur when a player fully draws a bow before - * firing. - * - * @return true if it is critical - */ - public boolean isCritical(); - - /** - * Sets whether or not this arrow should be critical. - * - * @param critical whether or not it should be critical - */ - public void setCritical(boolean critical); -} diff --git a/LiveWeather/src/org/bukkit/entity/Bat.java b/LiveWeather/src/org/bukkit/entity/Bat.java deleted file mode 100755 index bd73f22..0000000 --- a/LiveWeather/src/org/bukkit/entity/Bat.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Bat - */ -public interface Bat extends Ambient { - - /** - * Checks the current waking state of this bat. - *

          - * This does not imply any persistence of state past the method call. - * - * @return true if the bat is awake or false if it is currently hanging - * from a block - */ - boolean isAwake(); - - /** - * This method modifies the current waking state of this bat. - *

          - * This does not prevent a bat from spontaneously awaking itself, or from - * reattaching itself to a block. - * - * @param state the new state - */ - void setAwake(boolean state); -} diff --git a/LiveWeather/src/org/bukkit/entity/Blaze.java b/LiveWeather/src/org/bukkit/entity/Blaze.java deleted file mode 100755 index 7a5505b..0000000 --- a/LiveWeather/src/org/bukkit/entity/Blaze.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Blaze monster - */ -public interface Blaze extends Monster { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Boat.java b/LiveWeather/src/org/bukkit/entity/Boat.java deleted file mode 100755 index ed2d178..0000000 --- a/LiveWeather/src/org/bukkit/entity/Boat.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a boat entity. - */ -public interface Boat extends Vehicle { - - /** - * Gets the maximum speed of a boat. The speed is unrelated to the - * velocity. - * - * @return The max speed. - */ - public double getMaxSpeed(); - - /** - * Sets the maximum speed of a boat. Must be nonnegative. Default is 0.4D. - * - * @param speed The max speed. - */ - public void setMaxSpeed(double speed); - - /** - * Gets the deceleration rate (newSpeed = curSpeed * rate) of occupied - * boats. The default is 0.2. - * - * @return The rate of deceleration - */ - public double getOccupiedDeceleration(); - - /** - * Sets the deceleration rate (newSpeed = curSpeed * rate) of occupied - * boats. Setting this to a higher value allows for quicker acceleration. - * The default is 0.2. - * - * @param rate deceleration rate - */ - public void setOccupiedDeceleration(double rate); - - /** - * Gets the deceleration rate (newSpeed = curSpeed * rate) of unoccupied - * boats. The default is -1. Values below 0 indicate that no additional - * deceleration is imposed. - * - * @return The rate of deceleration - */ - public double getUnoccupiedDeceleration(); - - /** - * Sets the deceleration rate (newSpeed = curSpeed * rate) of unoccupied - * boats. Setting this to a higher value allows for quicker deceleration - * of boats when a player disembarks. The default is -1. Values below 0 - * indicate that no additional deceleration is imposed. - * - * @param rate deceleration rate - */ - public void setUnoccupiedDeceleration(double rate); - - /** - * Get whether boats can work on land. - * - * @return whether boats can work on land - */ - public boolean getWorkOnLand(); - - /** - * Set whether boats can work on land. - * - * @param workOnLand whether boats can work on land - */ - public void setWorkOnLand(boolean workOnLand); -} diff --git a/LiveWeather/src/org/bukkit/entity/CaveSpider.java b/LiveWeather/src/org/bukkit/entity/CaveSpider.java deleted file mode 100755 index 9c37646..0000000 --- a/LiveWeather/src/org/bukkit/entity/CaveSpider.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Spider. - */ -public interface CaveSpider extends Spider {} diff --git a/LiveWeather/src/org/bukkit/entity/Chicken.java b/LiveWeather/src/org/bukkit/entity/Chicken.java deleted file mode 100755 index cb3ec6e..0000000 --- a/LiveWeather/src/org/bukkit/entity/Chicken.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Chicken. - */ -public interface Chicken extends Animals {} diff --git a/LiveWeather/src/org/bukkit/entity/ComplexEntityPart.java b/LiveWeather/src/org/bukkit/entity/ComplexEntityPart.java deleted file mode 100755 index f4ab0bb..0000000 --- a/LiveWeather/src/org/bukkit/entity/ComplexEntityPart.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a single part of a {@link ComplexLivingEntity} - */ -public interface ComplexEntityPart extends Entity { - - /** - * Gets the parent {@link ComplexLivingEntity} of this part. - * - * @return Parent complex entity - */ - public ComplexLivingEntity getParent(); -} diff --git a/LiveWeather/src/org/bukkit/entity/ComplexLivingEntity.java b/LiveWeather/src/org/bukkit/entity/ComplexLivingEntity.java deleted file mode 100755 index f74411c..0000000 --- a/LiveWeather/src/org/bukkit/entity/ComplexLivingEntity.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bukkit.entity; - -import java.util.Set; - -/** - * Represents a complex living entity - one that is made up of various smaller - * parts - */ -public interface ComplexLivingEntity extends LivingEntity { - /** - * Gets a list of parts that belong to this complex entity - * - * @return List of parts - */ - public Set getParts(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Cow.java b/LiveWeather/src/org/bukkit/entity/Cow.java deleted file mode 100755 index cd4ed4d..0000000 --- a/LiveWeather/src/org/bukkit/entity/Cow.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Cow. - */ -public interface Cow extends Animals {} diff --git a/LiveWeather/src/org/bukkit/entity/Creature.java b/LiveWeather/src/org/bukkit/entity/Creature.java deleted file mode 100755 index f223f55..0000000 --- a/LiveWeather/src/org/bukkit/entity/Creature.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Creature. Creatures are non-intelligent monsters or animals - * which have very simple abilities. - */ -public interface Creature extends LivingEntity { - - /** - * Instructs this Creature to set the specified LivingEntity as its - * target. - *

          - * Hostile creatures may attack their target, and friendly creatures may - * follow their target. - * - * @param target New LivingEntity to target, or null to clear the target - */ - public void setTarget(LivingEntity target); - - /** - * Gets the current target of this Creature - * - * @return Current target of this creature, or null if none exists - */ - public LivingEntity getTarget(); -} diff --git a/LiveWeather/src/org/bukkit/entity/CreatureType.java b/LiveWeather/src/org/bukkit/entity/CreatureType.java deleted file mode 100755 index fd23093..0000000 --- a/LiveWeather/src/org/bukkit/entity/CreatureType.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.bukkit.entity; - -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a type of creature. - * - * @deprecated Use EntityType instead. - */ -@Deprecated -public enum CreatureType { - // These strings MUST match the strings in nms.EntityTypes and are case sensitive. - CREEPER("Creeper", Creeper.class, 50), - SKELETON("Skeleton", Skeleton.class, 51), - SPIDER("Spider", Spider.class, 52), - GIANT("Giant", Giant.class, 53), - ZOMBIE("Zombie", Zombie.class, 54), - SLIME("Slime", Slime.class, 55), - GHAST("Ghast", Ghast.class, 56), - PIG_ZOMBIE("PigZombie", PigZombie.class, 57), - ENDERMAN("Enderman", Enderman.class, 58), - CAVE_SPIDER("CaveSpider", CaveSpider.class, 59), - SILVERFISH("Silverfish", Silverfish.class, 60), - BLAZE("Blaze", Blaze.class, 61), - MAGMA_CUBE("LavaSlime", MagmaCube.class, 62), - ENDER_DRAGON("EnderDragon", EnderDragon.class, 63), - PIG("Pig", Pig.class, 90), - SHEEP("Sheep", Sheep.class, 91), - COW("Cow", Cow.class, 92), - CHICKEN("Chicken", Chicken.class, 93), - SQUID("Squid", Squid.class, 94), - WOLF("Wolf", Wolf.class, 95), - MUSHROOM_COW("MushroomCow", MushroomCow.class, 96), - SNOWMAN("SnowMan", Snowman.class, 97), - VILLAGER("Villager", Villager.class, 120); - - private String name; - private Class clazz; - private short typeId; - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - - static { - for (CreatureType type : EnumSet.allOf(CreatureType.class)) { - NAME_MAP.put(type.name, type); - if (type.typeId != 0) { - ID_MAP.put(type.typeId, type); - } - } - } - - private CreatureType(String name, Class clazz, int typeId) { - this.name = name; - this.clazz = clazz; - this.typeId = (short) typeId; - } - - public String getName() { - return name; - } - - public Class getEntityClass() { - return clazz; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public short getTypeId() { - return typeId; - } - - public static CreatureType fromName(String name) { - return NAME_MAP.get(name); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static CreatureType fromId(int id) { - if (id > Short.MAX_VALUE) { - return null; - } - return ID_MAP.get((short) id); - } - - @Deprecated - public EntityType toEntityType() { - return EntityType.fromName(getName()); - } - - public static CreatureType fromEntityType(EntityType creatureType) { - return fromName(creatureType.getName()); - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/entity/Creeper.java b/LiveWeather/src/org/bukkit/entity/Creeper.java deleted file mode 100755 index a2f7809..0000000 --- a/LiveWeather/src/org/bukkit/entity/Creeper.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Creeper - */ -public interface Creeper extends Monster { - - /** - * Checks if this Creeper is powered (Electrocuted) - * - * @return true if this creeper is powered - */ - public boolean isPowered(); - - /** - * Sets the Powered status of this Creeper - * - * @param value New Powered status - */ - public void setPowered(boolean value); -} diff --git a/LiveWeather/src/org/bukkit/entity/Damageable.java b/LiveWeather/src/org/bukkit/entity/Damageable.java deleted file mode 100755 index 53877a8..0000000 --- a/LiveWeather/src/org/bukkit/entity/Damageable.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an {@link Entity} that has health and can take damage. - */ -public interface Damageable extends Entity { - /** - * Deals the given amount of damage to this entity. - * - * @param amount Amount of damage to deal - */ - void damage(double amount); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - void _INVALID_damage(int amount); - - /** - * Deals the given amount of damage to this entity, from a specified - * entity. - * - * @param amount Amount of damage to deal - * @param source Entity which to attribute this damage from - */ - void damage(double amount, Entity source); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - void _INVALID_damage(int amount, Entity source); - - /** - * Gets the entity's health from 0 to {@link #getMaxHealth()}, where 0 is dead. - * - * @return Health represented from 0 to max - */ - double getHealth(); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - int _INVALID_getHealth(); - - /** - * Sets the entity's health from 0 to {@link #getMaxHealth()}, where 0 is - * dead. - * - * @param health New health represented from 0 to max - * @throws IllegalArgumentException Thrown if the health is < 0 or > - * {@link #getMaxHealth()} - */ - void setHealth(double health); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - void _INVALID_setHealth(int health); - - /** - * Gets the maximum health this entity has. - * - * @return Maximum health - */ - double getMaxHealth(); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - int _INVALID_getMaxHealth(); - - /** - * Sets the maximum health this entity can have. - *

          - * If the health of the entity is above the value provided it will be set - * to that value. - *

          - * Note: An entity with a health bar ({@link Player}, {@link EnderDragon}, - * {@link Wither}, etc...} will have their bar scaled accordingly. - * - * @param health amount of health to set the maximum to - */ - void setMaxHealth(double health); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - void _INVALID_setMaxHealth(int health); - - /** - * Resets the max health to the original amount. - */ - void resetMaxHealth(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Egg.java b/LiveWeather/src/org/bukkit/entity/Egg.java deleted file mode 100755 index 2dcc00b..0000000 --- a/LiveWeather/src/org/bukkit/entity/Egg.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a thrown egg. - */ -public interface Egg extends Projectile {} diff --git a/LiveWeather/src/org/bukkit/entity/EnderCrystal.java b/LiveWeather/src/org/bukkit/entity/EnderCrystal.java deleted file mode 100755 index bac547e..0000000 --- a/LiveWeather/src/org/bukkit/entity/EnderCrystal.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * A crystal that heals nearby EnderDragons - */ -public interface EnderCrystal extends Entity { -} diff --git a/LiveWeather/src/org/bukkit/entity/EnderDragon.java b/LiveWeather/src/org/bukkit/entity/EnderDragon.java deleted file mode 100755 index 609f3ba..0000000 --- a/LiveWeather/src/org/bukkit/entity/EnderDragon.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an Ender Dragon - */ -public interface EnderDragon extends ComplexLivingEntity { - -} diff --git a/LiveWeather/src/org/bukkit/entity/EnderDragonPart.java b/LiveWeather/src/org/bukkit/entity/EnderDragonPart.java deleted file mode 100755 index 9516f56..0000000 --- a/LiveWeather/src/org/bukkit/entity/EnderDragonPart.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an ender dragon part - */ -public interface EnderDragonPart extends ComplexEntityPart, Damageable { - public EnderDragon getParent(); -} diff --git a/LiveWeather/src/org/bukkit/entity/EnderPearl.java b/LiveWeather/src/org/bukkit/entity/EnderPearl.java deleted file mode 100755 index db18a90..0000000 --- a/LiveWeather/src/org/bukkit/entity/EnderPearl.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a thrown Ender Pearl entity - */ -public interface EnderPearl extends Projectile { - -} diff --git a/LiveWeather/src/org/bukkit/entity/EnderSignal.java b/LiveWeather/src/org/bukkit/entity/EnderSignal.java deleted file mode 100755 index 3d2d76c..0000000 --- a/LiveWeather/src/org/bukkit/entity/EnderSignal.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an Ender Signal, which is often created upon throwing an ender - * eye - */ -public interface EnderSignal extends Entity { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Enderman.java b/LiveWeather/src/org/bukkit/entity/Enderman.java deleted file mode 100755 index 0b66a92..0000000 --- a/LiveWeather/src/org/bukkit/entity/Enderman.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.material.MaterialData; - -/** - * Represents an Enderman. - */ -public interface Enderman extends Monster { - - /** - * Get the id and data of the block that the Enderman is carrying. - * - * @return MaterialData containing the id and data of the block - */ - public MaterialData getCarriedMaterial(); - - /** - * Set the id and data of the block that the Enderman is carring. - * - * @param material data to set the carried block to - */ - public void setCarriedMaterial(MaterialData material); -} diff --git a/LiveWeather/src/org/bukkit/entity/Entity.java b/LiveWeather/src/org/bukkit/entity/Entity.java deleted file mode 100755 index 396ea20..0000000 --- a/LiveWeather/src/org/bukkit/entity/Entity.java +++ /dev/null @@ -1,294 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.Location; -import org.bukkit.EntityEffect; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.metadata.Metadatable; -import org.bukkit.util.Vector; - -import java.util.List; -import java.util.UUID; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; - -/** - * Represents a base entity in the world - */ -public interface Entity extends Metadatable { - - /** - * Gets the entity's current position - * - * @return a new copy of Location containing the position of this entity - */ - public Location getLocation(); - - /** - * Stores the entity's current position in the provided Location object. - *

          - * If the provided Location is null this method does nothing and returns - * null. - * - * @return The Location object provided or null - */ - public Location getLocation(Location loc); - - /** - * Sets this entity's velocity - * - * @param velocity New velocity to travel with - */ - public void setVelocity(Vector velocity); - - /** - * Gets this entity's current velocity - * - * @return Current travelling velocity of this entity - */ - public Vector getVelocity(); - - /** - * Returns true if the entity is supported by a block. This value is a - * state updated by the server and is not recalculated unless the entity - * moves. - * - * @return True if entity is on ground. - */ - public boolean isOnGround(); - - /** - * Gets the current world this entity resides in - * - * @return World - */ - public World getWorld(); - - /** - * Teleports this entity to the given location - * - * @param location New location to teleport this entity to - * @return true if the teleport was successful - */ - public boolean teleport(Location location); - - /** - * Teleports this entity to the given location - * - * @param location New location to teleport this entity to - * @param cause The cause of this teleportation - * @return true if the teleport was successful - */ - public boolean teleport(Location location, TeleportCause cause); - - /** - * Teleports this entity to the target Entity - * - * @param destination Entity to teleport this entity to - * @return true if the teleport was successful - */ - public boolean teleport(Entity destination); - - /** - * Teleports this entity to the target Entity - * - * @param destination Entity to teleport this entity to - * @param cause The cause of this teleportation - * @return true if the teleport was successful - */ - public boolean teleport(Entity destination, TeleportCause cause); - - /** - * Returns a list of entities within a bounding box centered around this - * entity - * - * @param x 1/2 the size of the box along x axis - * @param y 1/2 the size of the box along y axis - * @param z 1/2 the size of the box along z axis - * @return List List of entities nearby - */ - public List getNearbyEntities(double x, double y, double z); - - /** - * Returns a unique id for this entity - * - * @return Entity id - */ - public int getEntityId(); - - /** - * Returns the entity's current fire ticks (ticks before the entity stops - * being on fire). - * - * @return int fireTicks - */ - public int getFireTicks(); - - /** - * Returns the entity's maximum fire ticks. - * - * @return int maxFireTicks - */ - public int getMaxFireTicks(); - - /** - * Sets the entity's current fire ticks (ticks before the entity stops - * being on fire). - * - * @param ticks Current ticks remaining - */ - public void setFireTicks(int ticks); - - /** - * Mark the entity's removal. - */ - public void remove(); - - /** - * Returns true if this entity has been marked for removal. - * - * @return True if it is dead. - */ - public boolean isDead(); - - /** - * Returns false if the entity has died or been despawned for some other - * reason. - * - * @return True if valid. - */ - public boolean isValid(); - - /** - * Gets the {@link Server} that contains this Entity - * - * @return Server instance running this Entity - */ - public Server getServer(); - - /** - * Gets the primary passenger of a vehicle. For vehicles that could have - * multiple passengers, this will only return the primary passenger. - * - * @return an entity - */ - public abstract Entity getPassenger(); - - /** - * Set the passenger of a vehicle. - * - * @param passenger The new passenger. - * @return false if it could not be done for whatever reason - */ - public abstract boolean setPassenger(Entity passenger); - - /** - * Check if a vehicle has passengers. - * - * @return True if the vehicle has no passengers. - */ - public abstract boolean isEmpty(); - - /** - * Eject any passenger. - * - * @return True if there was a passenger. - */ - public abstract boolean eject(); - - /** - * Returns the distance this entity has fallen - * - * @return The distance. - */ - public float getFallDistance(); - - /** - * Sets the fall distance for this entity - * - * @param distance The new distance. - */ - public void setFallDistance(float distance); - - /** - * Record the last {@link EntityDamageEvent} inflicted on this entity - * - * @param event a {@link EntityDamageEvent} - */ - public void setLastDamageCause(EntityDamageEvent event); - - /** - * Retrieve the last {@link EntityDamageEvent} inflicted on this entity. - * This event may have been cancelled. - * - * @return the last known {@link EntityDamageEvent} or null if hitherto - * unharmed - */ - public EntityDamageEvent getLastDamageCause(); - - /** - * Returns a unique and persistent id for this entity - * - * @return unique id - */ - public UUID getUniqueId(); - - /** - * Gets the amount of ticks this entity has lived for. - *

          - * This is the equivalent to "age" in entities. - * - * @return Age of entity - */ - public int getTicksLived(); - - /** - * Sets the amount of ticks this entity has lived for. - *

          - * This is the equivalent to "age" in entities. May not be less than one - * tick. - * - * @param value Age of entity - */ - public void setTicksLived(int value); - - /** - * Performs the specified {@link EntityEffect} for this entity. - *

          - * This will be viewable to all players near the entity. - * - * @param type Effect to play. - */ - public void playEffect(EntityEffect type); - - /** - * Get the type of the entity. - * - * @return The entity type. - */ - public EntityType getType(); - - /** - * Returns whether this entity is inside a vehicle. - * - * @return True if the entity is in a vehicle. - */ - public boolean isInsideVehicle(); - - /** - * Leave the current vehicle. If the entity is currently in a vehicle (and - * is removed from it), true will be returned, otherwise false will be - * returned. - * - * @return True if the entity was in a vehicle. - */ - public boolean leaveVehicle(); - - /** - * Get the vehicle that this player is inside. If there is no vehicle, - * null will be returned. - * - * @return The current vehicle. - */ - public Entity getVehicle(); -} diff --git a/LiveWeather/src/org/bukkit/entity/EntityType.java b/LiveWeather/src/org/bukkit/entity/EntityType.java deleted file mode 100755 index 39ecb13..0000000 --- a/LiveWeather/src/org/bukkit/entity/EntityType.java +++ /dev/null @@ -1,267 +0,0 @@ -package org.bukkit.entity; - -import java.util.HashMap; -import java.util.Map; - -import org.bukkit.entity.minecart.CommandMinecart; -import org.bukkit.entity.minecart.HopperMinecart; -import org.bukkit.entity.minecart.SpawnerMinecart; -import org.bukkit.entity.minecart.RideableMinecart; -import org.bukkit.entity.minecart.ExplosiveMinecart; -import org.bukkit.entity.minecart.PoweredMinecart; -import org.bukkit.entity.minecart.StorageMinecart; -import org.bukkit.inventory.ItemStack; -import org.bukkit.Location; -import org.bukkit.World; - -public enum EntityType { - - // These strings MUST match the strings in nms.EntityTypes and are case sensitive. - /** - * An item resting on the ground. - *

          - * Spawn with {@link World#dropItem(Location, ItemStack)} or {@link - * World#dropItemNaturally(Location, ItemStack)} - */ - DROPPED_ITEM("Item", Item.class, 1, false), - /** - * An experience orb. - */ - EXPERIENCE_ORB("XPOrb", ExperienceOrb.class, 2), - /** - * A leash attached to a fencepost. - */ - LEASH_HITCH("LeashKnot", LeashHitch.class, 8), - /** - * A painting on a wall. - */ - PAINTING("Painting", Painting.class, 9), - /** - * An arrow projectile; may get stuck in the ground. - */ - ARROW("Arrow", Arrow.class, 10), - /** - * A flying snowball. - */ - SNOWBALL("Snowball", Snowball.class, 11), - /** - * A flying large fireball, as thrown by a Ghast for example. - */ - FIREBALL("Fireball", LargeFireball.class, 12), - /** - * A flying small fireball, such as thrown by a Blaze or player. - */ - SMALL_FIREBALL("SmallFireball", SmallFireball.class, 13), - /** - * A flying ender pearl. - */ - ENDER_PEARL("ThrownEnderpearl", EnderPearl.class, 14), - /** - * An ender eye signal. - */ - ENDER_SIGNAL("EyeOfEnderSignal", EnderSignal.class, 15), - /** - * A flying experience bottle. - */ - THROWN_EXP_BOTTLE("ThrownExpBottle", ThrownExpBottle.class, 17), - /** - * An item frame on a wall. - */ - ITEM_FRAME("ItemFrame", ItemFrame.class, 18), - /** - * A flying wither skull projectile. - */ - WITHER_SKULL("WitherSkull", WitherSkull.class, 19), - /** - * Primed TNT that is about to explode. - */ - PRIMED_TNT("PrimedTnt", TNTPrimed.class, 20), - /** - * A block that is going to or is about to fall. - */ - FALLING_BLOCK("FallingSand", FallingBlock.class, 21, false), - FIREWORK("FireworksRocketEntity", Firework.class, 22, false), - /** - * @see CommandMinecart - */ - MINECART_COMMAND("MinecartCommandBlock", CommandMinecart.class, 40), - /** - * A placed boat. - */ - BOAT("Boat", Boat.class, 41), - /** - * @see RideableMinecart - */ - MINECART("MinecartRideable", RideableMinecart.class, 42), - /** - * @see StorageMinecart - */ - MINECART_CHEST("MinecartChest", StorageMinecart.class, 43), - /** - * @see PoweredMinecart - */ - MINECART_FURNACE("MinecartFurnace", PoweredMinecart.class, 44), - /** - * @see ExplosiveMinecart - */ - MINECART_TNT("MinecartTNT", ExplosiveMinecart.class, 45), - /** - * @see HopperMinecart - */ - MINECART_HOPPER("MinecartHopper", HopperMinecart.class, 46), - /** - * @see SpawnerMinecart - */ - MINECART_MOB_SPAWNER("MinecartMobSpawner", SpawnerMinecart.class, 47), - CREEPER("Creeper", Creeper.class, 50), - SKELETON("Skeleton", Skeleton.class, 51), - SPIDER("Spider", Spider.class, 52), - GIANT("Giant", Giant.class, 53), - ZOMBIE("Zombie", Zombie.class, 54), - SLIME("Slime", Slime.class, 55), - GHAST("Ghast", Ghast.class, 56), - PIG_ZOMBIE("PigZombie", PigZombie.class, 57), - ENDERMAN("Enderman", Enderman.class, 58), - CAVE_SPIDER("CaveSpider", CaveSpider.class, 59), - SILVERFISH("Silverfish", Silverfish.class, 60), - BLAZE("Blaze", Blaze.class, 61), - MAGMA_CUBE("LavaSlime", MagmaCube.class, 62), - ENDER_DRAGON("EnderDragon", EnderDragon.class, 63), - WITHER("WitherBoss", Wither.class, 64), - BAT("Bat", Bat.class, 65), - WITCH("Witch", Witch.class, 66), - PIG("Pig", Pig.class, 90), - SHEEP("Sheep", Sheep.class, 91), - COW("Cow", Cow.class, 92), - CHICKEN("Chicken", Chicken.class, 93), - SQUID("Squid", Squid.class, 94), - WOLF("Wolf", Wolf.class, 95), - MUSHROOM_COW("MushroomCow", MushroomCow.class, 96), - SNOWMAN("SnowMan", Snowman.class, 97), - OCELOT("Ozelot", Ocelot.class, 98), - IRON_GOLEM("VillagerGolem", IronGolem.class, 99), - HORSE("EntityHorse", Horse.class, 100), - VILLAGER("Villager", Villager.class, 120), - ENDER_CRYSTAL("EnderCrystal", EnderCrystal.class, 200), - // These don't have an entity ID in nms.EntityTypes. - /** - * A flying splash potion. - */ - SPLASH_POTION(null, ThrownPotion.class, -1, false), - /** - * A flying chicken egg. - */ - EGG(null, Egg.class, -1, false), - /** - * A fishing line and bobber. - */ - FISHING_HOOK(null, Fish.class, -1, false), - /** - * A bolt of lightning. - *

          - * Spawn with {@link World#strikeLightning(Location)}. - */ - LIGHTNING(null, LightningStrike.class, -1, false), - WEATHER(null, Weather.class, -1, false), - PLAYER(null, Player.class, -1, false), - COMPLEX_PART(null, ComplexEntityPart.class, -1, false), - /** - * An unknown entity without an Entity Class - */ - UNKNOWN(null, null, -1, false); - - private String name; - private Class clazz; - private short typeId; - private boolean independent, living; - - private static final Map NAME_MAP = new HashMap(); - private static final Map ID_MAP = new HashMap(); - - static { - for (EntityType type : values()) { - if (type.name != null) { - NAME_MAP.put(type.name.toLowerCase(), type); - } - if (type.typeId > 0) { - ID_MAP.put(type.typeId, type); - } - } - } - - private EntityType(String name, Class clazz, int typeId) { - this(name, clazz, typeId, true); - } - - private EntityType(String name, Class clazz, int typeId, boolean independent) { - this.name = name; - this.clazz = clazz; - this.typeId = (short) typeId; - this.independent = independent; - if (clazz != null) { - this.living = LivingEntity.class.isAssignableFrom(clazz); - } - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public String getName() { - return name; - } - - public Class getEntityClass() { - return clazz; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public short getTypeId() { - return typeId; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static EntityType fromName(String name) { - if (name == null) { - return null; - } - return NAME_MAP.get(name.toLowerCase()); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static EntityType fromId(int id) { - if (id > Short.MAX_VALUE) { - return null; - } - return ID_MAP.get((short) id); - } - - /** - * Some entities cannot be spawned using {@link - * World#spawnEntity(Location, EntityType)} or {@link - * World#spawn(Location, Class)}, usually because they require additional - * information in order to spawn. - * - * @return False if the entity type cannot be spawned - */ - public boolean isSpawnable() { - return independent; - } - - public boolean isAlive() { - return living; - } -} diff --git a/LiveWeather/src/org/bukkit/entity/ExperienceOrb.java b/LiveWeather/src/org/bukkit/entity/ExperienceOrb.java deleted file mode 100755 index c286edf..0000000 --- a/LiveWeather/src/org/bukkit/entity/ExperienceOrb.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an Experience Orb. - */ -public interface ExperienceOrb extends Entity { - - /** - * Gets how much experience is contained within this orb - * - * @return Amount of experience - */ - public int getExperience(); - - /** - * Sets how much experience is contained within this orb - * - * @param value Amount of experience - */ - public void setExperience(int value); -} diff --git a/LiveWeather/src/org/bukkit/entity/Explosive.java b/LiveWeather/src/org/bukkit/entity/Explosive.java deleted file mode 100755 index 48650f6..0000000 --- a/LiveWeather/src/org/bukkit/entity/Explosive.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.entity; - -/** - * A representation of an explosive entity - */ -public interface Explosive extends Entity { - - /** - * Set the radius affected by this explosive's explosion - * - * @param yield The explosive yield - */ - public void setYield(float yield); - - /** - * Return the radius or yield of this explosive's explosion - * - * @return the radius of blocks affected - */ - public float getYield(); - - /** - * Set whether or not this explosive's explosion causes fire - * - * @param isIncendiary Whether it should cause fire - */ - public void setIsIncendiary(boolean isIncendiary); - - /** - * Return whether or not this explosive creates a fire when exploding - * - * @return true if the explosive creates fire, false otherwise - */ - public boolean isIncendiary(); -} diff --git a/LiveWeather/src/org/bukkit/entity/FallingBlock.java b/LiveWeather/src/org/bukkit/entity/FallingBlock.java deleted file mode 100755 index 1edd6e0..0000000 --- a/LiveWeather/src/org/bukkit/entity/FallingBlock.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.Material; - -/** - * Represents a falling block - */ -public interface FallingBlock extends Entity { - - /** - * Get the Material of the falling block - * - * @return Material of the block - */ - Material getMaterial(); - - /** - * Get the ID of the falling block - * - * @return ID type of the block - * @deprecated Magic value - */ - @Deprecated - int getBlockId(); - - /** - * Get the data for the falling block - * - * @return data of the block - * @deprecated Magic value - */ - @Deprecated - byte getBlockData(); - - /** - * Get if the falling block will break into an item if it cannot be placed - * - * @return true if the block will break into an item when obstructed - */ - boolean getDropItem(); - - /** - * Set if the falling block will break into an item if it cannot be placed - * - * @param drop true to break into an item when obstructed - */ - void setDropItem(boolean drop); -} diff --git a/LiveWeather/src/org/bukkit/entity/FallingSand.java b/LiveWeather/src/org/bukkit/entity/FallingSand.java deleted file mode 100755 index 758d47d..0000000 --- a/LiveWeather/src/org/bukkit/entity/FallingSand.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a falling block. - * - * @deprecated See {@link FallingBlock} - */ -@Deprecated -public interface FallingSand extends FallingBlock {} diff --git a/LiveWeather/src/org/bukkit/entity/Fireball.java b/LiveWeather/src/org/bukkit/entity/Fireball.java deleted file mode 100755 index 56ed578..0000000 --- a/LiveWeather/src/org/bukkit/entity/Fireball.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.util.Vector; - -/** - * Represents a Fireball. - */ -public interface Fireball extends Projectile, Explosive { - - /** - * Fireballs fly straight and do not take setVelocity(...) well. - * - * @param direction the direction this fireball is flying toward - */ - public void setDirection(Vector direction); - - /** - * Retrieve the direction this fireball is heading toward - * - * @return the direction - */ - public Vector getDirection(); - -} diff --git a/LiveWeather/src/org/bukkit/entity/Firework.java b/LiveWeather/src/org/bukkit/entity/Firework.java deleted file mode 100755 index b8a8c07..0000000 --- a/LiveWeather/src/org/bukkit/entity/Firework.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.inventory.meta.FireworkMeta; - -public interface Firework extends Entity { - - /** - * Get a copy of the fireworks meta - * - * @return A copy of the current Firework meta - */ - FireworkMeta getFireworkMeta(); - - /** - * Apply the provided meta to the fireworks - * - * @param meta The FireworkMeta to apply - */ - void setFireworkMeta(FireworkMeta meta); - - /** - * Cause this firework to explode at earliest opportunity, as if it has no - * remaining fuse. - */ - void detonate(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Fish.java b/LiveWeather/src/org/bukkit/entity/Fish.java deleted file mode 100755 index 9ecc4a3..0000000 --- a/LiveWeather/src/org/bukkit/entity/Fish.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a fishing hook. - */ -public interface Fish extends Projectile { - - /** - * Gets the chance of a fish biting. - *

          - * 0.0 = No Chance.
          - * 1.0 = Instant catch. - * - * @return chance the bite chance - */ - public double getBiteChance(); - - /** - * Sets the chance of a fish biting. - *

          - * 0.0 = No Chance.
          - * 1.0 = Instant catch. - * - * @param chance the bite chance - * @throws IllegalArgumentException if the bite chance is not between 0 - * and 1 - */ - public void setBiteChance(double chance) throws IllegalArgumentException; -} diff --git a/LiveWeather/src/org/bukkit/entity/Flying.java b/LiveWeather/src/org/bukkit/entity/Flying.java deleted file mode 100755 index 4f16a26..0000000 --- a/LiveWeather/src/org/bukkit/entity/Flying.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Flying Entity. - */ -public interface Flying extends LivingEntity {} diff --git a/LiveWeather/src/org/bukkit/entity/Ghast.java b/LiveWeather/src/org/bukkit/entity/Ghast.java deleted file mode 100755 index 3f5edf7..0000000 --- a/LiveWeather/src/org/bukkit/entity/Ghast.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Ghast. - */ -public interface Ghast extends Flying {} diff --git a/LiveWeather/src/org/bukkit/entity/Giant.java b/LiveWeather/src/org/bukkit/entity/Giant.java deleted file mode 100755 index 610de57..0000000 --- a/LiveWeather/src/org/bukkit/entity/Giant.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Giant. - */ -public interface Giant extends Monster {} diff --git a/LiveWeather/src/org/bukkit/entity/Golem.java b/LiveWeather/src/org/bukkit/entity/Golem.java deleted file mode 100755 index 4165977..0000000 --- a/LiveWeather/src/org/bukkit/entity/Golem.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * A mechanical creature that may harm enemies. - */ -public interface Golem extends Creature { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Hanging.java b/LiveWeather/src/org/bukkit/entity/Hanging.java deleted file mode 100755 index 67e9b61..0000000 --- a/LiveWeather/src/org/bukkit/entity/Hanging.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.block.BlockFace; -import org.bukkit.material.Attachable; - -/** - * Represents a Hanging entity - */ -public interface Hanging extends Entity, Attachable { - - /** - * Sets the direction of the hanging entity, potentially overriding rules - * of placement. Note that if the result is not valid the object would - * normally drop as an item. - * - * @param face The new direction. - * @param force Whether to force it. - * @return False if force was false and there was no block for it to - * attach to in order to face the given direction. - */ - public boolean setFacingDirection(BlockFace face, boolean force); -} diff --git a/LiveWeather/src/org/bukkit/entity/Horse.java b/LiveWeather/src/org/bukkit/entity/Horse.java deleted file mode 100755 index e90d318..0000000 --- a/LiveWeather/src/org/bukkit/entity/Horse.java +++ /dev/null @@ -1,256 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.inventory.HorseInventory; -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a Horse. - */ -public interface Horse extends Animals, Vehicle, InventoryHolder, Tameable { - - /** - * Represents the different types of horses that may exist. - */ - public enum Variant { - /** - * A normal horse - */ - HORSE, - /** - * A donkey - */ - DONKEY, - /** - * A mule - */ - MULE, - /** - * An undead horse - */ - UNDEAD_HORSE, - /** - * A skeleton horse - */ - SKELETON_HORSE, - ; - } - - /** - * Represents the base color that the horse has. - */ - public enum Color { - /** - * Snow white - */ - WHITE, - /** - * Very light brown - */ - CREAMY, - /** - * Chestnut - */ - CHESTNUT, - /** - * Light brown - */ - BROWN, - /** - * Pitch black - */ - BLACK, - /** - * Gray - */ - GRAY, - /** - * Dark brown - */ - DARK_BROWN, - ; - } - - /** - * Represents the style, or markings, that the horse has. - */ - public enum Style { - /** - * No markings - */ - NONE, - /** - * White socks or stripes - */ - WHITE, - /** - * Milky splotches - */ - WHITEFIELD, - /** - * Round white dots - */ - WHITE_DOTS, - /** - * Small black dots - */ - BLACK_DOTS, - ; - } - - /** - * Gets the horse's variant. - *

          - * A horse's variant defines its physical appearance and capabilities. - * Whether a horse is a regular horse, donkey, mule, or other kind of - * horse is determined using the variant. - * - * @return a {@link Variant} representing the horse's variant - */ - public Variant getVariant(); - - /** - * Sets the horse's variant. - *

          - * A horse's variant defines its physical appearance and capabilities. - * Whether a horse is a regular horse, donkey, mule, or other kind of - * horse can be set using the variant. - *

          - * Setting a horse's variant does not change its attributes such as - * its owner and its tamed status, but changing a mule or donkey - * with a chest to another variant which does not support a chest - * will remove the chest and its contents. - * - * @param variant a {@link Variant} for this horse - */ - public void setVariant(Variant variant); - - /** - * Gets the horse's color. - *

          - * Colors only apply to horses, not to donkeys, mules, skeleton horses - * or undead horses. - * - * @return a {@link Color} representing the horse's group - */ - public Color getColor(); - - /** - * Sets the horse's color. - *

          - * Attempting to set a color for any donkey, mule, skeleton horse or - * undead horse will not result in a change. - * - * @param color a {@link Color} for this horse - */ - public void setColor(Color color); - - /** - * Gets the horse's style. - * Styles determine what kind of markings or patterns a horse has. - *

          - * Styles only apply to horses, not to donkeys, mules, skeleton horses - * or undead horses. - * - * @return a {@link Style} representing the horse's style - */ - public Style getStyle(); - - /** - * Sets the style of this horse. - * Styles determine what kind of markings or patterns a horse has. - *

          - * Attempting to set a style for any donkey, mule, skeleton horse or - * undead horse will not result in a change. - * - * @param style a {@link Style} for this horse - */ - public void setStyle(Style style); - - /** - * Gets whether the horse has a chest equipped. - * - * @return true if the horse has chest storage - */ - public boolean isCarryingChest(); - - /** - * Sets whether the horse has a chest equipped. - * Removing a chest will also clear the chest's inventory. - * - * @param chest true if the horse should have a chest - */ - public void setCarryingChest(boolean chest); - - /** - * Gets the domestication level of this horse. - *

          - * A higher domestication level indicates that the horse is closer to - * becoming tame. As the domestication level gets closer to the max - * domestication level, the chance of the horse becoming tame increases. - * - * @return domestication level - */ - public int getDomestication(); - - /** - * Sets the domestication level of this horse. - *

          - * Setting the domestication level to a high value will increase the - * horse's chances of becoming tame. - *

          - * Domestication level must be greater than zero and no greater than - * the max domestication level of the horse, determined with - * {@link #getMaxDomestication()} - * - * @param level domestication level - */ - public void setDomestication(int level); - - /** - * Gets the maximum domestication level of this horse. - *

          - * The higher this level is, the longer it will likely take - * for the horse to be tamed. - * - * @return the max domestication level - */ - public int getMaxDomestication(); - - /** - * Sets the maximum domestication level of this horse. - *

          - * Setting a higher max domestication will increase the amount of - * domesticating (feeding, riding, etc.) necessary in order to tame it, - * while setting a lower max value will have the opposite effect. - *

          - * Maximum domestication must be greater than zero. - * - * @param level the max domestication level - */ - public void setMaxDomestication(int level); - - /** - * Gets the jump strength of this horse. - *

          - * Jump strength defines how high the horse can jump. A higher jump strength - * increases how high a jump will go. - * - * @return the horse's jump strength - */ - public double getJumpStrength(); - - /** - * Sets the jump strength of this horse. - *

          - * A higher jump strength increases how high a jump will go. - * Setting a jump strength to 0 will result in no jump. - * You cannot set a jump strength to a value below 0 or - * above 2. - * - * @param strength jump strength for this horse - */ - public void setJumpStrength(double strength); - - @Override - public HorseInventory getInventory(); -} diff --git a/LiveWeather/src/org/bukkit/entity/HumanEntity.java b/LiveWeather/src/org/bukkit/entity/HumanEntity.java deleted file mode 100755 index 3f8646d..0000000 --- a/LiveWeather/src/org/bukkit/entity/HumanEntity.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.permissions.Permissible; - -/** - * Represents a human entity, such as an NPC or a player - */ -public interface HumanEntity extends LivingEntity, AnimalTamer, Permissible, InventoryHolder { - - /** - * Returns the name of this player - * - * @return Player name - */ - public String getName(); - - /** - * Get the player's inventory. - * - * @return The inventory of the player, this also contains the armor - * slots. - */ - public PlayerInventory getInventory(); - - /** - * Get the player's EnderChest inventory - * - * @return The EnderChest of the player - */ - public Inventory getEnderChest(); - - /** - * If the player currently has an inventory window open, this method will - * set a property of that window, such as the state of a progress bar. - * - * @param prop The property. - * @param value The value to set the property to. - * @return True if the property was successfully set. - */ - public boolean setWindowProperty(InventoryView.Property prop, int value); - - /** - * Gets the inventory view the player is currently viewing. If they do not - * have an inventory window open, it returns their internal crafting view. - * - * @return The inventory view. - */ - public InventoryView getOpenInventory(); - - /** - * Opens an inventory window with the specified inventory on the top and - * the player's inventory on the bottom. - * - * @param inventory The inventory to open - * @return The newly opened inventory view - */ - public InventoryView openInventory(Inventory inventory); - - /** - * Opens an empty workbench inventory window with the player's inventory - * on the bottom. - * - * @param location The location to attach it to. If null, the player's - * location is used. - * @param force If false, and there is no workbench block at the location, - * no inventory will be opened and null will be returned. - * @return The newly opened inventory view, or null if it could not be - * opened. - */ - public InventoryView openWorkbench(Location location, boolean force); - - /** - * Opens an empty enchanting inventory window with the player's inventory - * on the bottom. - * - * @param location The location to attach it to. If null, the player's - * location is used. - * @param force If false, and there is no enchanting table at the - * location, no inventory will be opened and null will be returned. - * @return The newly opened inventory view, or null if it could not be - * opened. - */ - public InventoryView openEnchanting(Location location, boolean force); - - /** - * Opens an inventory window to the specified inventory view. - * - * @param inventory The view to open - */ - public void openInventory(InventoryView inventory); - - /** - * Force-closes the currently open inventory view for this player, if any. - */ - public void closeInventory(); - - /** - * Returns the ItemStack currently in your hand, can be empty. - * - * @return The ItemStack of the item you are currently holding. - */ - public ItemStack getItemInHand(); - - /** - * Sets the item to the given ItemStack, this will replace whatever the - * user was holding. - * - * @param item The ItemStack which will end up in the hand - */ - public void setItemInHand(ItemStack item); - - /** - * Returns the ItemStack currently on your cursor, can be empty. Will - * always be empty if the player currently has no open window. - * - * @return The ItemStack of the item you are currently moving around. - */ - public ItemStack getItemOnCursor(); - - /** - * Sets the item to the given ItemStack, this will replace whatever the - * user was moving. Will always be empty if the player currently has no - * open window. - * - * @param item The ItemStack which will end up in the hand - */ - public void setItemOnCursor(ItemStack item); - - /** - * Returns whether this player is slumbering. - * - * @return slumber state - */ - public boolean isSleeping(); - - /** - * Get the sleep ticks of the player. This value may be capped. - * - * @return slumber ticks - */ - public int getSleepTicks(); - - /** - * Gets this human's current {@link GameMode} - * - * @return Current game mode - */ - public GameMode getGameMode(); - - /** - * Sets this human's current {@link GameMode} - * - * @param mode New game mode - */ - public void setGameMode(GameMode mode); - - /** - * Check if the player is currently blocking (ie with a sword). - * - * @return Whether they are blocking. - */ - public boolean isBlocking(); - - /** - * Get the total amount of experience required for the player to level - * - * @return Experience required to level up - */ - public int getExpToLevel(); -} diff --git a/LiveWeather/src/org/bukkit/entity/IronGolem.java b/LiveWeather/src/org/bukkit/entity/IronGolem.java deleted file mode 100755 index 655e37c..0000000 --- a/LiveWeather/src/org/bukkit/entity/IronGolem.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.entity; - -/** - * An iron Golem that protects Villages. - */ -public interface IronGolem extends Golem { - - /** - * Gets whether this iron golem was built by a player. - * - * @return Whether this iron golem was built by a player - */ - public boolean isPlayerCreated(); - - /** - * Sets whether this iron golem was built by a player or not. - * - * @param playerCreated true if you want to set the iron golem as being - * player created, false if you want it to be a natural village golem. - */ - public void setPlayerCreated(boolean playerCreated); -} diff --git a/LiveWeather/src/org/bukkit/entity/Item.java b/LiveWeather/src/org/bukkit/entity/Item.java deleted file mode 100755 index 90260b7..0000000 --- a/LiveWeather/src/org/bukkit/entity/Item.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.inventory.ItemStack; - -/** - * Represents an Item. - */ -public interface Item extends Entity { - - /** - * Gets the item stack associated with this item drop. - * - * @return An item stack. - */ - public ItemStack getItemStack(); - - /** - * Sets the item stack associated with this item drop. - * - * @param stack An item stack. - */ - public void setItemStack(ItemStack stack); - - /** - * Gets the delay before this Item is available to be picked up by players - * - * @return Remaining delay - */ - public int getPickupDelay(); - - /** - * Sets the delay before this Item is available to be picked up by players - * - * @param delay New delay - */ - public void setPickupDelay(int delay); -} diff --git a/LiveWeather/src/org/bukkit/entity/ItemFrame.java b/LiveWeather/src/org/bukkit/entity/ItemFrame.java deleted file mode 100755 index 8b86815..0000000 --- a/LiveWeather/src/org/bukkit/entity/ItemFrame.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.Rotation; -import org.bukkit.inventory.ItemStack; - -/** - * Represents an Item Frame - */ -public interface ItemFrame extends Hanging { - - /** - * Get the item in this frame - * - * @return a defensive copy the item in this item frame - */ - public ItemStack getItem(); - - /** - * Set the item in this frame - * - * @param item the new item - */ - public void setItem(ItemStack item); - - /** - * Get the rotation of the frame's item - * - * @return the direction - */ - public Rotation getRotation(); - - /** - * Set the rotation of the frame's item - * - * @param rotation the new rotation - * @throws IllegalArgumentException if rotation is null - */ - public void setRotation(Rotation rotation) throws IllegalArgumentException; -} diff --git a/LiveWeather/src/org/bukkit/entity/LargeFireball.java b/LiveWeather/src/org/bukkit/entity/LargeFireball.java deleted file mode 100755 index fc3a109..0000000 --- a/LiveWeather/src/org/bukkit/entity/LargeFireball.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a large {@link Fireball} - */ -public interface LargeFireball extends Fireball { -} diff --git a/LiveWeather/src/org/bukkit/entity/LeashHitch.java b/LiveWeather/src/org/bukkit/entity/LeashHitch.java deleted file mode 100755 index 9ac04c1..0000000 --- a/LiveWeather/src/org/bukkit/entity/LeashHitch.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Leash Hitch on a fence - */ -public interface LeashHitch extends Hanging { -} diff --git a/LiveWeather/src/org/bukkit/entity/LightningStrike.java b/LiveWeather/src/org/bukkit/entity/LightningStrike.java deleted file mode 100755 index c8b5154..0000000 --- a/LiveWeather/src/org/bukkit/entity/LightningStrike.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents an instance of a lightning strike. May or may not do damage. - */ -public interface LightningStrike extends Weather { - - /** - * Returns whether the strike is an effect that does no damage. - * - * @return whether the strike is an effect - */ - public boolean isEffect(); - -} diff --git a/LiveWeather/src/org/bukkit/entity/LivingEntity.java b/LiveWeather/src/org/bukkit/entity/LivingEntity.java deleted file mode 100755 index 6c8b4f8..0000000 --- a/LiveWeather/src/org/bukkit/entity/LivingEntity.java +++ /dev/null @@ -1,394 +0,0 @@ -package org.bukkit.entity; - -import java.util.Collection; -import java.util.HashSet; -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.inventory.EntityEquipment; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.projectiles.ProjectileSource; - -/** - * Represents a living entity, such as a monster or player - */ -public interface LivingEntity extends Entity, Damageable, ProjectileSource { - - /** - * Gets the height of the living entity's eyes above its Location. - * - * @return height of the living entity's eyes above its location - */ - public double getEyeHeight(); - - /** - * Gets the height of the living entity's eyes above its Location. - * - * @param ignoreSneaking if set to true, the effects of sneaking will be - * ignored - * @return height of the living entity's eyes above its location - */ - public double getEyeHeight(boolean ignoreSneaking); - - /** - * Get a Location detailing the current eye position of the living entity. - * - * @return a location at the eyes of the living entity - */ - public Location getEyeLocation(); - - /** - * Gets all blocks along the living entity's line of sight. - *

          - * This list contains all blocks from the living entity's eye position to - * target inclusive. - * - * @param transparent HashSet containing all transparent block IDs (set to - * null for only air) - * @param maxDistance this is the maximum distance to scan (may be limited - * by server by at least 100 blocks, no less) - * @return list containing all blocks along the living entity's line of - * sight - * @deprecated Magic value - */ - @Deprecated - public List getLineOfSight(HashSet transparent, int maxDistance); - - /** - * Gets the block that the living entity has targeted. - * - * @param transparent HashSet containing all transparent block IDs (set to - * null for only air) - * @param maxDistance this is the maximum distance to scan (may be limited - * by server by at least 100 blocks, no less) - * @return block that the living entity has targeted - * @deprecated Magic value - */ - @Deprecated - public Block getTargetBlock(HashSet transparent, int maxDistance); - - /** - * Gets the last two blocks along the living entity's line of sight. - *

          - * The target block will be the last block in the list. - * - * @param transparent HashSet containing all transparent block IDs (set to - * null for only air) - * @param maxDistance this is the maximum distance to scan. This may be - * further limited by the server, but never to less than 100 blocks - * @return list containing the last 2 blocks along the living entity's - * line of sight - * @deprecated Magic value - */ - @Deprecated - public List getLastTwoTargetBlocks(HashSet transparent, int maxDistance); - - /** - * Throws an egg from the living entity. - * - * @deprecated use launchProjectile(Egg.class) instead - * @return the egg thrown - */ - @Deprecated - public Egg throwEgg(); - - /** - * Throws a snowball from the living entity. - * - * @deprecated use launchProjectile(Snowball.class) instead - * @return the snowball thrown - */ - @Deprecated - public Snowball throwSnowball(); - - /** - * Shoots an arrow from the living entity. - * - * @deprecated use launchProjectile(Arrow.class) instead - * @return the arrow shot - */ - @Deprecated - public Arrow shootArrow(); - - /** - * Returns the amount of air that the living entity has remaining, in - * ticks. - * - * @return amount of air remaining - */ - public int getRemainingAir(); - - /** - * Sets the amount of air that the living entity has remaining, in ticks. - * - * @param ticks amount of air remaining - */ - public void setRemainingAir(int ticks); - - /** - * Returns the maximum amount of air the living entity can have, in ticks. - * - * @return maximum amount of air - */ - public int getMaximumAir(); - - /** - * Sets the maximum amount of air the living entity can have, in ticks. - * - * @param ticks maximum amount of air - */ - public void setMaximumAir(int ticks); - - /** - * Returns the living entity's current maximum no damage ticks. - *

          - * This is the maximum duration in which the living entity will not take - * damage. - * - * @return maximum no damage ticks - */ - public int getMaximumNoDamageTicks(); - - /** - * Sets the living entity's current maximum no damage ticks. - * - * @param ticks maximum amount of no damage ticks - */ - public void setMaximumNoDamageTicks(int ticks); - - /** - * Returns the living entity's last damage taken in the current no damage - * ticks time. - *

          - * Only damage higher than this amount will further damage the living - * entity. - * - * @return damage taken since the last no damage ticks time period - */ - public double getLastDamage(); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public int _INVALID_getLastDamage(); - - /** - * Sets the damage dealt within the current no damage ticks time period. - * - * @param damage amount of damage - */ - public void setLastDamage(double damage); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setLastDamage(int damage); - - /** - * Returns the living entity's current no damage ticks. - * - * @return amount of no damage ticks - */ - public int getNoDamageTicks(); - - /** - * Sets the living entity's current no damage ticks. - * - * @param ticks amount of no damage ticks - */ - public void setNoDamageTicks(int ticks); - - /** - * Gets the player identified as the killer of the living entity. - *

          - * May be null. - * - * @return killer player, or null if none found - */ - public Player getKiller(); - - /** - * Adds the given {@link PotionEffect} to the living entity. - *

          - * Only one potion effect can be present for a given {@link - * PotionEffectType}. - * - * @param effect PotionEffect to be added - * @return whether the effect could be added - */ - public boolean addPotionEffect(PotionEffect effect); - - /** - * Adds the given {@link PotionEffect} to the living entity. - *

          - * Only one potion effect can be present for a given {@link - * PotionEffectType}. - * - * @param effect PotionEffect to be added - * @param force whether conflicting effects should be removed - * @return whether the effect could be added - */ - public boolean addPotionEffect(PotionEffect effect, boolean force); - - /** - * Attempts to add all of the given {@link PotionEffect} to the living - * entity. - * - * @param effects the effects to add - * @return whether all of the effects could be added - */ - public boolean addPotionEffects(Collection effects); - - /** - * Returns whether the living entity already has an existing effect of - * the given {@link PotionEffectType} applied to it. - * - * @param type the potion type to check - * @return whether the living entity has this potion effect active on them - */ - public boolean hasPotionEffect(PotionEffectType type); - - /** - * Removes any effects present of the given {@link PotionEffectType}. - * - * @param type the potion type to remove - */ - public void removePotionEffect(PotionEffectType type); - - /** - * Returns all currently active {@link PotionEffect}s on the living - * entity. - * - * @return a collection of {@link PotionEffect}s - */ - public Collection getActivePotionEffects(); - - /** - * Checks whether the living entity has block line of sight to another. - *

          - * This uses the same algorithm that hostile mobs use to find the closest - * player. - * - * @param other the entity to determine line of sight to - * @return true if there is a line of sight, false if not - */ - public boolean hasLineOfSight(Entity other); - - /** - * Returns if the living entity despawns when away from players or not. - *

          - * By default, animals are not removed while other mobs are. - * - * @return true if the living entity is removed when away from players - */ - public boolean getRemoveWhenFarAway(); - - /** - * Sets whether or not the living entity despawns when away from players - * or not. - * - * @param remove the removal status - */ - public void setRemoveWhenFarAway(boolean remove); - - /** - * Gets the inventory with the equipment worn by the living entity. - * - * @return the living entity's inventory - */ - public EntityEquipment getEquipment(); - - /** - * Sets whether or not the living entity can pick up items. - * - * @param pickup whether or not the living entity can pick up items - */ - public void setCanPickupItems(boolean pickup); - - /** - * Gets if the living entity can pick up items. - * - * @return whether or not the living entity can pick up items - */ - public boolean getCanPickupItems(); - - /** - * Sets a custom name on a mob. This name will be used in death messages - * and can be sent to the client as a nameplate over the mob. - *

          - * Setting the name to null or an empty string will clear it. - *

          - * This value has no effect on players, they will always use their real - * name. - * - * @param name the name to set - */ - public void setCustomName(String name); - - /** - * Gets the custom name on a mob. If there is no name this method will - * return null. - *

          - * This value has no effect on players, they will always use their real - * name. - * - * @return name of the mob or null - */ - public String getCustomName(); - - /** - * Sets whether or not to display the mob's custom name client side. The - * name will be displayed above the mob similarly to a player. - *

          - * This value has no effect on players, they will always display their - * name. - * - * @param flag custom name or not - */ - public void setCustomNameVisible(boolean flag); - - /** - * Gets whether or not the mob's custom name is displayed client side. - *

          - * This value has no effect on players, they will always display their - * name. - * - * @return if the custom name is displayed - */ - public boolean isCustomNameVisible(); - - /** - * Returns whether the entity is currently leashed. - * - * @return whether the entity is leashed - */ - public boolean isLeashed(); - - /** - * Gets the entity that is currently leading this entity. - * - * @return the entity holding the leash - * @throws IllegalStateException if not currently leashed - */ - public Entity getLeashHolder() throws IllegalStateException; - - /** - * Sets the leash on this entity to be held by the supplied entity. - *

          - * This method has no effect on EnderDragons, Withers, Players, or Bats. - * Non-living entities excluding leashes will not persist as leash - * holders. - * - * @param holder the entity to leash this entity to - * @return whether the operation was successful - */ - public boolean setLeashHolder(Entity holder); -} diff --git a/LiveWeather/src/org/bukkit/entity/MagmaCube.java b/LiveWeather/src/org/bukkit/entity/MagmaCube.java deleted file mode 100755 index 714b442..0000000 --- a/LiveWeather/src/org/bukkit/entity/MagmaCube.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a MagmaCube. - */ -public interface MagmaCube extends Slime { -} diff --git a/LiveWeather/src/org/bukkit/entity/Minecart.java b/LiveWeather/src/org/bukkit/entity/Minecart.java deleted file mode 100755 index a7bb094..0000000 --- a/LiveWeather/src/org/bukkit/entity/Minecart.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.util.Vector; - -/** - * Represents a minecart entity. - */ -public interface Minecart extends Vehicle { - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setDamage(int damage); - - /** - * Sets a minecart's damage. - * - * @param damage over 40 to "kill" a minecart - */ - public void setDamage(double damage); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public int _INVALID_getDamage(); - - /** - * Gets a minecart's damage. - * - * @return The damage - */ - public double getDamage(); - - /** - * Gets the maximum speed of a minecart. The speed is unrelated to the - * velocity. - * - * @return The max speed - */ - public double getMaxSpeed(); - - /** - * Sets the maximum speed of a minecart. Must be nonnegative. Default is - * 0.4D. - * - * @param speed The max speed - */ - public void setMaxSpeed(double speed); - - /** - * Returns whether this minecart will slow down faster without a passenger - * occupying it - * - * @return Whether it decelerates faster - */ - public boolean isSlowWhenEmpty(); - - /** - * Sets whether this minecart will slow down faster without a passenger - * occupying it - * - * @param slow Whether it will decelerate faster - */ - public void setSlowWhenEmpty(boolean slow); - - /** - * Gets the flying velocity modifier. Used for minecarts that are in - * mid-air. A flying minecart's velocity is multiplied by this factor each - * tick. - * - * @return The vector factor - */ - public Vector getFlyingVelocityMod(); - - /** - * Sets the flying velocity modifier. Used for minecarts that are in - * mid-air. A flying minecart's velocity is multiplied by this factor each - * tick. - * - * @param flying velocity modifier vector - */ - public void setFlyingVelocityMod(Vector flying); - - /** - * Gets the derailed velocity modifier. Used for minecarts that are on the - * ground, but not on rails. - *

          - * A derailed minecart's velocity is multiplied by this factor each tick. - * - * @return derailed visible speed - */ - public Vector getDerailedVelocityMod(); - - /** - * Sets the derailed velocity modifier. Used for minecarts that are on the - * ground, but not on rails. A derailed minecart's velocity is multiplied - * by this factor each tick. - * - * @param derailed visible speed - */ - public void setDerailedVelocityMod(Vector derailed); -} diff --git a/LiveWeather/src/org/bukkit/entity/Monster.java b/LiveWeather/src/org/bukkit/entity/Monster.java deleted file mode 100755 index fce2efd..0000000 --- a/LiveWeather/src/org/bukkit/entity/Monster.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Monster. - */ -public interface Monster extends Creature {} diff --git a/LiveWeather/src/org/bukkit/entity/MushroomCow.java b/LiveWeather/src/org/bukkit/entity/MushroomCow.java deleted file mode 100755 index 84154de..0000000 --- a/LiveWeather/src/org/bukkit/entity/MushroomCow.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a mushroom {@link Cow} - */ -public interface MushroomCow extends Cow { - -} diff --git a/LiveWeather/src/org/bukkit/entity/NPC.java b/LiveWeather/src/org/bukkit/entity/NPC.java deleted file mode 100755 index 0c6b175..0000000 --- a/LiveWeather/src/org/bukkit/entity/NPC.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a non-player character - */ -public interface NPC extends Creature { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Ocelot.java b/LiveWeather/src/org/bukkit/entity/Ocelot.java deleted file mode 100755 index d5d034d..0000000 --- a/LiveWeather/src/org/bukkit/entity/Ocelot.java +++ /dev/null @@ -1,83 +0,0 @@ - -package org.bukkit.entity; - -/** - * A wild tameable cat - */ -public interface Ocelot extends Animals, Tameable { - - /** - * Gets the current type of this cat. - * - * @return Type of the cat. - */ - public Type getCatType(); - - /** - * Sets the current type of this cat. - * - * @param type New type of this cat. - */ - public void setCatType(Type type); - - /** - * Checks if this ocelot is sitting - * - * @return true if sitting - */ - public boolean isSitting(); - - /** - * Sets if this ocelot is sitting. Will remove any path that the ocelot - * was following beforehand. - * - * @param sitting true if sitting - */ - public void setSitting(boolean sitting); - - /** - * Represents the various different cat types there are. - */ - public enum Type { - WILD_OCELOT(0), - BLACK_CAT(1), - RED_CAT(2), - SIAMESE_CAT(3); - - private static final Type[] types = new Type[Type.values().length]; - private final int id; - - static { - for (Type type : values()) { - types[type.getId()] = type; - } - } - - private Type(int id) { - this.id = id; - } - - /** - * Gets the ID of this cat type. - * - * @return Type ID. - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Gets a cat type by its ID. - * - * @param id ID of the cat type to get. - * @return Resulting type, or null if not found. - * @deprecated Magic value - */ - @Deprecated - public static Type getType(int id) { - return (id >= types.length) ? null : types[id]; - } - } -} diff --git a/LiveWeather/src/org/bukkit/entity/Painting.java b/LiveWeather/src/org/bukkit/entity/Painting.java deleted file mode 100755 index ca7a4cf..0000000 --- a/LiveWeather/src/org/bukkit/entity/Painting.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.Art; -import org.bukkit.event.painting.PaintingBreakEvent; - -/** - * Represents a Painting. - */ -public interface Painting extends Hanging { - - /** - * Get the art on this painting - * - * @return The art - */ - public Art getArt(); - - /** - * Set the art on this painting - * - * @param art The new art - * @return False if the new art won't fit at the painting's current - * location - */ - public boolean setArt(Art art); - - /** - * Set the art on this painting - * - * @param art The new art - * @param force If true, force the new art regardless of whether it fits - * at the current location. Note that forcing it where it can't fit - * normally causes it to drop as an item unless you override this by - * catching the {@link PaintingBreakEvent}. - * @return False if force was false and the new art won't fit at the - * painting's current location - */ - public boolean setArt(Art art, boolean force); -} diff --git a/LiveWeather/src/org/bukkit/entity/Pig.java b/LiveWeather/src/org/bukkit/entity/Pig.java deleted file mode 100755 index 28f59f2..0000000 --- a/LiveWeather/src/org/bukkit/entity/Pig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Pig. - */ -public interface Pig extends Animals, Vehicle { - - /** - * Check if the pig has a saddle. - * - * @return if the pig has been saddled. - */ - public boolean hasSaddle(); - - /** - * Sets if the pig has a saddle or not - * - * @param saddled set if the pig has a saddle or not. - */ - public void setSaddle(boolean saddled); -} diff --git a/LiveWeather/src/org/bukkit/entity/PigZombie.java b/LiveWeather/src/org/bukkit/entity/PigZombie.java deleted file mode 100755 index 2f08672..0000000 --- a/LiveWeather/src/org/bukkit/entity/PigZombie.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Pig Zombie. - */ -public interface PigZombie extends Zombie { - - /** - * Get the pig zombie's current anger level. - * - * @return The anger level. - */ - int getAnger(); - - /** - * Set the pig zombie's current anger level. - * - * @param level The anger level. Higher levels of anger take longer to - * wear off. - */ - void setAnger(int level); - - /** - * Shorthand; sets to either 0 or the default level. - * - * @param angry Whether the zombie should be angry. - */ - void setAngry(boolean angry); - - /** - * Shorthand; gets whether the zombie is angry. - * - * @return True if the zombie is angry, otherwise false. - */ - boolean isAngry(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Player.java b/LiveWeather/src/org/bukkit/entity/Player.java deleted file mode 100755 index c0c0942..0000000 --- a/LiveWeather/src/org/bukkit/entity/Player.java +++ /dev/null @@ -1,1050 +0,0 @@ -package org.bukkit.entity; - -import java.net.InetSocketAddress; - -import org.bukkit.Achievement; -import org.bukkit.ChatColor; -import org.bukkit.Effect; -import org.bukkit.Instrument; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Note; -import org.bukkit.OfflinePlayer; -import org.bukkit.Sound; -import org.bukkit.Statistic; -import org.bukkit.WeatherType; -import org.bukkit.command.CommandSender; -import org.bukkit.conversations.Conversable; -import org.bukkit.map.MapView; -import org.bukkit.plugin.messaging.PluginMessageRecipient; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; - -/** - * Represents a player, connected or not - */ -public interface Player extends HumanEntity, Conversable, CommandSender, OfflinePlayer, PluginMessageRecipient { - - /** - * Gets the "friendly" name to display of this player. This may include - * color. - *

          - * Note that this name will not be displayed in game, only in chat and - * places defined by plugins. - * - * @return the friendly name - */ - public String getDisplayName(); - - /** - * Sets the "friendly" name to display of this player. This may include - * color. - *

          - * Note that this name will not be displayed in game, only in chat and - * places defined by plugins. - * - * @param name The new display name. - */ - public void setDisplayName(String name); - - /** - * Gets the name that is shown on the player list. - * - * @return the player list name - */ - public String getPlayerListName(); - - /** - * Sets the name that is shown on the in-game player list. - *

          - * The name cannot be longer than 16 characters, but {@link ChatColor} is - * supported. - *

          - * If the value is null, the name will be identical to {@link #getName()}. - *

          - * This name is case sensitive and unique, two names with different casing - * will appear as two different people. If a player joins afterwards with - * a name that conflicts with a player's custom list name, the joining - * player's player list name will have a random number appended to it (1-2 - * characters long in the default implementation). If the joining player's - * name is 15 or 16 characters long, part of the name will be truncated at - * the end to allow the addition of the two digits. - * - * @param name new player list name - * @throws IllegalArgumentException if the name is already used by someone - * else - * @throws IllegalArgumentException if the length of the name is too long - */ - public void setPlayerListName(String name); - - /** - * Set the target of the player's compass. - * - * @param loc Location to point to - */ - public void setCompassTarget(Location loc); - - /** - * Get the previously set compass target. - * - * @return location of the target - */ - public Location getCompassTarget(); - - /** - * Gets the socket address of this player - * - * @return the player's address - */ - public InetSocketAddress getAddress(); - - /** - * Sends this sender a message raw - * - * @param message Message to be displayed - */ - public void sendRawMessage(String message); - - /** - * Kicks player with custom kick message. - * - * @param message kick message - */ - public void kickPlayer(String message); - - /** - * Says a message (or runs a command). - * - * @param msg message to print - */ - public void chat(String msg); - - /** - * Makes the player perform the given command - * - * @param command Command to perform - * @return true if the command was successful, otherwise false - */ - public boolean performCommand(String command); - - /** - * Returns if the player is in sneak mode - * - * @return true if player is in sneak mode - */ - public boolean isSneaking(); - - /** - * Sets the sneak mode the player - * - * @param sneak true if player should appear sneaking - */ - public void setSneaking(boolean sneak); - - /** - * Gets whether the player is sprinting or not. - * - * @return true if player is sprinting. - */ - public boolean isSprinting(); - - /** - * Sets whether the player is sprinting or not. - * - * @param sprinting true if the player should be sprinting - */ - public void setSprinting(boolean sprinting); - - /** - * Saves the players current location, health, inventory, motion, and - * other information into the username.dat file, in the world/player - * folder - */ - public void saveData(); - - /** - * Loads the players current location, health, inventory, motion, and - * other information from the username.dat file, in the world/player - * folder. - *

          - * Note: This will overwrite the players current inventory, health, - * motion, etc, with the state from the saved dat file. - */ - public void loadData(); - - /** - * Sets whether the player is ignored as not sleeping. If everyone is - * either sleeping or has this flag set, then time will advance to the - * next day. If everyone has this flag set but no one is actually in bed, - * then nothing will happen. - * - * @param isSleeping Whether to ignore. - */ - public void setSleepingIgnored(boolean isSleeping); - - /** - * Returns whether the player is sleeping ignored. - * - * @return Whether player is ignoring sleep. - */ - public boolean isSleepingIgnored(); - - /** - * Play a note for a player at a location. This requires a note block - * at the particular location (as far as the client is concerned). This - * will not work without a note block. This will not work with cake. - * - * @param loc The location of a note block. - * @param instrument The instrument ID. - * @param note The note ID. - * @deprecated Magic value - */ - @Deprecated - public void playNote(Location loc, byte instrument, byte note); - - /** - * Play a note for a player at a location. This requires a note block - * at the particular location (as far as the client is concerned). This - * will not work without a note block. This will not work with cake. - * - * @param loc The location of a note block - * @param instrument The instrument - * @param note The note - */ - public void playNote(Location loc, Instrument instrument, Note note); - - - /** - * Play a sound for a player at the location. - *

          - * This function will fail silently if Location or Sound are null. - * - * @param location The location to play the sound - * @param sound The sound to play - * @param volume The volume of the sound - * @param pitch The pitch of the sound - */ - public void playSound(Location location, Sound sound, float volume, float pitch); - - /** - * Play a sound for a player at the location. - *

          - * This function will fail silently if Location or Sound are null. No - * sound will be heard by the player if their client does not have the - * respective sound for the value passed. - * - * @param location the location to play the sound - * @param sound the internal sound name to play - * @param volume the volume of the sound - * @param pitch the pitch of the sound - * @deprecated Magic value - */ - @Deprecated - public void playSound(Location location, String sound, float volume, float pitch); - - /** - * Plays an effect to just this player. - * - * @param loc the location to play the effect at - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - * @deprecated Magic value - */ - @Deprecated - public void playEffect(Location loc, Effect effect, int data); - - /** - * Plays an effect to just this player. - * - * @param loc the location to play the effect at - * @param effect the {@link Effect} - * @param data a data bit needed for some effects - */ - public void playEffect(Location loc, Effect effect, T data); - - /** - * Send a block change. This fakes a block change packet for a user at a - * certain location. This will not actually change the world in any way. - * - * @param loc The location of the changed block - * @param material The new block - * @param data The block data - * @deprecated Magic value - */ - @Deprecated - public void sendBlockChange(Location loc, Material material, byte data); - - /** - * Send a chunk change. This fakes a chunk change packet for a user at a - * certain location. The updated cuboid must be entirely within a single - * chunk. This will not actually change the world in any way. - *

          - * At least one of the dimensions of the cuboid must be even. The size of - * the data buffer must be 2.5*sx*sy*sz and formatted in accordance with - * the Packet51 format. - * - * @param loc The location of the cuboid - * @param sx The x size of the cuboid - * @param sy The y size of the cuboid - * @param sz The z size of the cuboid - * @param data The data to be sent - * @return true if the chunk change packet was sent - * @deprecated Magic value - */ - @Deprecated - public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data); - - /** - * Send a block change. This fakes a block change packet for a user at a - * certain location. This will not actually change the world in any way. - * - * @param loc The location of the changed block - * @param material The new block ID - * @param data The block data - * @deprecated Magic value - */ - @Deprecated - public void sendBlockChange(Location loc, int material, byte data); - - /** - * Send a sign change. This fakes a sign change packet for a user at - * a certain location. This will not actually change the world in any way. - * This method will use a sign at the location's block or a faked sign - * sent via {@link #sendBlockChange(org.bukkit.Location, int, byte)} or - * {@link #sendBlockChange(org.bukkit.Location, org.bukkit.Material, byte)}. - *

          - * If the client does not have a sign at the given location it will - * display an error message to the user. - * - * @param loc the location of the sign - * @param lines the new text on the sign or null to clear it - * @throws IllegalArgumentException if location is null - * @throws IllegalArgumentException if lines is non-null and has a length less than 4 - */ - public void sendSignChange(Location loc, String[] lines) throws IllegalArgumentException; - - /** - * Render a map and send it to the player in its entirety. This may be - * used when streaming the map in the normal manner is not desirable. - * - * @param map The map to be sent - */ - public void sendMap(MapView map); - - /** - * Forces an update of the player's entire inventory. - * - * @deprecated This method should not be relied upon as it is a temporary - * work-around for a larger, more complicated issue. - */ - @Deprecated - public void updateInventory(); - - /** - * Awards the given achievement and any parent achievements that the - * player does not have. - * - * @param achievement Achievement to award - * @throws IllegalArgumentException if achievement is null - */ - public void awardAchievement(Achievement achievement); - - /** - * Removes the given achievement and any children achievements that the - * player has. - * - * @param achievement Achievement to remove - * @throws IllegalArgumentException if achievement is null - */ - public void removeAchievement(Achievement achievement); - - /** - * Gets whether this player has the given achievement. - * - * @return whether the player has the achievement - * @throws IllegalArgumentException if achievement is null - */ - public boolean hasAchievement(Achievement achievement); - - /** - * Increments the given statistic for this player. - *

          - * This is equivalent to the following code: - * incrementStatistic(Statistic, 1) - * - * @param statistic Statistic to increment - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public void incrementStatistic(Statistic statistic) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player. - *

          - * This is equivalent to the following code: - * decrementStatistic(Statistic, 1) - * - * @param statistic Statistic to decrement - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public void decrementStatistic(Statistic statistic) throws IllegalArgumentException; - - /** - * Increments the given statistic for this player. - * - * @param statistic Statistic to increment - * @param amount Amount to increment this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public void incrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player. - * - * @param statistic Statistic to decrement - * @param amount Amount to decrement this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public void decrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException; - - /** - * Sets the given statistic for this player. - * - * @param statistic Statistic to set - * @param newValue The value to set this statistic to - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if newValue is negative - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public void setStatistic(Statistic statistic, int newValue) throws IllegalArgumentException; - - /** - * Gets the value of the given statistic for this player. - * - * @param statistic Statistic to check - * @return the value of the given statistic - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if the statistic requires an - * additional parameter - */ - public int getStatistic(Statistic statistic) throws IllegalArgumentException; - - /** - * Increments the given statistic for this player for the given material. - *

          - * This is equivalent to the following code: - * incrementStatistic(Statistic, Material, 1) - * - * @param statistic Statistic to increment - * @param material Material to offset the statistic with - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void incrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player for the given material. - *

          - * This is equivalent to the following code: - * decrementStatistic(Statistic, Material, 1) - * - * @param statistic Statistic to decrement - * @param material Material to offset the statistic with - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void decrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException; - - /** - * Gets the value of the given statistic for this player. - * - * @param statistic Statistic to check - * @param material Material offset of the statistic - * @return the value of the given statistic - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public int getStatistic(Statistic statistic, Material material) throws IllegalArgumentException; - - /** - * Increments the given statistic for this player for the given material. - * - * @param statistic Statistic to increment - * @param material Material to offset the statistic with - * @param amount Amount to increment this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void incrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player for the given material. - * - * @param statistic Statistic to decrement - * @param material Material to offset the statistic with - * @param amount Amount to decrement this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void decrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException; - - /** - * Sets the given statistic for this player for the given material. - * - * @param statistic Statistic to set - * @param material Material to offset the statistic with - * @param newValue The value to set this statistic to - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if material is null - * @throws IllegalArgumentException if newValue is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void setStatistic(Statistic statistic, Material material, int newValue) throws IllegalArgumentException; - - /** - * Increments the given statistic for this player for the given entity. - *

          - * This is equivalent to the following code: - * incrementStatistic(Statistic, EntityType, 1) - * - * @param statistic Statistic to increment - * @param entityType EntityType to offset the statistic with - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void incrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player for the given entity. - *

          - * This is equivalent to the following code: - * decrementStatistic(Statistic, EntityType, 1) - * - * @param statistic Statistic to decrement - * @param entityType EntityType to offset the statistic with - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void decrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException; - - /** - * Gets the value of the given statistic for this player. - * - * @param statistic Statistic to check - * @param entityType EntityType offset of the statistic - * @return the value of the given statistic - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public int getStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException; - - /** - * Increments the given statistic for this player for the given entity. - * - * @param statistic Statistic to increment - * @param entityType EntityType to offset the statistic with - * @param amount Amount to increment this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void incrementStatistic(Statistic statistic, EntityType entityType, int amount) throws IllegalArgumentException; - - /** - * Decrements the given statistic for this player for the given entity. - * - * @param statistic Statistic to decrement - * @param entityType EntityType to offset the statistic with - * @param amount Amount to decrement this statistic by - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if amount is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void decrementStatistic(Statistic statistic, EntityType entityType, int amount); - - /** - * Sets the given statistic for this player for the given entity. - * - * @param statistic Statistic to set - * @param entityType EntityType to offset the statistic with - * @param newValue The value to set this statistic to - * @throws IllegalArgumentException if statistic is null - * @throws IllegalArgumentException if entityType is null - * @throws IllegalArgumentException if newValue is negative - * @throws IllegalArgumentException if the given parameter is not valid - * for the statistic - */ - public void setStatistic(Statistic statistic, EntityType entityType, int newValue); - - /** - * Sets the current time on the player's client. When relative is true the - * player's time will be kept synchronized to its world time with the - * specified offset. - *

          - * When using non relative time the player's time will stay fixed at the - * specified time parameter. It's up to the caller to continue updating - * the player's time. To restore player time to normal use - * resetPlayerTime(). - * - * @param time The current player's perceived time or the player's time - * offset from the server time. - * @param relative When true the player time is kept relative to its world - * time. - */ - public void setPlayerTime(long time, boolean relative); - - /** - * Returns the player's current timestamp. - * - * @return The player's time - */ - public long getPlayerTime(); - - /** - * Returns the player's current time offset relative to server time, or - * the current player's fixed time if the player's time is absolute. - * - * @return The player's time - */ - public long getPlayerTimeOffset(); - - /** - * Returns true if the player's time is relative to the server time, - * otherwise the player's time is absolute and will not change its current - * time unless done so with setPlayerTime(). - * - * @return true if the player's time is relative to the server time. - */ - public boolean isPlayerTimeRelative(); - - /** - * Restores the normal condition where the player's time is synchronized - * with the server time. - *

          - * Equivalent to calling setPlayerTime(0, true). - */ - public void resetPlayerTime(); - - /** - * Sets the type of weather the player will see. When used, the weather - * status of the player is locked until {@link #resetPlayerWeather()} is - * used. - * - * @param type The WeatherType enum type the player should experience - */ - public void setPlayerWeather(WeatherType type); - - /** - * Returns the type of weather the player is currently experiencing. - * - * @return The WeatherType that the player is currently experiencing or - * null if player is seeing server weather. - */ - public WeatherType getPlayerWeather(); - - /** - * Restores the normal condition where the player's weather is controlled - * by server conditions. - */ - public void resetPlayerWeather(); - - /** - * Gives the player the amount of experience specified. - * - * @param amount Exp amount to give - */ - public void giveExp(int amount); - - /** - * Gives the player the amount of experience levels specified. Levels can - * be taken by specifying a negative amount. - * - * @param amount amount of experience levels to give or take - */ - public void giveExpLevels(int amount); - - /** - * Gets the players current experience points towards the next level. - *

          - * This is a percentage value. 0 is "no progress" and 1 is "next level". - * - * @return Current experience points - */ - public float getExp(); - - /** - * Sets the players current experience points towards the next level - *

          - * This is a percentage value. 0 is "no progress" and 1 is "next level". - * - * @param exp New experience points - */ - public void setExp(float exp); - - /** - * Gets the players current experience level - * - * @return Current experience level - */ - public int getLevel(); - - /** - * Sets the players current experience level - * - * @param level New experience level - */ - public void setLevel(int level); - - /** - * Gets the players total experience points - * - * @return Current total experience points - */ - public int getTotalExperience(); - - /** - * Sets the players current experience level - * - * @param exp New experience level - */ - public void setTotalExperience(int exp); - - /** - * Gets the players current exhaustion level. - *

          - * Exhaustion controls how fast the food level drops. While you have a - * certain amount of exhaustion, your saturation will drop to zero, and - * then your food will drop to zero. - * - * @return Exhaustion level - */ - public float getExhaustion(); - - /** - * Sets the players current exhaustion level - * - * @param value Exhaustion level - */ - public void setExhaustion(float value); - - /** - * Gets the players current saturation level. - *

          - * Saturation is a buffer for food level. Your food level will not drop if - * you are saturated > 0. - * - * @return Saturation level - */ - public float getSaturation(); - - /** - * Sets the players current saturation level - * - * @param value Saturation level - */ - public void setSaturation(float value); - - /** - * Gets the players current food level - * - * @return Food level - */ - public int getFoodLevel(); - - /** - * Sets the players current food level - * - * @param value New food level - */ - public void setFoodLevel(int value); - - /** - * Gets the Location where the player will spawn at their bed, null if - * they have not slept in one or their current bed spawn is invalid. - * - * @return Bed Spawn Location if bed exists, otherwise null. - */ - public Location getBedSpawnLocation(); - - /** - * Sets the Location where the player will spawn at their bed. - * - * @param location where to set the respawn location - */ - public void setBedSpawnLocation(Location location); - - /** - * Sets the Location where the player will spawn at their bed. - * - * @param location where to set the respawn location - * @param force whether to forcefully set the respawn location even if a - * valid bed is not present - */ - public void setBedSpawnLocation(Location location, boolean force); - - /** - * Determines if the Player is allowed to fly via jump key double-tap like - * in creative mode. - * - * @return True if the player is allowed to fly. - */ - public boolean getAllowFlight(); - - /** - * Sets if the Player is allowed to fly via jump key double-tap like in - * creative mode. - * - * @param flight If flight should be allowed. - */ - public void setAllowFlight(boolean flight); - - /** - * Hides a player from this player - * - * @param player Player to hide - */ - public void hidePlayer(Player player); - - /** - * Allows this player to see a player that was previously hidden - * - * @param player Player to show - */ - public void showPlayer(Player player); - - /** - * Checks to see if a player has been hidden from this player - * - * @param player Player to check - * @return True if the provided player is not being hidden from this - * player - */ - public boolean canSee(Player player); - - /** - * Checks to see if this player is currently standing on a block. This - * information may not be reliable, as it is a state provided by the - * client, and may therefore not be accurate. - * - * @return True if the player standing on a solid block, else false. - * @deprecated Inconsistent with {@link - * org.bukkit.entity.Entity#isOnGround()} - */ - @Deprecated - public boolean isOnGround(); - - /** - * Checks to see if this player is currently flying or not. - * - * @return True if the player is flying, else false. - */ - public boolean isFlying(); - - /** - * Makes this player start or stop flying. - * - * @param value True to fly. - */ - public void setFlying(boolean value); - - /** - * Sets the speed at which a client will fly. Negative values indicate - * reverse directions. - * - * @param value The new speed, from -1 to 1. - * @throws IllegalArgumentException If new speed is less than -1 or - * greater than 1 - */ - public void setFlySpeed(float value) throws IllegalArgumentException; - - /** - * Sets the speed at which a client will walk. Negative values indicate - * reverse directions. - * - * @param value The new speed, from -1 to 1. - * @throws IllegalArgumentException If new speed is less than -1 or - * greater than 1 - */ - public void setWalkSpeed(float value) throws IllegalArgumentException; - - /** - * Gets the current allowed speed that a client can fly. - * - * @return The current allowed speed, from -1 to 1 - */ - public float getFlySpeed(); - - /** - * Gets the current allowed speed that a client can walk. - * - * @return The current allowed speed, from -1 to 1 - */ - public float getWalkSpeed(); - - /** - * Request that the player's client download and switch texture packs. - *

          - * The player's client will download the new texture pack asynchronously - * in the background, and will automatically switch to it once the - * download is complete. If the client has downloaded and cached the same - * texture pack in the past, it will perform a quick timestamp check over - * the network to determine if the texture pack has changed and needs to - * be downloaded again. When this request is sent for the very first time - * from a given server, the client will first display a confirmation GUI - * to the player before proceeding with the download. - *

          - * Notes: - *

            - *
          • Players can disable server textures on their client, in which - * case this method will have no affect on them. - *
          • There is no concept of resetting texture packs back to default - * within Minecraft, so players will have to relog to do so. - *
          - * - * @param url The URL from which the client will download the texture - * pack. The string must contain only US-ASCII characters and should - * be encoded as per RFC 1738. - * @throws IllegalArgumentException Thrown if the URL is null. - * @throws IllegalArgumentException Thrown if the URL is too long. - * @deprecated Minecraft no longer uses textures packs. Instead you - * should use {@link #setResourcePack(String)}. - */ - @Deprecated - public void setTexturePack(String url); - - /** - * Request that the player's client download and switch resource packs. - *

          - * The player's client will download the new resource pack asynchronously - * in the background, and will automatically switch to it once the - * download is complete. If the client has downloaded and cached the same - * resource pack in the past, it will perform a quick timestamp check - * over the network to determine if the resource pack has changed and - * needs to be downloaded again. When this request is sent for the very - * first time from a given server, the client will first display a - * confirmation GUI to the player before proceeding with the download. - *

          - * Notes: - *

            - *
          • Players can disable server resources on their client, in which - * case this method will have no affect on them. - *
          • There is no concept of resetting resource packs back to default - * within Minecraft, so players will have to relog to do so. - *
          - * - * @param url The URL from which the client will download the resource - * pack. The string must contain only US-ASCII characters and should - * be encoded as per RFC 1738. - * @throws IllegalArgumentException Thrown if the URL is null. - * @throws IllegalArgumentException Thrown if the URL is too long. The - * length restriction is an implementation specific arbitrary value. - */ - public void setResourcePack(String url); - - /** - * Gets the Scoreboard displayed to this player. The displayed scoreboard - * is always one provided by the {@link ScoreboardManager} initially, - * therefore it is always a valid parameter for {@link #setScoreboard( - * Scoreboard)}. - * - * @return the current scoreboard seen by this player - */ - public Scoreboard getScoreboard(); - - /** - * Sets the player's visible Scoreboard. - *

          - * A player always has a scoreboard set, even if it has no objectives. - * Initially, this is the {@link ScoreboardManager#getMainScoreboard() - * main scoreboard} for the server, which can be manipulated through the - * /scoreboard command. The active scoreboard can be switched - * to any scoreboard initially provided by the {@link ScoreboardManager}, - * including the main scoreboard. - *

          - * - * @param scoreboard new Scoreboard for the player - * @throws IllegalArgumentException if scoreboard is null - * @throws IllegalArgumentException if scoreboard was not created by the - * {@link ScoreboardManager scoreboard manager} - * @throws IllegalStateException if this is a player that is not logged in - * yet or has logged out - */ - public void setScoreboard(Scoreboard scoreboard) throws IllegalArgumentException, IllegalStateException; - - /** - * Gets if the client is displayed a 'scaled' health, that is, health on a - * scale from 0-{@link #getHealthScale()}. - * - * @return if client health display is scaled - * @see Player#setHealthScaled(boolean) - */ - public boolean isHealthScaled(); - - /** - * Sets if the client is displayed a 'scaled' health, that is, health on a - * scale from 0-{@link #getHealthScale()}. - *

          - * Displayed health follows a simple formula displayedHealth = - * getHealth() / getMaxHealth() * getHealthScale(). - * - * @param scale if the client health display is scaled - */ - public void setHealthScaled(boolean scale); - - /** - * Sets the number to scale health to for the client; this will also - * {@link #setHealthScaled(boolean) setHealthScaled(true)}. - *

          - * Displayed health follows a simple formula displayedHealth = - * getHealth() / getMaxHealth() * getHealthScale(). - * - * @param scale the number to scale health to - * @throws IllegalArgumentException if scale is <0 - * @throws IllegalArgumentException if scale is {@link Double#NaN} - * @throws IllegalArgumentException if scale is too high - */ - public void setHealthScale(double scale) throws IllegalArgumentException; - - /** - * Gets the number that health is scaled to for the client. - * - * @return the number that health would be scaled to for the client if - * HealthScaling is set to true - * @see Player#setHealthScale(double) - * @see Player#setHealthScaled(boolean) - */ - public double getHealthScale(); -} diff --git a/LiveWeather/src/org/bukkit/entity/PoweredMinecart.java b/LiveWeather/src/org/bukkit/entity/PoweredMinecart.java deleted file mode 100755 index 38240a9..0000000 --- a/LiveWeather/src/org/bukkit/entity/PoweredMinecart.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.entity; - -/** - * @deprecated This class has been moved into a sub package; {@link - * org.bukkit.entity.minecart.PoweredMinecart} should be used instead. - * @see org.bukkit.entity.minecart.PoweredMinecart - */ -@Deprecated -public interface PoweredMinecart extends org.bukkit.entity.minecart.PoweredMinecart {} diff --git a/LiveWeather/src/org/bukkit/entity/Projectile.java b/LiveWeather/src/org/bukkit/entity/Projectile.java deleted file mode 100755 index 90ce3b3..0000000 --- a/LiveWeather/src/org/bukkit/entity/Projectile.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.projectiles.ProjectileSource; - -/** - * Represents a shootable entity. - */ -public interface Projectile extends Entity { - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public LivingEntity _INVALID_getShooter(); - - /** - * Retrieve the shooter of this projectile. - * - * @return the {@link ProjectileSource} that shot this projectile - */ - public ProjectileSource getShooter(); - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setShooter(LivingEntity shooter); - - /** - * Set the shooter of this projectile. - * - * @param source the {@link ProjectileSource} that shot this projectile - */ - public void setShooter(ProjectileSource source); - - /** - * Determine if this projectile should bounce or not when it hits. - *

          - * If a small fireball does not bounce it will set the target on fire. - * - * @return true if it should bounce. - */ - public boolean doesBounce(); - - /** - * Set whether or not this projectile should bounce or not when it hits - * something. - * - * @param doesBounce whether or not it should bounce. - */ - public void setBounce(boolean doesBounce); -} diff --git a/LiveWeather/src/org/bukkit/entity/Sheep.java b/LiveWeather/src/org/bukkit/entity/Sheep.java deleted file mode 100755 index f4ce312..0000000 --- a/LiveWeather/src/org/bukkit/entity/Sheep.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.material.Colorable; - -/** - * Represents a Sheep. - */ -public interface Sheep extends Animals, Colorable { - - /** - * @return Whether the sheep is sheared. - */ - public boolean isSheared(); - - /** - * @param flag Whether to shear the sheep - */ - public void setSheared(boolean flag); -} diff --git a/LiveWeather/src/org/bukkit/entity/Silverfish.java b/LiveWeather/src/org/bukkit/entity/Silverfish.java deleted file mode 100755 index fe01007..0000000 --- a/LiveWeather/src/org/bukkit/entity/Silverfish.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Silverfish. - */ -public interface Silverfish extends Monster {} diff --git a/LiveWeather/src/org/bukkit/entity/Skeleton.java b/LiveWeather/src/org/bukkit/entity/Skeleton.java deleted file mode 100755 index 02b76c3..0000000 --- a/LiveWeather/src/org/bukkit/entity/Skeleton.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Skeleton. - */ -public interface Skeleton extends Monster { - - /** - * Gets the current type of this skeleton. - * - * @return Current type - */ - public SkeletonType getSkeletonType(); - - /** - * Sets the new type of this skeleton. - * - * @param type New type - */ - public void setSkeletonType(SkeletonType type); - - /* - * Represents the various different Skeleton types. - */ - public enum SkeletonType { - NORMAL(0), - WITHER(1); - - private static final SkeletonType[] types = new SkeletonType[SkeletonType.values().length]; - private final int id; - - static { - for (SkeletonType type : values()) { - types[type.getId()] = type; - } - } - - private SkeletonType(int id) { - this.id = id; - } - - /** - * Gets the ID of this skeleton type. - * - * @return Skeleton type ID - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Gets a skeleton type by its ID. - * - * @param id ID of the skeleton type to get. - * @return Resulting skeleton type, or null if not found. - * @deprecated Magic value - */ - @Deprecated - public static SkeletonType getType(int id) { - return (id >= types.length) ? null : types[id]; - } - } -} diff --git a/LiveWeather/src/org/bukkit/entity/Slime.java b/LiveWeather/src/org/bukkit/entity/Slime.java deleted file mode 100755 index cbf50c8..0000000 --- a/LiveWeather/src/org/bukkit/entity/Slime.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Slime. - */ -public interface Slime extends LivingEntity { - - /** - * @return The size of the slime - */ - public int getSize(); - - /** - * @param sz The new size of the slime. - */ - public void setSize(int sz); -} diff --git a/LiveWeather/src/org/bukkit/entity/SmallFireball.java b/LiveWeather/src/org/bukkit/entity/SmallFireball.java deleted file mode 100755 index 33f54d3..0000000 --- a/LiveWeather/src/org/bukkit/entity/SmallFireball.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a small {@link Fireball} - */ -public interface SmallFireball extends Fireball { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Snowball.java b/LiveWeather/src/org/bukkit/entity/Snowball.java deleted file mode 100755 index 8c6b433..0000000 --- a/LiveWeather/src/org/bukkit/entity/Snowball.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a snowball. - */ -public interface Snowball extends Projectile {} diff --git a/LiveWeather/src/org/bukkit/entity/Snowman.java b/LiveWeather/src/org/bukkit/entity/Snowman.java deleted file mode 100755 index c8070ff..0000000 --- a/LiveWeather/src/org/bukkit/entity/Snowman.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a snowman entity - */ -public interface Snowman extends Golem { - -} diff --git a/LiveWeather/src/org/bukkit/entity/Spider.java b/LiveWeather/src/org/bukkit/entity/Spider.java deleted file mode 100755 index f9ee8cc..0000000 --- a/LiveWeather/src/org/bukkit/entity/Spider.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Spider. - */ -public interface Spider extends Monster {} diff --git a/LiveWeather/src/org/bukkit/entity/Squid.java b/LiveWeather/src/org/bukkit/entity/Squid.java deleted file mode 100755 index fb47968..0000000 --- a/LiveWeather/src/org/bukkit/entity/Squid.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Squid. - */ -public interface Squid extends WaterMob {} diff --git a/LiveWeather/src/org/bukkit/entity/StorageMinecart.java b/LiveWeather/src/org/bukkit/entity/StorageMinecart.java deleted file mode 100755 index 5436d70..0000000 --- a/LiveWeather/src/org/bukkit/entity/StorageMinecart.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.entity; - -/** - * @deprecated This class has been moved into a sub package; {@link - * org.bukkit.entity.minecart.StorageMinecart} should be used instead. - * @see org.bukkit.entity.minecart.StorageMinecart - */ -@Deprecated -public interface StorageMinecart extends org.bukkit.entity.minecart.StorageMinecart {} diff --git a/LiveWeather/src/org/bukkit/entity/TNTPrimed.java b/LiveWeather/src/org/bukkit/entity/TNTPrimed.java deleted file mode 100755 index 3ce322d..0000000 --- a/LiveWeather/src/org/bukkit/entity/TNTPrimed.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Primed TNT. - */ -public interface TNTPrimed extends Explosive { - - /** - * Set the number of ticks until the TNT blows up after being primed. - * - * @param fuseTicks The fuse ticks - */ - public void setFuseTicks(int fuseTicks); - - /** - * Retrieve the number of ticks until the explosion of this TNTPrimed - * entity - * - * @return the number of ticks until this TNTPrimed explodes - */ - public int getFuseTicks(); - - /** - * Gets the source of this primed TNT. The source is the entity - * responsible for the creation of this primed TNT. (I.E. player ignites - * TNT with flint and steel.) Take note that this can be null if there is - * no suitable source. (created by the {@link - * org.bukkit.World#spawn(Location, Class)} method, for example.) - *

          - * The source will become null if the chunk this primed TNT is in is - * unloaded then reloaded. If the source Entity becomes invalidated for - * any reason, such being removed from the world, the returned value will - * be null. - * - * @return the source of this primed TNT - */ - public Entity getSource(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Tameable.java b/LiveWeather/src/org/bukkit/entity/Tameable.java deleted file mode 100755 index 014885d..0000000 --- a/LiveWeather/src/org/bukkit/entity/Tameable.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bukkit.entity; - -public interface Tameable { - - /** - * Check if this is tamed - *

          - * If something is tamed then a player can not tame it through normal - * methods, even if it does not belong to anyone in particular. - * - * @return true if this has been tamed - */ - public boolean isTamed(); - - /** - * Sets if this has been tamed. Not necessary if the method setOwner has - * been used, as it tames automatically. - *

          - * If something is tamed then a player can not tame it through normal - * methods, even if it does not belong to anyone in particular. - * - * @param tame true if tame - */ - public void setTamed(boolean tame); - - /** - * Gets the current owning AnimalTamer - * - * @return the owning AnimalTamer, or null if not owned - */ - public AnimalTamer getOwner(); - - /** - * Set this to be owned by given AnimalTamer. - *

          - * If the owner is not null, this will be tamed and will have any current - * path it is following removed. If the owner is set to null, this will be - * untamed, and the current owner removed. - * - * @param tamer the AnimalTamer who should own this - */ - public void setOwner(AnimalTamer tamer); - -} diff --git a/LiveWeather/src/org/bukkit/entity/ThrownExpBottle.java b/LiveWeather/src/org/bukkit/entity/ThrownExpBottle.java deleted file mode 100755 index 671282e..0000000 --- a/LiveWeather/src/org/bukkit/entity/ThrownExpBottle.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a thrown Experience bottle. - */ -public interface ThrownExpBottle extends Projectile { - -} diff --git a/LiveWeather/src/org/bukkit/entity/ThrownPotion.java b/LiveWeather/src/org/bukkit/entity/ThrownPotion.java deleted file mode 100755 index 8b382db..0000000 --- a/LiveWeather/src/org/bukkit/entity/ThrownPotion.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.entity; - -import java.util.Collection; - -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; - -/** - * Represents a thrown potion bottle - */ -public interface ThrownPotion extends Projectile { - - /** - * Returns the effects that are applied by this potion. - * - * @return The potion effects - */ - public Collection getEffects(); - - /** - * Returns a copy of the ItemStack for this thrown potion. - *

          - * Altering this copy will not alter the thrown potion directly. If you - * want to alter the thrown potion, you must use the {@link - * #setItem(ItemStack) setItemStack} method. - * - * @return A copy of the ItemStack for this thrown potion. - */ - public ItemStack getItem(); - - /** - * Set the ItemStack for this thrown potion. - *

          - * The ItemStack must be a potion, otherwise an exception is thrown. - * - * @param item New ItemStack - */ - public void setItem(ItemStack item); -} diff --git a/LiveWeather/src/org/bukkit/entity/Vehicle.java b/LiveWeather/src/org/bukkit/entity/Vehicle.java deleted file mode 100755 index 7d7607c..0000000 --- a/LiveWeather/src/org/bukkit/entity/Vehicle.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.util.Vector; - -/** - * Represents a vehicle entity. - */ -public interface Vehicle extends Entity { - - /** - * Gets the vehicle's velocity. - * - * @return velocity vector - */ - public Vector getVelocity(); - - /** - * Sets the vehicle's velocity. - * - * @param vel velocity vector - */ - public void setVelocity(Vector vel); -} diff --git a/LiveWeather/src/org/bukkit/entity/Villager.java b/LiveWeather/src/org/bukkit/entity/Villager.java deleted file mode 100755 index 51035c9..0000000 --- a/LiveWeather/src/org/bukkit/entity/Villager.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a villager NPC - */ -public interface Villager extends Ageable, NPC { - - /** - * Gets the current profession of this villager. - * - * @return Current profession. - */ - public Profession getProfession(); - - /** - * Sets the new profession of this villager. - * - * @param profession New profession. - */ - public void setProfession(Profession profession); - - - /** - * Represents the various different Villager professions there may be. - */ - public enum Profession { - FARMER(0), - LIBRARIAN(1), - PRIEST(2), - BLACKSMITH(3), - BUTCHER(4); - - private static final Profession[] professions = new Profession[Profession.values().length]; - private final int id; - - static { - for (Profession type : values()) { - professions[type.getId()] = type; - } - } - - private Profession(int id) { - this.id = id; - } - - /** - * Gets the ID of this profession. - * - * @return Profession ID. - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Gets a profession by its ID. - * - * @param id ID of the profession to get. - * @return Resulting profession, or null if not found. - * @deprecated Magic value - */ - @Deprecated - public static Profession getProfession(int id) { - return (id >= professions.length) ? null : professions[id]; - } - } -} diff --git a/LiveWeather/src/org/bukkit/entity/WaterMob.java b/LiveWeather/src/org/bukkit/entity/WaterMob.java deleted file mode 100755 index 62b4e89..0000000 --- a/LiveWeather/src/org/bukkit/entity/WaterMob.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Water Mob - */ -public interface WaterMob extends Creature {} diff --git a/LiveWeather/src/org/bukkit/entity/Weather.java b/LiveWeather/src/org/bukkit/entity/Weather.java deleted file mode 100755 index 6d77851..0000000 --- a/LiveWeather/src/org/bukkit/entity/Weather.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Weather related entity, such as a storm - */ -public interface Weather extends Entity {} diff --git a/LiveWeather/src/org/bukkit/entity/Witch.java b/LiveWeather/src/org/bukkit/entity/Witch.java deleted file mode 100755 index 9c5dc1f..0000000 --- a/LiveWeather/src/org/bukkit/entity/Witch.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Witch - */ -public interface Witch extends Monster { -} diff --git a/LiveWeather/src/org/bukkit/entity/Wither.java b/LiveWeather/src/org/bukkit/entity/Wither.java deleted file mode 100755 index 0922c5c..0000000 --- a/LiveWeather/src/org/bukkit/entity/Wither.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Wither boss - */ -public interface Wither extends Monster { -} diff --git a/LiveWeather/src/org/bukkit/entity/WitherSkull.java b/LiveWeather/src/org/bukkit/entity/WitherSkull.java deleted file mode 100755 index 33d20ab..0000000 --- a/LiveWeather/src/org/bukkit/entity/WitherSkull.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a wither skull {@link Fireball}. - */ -public interface WitherSkull extends Fireball { - - /** - * Sets the charged status of the wither skull. - * - * @param charged whether it should be charged - */ - public void setCharged(boolean charged); - - /** - * Gets whether or not the wither skull is charged. - * - * @return whether the wither skull is charged - */ - public boolean isCharged(); -} diff --git a/LiveWeather/src/org/bukkit/entity/Wolf.java b/LiveWeather/src/org/bukkit/entity/Wolf.java deleted file mode 100755 index 9d5a896..0000000 --- a/LiveWeather/src/org/bukkit/entity/Wolf.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.entity; - -import org.bukkit.DyeColor; - -/** - * Represents a Wolf - */ -public interface Wolf extends Animals, Tameable { - - /** - * Checks if this wolf is angry - * - * @return Anger true if angry - */ - public boolean isAngry(); - - /** - * Sets the anger of this wolf. - *

          - * An angry wolf can not be fed or tamed, and will actively look for - * targets to attack. - * - * @param angry true if angry - */ - public void setAngry(boolean angry); - - /** - * Checks if this wolf is sitting - * - * @return true if sitting - */ - public boolean isSitting(); - - /** - * Sets if this wolf is sitting. - *

          - * Will remove any path that the wolf was following beforehand. - * - * @param sitting true if sitting - */ - public void setSitting(boolean sitting); - - /** - * Get the collar color of this wolf - * - * @return the color of the collar - */ - public DyeColor getCollarColor(); - - /** - * Set the collar color of this wolf - * - * @param color the color to apply - */ - public void setCollarColor(DyeColor color); -} diff --git a/LiveWeather/src/org/bukkit/entity/Zombie.java b/LiveWeather/src/org/bukkit/entity/Zombie.java deleted file mode 100755 index 59b52fd..0000000 --- a/LiveWeather/src/org/bukkit/entity/Zombie.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.entity; - -/** - * Represents a Zombie. - */ -public interface Zombie extends Monster { - - /** - * Gets whether the zombie is a baby - * - * @return Whether the zombie is a baby - */ - public boolean isBaby(); - - /** - * Sets whether the zombie is a baby - * - * @param flag Whether the zombie is a baby - */ - public void setBaby(boolean flag); - - /** - * Gets whether the zombie is a villager - * - * @return Whether the zombie is a villager - */ - public boolean isVillager(); - - /** - * Sets whether the zombie is a villager - * - * @param flag Whether the zombie is a villager - */ - public void setVillager(boolean flag); -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/CommandMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/CommandMinecart.java deleted file mode 100755 index e502680..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/CommandMinecart.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Minecart; - -public interface CommandMinecart extends Minecart, CommandSender { - - /** - * Gets the command that this CommandMinecart will run when activated. - * This will never return null. If the CommandMinecart does not have a - * command, an empty String will be returned instead. - * - * @return Command that this CommandMinecart will run when powered. - */ - public String getCommand(); - - /** - * Sets the command that this CommandMinecart will run when activated. - * Setting the command to null is the same as setting it to an empty - * String. - * - * @param command Command that this CommandMinecart will run when - * activated. - */ - public void setCommand(String command); - - /** - * Sets the name of this CommandMinecart. The name is used with commands - * that this CommandMinecart executes. Setting the name to null is the - * same as setting it to "@". - * - * @param name New name for this CommandMinecart. - */ - public void setName(String name); - -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/ExplosiveMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/ExplosiveMinecart.java deleted file mode 100755 index a4411da..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/ExplosiveMinecart.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; - -/** - * Represents a Minecart with TNT inside it that can explode when triggered. - */ -public interface ExplosiveMinecart extends Minecart { -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/HopperMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/HopperMinecart.java deleted file mode 100755 index 5da9ce4..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/HopperMinecart.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a Minecart with a Hopper inside it - */ -public interface HopperMinecart extends Minecart, InventoryHolder { -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/PoweredMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/PoweredMinecart.java deleted file mode 100755 index 57e8b1d..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/PoweredMinecart.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; - -/** - * Represents a powered minecart. A powered minecart moves on its own when a - * player deposits {@link org.bukkit.Material#COAL fuel}. - */ -public interface PoweredMinecart extends Minecart { -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/RideableMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/RideableMinecart.java deleted file mode 100755 index 1b82645..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/RideableMinecart.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; - -/** - * Represents a minecart that can have certain {@link - * org.bukkit.entity.Entity entities} as passengers. Normal passengers - * include all {@link org.bukkit.entity.LivingEntity living entities} with - * the exception of {@link org.bukkit.entity.IronGolem iron golems}. - * Non-player entities that meet normal passenger criteria automatically - * mount these minecarts when close enough. - */ -public interface RideableMinecart extends Minecart { -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/SpawnerMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/SpawnerMinecart.java deleted file mode 100755 index 0ce3592..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/SpawnerMinecart.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; - -/** - * Represents a Minecart with an {@link org.bukkit.block.CreatureSpawner - * entity spawner} inside it. - */ -public interface SpawnerMinecart extends Minecart { -} diff --git a/LiveWeather/src/org/bukkit/entity/minecart/StorageMinecart.java b/LiveWeather/src/org/bukkit/entity/minecart/StorageMinecart.java deleted file mode 100755 index 4f04ab4..0000000 --- a/LiveWeather/src/org/bukkit/entity/minecart/StorageMinecart.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bukkit.entity.minecart; - -import org.bukkit.entity.Minecart; -import org.bukkit.inventory.InventoryHolder; - -/** - * Represents a minecart with a chest. These types of {@link Minecart - * minecarts} have their own inventory that can be accessed using methods - * from the {@link InventoryHolder} interface. - */ -public interface StorageMinecart extends Minecart, InventoryHolder { -} diff --git a/LiveWeather/src/org/bukkit/event/Cancellable.java b/LiveWeather/src/org/bukkit/event/Cancellable.java deleted file mode 100755 index 799b0b0..0000000 --- a/LiveWeather/src/org/bukkit/event/Cancellable.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.event; - -public interface Cancellable { - - /** - * Gets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins - * - * @return true if this event is cancelled - */ - public boolean isCancelled(); - - /** - * Sets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins. - * - * @param cancel true if you wish to cancel this event - */ - public void setCancelled(boolean cancel); -} diff --git a/LiveWeather/src/org/bukkit/event/Event.java b/LiveWeather/src/org/bukkit/event/Event.java deleted file mode 100755 index fa29c27..0000000 --- a/LiveWeather/src/org/bukkit/event/Event.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bukkit.event; - -import org.bukkit.plugin.PluginManager; - -/** - * Represents an event. - * - * @see PluginManager#callEvent(Event) - * @see PluginManager#registerEvents(Listener,Plugin) - */ -public abstract class Event { - private String name; - private final boolean async; - - /** - * The default constructor is defined for cleaner code. This constructor - * assumes the event is synchronous. - */ - public Event() { - this(false); - } - - /** - * This constructor is used to explicitly declare an event as synchronous - * or asynchronous. - * - * @param isAsync true indicates the event will fire asynchronously, false - * by default from default constructor - */ - public Event(boolean isAsync) { - this.async = isAsync; - } - - /** - * Convenience method for providing a user-friendly identifier. By - * default, it is the event's class's {@linkplain Class#getSimpleName() - * simple name}. - * - * @return name of this event - */ - public String getEventName() { - if (name == null) { - name = getClass().getSimpleName(); - } - return name; - } - - public abstract HandlerList getHandlers(); - - /** - * Any custom event that should not by synchronized with other events must - * use the specific constructor. These are the caveats of using an - * asynchronous event: - *

            - *
          • The event is never fired from inside code triggered by a - * synchronous event. Attempting to do so results in an {@link - * java.lang.IllegalStateException}. - *
          • However, asynchronous event handlers may fire synchronous or - * asynchronous events - *
          • The event may be fired multiple times simultaneously and in any - * order. - *
          • Any newly registered or unregistered handler is ignored after an - * event starts execution. - *
          • The handlers for this event may block for any length of time. - *
          • Some implementations may selectively declare a specific event use - * as asynchronous. This behavior should be clearly defined. - *
          • Asynchronous calls are not calculated in the plugin timing system. - *
          - * - * @return false by default, true if the event fires asynchronously - */ - public final boolean isAsynchronous() { - return async; - } - - public enum Result { - - /** - * Deny the event. Depending on the event, the action indicated by the - * event will either not take place or will be reverted. Some actions - * may not be denied. - */ - DENY, - /** - * Neither deny nor allow the event. The server will proceed with its - * normal handling. - */ - DEFAULT, - /** - * Allow / Force the event. The action indicated by the event will - * take place if possible, even if the server would not normally allow - * the action. Some actions may not be allowed. - */ - ALLOW; - } -} diff --git a/LiveWeather/src/org/bukkit/event/EventException.java b/LiveWeather/src/org/bukkit/event/EventException.java deleted file mode 100755 index 84638e8..0000000 --- a/LiveWeather/src/org/bukkit/event/EventException.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bukkit.event; - -public class EventException extends Exception { - private static final long serialVersionUID = 3532808232324183999L; - private final Throwable cause; - - /** - * Constructs a new EventException based on the given Exception - * - * @param throwable Exception that triggered this Exception - */ - public EventException(Throwable throwable) { - cause = throwable; - } - - /** - * Constructs a new EventException - */ - public EventException() { - cause = null; - } - - /** - * Constructs a new EventException with the given message - * - * @param cause The exception that caused this - * @param message The message - */ - public EventException(Throwable cause, String message) { - super(message); - this.cause = cause; - } - - /** - * Constructs a new EventException with the given message - * - * @param message The message - */ - public EventException(String message) { - super(message); - cause = null; - } - - /** - * If applicable, returns the Exception that triggered this Exception - * - * @return Inner exception, or null if one does not exist - */ - @Override - public Throwable getCause() { - return cause; - } -} diff --git a/LiveWeather/src/org/bukkit/event/EventHandler.java b/LiveWeather/src/org/bukkit/event/EventHandler.java deleted file mode 100755 index e42acc1..0000000 --- a/LiveWeather/src/org/bukkit/event/EventHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.event; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * An annotation to mark methods as being event handler methods - */ -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface EventHandler { - - /** - * Define the priority of the event. - *

          - * First priority to the last priority executed: - *

            - *
          1. LOWEST - *
          2. LOW - *
          3. NORMAL - *
          4. HIGH - *
          5. HIGHEST - *
          6. MONITOR - *
          - */ - EventPriority priority() default EventPriority.NORMAL; - - /** - * Define if the handler ignores a cancelled event. - *

          - * If ignoreCancelled is true and the event is cancelled, the method is - * not called. Otherwise, the method is always called. - */ - boolean ignoreCancelled() default false; -} diff --git a/LiveWeather/src/org/bukkit/event/EventPriority.java b/LiveWeather/src/org/bukkit/event/EventPriority.java deleted file mode 100755 index 61ffa50..0000000 --- a/LiveWeather/src/org/bukkit/event/EventPriority.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bukkit.event; - -/** - * Represents an event's priority in execution - */ -public enum EventPriority { - - /** - * Event call is of very low importance and should be ran first, to allow - * other plugins to further customise the outcome - */ - LOWEST(0), - /** - * Event call is of low importance - */ - LOW(1), - /** - * Event call is neither important nor unimportant, and may be ran - * normally - */ - NORMAL(2), - /** - * Event call is of high importance - */ - HIGH(3), - /** - * Event call is critical and must have the final say in what happens - * to the event - */ - HIGHEST(4), - /** - * Event is listened to purely for monitoring the outcome of an event. - *

          - * No modifications to the event should be made under this priority - */ - MONITOR(5); - - private final int slot; - - private EventPriority(int slot) { - this.slot = slot; - } - - public int getSlot() { - return slot; - } -} diff --git a/LiveWeather/src/org/bukkit/event/HandlerList.java b/LiveWeather/src/org/bukkit/event/HandlerList.java deleted file mode 100755 index 7d5efff..0000000 --- a/LiveWeather/src/org/bukkit/event/HandlerList.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.bukkit.event; - -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.RegisteredListener; - -import java.util.*; -import java.util.Map.Entry; - -/** - * A list of event handlers, stored per-event. Based on lahwran's fevents. - */ -public class HandlerList { - - /** - * Handler array. This field being an array is the key to this system's - * speed. - */ - private volatile RegisteredListener[] handlers = null; - - /** - * Dynamic handler lists. These are changed using register() and - * unregister() and are automatically baked to the handlers array any time - * they have changed. - */ - private final EnumMap> handlerslots; - - /** - * List of all HandlerLists which have been created, for use in bakeAll() - */ - private static ArrayList allLists = new ArrayList(); - - /** - * Bake all handler lists. Best used just after all normal event - * registration is complete, ie just after all plugins are loaded if - * you're using fevents in a plugin system. - */ - public static void bakeAll() { - synchronized (allLists) { - for (HandlerList h : allLists) { - h.bake(); - } - } - } - - /** - * Unregister all listeners from all handler lists. - */ - public static void unregisterAll() { - synchronized (allLists) { - for (HandlerList h : allLists) { - synchronized (h) { - for (List list : h.handlerslots.values()) { - list.clear(); - } - h.handlers = null; - } - } - } - } - - /** - * Unregister a specific plugin's listeners from all handler lists. - * - * @param plugin plugin to unregister - */ - public static void unregisterAll(Plugin plugin) { - synchronized (allLists) { - for (HandlerList h : allLists) { - h.unregister(plugin); - } - } - } - - /** - * Unregister a specific listener from all handler lists. - * - * @param listener listener to unregister - */ - public static void unregisterAll(Listener listener) { - synchronized (allLists) { - for (HandlerList h : allLists) { - h.unregister(listener); - } - } - } - - /** - * Create a new handler list and initialize using EventPriority. - *

          - * The HandlerList is then added to meta-list for use in bakeAll() - */ - public HandlerList() { - handlerslots = new EnumMap>(EventPriority.class); - for (EventPriority o : EventPriority.values()) { - handlerslots.put(o, new ArrayList()); - } - synchronized (allLists) { - allLists.add(this); - } - } - - /** - * Register a new listener in this handler list - * - * @param listener listener to register - */ - public synchronized void register(RegisteredListener listener) { - if (handlerslots.get(listener.getPriority()).contains(listener)) - throw new IllegalStateException("This listener is already registered to priority " + listener.getPriority().toString()); - handlers = null; - handlerslots.get(listener.getPriority()).add(listener); - } - - /** - * Register a collection of new listeners in this handler list - * - * @param listeners listeners to register - */ - public void registerAll(Collection listeners) { - for (RegisteredListener listener : listeners) { - register(listener); - } - } - - /** - * Remove a listener from a specific order slot - * - * @param listener listener to remove - */ - public synchronized void unregister(RegisteredListener listener) { - if (handlerslots.get(listener.getPriority()).remove(listener)) { - handlers = null; - } - } - - /** - * Remove a specific plugin's listeners from this handler - * - * @param plugin plugin to remove - */ - public synchronized void unregister(Plugin plugin) { - boolean changed = false; - for (List list : handlerslots.values()) { - for (ListIterator i = list.listIterator(); i.hasNext();) { - if (i.next().getPlugin().equals(plugin)) { - i.remove(); - changed = true; - } - } - } - if (changed) handlers = null; - } - - /** - * Remove a specific listener from this handler - * - * @param listener listener to remove - */ - public synchronized void unregister(Listener listener) { - boolean changed = false; - for (List list : handlerslots.values()) { - for (ListIterator i = list.listIterator(); i.hasNext();) { - if (i.next().getListener().equals(listener)) { - i.remove(); - changed = true; - } - } - } - if (changed) handlers = null; - } - - /** - * Bake HashMap and ArrayLists to 2d array - does nothing if not necessary - */ - public synchronized void bake() { - if (handlers != null) return; // don't re-bake when still valid - List entries = new ArrayList(); - for (Entry> entry : handlerslots.entrySet()) { - entries.addAll(entry.getValue()); - } - handlers = entries.toArray(new RegisteredListener[entries.size()]); - } - - /** - * Get the baked registered listeners associated with this handler list - * - * @return the array of registered listeners - */ - public RegisteredListener[] getRegisteredListeners() { - RegisteredListener[] handlers; - while ((handlers = this.handlers) == null) bake(); // This prevents fringe cases of returning null - return handlers; - } - - /** - * Get a specific plugin's registered listeners associated with this - * handler list - * - * @param plugin the plugin to get the listeners of - * @return the list of registered listeners - */ - public static ArrayList getRegisteredListeners(Plugin plugin) { - ArrayList listeners = new ArrayList(); - synchronized (allLists) { - for (HandlerList h : allLists) { - synchronized (h) { - for (List list : h.handlerslots.values()) { - for (RegisteredListener listener : list) { - if (listener.getPlugin().equals(plugin)) { - listeners.add(listener); - } - } - } - } - } - } - return listeners; - } - - /** - * Get a list of all handler lists for every event type - * - * @return the list of all handler lists - */ - @SuppressWarnings("unchecked") - public static ArrayList getHandlerLists() { - synchronized (allLists) { - return (ArrayList) allLists.clone(); - } - } -} diff --git a/LiveWeather/src/org/bukkit/event/Listener.java b/LiveWeather/src/org/bukkit/event/Listener.java deleted file mode 100755 index ff083e6..0000000 --- a/LiveWeather/src/org/bukkit/event/Listener.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bukkit.event; - -/** - * Simple interface for tagging all EventListeners - */ -public interface Listener {} diff --git a/LiveWeather/src/org/bukkit/event/block/Action.java b/LiveWeather/src/org/bukkit/event/block/Action.java deleted file mode 100755 index 25d26e3..0000000 --- a/LiveWeather/src/org/bukkit/event/block/Action.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.bukkit.event.block; - -public enum Action { - - /** - * Left-clicking a block - */ - LEFT_CLICK_BLOCK, - /** - * Right-clicking a block - */ - RIGHT_CLICK_BLOCK, - /** - * Left-clicking the air - */ - LEFT_CLICK_AIR, - /** - * Right-clicking the air - */ - RIGHT_CLICK_AIR, - /** - * Stepping onto or into a block (Ass-pressure) - * - * Examples: - *

            - *
          • Jumping on soil - *
          • Standing on pressure plate - *
          • Triggering redstone ore - *
          • Triggering tripwire - *
          - */ - PHYSICAL, -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockBreakEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockBreakEvent.java deleted file mode 100755 index a011f61..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockBreakEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block is broken by a player. - *

          - * If you wish to have the block drop experience, you must set the experience - * value above 0. By default, experience will be set in the event if: - *

            - *
          1. The player is not in creative or adventure mode - *
          2. The player can loot the block (ie: does not destroy it completely, by - * using the correct tool) - *
          3. The player does not have silk touch - *
          4. The block drops experience in vanilla Minecraft - *
          - *

          - * Note: - * Plugins wanting to simulate a traditional block drop should set the block - * to air and utilize their own methods for determining what the default drop - * for the block being broken is and what to do about it, if anything. - *

          - * If a Block Break event is cancelled, the block will not break and - * experience will not drop. - */ -public class BlockBreakEvent extends BlockExpEvent implements Cancellable { - private final Player player; - private boolean cancel; - - public BlockBreakEvent(final Block theBlock, final Player player) { - super(theBlock, 0); - - this.player = player; - } - - /** - * Gets the Player that is breaking the block involved in this event. - * - * @return The Player that is breaking the block involved in this event - */ - public Player getPlayer() { - return player; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockBurnEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockBurnEvent.java deleted file mode 100755 index 1592a15..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockBurnEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block is destroyed as a result of being burnt by fire. - *

          - * If a Block Burn event is cancelled, the block will not be destroyed as a - * result of being burnt by fire. - */ -public class BlockBurnEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - - public BlockBurnEvent(final Block block) { - super(block); - this.cancelled = false; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockCanBuildEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockCanBuildEvent.java deleted file mode 100755 index 3860f44..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockCanBuildEvent.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.Material; -import org.bukkit.event.HandlerList; - -/** - * Called when we try to place a block, to see if we can build it here or not. - *

          - * Note: - *

            - *
          • The Block returned by getBlock() is the block we are trying to place - * on, not the block we are trying to place. - *
          • If you want to figure out what is being placed, use {@link - * #getMaterial()} or {@link #getMaterialId()} instead. - *
          - */ -public class BlockCanBuildEvent extends BlockEvent { - private static final HandlerList handlers = new HandlerList(); - protected boolean buildable; - - /** - * - * @deprecated Magic value - */ - @Deprecated - protected int material; - - /** - * - * @deprecated Magic value - */ - @Deprecated - public BlockCanBuildEvent(final Block block, final int id, final boolean canBuild) { - super(block); - buildable = canBuild; - material = id; - } - - /** - * Gets whether or not the block can be built here. - *

          - * By default, returns Minecraft's answer on whether the block can be - * built here or not. - * - * @return boolean whether or not the block can be built - */ - public boolean isBuildable() { - return buildable; - } - - /** - * Sets whether the block can be built here or not. - * - * @param cancel true if you want to allow the block to be built here - * despite Minecraft's default behaviour - */ - public void setBuildable(boolean cancel) { - this.buildable = cancel; - } - - /** - * Gets the Material that we are trying to place. - * - * @return The Material that we are trying to place - */ - public Material getMaterial() { - return Material.getMaterial(material); - } - - /** - * Gets the Material ID for the Material that we are trying to place. - * - * @return The Material ID for the Material that we are trying to place - * @deprecated Magic value - */ - @Deprecated - public int getMaterialId() { - return material; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockDamageEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockDamageEvent.java deleted file mode 100755 index d80e00e..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockDamageEvent.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a block is damaged by a player. - *

          - * If a Block Damage event is cancelled, the block will not be damaged. - */ -public class BlockDamageEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Player player; - private boolean instaBreak; - private boolean cancel; - private final ItemStack itemstack; - - public BlockDamageEvent(final Player player, final Block block, final ItemStack itemInHand, final boolean instaBreak) { - super(block); - this.instaBreak = instaBreak; - this.player = player; - this.itemstack = itemInHand; - this.cancel = false; - } - - /** - * Gets the player damaging the block involved in this event. - * - * @return The player damaging the block involved in this event - */ - public Player getPlayer() { - return player; - } - - /** - * Gets if the block is set to instantly break when damaged by the player. - * - * @return true if the block should instantly break when damaged by the - * player - */ - public boolean getInstaBreak() { - return instaBreak; - } - - /** - * Sets if the block should instantly break when damaged by the player. - * - * @param bool true if you want the block to instantly break when damaged - * by the player - */ - public void setInstaBreak(boolean bool) { - this.instaBreak = bool; - } - - /** - * Gets the ItemStack for the item currently in the player's hand. - * - * @return The ItemStack for the item currently in the player's hand - */ - public ItemStack getItemInHand() { - return itemstack; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockDispenseEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockDispenseEvent.java deleted file mode 100755 index 16ee59b..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockDispenseEvent.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - -/** - * Called when an item is dispensed from a block. - *

          - * If a Block Dispense event is cancelled, the block will not dispense the - * item. - */ -public class BlockDispenseEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled = false; - private ItemStack item; - private Vector velocity; - - public BlockDispenseEvent(final Block block, final ItemStack dispensed, final Vector velocity) { - super(block); - this.item = dispensed; - this.velocity = velocity; - } - - /** - * Gets the item that is being dispensed. Modifying the returned item will - * have no effect, you must use {@link - * #setItem(org.bukkit.inventory.ItemStack)} instead. - * - * @return An ItemStack for the item being dispensed - */ - public ItemStack getItem() { - return item.clone(); - } - - /** - * Sets the item being dispensed. - * - * @param item the item being dispensed - */ - public void setItem(ItemStack item) { - this.item = item; - } - - /** - * Gets the velocity. - *

          - * Note: Modifying the returned Vector will not change the velocity, you - * must use {@link #setVelocity(org.bukkit.util.Vector)} instead. - * - * @return A Vector for the dispensed item's velocity - */ - public Vector getVelocity() { - return velocity.clone(); - } - - /** - * Sets the velocity of the item being dispensed. - * - * @param vel the velocity of the item being dispensed - */ - public void setVelocity(Vector vel) { - velocity = vel; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockEvent.java deleted file mode 100755 index 2405205..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.Event; - -/** - * Represents a block related event. - */ -public abstract class BlockEvent extends Event { - protected Block block; - - public BlockEvent(final Block theBlock) { - block = theBlock; - } - - /** - * Gets the block involved in this event. - * - * @return The Block which block is involved in this event - */ - public final Block getBlock() { - return block; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockExpEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockExpEvent.java deleted file mode 100755 index 08636a2..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockExpEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.HandlerList; - -/** - * An event that's called when a block yields experience. - */ -public class BlockExpEvent extends BlockEvent { - private static final HandlerList handlers = new HandlerList(); - private int exp; - - public BlockExpEvent(Block block, int exp) { - super(block); - - this.exp = exp; - } - - /** - * Get the experience dropped by the block after the event has processed - * - * @return The experience to drop - */ - public int getExpToDrop() { - return exp; - } - - /** - * Set the amount of experience dropped by the block after the event has - * processed - * - * @param exp 1 or higher to drop experience, else nothing will drop - */ - public void setExpToDrop(int exp) { - this.exp = exp; - } - - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockFadeEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockFadeEvent.java deleted file mode 100755 index 673bc5f..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockFadeEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block fades, melts or disappears based on world conditions - *

          - * Examples: - *

            - *
          • Snow melting due to being near a light source. - *
          • Ice melting due to being near a light source. - *
          • Fire burning out after time, without destroying fuel block. - *
          - *

          - * If a Block Fade event is cancelled, the block will not fade, melt or - * disappear. - */ -public class BlockFadeEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final BlockState newState; - - public BlockFadeEvent(final Block block, final BlockState newState) { - super(block); - this.newState = newState; - this.cancelled = false; - } - - /** - * Gets the state of the block that will be fading, melting or - * disappearing. - * - * @return The block state of the block that will be fading, melting or - * disappearing - */ - public BlockState getNewState() { - return newState; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockFormEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockFormEvent.java deleted file mode 100755 index df0401f..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockFormEvent.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block is formed or spreads based on world conditions. - *

          - * Use {@link BlockSpreadEvent} to catch blocks that actually spread and don't - * just "randomly" form. - *

          - * Examples: - *

            - *
          • Snow forming due to a snow storm. - *
          • Ice forming in a snowy Biome like Taiga or Tundra. - *
          - *

          - * If a Block Form event is cancelled, the block will not be formed. - * - * @see BlockSpreadEvent - */ -public class BlockFormEvent extends BlockGrowEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - - public BlockFormEvent(final Block block, final BlockState newState) { - super(block, newState); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockFromToEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockFromToEvent.java deleted file mode 100755 index f976bea..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockFromToEvent.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Represents events with a source block and a destination block, currently - * only applies to liquid (lava and water) and teleporting dragon eggs. - *

          - * If a Block From To event is cancelled, the block will not move (the liquid - * will not flow). - */ -public class BlockFromToEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected Block to; - protected BlockFace face; - protected boolean cancel; - - public BlockFromToEvent(final Block block, final BlockFace face) { - super(block); - this.face = face; - this.cancel = false; - } - - public BlockFromToEvent(final Block block, final Block toBlock) { - super(block); - this.to = toBlock; - this.face = BlockFace.SELF; - this.cancel = false; - } - - /** - * Gets the BlockFace that the block is moving to. - * - * @return The BlockFace that the block is moving to - */ - public BlockFace getFace() { - return face; - } - - /** - * Convenience method for getting the faced Block. - * - * @return The faced Block - */ - public Block getToBlock() { - if (to == null) { - to = block.getRelative(face); - } - return to; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockGrowEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockGrowEvent.java deleted file mode 100755 index 2a959fd..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockGrowEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block grows naturally in the world. - *

          - * Examples: - *

            - *
          • Wheat - *
          • Sugar Cane - *
          • Cactus - *
          • Watermelon - *
          • Pumpkin - *
          - *

          - * If a Block Grow event is cancelled, the block will not grow. - */ -public class BlockGrowEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final BlockState newState; - private boolean cancelled = false; - - public BlockGrowEvent(final Block block, final BlockState newState) { - super(block); - this.newState = newState; - } - - /** - * Gets the state of the block where it will form or spread to. - * - * @return The block state for this events block - */ - public BlockState getNewState() { - return newState; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockIgniteEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockIgniteEvent.java deleted file mode 100755 index 733a15e..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockIgniteEvent.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a block is ignited. If you want to catch when a Player places - * fire, you need to use {@link BlockPlaceEvent}. - *

          - * If a Block Ignite event is cancelled, the block will not be ignited. - */ -public class BlockIgniteEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final IgniteCause cause; - private final Entity ignitingEntity; - private final Block ignitingBlock; - private boolean cancel; - - /** - * @deprecated use {@link BlockIgniteEvent#BlockIgniteEvent(Block, - * IgniteCause, Entity)} instead. - */ - @Deprecated - public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Player thePlayer) { - this(theBlock, cause, (Entity) thePlayer); - } - - public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Entity ignitingEntity) { - this(theBlock, cause, ignitingEntity, null); - } - - public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Block ignitingBlock) { - this(theBlock, cause, null, ignitingBlock); - } - - public BlockIgniteEvent(final Block theBlock, final IgniteCause cause, final Entity ignitingEntity, final Block ignitingBlock) { - super(theBlock); - this.cause = cause; - this.ignitingEntity = ignitingEntity; - this.ignitingBlock = ignitingBlock; - this.cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the cause of block ignite. - * - * @return An IgniteCause value detailing the cause of block ignition - */ - public IgniteCause getCause() { - return cause; - } - - /** - * Gets the player who ignited this block - * - * @return The Player that placed/ignited the fire block, or null if not ignited by a Player. - */ - public Player getPlayer() { - if (ignitingEntity instanceof Player) { - return (Player) ignitingEntity; - } - - return null; - } - - /** - * Gets the entity who ignited this block - * - * @return The Entity that placed/ignited the fire block, or null if not ignited by a Entity. - */ - public Entity getIgnitingEntity() { - return ignitingEntity; - } - - /** - * Gets the block who ignited this block - * - * @return The Block that placed/ignited the fire block, or null if not ignited by a Block. - */ - public Block getIgnitingBlock() { - return ignitingBlock; - } - - /** - * An enum to specify the cause of the ignite - */ - public enum IgniteCause { - - /** - * Block ignition caused by lava. - */ - LAVA, - /** - * Block ignition caused by a player or dispenser using flint-and-steel. - */ - FLINT_AND_STEEL, - /** - * Block ignition caused by dynamic spreading of fire. - */ - SPREAD, - /** - * Block ignition caused by lightning. - */ - LIGHTNING, - /** - * Block ignition caused by an entity using a fireball. - */ - FIREBALL, - /** - * Block ignition caused by an Ender Crystal. - */ - ENDER_CRYSTAL, - /** - * Block ignition caused by explosion. - */ - EXPLOSION, - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockMultiPlaceEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockMultiPlaceEvent.java deleted file mode 100755 index d16e4be..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockMultiPlaceEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.block; - -import com.google.common.collect.ImmutableList; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.List; - -/** - * Fired when a single block placement action of a player triggers the - * creation of multiple blocks(e.g. placing a bed block). The block returned - * by {@link #getBlockPlaced()} and its related methods is the block where - * the placed block would exist if the placement only affected a single - * block. - */ -public class BlockMultiPlaceEvent extends BlockPlaceEvent { - private final List states; - - public BlockMultiPlaceEvent(List states, Block clicked, ItemStack itemInHand, Player thePlayer, boolean canBuild) { - super(states.get(0).getBlock(), states.get(0), clicked, itemInHand, thePlayer, canBuild); - this.states = ImmutableList.copyOf(states); - } - - /** - * Gets a list of blockstates for all blocks which were replaced by the - * placement of the new blocks. Most of these blocks will just have a - * Material type of AIR. - * - * @return immutable list of replaced BlockStates - */ - public List getReplacedBlockStates() { - return states; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockPhysicsEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockPhysicsEvent.java deleted file mode 100755 index e05d1ca..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockPhysicsEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.Material; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a block physics check is called - */ -public class BlockPhysicsEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final int changed; - private boolean cancel = false; - - /** - * - * @deprecated Magic value - */ - @Deprecated - public BlockPhysicsEvent(final Block block, final int changed) { - super(block); - this.changed = changed; - } - - /** - * Gets the type of block that changed, causing this event - * - * @return Changed block's type id - * @deprecated Magic value - */ - @Deprecated - public int getChangedTypeId() { - return changed; - } - - /** - * Gets the type of block that changed, causing this event - * - * @return Changed block's type - */ - public Material getChangedType() { - return Material.getMaterial(changed); - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockPistonEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockPistonEvent.java deleted file mode 100755 index b89006f..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockPistonEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.Cancellable; - -/** - * Called when a piston block is triggered - */ -public abstract class BlockPistonEvent extends BlockEvent implements Cancellable { - private boolean cancelled; - private final BlockFace direction; - - public BlockPistonEvent(final Block block, final BlockFace direction) { - super(block); - this.direction = direction; - } - - public boolean isCancelled() { - return this.cancelled; - } - - public void setCancelled(boolean cancelled) { - this.cancelled = cancelled; - } - - /** - * Returns true if the Piston in the event is sticky. - * - * @return stickiness of the piston - */ - public boolean isSticky() { - return block.getType() == Material.PISTON_STICKY_BASE; - } - - /** - * Return the direction in which the piston will operate. - * - * @return direction of the piston - */ - public BlockFace getDirection() { - // Both are meh! - // return ((PistonBaseMaterial) block.getType().getNewData(block.getData())).getFacing(); - // return ((PistonBaseMaterial) block.getState().getData()).getFacing(); - return direction; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockPistonExtendEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockPistonExtendEvent.java deleted file mode 100755 index 1058b8b..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockPistonExtendEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.event.block; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.HandlerList; - -/** - * Called when a piston extends - */ -public class BlockPistonExtendEvent extends BlockPistonEvent { - private static final HandlerList handlers = new HandlerList(); - private final int length; - private List blocks; - - public BlockPistonExtendEvent(final Block block, final int length, final BlockFace direction) { - super(block, direction); - - this.length = length; - } - - /** - * Get the amount of blocks which will be moved while extending. - * - * @return the amount of moving blocks - */ - public int getLength() { - return this.length; - } - - /** - * Get an immutable list of the blocks which will be moved by the - * extending. - * - * @return Immutable list of the moved blocks. - */ - public List getBlocks() { - if (blocks == null) { - ArrayList tmp = new ArrayList(); - for (int i = 0; i < this.getLength(); i++) { - tmp.add(block.getRelative(getDirection(), i + 1)); - } - blocks = Collections.unmodifiableList(tmp); - } - return blocks; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockPistonRetractEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockPistonRetractEvent.java deleted file mode 100755 index 0190c4c..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockPistonRetractEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.HandlerList; - -/** - * Called when a piston retracts - */ -public class BlockPistonRetractEvent extends BlockPistonEvent { - private static final HandlerList handlers = new HandlerList(); - public BlockPistonRetractEvent(final Block block, final BlockFace direction) { - super(block, direction); - } - - /** - * Gets the location where the possible moving block might be if the - * retracting piston is sticky. - * - * @return The possible location of the possibly moving block. - */ - public Location getRetractLocation() { - return getBlock().getRelative(getDirection(), 2).getLocation(); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockPlaceEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockPlaceEvent.java deleted file mode 100755 index 6d0ffe8..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockPlaceEvent.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a block is placed by a player. - *

          - * If a Block Place event is cancelled, the block will not be placed. - */ -public class BlockPlaceEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected boolean cancel; - protected boolean canBuild; - protected Block placedAgainst; - protected BlockState replacedBlockState; - protected ItemStack itemInHand; - protected Player player; - - public BlockPlaceEvent(final Block placedBlock, final BlockState replacedBlockState, final Block placedAgainst, final ItemStack itemInHand, final Player thePlayer, final boolean canBuild) { - super(placedBlock); - this.placedAgainst = placedAgainst; - this.itemInHand = itemInHand; - this.player = thePlayer; - this.replacedBlockState = replacedBlockState; - this.canBuild = canBuild; - cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the player who placed the block involved in this event. - * - * @return The Player who placed the block involved in this event - */ - public Player getPlayer() { - return player; - } - - /** - * Clarity method for getting the placed block. Not really needed except - * for reasons of clarity. - * - * @return The Block that was placed - */ - public Block getBlockPlaced() { - return getBlock(); - } - - /** - * Gets the BlockState for the block which was replaced. Material type air - * mostly. - * - * @return The BlockState for the block which was replaced. - */ - public BlockState getBlockReplacedState() { - return this.replacedBlockState; - } - - /** - * Gets the block that this block was placed against - * - * @return Block the block that the new block was placed against - */ - public Block getBlockAgainst() { - return placedAgainst; - } - - /** - * Gets the item in the player's hand when they placed the block. - * - * @return The ItemStack for the item in the player's hand when they - * placed the block - */ - public ItemStack getItemInHand() { - return itemInHand; - } - - /** - * Gets the value whether the player would be allowed to build here. - * Defaults to spawn if the server was going to stop them (such as, the - * player is in Spawn). Note that this is an entirely different check - * than BLOCK_CANBUILD, as this refers to a player, not universe-physics - * rule like cactus on dirt. - * - * @return boolean whether the server would allow a player to build here - */ - public boolean canBuild() { - return this.canBuild; - } - - /** - * Sets the canBuild state of this event. Set to true if you want the - * player to be able to build. - * - * @param canBuild true if you want the player to be able to build - */ - public void setBuild(boolean canBuild) { - this.canBuild = canBuild; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockRedstoneEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockRedstoneEvent.java deleted file mode 100755 index 625ec90..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockRedstoneEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.HandlerList; - -/** - * Called when a redstone current changes - */ -public class BlockRedstoneEvent extends BlockEvent { - private static final HandlerList handlers = new HandlerList(); - private final int oldCurrent; - private int newCurrent; - - public BlockRedstoneEvent(final Block block, final int oldCurrent, final int newCurrent) { - super(block); - this.oldCurrent = oldCurrent; - this.newCurrent = newCurrent; - } - - /** - * Gets the old current of this block - * - * @return The previous current - */ - public int getOldCurrent() { - return oldCurrent; - } - - /** - * Gets the new current of this block - * - * @return The new current - */ - public int getNewCurrent() { - return newCurrent; - } - - /** - * Sets the new current of this block - * - * @param newCurrent The new current to set - */ - public void setNewCurrent(int newCurrent) { - this.newCurrent = newCurrent; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/BlockSpreadEvent.java b/LiveWeather/src/org/bukkit/event/block/BlockSpreadEvent.java deleted file mode 100755 index a1fb363..0000000 --- a/LiveWeather/src/org/bukkit/event/block/BlockSpreadEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.event.HandlerList; - -/** - * Called when a block spreads based on world conditions. - *

          - * Use {@link BlockFormEvent} to catch blocks that "randomly" form instead of - * actually spread. - *

          - * Examples: - *

            - *
          • Mushrooms spreading. - *
          • Fire spreading. - *
          - *

          - * If a Block Spread event is cancelled, the block will not spread. - * - * @see BlockFormEvent - */ -public class BlockSpreadEvent extends BlockFormEvent { - private static final HandlerList handlers = new HandlerList(); - private final Block source; - - public BlockSpreadEvent(final Block block, final Block source, final BlockState newState) { - super(block, newState); - this.source = source; - } - - /** - * Gets the source block involved in this event. - * - * @return the Block for the source block involved in this event. - */ - public Block getSource() { - return source; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/EntityBlockFormEvent.java b/LiveWeather/src/org/bukkit/event/block/EntityBlockFormEvent.java deleted file mode 100755 index 45efc32..0000000 --- a/LiveWeather/src/org/bukkit/event/block/EntityBlockFormEvent.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Entity; - -/** - * Called when a block is formed by entities. - *

          - * Examples: - *

            - *
          • Snow formed by a {@link org.bukkit.entity.Snowman}. - *
          - */ -public class EntityBlockFormEvent extends BlockFormEvent { - private final Entity entity; - - public EntityBlockFormEvent(final Entity entity, final Block block, final BlockState blockstate) { - super(block, blockstate); - - this.entity = entity; - } - - /** - * Get the entity that formed the block. - * - * @return Entity involved in event - */ - public Entity getEntity() { - return entity; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/block/LeavesDecayEvent.java b/LiveWeather/src/org/bukkit/event/block/LeavesDecayEvent.java deleted file mode 100755 index 84d8cfd..0000000 --- a/LiveWeather/src/org/bukkit/event/block/LeavesDecayEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when leaves are decaying naturally. - *

          - * If a Leaves Decay event is cancelled, the leaves will not decay. - */ -public class LeavesDecayEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - - public LeavesDecayEvent(final Block block) { - super(block); - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/NotePlayEvent.java b/LiveWeather/src/org/bukkit/event/block/NotePlayEvent.java deleted file mode 100755 index d4d4381..0000000 --- a/LiveWeather/src/org/bukkit/event/block/NotePlayEvent.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.Instrument; -import org.bukkit.Note; -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a note block is being played through player interaction or a - * redstone current. - */ -public class NotePlayEvent extends BlockEvent implements Cancellable { - - private static HandlerList handlers = new HandlerList(); - private Instrument instrument; - private Note note; - private boolean cancelled = false; - - public NotePlayEvent(Block block, Instrument instrument, Note note) { - super(block); - this.instrument = instrument; - this.note = note; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * Gets the {@link Instrument} to be used. - * - * @return the Instrument; - */ - public Instrument getInstrument() { - return instrument; - } - - /** - * Gets the {@link Note} to be played. - * - * @return the Note. - */ - public Note getNote() { - return note; - } - - /** - * Overrides the {@link Instrument} to be used. - * - * @param instrument the Instrument. Has no effect if null. - */ - public void setInstrument(Instrument instrument) { - if (instrument != null) { - this.instrument = instrument; - } - - } - - /** - * Overrides the {@link Note} to be played. - * - * @param note the Note. Has no effect if null. - */ - public void setNote(Note note) { - if (note != null) { - this.note = note; - } - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/block/SignChangeEvent.java b/LiveWeather/src/org/bukkit/event/block/SignChangeEvent.java deleted file mode 100755 index d1b7908..0000000 --- a/LiveWeather/src/org/bukkit/event/block/SignChangeEvent.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bukkit.event.block; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a sign is changed by a player. - *

          - * If a Sign Change event is cancelled, the sign will not be changed. - */ -public class SignChangeEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final Player player; - private final String[] lines; - - public SignChangeEvent(final Block theBlock, final Player thePlayer, final String[] theLines) { - super(theBlock); - this.player = thePlayer; - this.lines = theLines; - } - - /** - * Gets the player changing the sign involved in this event. - * - * @return the Player involved in this event - */ - public Player getPlayer() { - return player; - } - - /** - * Gets all of the lines of text from the sign involved in this event. - * - * @return the String array for the sign's lines new text - */ - public String[] getLines() { - return lines; - } - - /** - * Gets a single line of text from the sign involved in this event. - * - * @param index index of the line to get - * @return the String containing the line of text associated with the - * provided index - * @throws IndexOutOfBoundsException thrown when the provided index is > 3 - * or < 0 - */ - public String getLine(int index) throws IndexOutOfBoundsException { - return lines[index]; - } - - /** - * Sets a single line for the sign involved in this event - * - * @param index index of the line to set - * @param line text to set - * @throws IndexOutOfBoundsException thrown when the provided index is > 3 - * or < 0 - */ - public void setLine(int index, String line) throws IndexOutOfBoundsException { - lines[index] = line; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/enchantment/EnchantItemEvent.java b/LiveWeather/src/org/bukkit/event/enchantment/EnchantItemEvent.java deleted file mode 100755 index de28f1d..0000000 --- a/LiveWeather/src/org/bukkit/event/enchantment/EnchantItemEvent.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bukkit.event.enchantment; - -import java.util.HashMap; -import java.util.Map; - -import org.bukkit.block.Block; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.event.inventory.InventoryEvent; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -/** - * Called when an ItemStack is successfully enchanted (currently at - * enchantment table) - */ -public class EnchantItemEvent extends InventoryEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Block table; - private final ItemStack item; - private int level; - private boolean cancelled; - private final Map enchants; - private final Player enchanter; - private int button; - - public EnchantItemEvent(final Player enchanter, final InventoryView view, final Block table, final ItemStack item, final int level, final Map enchants, final int i) { - super(view); - this.enchanter = enchanter; - this.table = table; - this.item = item; - this.level = level; - this.enchants = new HashMap(enchants); - this.cancelled = false; - this.button = i; - } - - /** - * Gets the player enchanting the item - * - * @return enchanting player - */ - public Player getEnchanter() { - return enchanter; - } - - /** - * Gets the block being used to enchant the item - * - * @return the block used for enchanting - */ - public Block getEnchantBlock() { - return table; - } - - /** - * Gets the item to be enchanted (can be modified) - * - * @return ItemStack of item - */ - public ItemStack getItem() { - return item; - } - - /** - * Get cost in exp levels of the enchantment - * - * @return experience level cost - */ - public int getExpLevelCost() { - return level; - } - - /** - * Set cost in exp levels of the enchantment - * - * @param level - cost in levels - */ - public void setExpLevelCost(int level) { - this.level = level; - } - - /** - * Get map of enchantment (levels, keyed by type) to be added to item - * (modify map returned to change values). Note: Any enchantments not - * allowed for the item will be ignored - * - * @return map of enchantment levels, keyed by enchantment - */ - public Map getEnchantsToAdd() { - return enchants; - } - - /** - * Which button was pressed to initiate the enchanting. - * - * @return The button index (0, 1, or 2). - */ - public int whichButton() { - return button; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java b/LiveWeather/src/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java deleted file mode 100755 index 6c0aa9f..0000000 --- a/LiveWeather/src/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bukkit.event.enchantment; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.event.inventory.InventoryEvent; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -/** - * Called when an ItemStack is inserted in an enchantment table - can be - * called multiple times - */ -public class PrepareItemEnchantEvent extends InventoryEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Block table; - private final ItemStack item; - private final int[] levelsOffered; - private final int bonus; - private boolean cancelled; - private final Player enchanter; - - public PrepareItemEnchantEvent(final Player enchanter, InventoryView view, final Block table, final ItemStack item, final int[] levelsOffered, final int bonus) { - super(view); - this.enchanter = enchanter; - this.table = table; - this.item = item; - this.levelsOffered = levelsOffered; - this.bonus = bonus; - this.cancelled = false; - } - - /** - * Gets the player enchanting the item - * - * @return enchanting player - */ - public Player getEnchanter() { - return enchanter; - } - - /** - * Gets the block being used to enchant the item - * - * @return the block used for enchanting - */ - public Block getEnchantBlock() { - return table; - } - - /** - * Gets the item to be enchanted (can be modified) - * - * @return ItemStack of item - */ - public ItemStack getItem() { - return item; - } - - /** - * Get list of offered exp level costs of the enchantment (modify values - * to change offer) - * - * @return experience level costs offered - */ - public int[] getExpLevelCostsOffered() { - return levelsOffered; - } - - /** - * Get enchantment bonus in effect - corresponds to number of bookshelves - * - * @return enchantment bonus - */ - public int getEnchantmentBonus() { - return bonus; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/CreatureSpawnEvent.java b/LiveWeather/src/org/bukkit/event/entity/CreatureSpawnEvent.java deleted file mode 100755 index 288e98b..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/CreatureSpawnEvent.java +++ /dev/null @@ -1,195 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.entity.CreatureType; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a creature is spawned into a world. - *

          - * If a Creature Spawn event is cancelled, the creature will not spawn. - */ -public class CreatureSpawnEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final SpawnReason spawnReason; - - public CreatureSpawnEvent(final LivingEntity spawnee, final SpawnReason spawnReason) { - super(spawnee); - this.spawnReason = spawnReason; - } - - @Deprecated - public CreatureSpawnEvent(Entity spawnee, CreatureType type, Location loc, SpawnReason reason) { - super(spawnee); - spawnReason = reason; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } - - /** - * Gets the location at which the creature is spawning. - * - * @return The location at which the creature is spawning - */ - public Location getLocation() { - return getEntity().getLocation(); - } - - /** - * Gets the type of creature being spawned. - * - * @return A CreatureType value detailing the type of creature being - * spawned - * @deprecated In favour of {@link #getEntityType()}. - */ - @Deprecated - public CreatureType getCreatureType() { - return CreatureType.fromEntityType(getEntityType()); - } - - /** - * Gets the reason for why the creature is being spawned. - * - * @return A SpawnReason value detailing the reason for the creature being - * spawned - */ - public SpawnReason getSpawnReason() { - return spawnReason; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the type of spawning - */ - public enum SpawnReason { - - /** - * When something spawns from natural means - */ - NATURAL, - /** - * When an entity spawns as a jockey of another entity (mostly spider - * jockeys) - */ - JOCKEY, - /** - * When a creature spawns due to chunk generation - */ - CHUNK_GEN, - /** - * When a creature spawns from a spawner - */ - SPAWNER, - /** - * When a creature spawns from an egg - */ - EGG, - /** - * When a creature spawns from a Spawner Egg - */ - SPAWNER_EGG, - /** - * When a creature spawns because of a lightning strike - */ - LIGHTNING, - /** - * When a creature is spawned by a player that is sleeping - * - * @deprecated No longer used - */ - @Deprecated - BED, - /** - * When a snowman is spawned by being built - */ - BUILD_SNOWMAN, - /** - * When an iron golem is spawned by being built - */ - BUILD_IRONGOLEM, - /** - * When a wither boss is spawned by being built - */ - BUILD_WITHER, - /** - * When an iron golem is spawned to defend a village - */ - VILLAGE_DEFENSE, - /** - * When a zombie is spawned to invade a village - */ - VILLAGE_INVASION, - /** - * When an animal breeds to create a child - */ - BREEDING, - /** - * When a slime splits - */ - SLIME_SPLIT, - /** - * When an entity calls for reinforcements - */ - REINFORCEMENTS, - /** - * When a creature is spawned by nether portal - */ - NETHER_PORTAL, - /** - * When a creature is spawned by a dispenser dispensing an egg - */ - DISPENSE_EGG, - /** - * When a zombie infects a villager - */ - INFECTION, - /** - * When a villager is cured from infection - */ - CURED, - /** - * When an ocelot has a baby spawned along with them - */ - OCELOT_BABY, - /** - * When a silverfish spawns from a block - */ - SILVERFISH_BLOCK, - /** - * When an entity spawns as a mount of another entity (mostly chicken - * jockeys) - */ - MOUNT, - /** - * When a creature is spawned by plugins - */ - CUSTOM, - /** - * When an entity is missing a SpawnReason - */ - DEFAULT - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/CreeperPowerEvent.java b/LiveWeather/src/org/bukkit/event/entity/CreeperPowerEvent.java deleted file mode 100755 index b103a6a..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/CreeperPowerEvent.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Creeper; -import org.bukkit.entity.LightningStrike; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a Creeper is struck by lightning. - *

          - * If a Creeper Power event is cancelled, the Creeper will not be powered. - */ -public class CreeperPowerEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final PowerCause cause; - private LightningStrike bolt; - - public CreeperPowerEvent(final Creeper creeper, final LightningStrike bolt, final PowerCause cause) { - this(creeper, cause); - this.bolt = bolt; - } - - public CreeperPowerEvent(final Creeper creeper, final PowerCause cause) { - super(creeper); - this.cause = cause; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - @Override - public Creeper getEntity() { - return (Creeper) entity; - } - - /** - * Gets the lightning bolt which is striking the Creeper. - * - * @return The Entity for the lightning bolt which is striking the Creeper - */ - public LightningStrike getLightning() { - return bolt; - } - - /** - * Gets the cause of the creeper being (un)powered. - * - * @return A PowerCause value detailing the cause of change in power. - */ - public PowerCause getCause() { - return cause; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the cause of the change in power - */ - public enum PowerCause { - - /** - * Power change caused by a lightning bolt - *

          - * Powered state: true - */ - LIGHTNING, - /** - * Power change caused by something else (probably a plugin) - *

          - * Powered state: true - */ - SET_ON, - /** - * Power change caused by something else (probably a plugin) - *

          - * Powered state: false - */ - SET_OFF - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityBreakDoorEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityBreakDoorEvent.java deleted file mode 100755 index 2cbbc69..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityBreakDoorEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; - -/** - * Called when an {@link Entity} breaks a door - *

          - * Cancelling the event will cause the event to be delayed - */ -public class EntityBreakDoorEvent extends EntityChangeBlockEvent { - public EntityBreakDoorEvent(final LivingEntity entity, final Block targetBlock) { - super(entity, targetBlock, Material.AIR, (byte) 0); - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityChangeBlockEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityChangeBlockEvent.java deleted file mode 100755 index 41be9ca..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityChangeBlockEvent.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when any Entity, excluding players, changes a block. - */ -public class EntityChangeBlockEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Block block; - private boolean cancel; - private final Material to; - private final byte data; - - /** - * - * @param what the LivingEntity causing the change - * @param block the block (before the change) - * @param to the future material being changed to - * @deprecated Provided as a backward compatibility before the data byte - * was provided, and type increased to all entities - */ - @Deprecated - public EntityChangeBlockEvent(final LivingEntity what, final Block block, final Material to) { - this (what, block, to, (byte) 0); - } - - /** - * - * @param what the Entity causing the change - * @param block the block (before the change) - * @param to the future material being changed to - * @param data the future block data - * @deprecated Magic value - */ - @Deprecated - public EntityChangeBlockEvent(final Entity what, final Block block, final Material to, final byte data) { - super(what); - this.block = block; - this.cancel = false; - this.to = to; - this.data = data; - } - - /** - * Gets the block the entity is changing - * - * @return the block that is changing - */ - public Block getBlock() { - return block; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the Material that the block is changing into - * - * @return the material that the block is changing into - */ - public Material getTo() { - return to; - } - - /** - * Gets the data for the block that would be changed into - * - * @return the data for the block that would be changed into - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityCombustByBlockEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityCombustByBlockEvent.java deleted file mode 100755 index c84bda9..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityCombustByBlockEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; - -/** - * Called when a block causes an entity to combust. - */ -public class EntityCombustByBlockEvent extends EntityCombustEvent { - private final Block combuster; - - public EntityCombustByBlockEvent(final Block combuster, final Entity combustee, final int duration) { - super(combustee, duration); - this.combuster = combuster; - } - - /** - * The combuster can be lava or a block that is on fire. - *

          - * WARNING: block may be null. - * - * @return the Block that set the combustee alight. - */ - public Block getCombuster() { - return combuster; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityCombustByEntityEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityCombustByEntityEvent.java deleted file mode 100755 index 639567b..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityCombustByEntityEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; - -/** - * Called when an entity causes another entity to combust. - */ -public class EntityCombustByEntityEvent extends EntityCombustEvent { - private final Entity combuster; - - public EntityCombustByEntityEvent(final Entity combuster, final Entity combustee, final int duration) { - super(combustee, duration); - this.combuster = combuster; - } - - /** - * Get the entity that caused the combustion event. - * - * @return the Entity that set the combustee alight. - */ - public Entity getCombuster() { - return combuster; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityCombustEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityCombustEvent.java deleted file mode 100755 index 43c4482..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityCombustEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when an entity combusts. - *

          - * If an Entity Combust event is cancelled, the entity will not combust. - */ -public class EntityCombustEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private int duration; - private boolean cancel; - - public EntityCombustEvent(final Entity combustee, final int duration) { - super(combustee); - this.duration = duration; - this.cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * @return the amount of time (in seconds) the combustee should be alight - * for - */ - public int getDuration() { - return duration; - } - - /** - * The number of seconds the combustee should be alight for. - *

          - * This value will only ever increase the combustion time, not decrease - * existing combustion times. - * - * @param duration the time in seconds to be alight for. - */ - public void setDuration(int duration) { - this.duration = duration; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityCreatePortalEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityCreatePortalEvent.java deleted file mode 100755 index 286c206..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityCreatePortalEvent.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.List; -import org.bukkit.PortalType; -import org.bukkit.block.BlockState; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a Living Entity creates a portal in a world. - */ -public class EntityCreatePortalEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final List blocks; - private boolean cancelled = false; - private PortalType type = PortalType.CUSTOM; - - public EntityCreatePortalEvent(final LivingEntity what, final List blocks, final PortalType type) { - super(what); - - this.blocks = blocks; - this.type = type; - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } - - /** - * Gets a list of all blocks associated with the portal. - * - * @return List of blocks that will be changed. - */ - public List getBlocks() { - return blocks; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * Gets the type of portal that is trying to be created. - * - * @return Type of portal. - */ - public PortalType getPortalType() { - return type; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityDamageByBlockEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityDamageByBlockEvent.java deleted file mode 100755 index 49bf2a8..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityDamageByBlockEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.Map; - -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; - -/** - * Called when an entity is damaged by a block - */ -public class EntityDamageByBlockEvent extends EntityDamageEvent { - private final Block damager; - - @Deprecated - public EntityDamageByBlockEvent(final Block damager, final Entity damagee, final DamageCause cause, final int damage) { - this(damager, damagee, cause, (double) damage); - } - - @Deprecated - public EntityDamageByBlockEvent(final Block damager, final Entity damagee, final DamageCause cause, final double damage) { - super(damagee, cause, damage); - this.damager = damager; - } - - public EntityDamageByBlockEvent(final Block damager, final Entity damagee, final DamageCause cause, final Map modifiers) { - super(damagee, cause, modifiers); - this.damager = damager; - } - - /** - * Returns the block that damaged the player. - * - * @return Block that damaged the player - */ - public Block getDamager() { - return damager; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityDamageByEntityEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityDamageByEntityEvent.java deleted file mode 100755 index e7ea32f..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityDamageByEntityEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.Map; - -import org.bukkit.entity.Entity; - -/** - * Called when an entity is damaged by an entity - */ -public class EntityDamageByEntityEvent extends EntityDamageEvent { - private final Entity damager; - - @Deprecated - public EntityDamageByEntityEvent(final Entity damager, final Entity damagee, final DamageCause cause, final int damage) { - this(damager, damagee, cause, (double) damage); - } - - @Deprecated - public EntityDamageByEntityEvent(final Entity damager, final Entity damagee, final DamageCause cause, final double damage) { - super(damagee, cause, damage); - this.damager = damager; - } - - public EntityDamageByEntityEvent(final Entity damager, final Entity damagee, final DamageCause cause, final Map modifiers) { - super(damagee, cause, modifiers); - this.damager = damager; - } - - /** - * Returns the entity that damaged the defender. - * - * @return Entity that damaged the defender. - */ - public Entity getDamager() { - return damager; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityDamageEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityDamageEvent.java deleted file mode 100755 index 17d9548..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityDamageEvent.java +++ /dev/null @@ -1,374 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.EnumMap; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.util.NumberConversions; - -import com.google.common.collect.ImmutableMap; - -/** - * Stores data for damage events - */ -public class EntityDamageEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private static final DamageModifier[] MODIFIERS = DamageModifier.values(); - private final Map modifiers; - private final Map originals; - private boolean cancelled; - private final DamageCause cause; - - @Deprecated - public EntityDamageEvent(final Entity damagee, final DamageCause cause, final int damage) { - this(damagee, cause, (double) damage); - } - - @Deprecated - public EntityDamageEvent(final Entity damagee, final DamageCause cause, final double damage) { - this(damagee, cause, new EnumMap(ImmutableMap.of(DamageModifier.BASE, damage))); - } - - public EntityDamageEvent(final Entity damagee, final DamageCause cause, final Map modifiers) { - super(damagee); - Validate.isTrue(modifiers.containsKey(DamageModifier.BASE), "BASE DamageModifier missing"); - Validate.isTrue(!modifiers.containsKey(null), "Cannot have null DamageModifier"); - this.originals = new EnumMap(modifiers); - this.cause = cause; - this.modifiers = modifiers; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - /** - * Gets the original damage for the specified modifier, as defined at this - * event's construction. - * - * @param type the modifier - * @throws IllegalArgumentException if type is null - */ - public double getOriginalDamage(DamageModifier type) throws IllegalArgumentException { - final Double damage = originals.get(type); - if (damage != null) { - return damage; - } - if (type == null) { - throw new IllegalArgumentException("Cannot have null DamageModifier"); - } - return 0; - } - - /** - * Sets the damage for the specified modifier. - * - * @param damage the scalar value of the damage's modifier - * @see #getFinalDamage() - * @throws IllegalArgumentException if type is null - * @throws UnsupportedOperationException if the caller does not support - * the particular DamageModifier, or to rephrase, when {@link - * #isApplicable(DamageModifier)} returns false - */ - public void setDamage(DamageModifier type, double damage) throws IllegalArgumentException, UnsupportedOperationException { - if (!modifiers.containsKey(type)) { - throw type == null ? new IllegalArgumentException("Cannot have null DamageModifier") : new UnsupportedOperationException(type + " is not applicable to " + getEntity()); - } - modifiers.put(type, damage); - } - - /** - * Gets the damage change for some modifier - * - * @return The raw amount of damage caused by the event - * @throws IllegalArgumentException if type is null - * @see DamageModifier#BASE - */ - public double getDamage(DamageModifier type) throws IllegalArgumentException { - Validate.notNull(type, "Cannot have null DamageModifier"); - final Double damage = modifiers.get(type); - return damage == null ? 0 : damage; - } - - /** - * This checks to see if a particular modifier is valid for this event's - * caller, such that, {@link #setDamage(DamageModifier, double)} will not - * throw an {@link UnsupportedOperationException}. - *

          - * {@link DamageModifier#BASE} is always applicable. - * - * @param type the modifier - * @return true if the modifier is supported by the caller, false otherwise - * @throws IllegalArgumentException if type is null - */ - public boolean isApplicable(DamageModifier type) throws IllegalArgumentException { - Validate.notNull(type, "Cannot have null DamageModifier"); - return modifiers.containsKey(type); - } - - /** - * Gets the raw amount of damage caused by the event - * - * @return The raw amount of damage caused by the event - * @see DamageModifier#BASE - */ - public double getDamage() { - return getDamage(DamageModifier.BASE); - } - - /** - * Gets the amount of damage caused by the event after all damage - * reduction is applied. - * - * @return the amount of damage caused by the event - */ - public final double getFinalDamage() { - double damage = 0; - for (DamageModifier modifier : MODIFIERS) { - damage += getDamage(modifier); - } - return damage; - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public int _INVALID_getDamage() { - return NumberConversions.ceil(getDamage()); - } - - /** - * Sets the raw amount of damage caused by the event - * - * @param damage The raw amount of damage caused by the event - */ - public void setDamage(double damage) { - setDamage(DamageModifier.BASE, damage); - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setDamage(int damage) { - setDamage(damage); - } - - /** - * Gets the cause of the damage. - * - * @return A DamageCause value detailing the cause of the damage. - */ - public DamageCause getCause() { - return cause; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the types of modifier - */ - public enum DamageModifier { - /** - * This represents the amount of damage being done, also known as the - * raw {@link EntityDamageEvent#getDamage()}. - */ - BASE, - /** - * This represents the damage reduced by a wearing a helmet when hit - * by a falling block. - */ - HARD_HAT, - /** - * This represents the damage reduction caused by blocking, only present for - * {@link Player Players}. - */ - BLOCKING, - /** - * This represents the damage reduction caused by wearing armor. - */ - ARMOR, - /** - * This represents the damage reduction caused by the Resistance potion effect. - */ - RESISTANCE, - /** - * This represents the damage reduction caused by the combination of: - *

            - *
          • - * Armor enchantments - *
          • - * Witch's potion resistance - *
          • - *
          - */ - MAGIC, - /** - * This represents the damage reduction caused by the absorption potion - * effect. - */ - ABSORPTION, - ; - } - - /** - * An enum to specify the cause of the damage - */ - public enum DamageCause { - - /** - * Damage caused when an entity contacts a block such as a Cactus. - *

          - * Damage: 1 (Cactus) - */ - CONTACT, - /** - * Damage caused when an entity attacks another entity. - *

          - * Damage: variable - */ - ENTITY_ATTACK, - /** - * Damage caused when attacked by a projectile. - *

          - * Damage: variable - */ - PROJECTILE, - /** - * Damage caused by being put in a block - *

          - * Damage: 1 - */ - SUFFOCATION, - /** - * Damage caused when an entity falls a distance greater than 3 blocks - *

          - * Damage: fall height - 3.0 - */ - FALL, - /** - * Damage caused by direct exposure to fire - *

          - * Damage: 1 - */ - FIRE, - /** - * Damage caused due to burns caused by fire - *

          - * Damage: 1 - */ - FIRE_TICK, - /** - * Damage caused due to a snowman melting - *

          - * Damage: 1 - */ - MELTING, - /** - * Damage caused by direct exposure to lava - *

          - * Damage: 4 - */ - LAVA, - /** - * Damage caused by running out of air while in water - *

          - * Damage: 2 - */ - DROWNING, - /** - * Damage caused by being in the area when a block explodes. - *

          - * Damage: variable - */ - BLOCK_EXPLOSION, - /** - * Damage caused by being in the area when an entity, such as a - * Creeper, explodes. - *

          - * Damage: variable - */ - ENTITY_EXPLOSION, - /** - * Damage caused by falling into the void - *

          - * Damage: 4 for players - */ - VOID, - /** - * Damage caused by being struck by lightning - *

          - * Damage: 5 - */ - LIGHTNING, - /** - * Damage caused by committing suicide using the command "/kill" - *

          - * Damage: 1000 - */ - SUICIDE, - /** - * Damage caused by starving due to having an empty hunger bar - *

          - * Damage: 1 - */ - STARVATION, - /** - * Damage caused due to an ongoing poison effect - *

          - * Damage: 1 - */ - POISON, - /** - * Damage caused by being hit by a damage potion or spell - *

          - * Damage: variable - */ - MAGIC, - /** - * Damage caused by Wither potion effect - */ - WITHER, - /** - * Damage caused by being hit by a falling block which deals damage - *

          - * Note: Not every block deals damage - *

          - * Damage: variable - */ - FALLING_BLOCK, - /** - * Damage caused in retaliation to another attack by the Thorns - * enchantment. - *

          - * Damage: 1-4 (Thorns) - */ - THORNS, - /** - * Custom damage. - *

          - * Damage: variable - */ - CUSTOM - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityDeathEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityDeathEvent.java deleted file mode 100755 index ab9e81f..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityDeathEvent.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.List; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Thrown whenever a LivingEntity dies - */ -public class EntityDeathEvent extends EntityEvent { - private static final HandlerList handlers = new HandlerList(); - private final List drops; - private int dropExp = 0; - - public EntityDeathEvent(final LivingEntity entity, final List drops) { - this(entity, drops, 0); - } - - public EntityDeathEvent(final LivingEntity what, final List drops, final int droppedExp) { - super(what); - this.drops = drops; - this.dropExp = droppedExp; - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } - - /** - * Gets how much EXP should be dropped from this death. - *

          - * This does not indicate how much EXP should be taken from the entity in - * question, merely how much should be created after its death. - * - * @return Amount of EXP to drop. - */ - public int getDroppedExp() { - return dropExp; - } - - /** - * Sets how much EXP should be dropped from this death. - *

          - * This does not indicate how much EXP should be taken from the entity in - * question, merely how much should be created after its death. - * - * @param exp Amount of EXP to drop. - */ - public void setDroppedExp(int exp) { - this.dropExp = exp; - } - - /** - * Gets all the items which will drop when the entity dies - * - * @return Items to drop when the entity dies - */ - public List getDrops() { - return drops; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityEvent.java deleted file mode 100755 index c9a4ab3..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.event.Event; - -/** - * Represents an Entity-related event - */ -public abstract class EntityEvent extends Event { - protected Entity entity; - - public EntityEvent(final Entity what) { - entity = what; - } - - /** - * Returns the Entity involved in this event - * - * @return Entity who is involved in this event - */ - public Entity getEntity() { - return entity; - } - - /** - * Gets the EntityType of the Entity involved in this event. - * - * @return EntityType of the Entity involved in this event - */ - public EntityType getEntityType() { - return entity.getType(); - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityExplodeEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityExplodeEvent.java deleted file mode 100755 index 287035d..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityExplodeEvent.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -import java.util.List; - -/** - * Called when an entity explodes - */ -public class EntityExplodeEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private final Location location; - private final List blocks; - private float yield; - - public EntityExplodeEvent(final Entity what, final Location location, final List blocks, final float yield) { - super(what); - this.location = location; - this.blocks = blocks; - this.yield = yield; - this.cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Returns the list of blocks that would have been removed or were removed - * from the explosion event. - * - * @return All blown-up blocks - */ - public List blockList() { - return blocks; - } - - /** - * Returns the location where the explosion happened. - *

          - * It is not possible to get this value from the Entity as the Entity no - * longer exists in the world. - * - * @return The location of the explosion - */ - public Location getLocation() { - return location; - } - - /** - * Returns the percentage of blocks to drop from this explosion - * - * @return The yield. - */ - public float getYield() { - return yield; - } - - /** - * Sets the percentage of blocks to drop from this explosion - * - * @param yield The new yield percentage - */ - public void setYield(float yield) { - this.yield = yield; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityInteractEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityInteractEvent.java deleted file mode 100755 index 1c4e100..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityInteractEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when an entity interacts with an object - */ -public class EntityInteractEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected Block block; - private boolean cancelled; - - public EntityInteractEvent(final Entity entity, final Block block) { - super(entity); - this.block = block; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - /** - * Returns the involved block - * - * @return the block clicked with this item. - */ - public Block getBlock() { - return block; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityPortalEnterEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityPortalEnterEvent.java deleted file mode 100755 index 87d57b0..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityPortalEnterEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.Location; -import org.bukkit.event.HandlerList; - -/** - * Called when an entity comes into contact with a portal - */ -public class EntityPortalEnterEvent extends EntityEvent { - private static final HandlerList handlers = new HandlerList(); - private final Location location; - - public EntityPortalEnterEvent(final Entity entity, final Location location) { - super(entity); - this.location = location; - } - - /** - * Gets the portal block the entity is touching - * - * @return The portal block the entity is touching - */ - public Location getLocation() { - return location; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityPortalEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityPortalEvent.java deleted file mode 100755 index 835c054..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityPortalEvent.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.TravelAgent; -import org.bukkit.entity.Entity; -import org.bukkit.event.HandlerList; - -/** - * Called when a non-player entity is about to teleport because it is in - * contact with a portal. - *

          - * For players see {@link org.bukkit.event.player.PlayerPortalEvent} - */ -public class EntityPortalEvent extends EntityTeleportEvent { - private static final HandlerList handlers = new HandlerList(); - protected boolean useTravelAgent = true; - protected TravelAgent travelAgent; - - public EntityPortalEvent(final Entity entity, final Location from, final Location to, final TravelAgent pta) { - super(entity, from, to); - this.travelAgent = pta; - } - - /** - * Sets whether or not the Travel Agent will be used. - *

          - * If this is set to true, the TravelAgent will try to find a Portal at - * the {@link #getTo()} Location, and will try to create one if there is - * none. - *

          - * If this is set to false, the {@link #getEntity()} will only be - * teleported to the {@link #getTo()} Location. - * - * @param useTravelAgent whether to use the Travel Agent - */ - public void useTravelAgent(boolean useTravelAgent) { - this.useTravelAgent = useTravelAgent; - } - - /** - * Gets whether or not the Travel Agent will be used. - *

          - * If this is set to true, the TravelAgent will try to find a Portal at - * the {@link #getTo()} Location, and will try to create one if there is - * none. - *

          - * If this is set to false, the {@link #getEntity()} will only be - * teleported to the {@link #getTo()} Location. - * - * @return whether to use the Travel Agent - */ - public boolean useTravelAgent() { - return useTravelAgent; - } - - /** - * Gets the Travel Agent used (or not) in this event. - * - * @return the Travel Agent used (or not) in this event - */ - public TravelAgent getPortalTravelAgent() { - return this.travelAgent; - } - - /** - * Sets the Travel Agent used (or not) in this event. - * - * @param travelAgent the Travel Agent used (or not) in this event - */ - public void setPortalTravelAgent(TravelAgent travelAgent) { - this.travelAgent = travelAgent; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityPortalExitEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityPortalExitEvent.java deleted file mode 100755 index 682fe59..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityPortalExitEvent.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.event.HandlerList; -import org.bukkit.util.Vector; - -/** - * Called before an entity exits a portal. - *

          - * This event allows you to modify the velocity of the entity after they have - * successfully exited the portal. - */ -public class EntityPortalExitEvent extends EntityTeleportEvent { - private static final HandlerList handlers = new HandlerList(); - private Vector before; - private Vector after; - - public EntityPortalExitEvent(final Entity entity, final Location from, final Location to, final Vector before, final Vector after) { - super(entity, from, to); - this.before = before; - this.after = after; - } - - /** - * Gets a copy of the velocity that the entity has before entering the - * portal. - * - * @return velocity of entity before entering portal - */ - public Vector getBefore() { - return this.before.clone(); - } - - /** - * Gets a copy of the velocity that the entity will have after exiting the - * portal. - * - * @return velocity of entity after exiting portal - */ - public Vector getAfter() { - return this.after.clone(); - } - - /** - * Sets the velocity that the entity will have after exiting the portal. - */ - public void setAfter(Vector after) { - this.after = after.clone(); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityRegainHealthEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityRegainHealthEvent.java deleted file mode 100755 index b4291b0..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityRegainHealthEvent.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.util.NumberConversions; - -/** - * Stores data for health-regain events - */ -public class EntityRegainHealthEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private double amount; - private final RegainReason regainReason; - - @Deprecated - public EntityRegainHealthEvent(final Entity entity, final int amount, final RegainReason regainReason) { - this(entity, (double) amount, regainReason); - } - - public EntityRegainHealthEvent(final Entity entity, final double amount, final RegainReason regainReason) { - super(entity); - this.amount = amount; - this.regainReason = regainReason; - } - - /** - * Gets the amount of regained health - * - * @return The amount of health regained - */ - public double getAmount() { - return amount; - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public int _INVALID_getAmount() { - return NumberConversions.ceil(getAmount()); - } - - /** - * Sets the amount of regained health - * - * @param amount the amount of health the entity will regain - */ - public void setAmount(double amount) { - this.amount = amount; - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setAmount(int amount) { - setAmount(amount); - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - /** - * Gets the reason for why the entity is regaining health - * - * @return A RegainReason detailing the reason for the entity regaining - * health - */ - public RegainReason getRegainReason() { - return regainReason; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the type of health regaining that is occurring - */ - public enum RegainReason { - - /** - * When a player regains health from regenerating due to Peaceful mode - * (difficulty=0) - */ - REGEN, - /** - * When a player regains health from regenerating due to their hunger - * being satisfied - */ - SATIATED, - /** - * When a player regains health from eating consumables - */ - EATING, - /** - * When an ender dragon regains health from an ender crystal - */ - ENDER_CRYSTAL, - /** - * When a player is healed by a potion or spell - */ - MAGIC, - /** - * When a player is healed over time by a potion or spell - */ - MAGIC_REGEN, - /** - * When a wither is filling its health during spawning - */ - WITHER_SPAWN, - /** - * When an entity is damaged by the Wither potion effect - */ - WITHER, - /** - * Any other reason not covered by the reasons above - */ - CUSTOM - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityShootBowEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityShootBowEvent.java deleted file mode 100755 index f8c91a1..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityShootBowEvent.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Projectile; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a LivingEntity shoots a bow firing an arrow - */ -public class EntityShootBowEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final ItemStack bow; - private Entity projectile; - private final float force; - private boolean cancelled; - - public EntityShootBowEvent(final LivingEntity shooter, final ItemStack bow, final Projectile projectile, final float force) { - super(shooter); - this.bow = bow; - this.projectile = projectile; - this.force = force; - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } - - /** - * Gets the bow ItemStack used to fire the arrow. - * - * @return the bow involved in this event - */ - public ItemStack getBow() { - return bow; - } - - /** - * Gets the projectile which will be launched by this event - * - * @return the launched projectile - */ - public Entity getProjectile() { - return projectile; - } - - /** - * Replaces the projectile which will be launched - * - * @param projectile the new projectile - */ - public void setProjectile(Entity projectile) { - this.projectile = projectile; - } - - /** - * Gets the force the arrow was launched with - * - * @return bow shooting force, up to 1.0 - */ - public float getForce() { - return force; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityTameEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityTameEvent.java deleted file mode 100755 index f105817..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityTameEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.AnimalTamer; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a LivingEntity is tamed - */ -public class EntityTameEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final AnimalTamer owner; - - public EntityTameEvent(final LivingEntity entity, final AnimalTamer owner) { - super(entity); - this.owner = owner; - } - - @Override - public LivingEntity getEntity() { - return (LivingEntity) entity; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - /** - * Gets the owning AnimalTamer - * - * @return the owning AnimalTamer - */ - public AnimalTamer getOwner() { - return owner; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityTargetEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityTargetEvent.java deleted file mode 100755 index 1f7af4d..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityTargetEvent.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a creature targets or untargets another entity - */ -public class EntityTargetEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private Entity target; - private final TargetReason reason; - - public EntityTargetEvent(final Entity entity, final Entity target, final TargetReason reason) { - super(entity); - this.target = target; - this.reason = reason; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Returns the reason for the targeting - * - * @return The reason - */ - public TargetReason getReason() { - return reason; - } - - /** - * Get the entity that this is targeting. - *

          - * This will be null in the case that the event is called when the mob - * forgets its target. - * - * @return The entity - */ - public Entity getTarget() { - return target; - } - - /** - * Set the entity that you want the mob to target instead. - *

          - * It is possible to be null, null will cause the entity to be - * target-less. - *

          - * This is different from cancelling the event. Cancelling the event will - * cause the entity to keep an original target, while setting to be null - * will cause the entity to be reset. - * - * @param target The entity to target - */ - public void setTarget(Entity target) { - this.target = target; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the reason for the targeting - */ - public enum TargetReason { - - /** - * When the entity's target has died, and so it no longer targets it - */ - TARGET_DIED, - /** - * When the entity doesn't have a target, so it attacks the nearest - * player - */ - CLOSEST_PLAYER, - /** - * When the target attacks the entity, so entity targets it - */ - TARGET_ATTACKED_ENTITY, - /** - * When the target attacks a fellow pig zombie, so the whole group - * will target him with this reason. - */ - PIG_ZOMBIE_TARGET, - /** - * When the target is forgotten for whatever reason. - *

          - * Currently only occurs in with spiders when there is a high - * brightness. - */ - FORGOT_TARGET, - /** - * When the target attacks the owner of the entity, so the entity - * targets it. - */ - TARGET_ATTACKED_OWNER, - /** - * When the owner of the entity attacks the target attacks, so the - * entity targets it. - */ - OWNER_ATTACKED_TARGET, - /** - * When the entity has no target, so the entity randomly chooses one. - */ - RANDOM_TARGET, - /** - * When an entity selects a target while defending a village. - */ - DEFEND_VILLAGE, - /** - * When the target attacks a nearby entity of the same type, so the entity targets it - */ - TARGET_ATTACKED_NEARBY_ENTITY, - /** - * When a zombie targeting an entity summons reinforcements, so the reinforcements target the same entity - */ - REINFORCEMENT_TARGET, - /** - * When an entity targets another entity after colliding with it. - */ - COLLISION, - /** - * For custom calls to the event. - */ - CUSTOM - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java deleted file mode 100755 index cd9aea1..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; - -/** - * Called when an Entity targets a {@link LivingEntity} and can only target - * LivingEntity's. - */ -public class EntityTargetLivingEntityEvent extends EntityTargetEvent{ - public EntityTargetLivingEntityEvent(final Entity entity, final LivingEntity target, final TargetReason reason) { - super(entity, target, reason); - } - - public LivingEntity getTarget() { - return (LivingEntity) super.getTarget(); - } - - /** - * Set the Entity that you want the mob to target. - *

          - * It is possible to be null, null will cause the entity to be - * target-less. - *

          - * Must be a LivingEntity, or null. - * - * @param target The entity to target - */ - public void setTarget(Entity target) { - if (target == null || target instanceof LivingEntity) { - super.setTarget(target); - } - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityTeleportEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityTeleportEvent.java deleted file mode 100755 index 619f8d4..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityTeleportEvent.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a non-player entity (such as an Enderman) tries to teleport - * from one location to another. - */ -public class EntityTeleportEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private Location from; - private Location to; - - public EntityTeleportEvent(Entity what, Location from, Location to) { - super(what); - this.from = from; - this.to = to; - this.cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the location that this entity moved from - * - * @return Location this entity moved from - */ - public Location getFrom() { - return from; - } - - /** - * Sets the location that this entity moved from - * - * @param from New location this entity moved from - */ - public void setFrom(Location from) { - this.from = from; - } - - /** - * Gets the location that this entity moved to - * - * @return Location the entity moved to - */ - public Location getTo() { - return to; - } - - /** - * Sets the location that this entity moved to - * - * @param to New Location this entity moved to - */ - public void setTo(Location to) { - this.to = to; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/entity/EntityUnleashEvent.java b/LiveWeather/src/org/bukkit/event/entity/EntityUnleashEvent.java deleted file mode 100755 index da7e46c..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/EntityUnleashEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.event.HandlerList; - -/** - * Called immediately prior to an entity being unleashed. - */ -public class EntityUnleashEvent extends EntityEvent { - private static final HandlerList handlers = new HandlerList(); - private final UnleashReason reason; - - public EntityUnleashEvent(Entity entity, UnleashReason reason) { - super(entity); - this.reason = reason; - } - - /** - * Returns the reason for the unleashing. - * - * @return The reason - */ - public UnleashReason getReason() { - return reason; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public enum UnleashReason { - /** - * When the entity's leashholder has died or logged out, and so is - * unleashed - */ - HOLDER_GONE, - /** - * When the entity's leashholder attempts to unleash it - */ - PLAYER_UNLEASH, - /** - * When the entity's leashholder is more than 10 blocks away - */ - DISTANCE, - UNKNOWN; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ExpBottleEvent.java b/LiveWeather/src/org/bukkit/event/entity/ExpBottleEvent.java deleted file mode 100755 index 4f64424..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ExpBottleEvent.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.ThrownExpBottle; -import org.bukkit.event.HandlerList; - -/** - * Called when a ThrownExpBottle hits and releases experience. - */ -public class ExpBottleEvent extends ProjectileHitEvent { - private static final HandlerList handlers = new HandlerList(); - private int exp; - private boolean showEffect = true; - - public ExpBottleEvent(final ThrownExpBottle bottle, final int exp) { - super(bottle); - this.exp = exp; - } - - @Override - public ThrownExpBottle getEntity() { - return (ThrownExpBottle) entity; - } - - /** - * This method indicates if the particle effect should be shown. - * - * @return true if the effect will be shown, false otherwise - */ - public boolean getShowEffect() { - return this.showEffect; - } - - /** - * This method sets if the particle effect will be shown. - *

          - * This does not change the experience created. - * - * @param showEffect true indicates the effect will be shown, false - * indicates no effect will be shown - */ - public void setShowEffect(final boolean showEffect) { - this.showEffect = showEffect; - } - - /** - * This method retrieves the amount of experience to be created. - *

          - * The number indicates a total amount to be divided into orbs. - * - * @return the total amount of experience to be created - */ - public int getExperience() { - return exp; - } - - /** - * This method sets the amount of experience to be created. - *

          - * The number indicates a total amount to be divided into orbs. - * - * @param exp the total amount of experience to be created - */ - public void setExperience(final int exp) { - this.exp = exp; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ExplosionPrimeEvent.java b/LiveWeather/src/org/bukkit/event/entity/ExplosionPrimeEvent.java deleted file mode 100755 index 7ca6a55..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ExplosionPrimeEvent.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Explosive; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when an entity has made a decision to explode. - */ -public class ExplosionPrimeEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private float radius; - private boolean fire; - - public ExplosionPrimeEvent(final Entity what, final float radius, final boolean fire) { - super(what); - this.cancel = false; - this.radius = radius; - this.fire = fire; - } - - public ExplosionPrimeEvent(final Explosive explosive) { - this(explosive, explosive.getYield(), explosive.isIncendiary()); - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the radius of the explosion - * - * @return returns the radius of the explosion - */ - public float getRadius() { - return radius; - } - - /** - * Sets the radius of the explosion - * - * @param radius the radius of the explosion - */ - public void setRadius(float radius) { - this.radius = radius; - } - - /** - * Gets whether this explosion will create fire or not - * - * @return true if this explosion will create fire - */ - public boolean getFire() { - return fire; - } - - /** - * Sets whether this explosion will create fire or not - * - * @param fire true if you want this explosion to create fire - */ - public void setFire(boolean fire) { - this.fire = fire; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/FoodLevelChangeEvent.java b/LiveWeather/src/org/bukkit/event/entity/FoodLevelChangeEvent.java deleted file mode 100755 index f6e2472..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/FoodLevelChangeEvent.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a human entity's food level changes - */ -public class FoodLevelChangeEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private int level; - - public FoodLevelChangeEvent(final HumanEntity what, final int level) { - super(what); - this.level = level; - } - - @Override - public HumanEntity getEntity() { - return (HumanEntity) entity; - } - - /** - * Gets the resultant food level that the entity involved in this event - * should be set to. - *

          - * Where 20 is a full food bar and 0 is an empty one. - * - * @return The resultant food level - */ - public int getFoodLevel() { - return level; - } - - /** - * Sets the resultant food level that the entity involved in this event - * should be set to - * - * @param level the resultant food level that the entity involved in this - * event should be set to - */ - public void setFoodLevel(int level) { - if (level > 20) level = 20; - else if (level < 0) level = 0; - - this.level = level; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/HorseJumpEvent.java b/LiveWeather/src/org/bukkit/event/entity/HorseJumpEvent.java deleted file mode 100755 index fad2468..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/HorseJumpEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Horse; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a horse jumps. - */ -public class HorseJumpEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private float power; - - public HorseJumpEvent(final Horse horse, final float power) { - super(horse); - this.power = power; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public Horse getEntity() { - return (Horse) entity; - } - - /** - * Gets the power of the jump. - *

          - * Power is a value that defines how much of the horse's jump strength - * should be used for the jump. Power is effectively multiplied times - * the horse's jump strength to determine how high the jump is; 0 - * represents no jump strength while 1 represents full jump strength. - * Setting power to a value above 1 will use additional jump strength - * that the horse does not usually have. - *

          - * Power does not affect how high the horse is capable of jumping, only - * how much of its jumping capability will be used in this jump. To set - * the horse's overall jump strength, see {@link - * Horse#setJumpStrength(double)}. - * - * @return jump strength - */ - public float getPower() { - return power; - } - - /** - * Sets the power of the jump. - *

          - * Jump power can be set to a value above 1.0 which will increase the - * strength of this jump above the horse's actual jump strength. - *

          - * Setting the jump power to 0 will result in the jump animation still - * playing, but the horse not leaving the ground. Only canceling this - * event will result in no jump animation at all. - * - * @param power power of the jump - */ - public void setPower(float power) { - this.power = power; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ItemDespawnEvent.java b/LiveWeather/src/org/bukkit/event/entity/ItemDespawnEvent.java deleted file mode 100755 index 356e4bd..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ItemDespawnEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.Location; -import org.bukkit.entity.Item; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * This event is called when a {@link org.bukkit.entity.Item} is removed from - * the world because it has existed for 5 minutes. - *

          - * Cancelling the event results in the item being allowed to exist for 5 more - * minutes. This behavior is not guaranteed and may change in future versions. - */ -public class ItemDespawnEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final Location location; - - public ItemDespawnEvent(final Item despawnee, final Location loc) { - super(despawnee); - location = loc; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - @Override - public Item getEntity() { - return (Item) entity; - } - - /** - * Gets the location at which the item is despawning. - * - * @return The location at which the item is despawning - */ - public Location getLocation() { - return location; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ItemSpawnEvent.java b/LiveWeather/src/org/bukkit/event/entity/ItemSpawnEvent.java deleted file mode 100755 index bafd934..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ItemSpawnEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Item; -import org.bukkit.Location; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when an item is spawned into a world - */ -public class ItemSpawnEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Location location; - private boolean canceled; - - public ItemSpawnEvent(final Item spawnee, final Location loc) { - super(spawnee); - this.location = loc; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - @Override - public Item getEntity() { - return (Item) entity; - } - - /** - * Gets the location at which the item is spawning. - * - * @return The location at which the item is spawning - */ - public Location getLocation() { - return location; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/PigZapEvent.java b/LiveWeather/src/org/bukkit/event/entity/PigZapEvent.java deleted file mode 100755 index aa80ebf..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/PigZapEvent.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.LightningStrike; -import org.bukkit.entity.Pig; -import org.bukkit.entity.PigZombie; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Stores data for pigs being zapped - */ -public class PigZapEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final PigZombie pigzombie; - private final LightningStrike bolt; - - public PigZapEvent(final Pig pig, final LightningStrike bolt, final PigZombie pigzombie) { - super(pig); - this.bolt = bolt; - this.pigzombie = pigzombie; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - @Override - public Pig getEntity() { - return (Pig) entity; - } - - /** - * Gets the bolt which is striking the pig. - * - * @return lightning entity - */ - public LightningStrike getLightning() { - return bolt; - } - - /** - * Gets the zombie pig that will replace the pig, provided the event is - * not cancelled first. - * - * @return resulting entity - */ - public PigZombie getPigZombie() { - return pigzombie; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/PlayerDeathEvent.java b/LiveWeather/src/org/bukkit/event/entity/PlayerDeathEvent.java deleted file mode 100755 index b773d6e..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/PlayerDeathEvent.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.List; - -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -/** - * Thrown whenever a {@link Player} dies - */ -public class PlayerDeathEvent extends EntityDeathEvent { - private int newExp = 0; - private String deathMessage = ""; - private int newLevel = 0; - private int newTotalExp = 0; - private boolean keepLevel = false; - - public PlayerDeathEvent(final Player player, final List drops, final int droppedExp, final String deathMessage) { - this(player, drops, droppedExp, 0, deathMessage); - } - - public PlayerDeathEvent(final Player player, final List drops, final int droppedExp, final int newExp, final String deathMessage) { - this(player, drops, droppedExp, newExp, 0, 0, deathMessage); - } - - public PlayerDeathEvent(final Player player, final List drops, final int droppedExp, final int newExp, final int newTotalExp, final int newLevel, final String deathMessage) { - super(player, drops, droppedExp); - this.newExp = newExp; - this.newTotalExp = newTotalExp; - this.newLevel = newLevel; - this.deathMessage = deathMessage; - } - - @Override - public Player getEntity() { - return (Player) entity; - } - - /** - * Set the death message that will appear to everyone on the server. - * - * @param deathMessage Message to appear to other players on the server. - */ - public void setDeathMessage(String deathMessage) { - this.deathMessage = deathMessage; - } - - /** - * Get the death message that will appear to everyone on the server. - * - * @return Message to appear to other players on the server. - */ - public String getDeathMessage() { - return deathMessage; - } - - /** - * Gets how much EXP the Player should have at respawn. - *

          - * This does not indicate how much EXP should be dropped, please see - * {@link #getDroppedExp()} for that. - * - * @return New EXP of the respawned player - */ - public int getNewExp() { - return newExp; - } - - /** - * Sets how much EXP the Player should have at respawn. - *

          - * This does not indicate how much EXP should be dropped, please see - * {@link #setDroppedExp(int)} for that. - * - * @param exp New EXP of the respawned player - */ - public void setNewExp(int exp) { - newExp = exp; - } - - /** - * Gets the Level the Player should have at respawn. - * - * @return New Level of the respawned player - */ - public int getNewLevel() { - return newLevel; - } - - /** - * Sets the Level the Player should have at respawn. - * - * @param level New Level of the respawned player - */ - public void setNewLevel(int level) { - newLevel = level; - } - - /** - * Gets the Total EXP the Player should have at respawn. - * - * @return New Total EXP of the respawned player - */ - public int getNewTotalExp() { - return newTotalExp; - } - - /** - * Sets the Total EXP the Player should have at respawn. - * - * @param totalExp New Total EXP of the respawned player - */ - public void setNewTotalExp(int totalExp) { - newTotalExp = totalExp; - } - - /** - * Gets if the Player should keep all EXP at respawn. - *

          - * This flag overrides other EXP settings - * - * @return True if Player should keep all pre-death exp - */ - public boolean getKeepLevel() { - return keepLevel; - } - - /** - * Sets if the Player should keep all EXP at respawn. - *

          - * This overrides all other EXP settings - * - * @param keepLevel True to keep all current value levels - */ - public void setKeepLevel(boolean keepLevel) { - this.keepLevel = keepLevel; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/PlayerLeashEntityEvent.java b/LiveWeather/src/org/bukkit/event/entity/PlayerLeashEntityEvent.java deleted file mode 100755 index 74d458a..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/PlayerLeashEntityEvent.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * Called immediately prior to a creature being leashed by a player. - */ -public class PlayerLeashEntityEvent extends Event implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Entity leashHolder; - private final Entity entity; - private boolean cancelled = false; - private final Player player; - - public PlayerLeashEntityEvent(Entity what, Entity leashHolder, Player leasher) { - this.leashHolder = leashHolder; - this.entity = what; - this.player = leasher; - } - - /** - * Returns the entity that is holding the leash. - * - * @return The leash holder - */ - public Entity getLeashHolder() { - return leashHolder; - } - - /** - * Returns the entity being leashed. - * - * @return The entity - */ - public Entity getEntity() { - return entity; - } - - /** - * Returns the player involved in this event - * - * @return Player who is involved in this event - */ - public final Player getPlayer() { - return player; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public boolean isCancelled() { - return this.cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/PotionSplashEvent.java b/LiveWeather/src/org/bukkit/event/entity/PotionSplashEvent.java deleted file mode 100755 index b9840de..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/PotionSplashEvent.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bukkit.event.entity; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.ThrownPotion; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a splash potion hits an area - */ -public class PotionSplashEvent extends ProjectileHitEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Map affectedEntities; - - public PotionSplashEvent(final ThrownPotion potion, final Map affectedEntities) { - super(potion); - - this.affectedEntities = affectedEntities; - } - - @Override - public ThrownPotion getEntity() { - return (ThrownPotion) entity; - } - - /** - * Gets the potion which caused this event - * - * @return The thrown potion entity - */ - public ThrownPotion getPotion() { - return (ThrownPotion) getEntity(); - } - - /** - * Retrieves a list of all effected entities - * - * @return A fresh copy of the affected entity list - */ - public Collection getAffectedEntities() { - return new ArrayList(affectedEntities.keySet()); - } - - /** - * Gets the intensity of the potion's effects for given entity; This - * depends on the distance to the impact center - * - * @param entity Which entity to get intensity for - * @return intensity relative to maximum effect; 0.0: not affected; 1.0: - * fully hit by potion effects - */ - public double getIntensity(LivingEntity entity) { - Double intensity = affectedEntities.get(entity); - return intensity != null ? intensity : 0.0; - } - - /** - * Overwrites the intensity for a given entity - * - * @param entity For which entity to define a new intensity - * @param intensity relative to maximum effect - */ - public void setIntensity(LivingEntity entity, double intensity) { - Validate.notNull(entity, "You must specify a valid entity."); - if (intensity <= 0.0) { - affectedEntities.remove(entity); - } else { - affectedEntities.put(entity, Math.min(intensity, 1.0)); - } - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ProjectileHitEvent.java b/LiveWeather/src/org/bukkit/event/entity/ProjectileHitEvent.java deleted file mode 100755 index 25ae832..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ProjectileHitEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Projectile; -import org.bukkit.event.HandlerList; - -/** - * Called when a projectile hits an object - */ -public class ProjectileHitEvent extends EntityEvent { - private static final HandlerList handlers = new HandlerList(); - - public ProjectileHitEvent(final Projectile projectile) { - super(projectile); - } - - @Override - public Projectile getEntity() { - return (Projectile) entity; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - -} diff --git a/LiveWeather/src/org/bukkit/event/entity/ProjectileLaunchEvent.java b/LiveWeather/src/org/bukkit/event/entity/ProjectileLaunchEvent.java deleted file mode 100755 index 0c9190c..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/ProjectileLaunchEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Projectile; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a projectile is launched. - */ -public class ProjectileLaunchEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - - public ProjectileLaunchEvent(Entity what) { - super(what); - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public Projectile getEntity() { - return (Projectile) entity; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/entity/SheepDyeWoolEvent.java b/LiveWeather/src/org/bukkit/event/entity/SheepDyeWoolEvent.java deleted file mode 100755 index 4c17fea..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/SheepDyeWoolEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.DyeColor; -import org.bukkit.entity.Sheep; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a sheep's wool is dyed - */ -public class SheepDyeWoolEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private DyeColor color; - - public SheepDyeWoolEvent(final Sheep sheep, final DyeColor color) { - super(sheep); - this.cancel = false; - this.color = color; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public Sheep getEntity() { - return (Sheep) entity; - } - - /** - * Gets the DyeColor the sheep is being dyed - * - * @return the DyeColor the sheep is being dyed - */ - public DyeColor getColor() { - return color; - } - - /** - * Sets the DyeColor the sheep is being dyed - * - * @param color the DyeColor the sheep will be dyed - */ - public void setColor(DyeColor color) { - this.color = color; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - -} diff --git a/LiveWeather/src/org/bukkit/event/entity/SheepRegrowWoolEvent.java b/LiveWeather/src/org/bukkit/event/entity/SheepRegrowWoolEvent.java deleted file mode 100755 index e836f7b..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/SheepRegrowWoolEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Sheep; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a sheep regrows its wool - */ -public class SheepRegrowWoolEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - - public SheepRegrowWoolEvent(final Sheep sheep) { - super(sheep); - this.cancel = false; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public Sheep getEntity() { - return (Sheep) entity; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - -} diff --git a/LiveWeather/src/org/bukkit/event/entity/SlimeSplitEvent.java b/LiveWeather/src/org/bukkit/event/entity/SlimeSplitEvent.java deleted file mode 100755 index 4b99587..0000000 --- a/LiveWeather/src/org/bukkit/event/entity/SlimeSplitEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.event.entity; - -import org.bukkit.entity.Slime; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a Slime splits into smaller Slimes upon death - */ -public class SlimeSplitEvent extends EntityEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private int count; - - public SlimeSplitEvent(final Slime slime, final int count) { - super(slime); - this.count = count; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public Slime getEntity() { - return (Slime) entity; - } - - /** - * Gets the amount of smaller slimes to spawn - * - * @return the amount of slimes to spawn - */ - public int getCount() { - return count; - } - - /** - * Sets how many smaller slimes will spawn on the split - * - * @param count the amount of slimes to spawn - */ - public void setCount(int count) { - this.count = count; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/hanging/HangingBreakByEntityEvent.java b/LiveWeather/src/org/bukkit/event/hanging/HangingBreakByEntityEvent.java deleted file mode 100755 index 80851ed..0000000 --- a/LiveWeather/src/org/bukkit/event/hanging/HangingBreakByEntityEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.event.hanging; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Hanging; - -/** - * Triggered when a hanging entity is removed by an entity - */ -public class HangingBreakByEntityEvent extends HangingBreakEvent { - private final Entity remover; - - public HangingBreakByEntityEvent(final Hanging hanging, final Entity remover) { - super(hanging, HangingBreakEvent.RemoveCause.ENTITY); - this.remover = remover; - } - - /** - * Gets the entity that removed the hanging entity - * - * @return the entity that removed the hanging entity - */ - public Entity getRemover() { - return remover; - } -} diff --git a/LiveWeather/src/org/bukkit/event/hanging/HangingBreakEvent.java b/LiveWeather/src/org/bukkit/event/hanging/HangingBreakEvent.java deleted file mode 100755 index 87bbdcb..0000000 --- a/LiveWeather/src/org/bukkit/event/hanging/HangingBreakEvent.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bukkit.event.hanging; - -import org.bukkit.entity.Hanging; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Triggered when a hanging entity is removed - */ -public class HangingBreakEvent extends HangingEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final HangingBreakEvent.RemoveCause cause; - - public HangingBreakEvent(final Hanging hanging, final HangingBreakEvent.RemoveCause cause) { - super(hanging); - this.cause = cause; - } - - /** - * Gets the cause for the hanging entity's removal - * - * @return the RemoveCause for the hanging entity's removal - */ - public HangingBreakEvent.RemoveCause getCause() { - return cause; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * An enum to specify the cause of the removal - */ - public enum RemoveCause { - /** - * Removed by an entity - */ - ENTITY, - /** - * Removed by an explosion - */ - EXPLOSION, - /** - * Removed by placing a block on it - */ - OBSTRUCTION, - /** - * Removed by destroying the block behind it, etc - */ - PHYSICS, - /** - * Removed by an uncategorised cause - */ - DEFAULT, - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/hanging/HangingEvent.java b/LiveWeather/src/org/bukkit/event/hanging/HangingEvent.java deleted file mode 100755 index b370afe..0000000 --- a/LiveWeather/src/org/bukkit/event/hanging/HangingEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.hanging; - -import org.bukkit.entity.Hanging; -import org.bukkit.event.Event; - -/** - * Represents a hanging entity-related event. - */ -public abstract class HangingEvent extends Event { - protected Hanging hanging; - - protected HangingEvent(final Hanging painting) { - this.hanging = painting; - } - - /** - * Gets the hanging entity involved in this event. - * - * @return the hanging entity - */ - public Hanging getEntity() { - return hanging; - } -} diff --git a/LiveWeather/src/org/bukkit/event/hanging/HangingPlaceEvent.java b/LiveWeather/src/org/bukkit/event/hanging/HangingPlaceEvent.java deleted file mode 100755 index b511c55..0000000 --- a/LiveWeather/src/org/bukkit/event/hanging/HangingPlaceEvent.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.bukkit.event.hanging; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Hanging; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Triggered when a hanging entity is created in the world - */ -public class HangingPlaceEvent extends HangingEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Player player; - private final Block block; - private final BlockFace blockFace; - - public HangingPlaceEvent(final Hanging hanging, final Player player, final Block block, final BlockFace blockFace) { - super(hanging); - this.player = player; - this.block = block; - this.blockFace = blockFace; - } - - /** - * Returns the player placing the hanging entity - * - * @return the player placing the hanging entity - */ - public Player getPlayer() { - return player; - } - - /** - * Returns the block that the hanging entity was placed on - * - * @return the block that the hanging entity was placed on - */ - public Block getBlock() { - return block; - } - - /** - * Returns the face of the block that the hanging entity was placed on - * - * @return the face of the block that the hanging entity was placed on - */ - public BlockFace getBlockFace() { - return blockFace; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/BrewEvent.java b/LiveWeather/src/org/bukkit/event/inventory/BrewEvent.java deleted file mode 100755 index 2295c2d..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/BrewEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.event.block.BlockEvent; -import org.bukkit.inventory.BrewerInventory; - -/** - * Called when the brewing of the contents inside the Brewing Stand is - * complete. - */ -public class BrewEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private BrewerInventory contents; - private boolean cancelled; - - public BrewEvent(Block brewer, BrewerInventory contents) { - super(brewer); - this.contents = contents; - } - - /** - * Gets the contents of the Brewing Stand. - * - * @return the contents - */ - public BrewerInventory getContents() { - return contents; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/ClickType.java b/LiveWeather/src/org/bukkit/event/inventory/ClickType.java deleted file mode 100755 index a7440aa..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/ClickType.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.bukkit.event.inventory; - -/** - * What the client did to trigger this action (not the result). - */ -public enum ClickType { - - /** - * The left (or primary) mouse button. - */ - LEFT, - /** - * Holding shift while pressing the left mouse button. - */ - SHIFT_LEFT, - /** - * The right mouse button. - */ - RIGHT, - /** - * Holding shift while pressing the right mouse button. - */ - SHIFT_RIGHT, - /** - * Clicking the left mouse button on the grey area around the inventory. - */ - WINDOW_BORDER_LEFT, - /** - * Clicking the right mouse button on the grey area around the inventory. - */ - WINDOW_BORDER_RIGHT, - /** - * The middle mouse button, or a "scrollwheel click". - */ - MIDDLE, - /** - * One of the number keys 1-9, correspond to slots on the hotbar. - */ - NUMBER_KEY, - /** - * Pressing the left mouse button twice in quick succession. - */ - DOUBLE_CLICK, - /** - * The "Drop" key (defaults to Q). - */ - DROP, - /** - * Holding Ctrl while pressing the "Drop" key (defaults to Q). - */ - CONTROL_DROP, - /** - * Any action done with the Creative inventory open. - */ - CREATIVE, - /** - * A type of inventory manipulation not yet recognized by Bukkit. - *

          - * This is only for transitional purposes on a new Minecraft update, and - * should never be relied upon. - *

          - * Any ClickType.UNKNOWN is called on a best-effort basis. - */ - UNKNOWN, - ; - - /** - * Gets whether this ClickType represents the pressing of a key on a - * keyboard. - * - * @return true if this ClickType represents the pressing of a key - */ - public boolean isKeyboardClick() { - return (this == ClickType.NUMBER_KEY) || (this == ClickType.DROP) || (this == ClickType.CONTROL_DROP); - } - - /** - * Gets whether this ClickType represents an action that can only be - * performed by a Player in creative mode. - * - * @return true if this action requires Creative mode - */ - public boolean isCreativeAction() { - // Why use middle click? - return (this == ClickType.MIDDLE) || (this == ClickType.CREATIVE); - } - - /** - * Gets whether this ClickType represents a right click. - * - * @return true if this ClickType represents a right click - */ - public boolean isRightClick() { - return (this == ClickType.RIGHT) || (this == ClickType.SHIFT_RIGHT); - } - - /** - * Gets whether this ClickType represents a left click. - * - * @return true if this ClickType represents a left click - */ - public boolean isLeftClick() { - return (this == ClickType.LEFT) || (this == ClickType.SHIFT_LEFT) || (this == ClickType.DOUBLE_CLICK) || (this == ClickType.CREATIVE); - } - - /** - * Gets whether this ClickType indicates that the shift key was pressed - * down when the click was made. - * - * @return true if the action uses Shift. - */ - public boolean isShiftClick() { - return (this == ClickType.SHIFT_LEFT) || (this == ClickType.SHIFT_RIGHT) || (this == ClickType.CONTROL_DROP); - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/CraftItemEvent.java b/LiveWeather/src/org/bukkit/event/inventory/CraftItemEvent.java deleted file mode 100755 index ba3f5e5..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/CraftItemEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.event.inventory.InventoryType.SlotType; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.Recipe; - -/** - * Called when the recipe of an Item is completed inside a crafting matrix. - */ -public class CraftItemEvent extends InventoryClickEvent { - private Recipe recipe; - - @Deprecated - public CraftItemEvent(Recipe recipe, InventoryView what, SlotType type, int slot, boolean right, boolean shift) { - this(recipe, what, type, slot, right ? (shift ? ClickType.SHIFT_RIGHT : ClickType.RIGHT) : (shift ? ClickType.SHIFT_LEFT : ClickType.LEFT), InventoryAction.PICKUP_ALL); - } - - public CraftItemEvent(Recipe recipe, InventoryView what, SlotType type, int slot, ClickType click, InventoryAction action) { - super(what, type, slot, click, action); - this.recipe = recipe; - } - - public CraftItemEvent(Recipe recipe, InventoryView what, SlotType type, int slot, ClickType click, InventoryAction action, int key) { - super(what, type, slot, click, action, key); - this.recipe = recipe; - } - - /** - * @return A copy of the current recipe on the crafting matrix. - */ - public Recipe getRecipe() { - return recipe; - } - - @Override - public CraftingInventory getInventory() { - return (CraftingInventory) super.getInventory(); - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/DragType.java b/LiveWeather/src/org/bukkit/event/inventory/DragType.java deleted file mode 100755 index 72c2bed..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/DragType.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit.event.inventory; - -/** - * Represents the effect of a drag that will be applied to an Inventory in an - * InventoryDragEvent. - */ -public enum DragType { - /** - * One item from the cursor is placed in each selected slot. - */ - SINGLE, - /** - * The cursor is split evenly across all selected slots, not to exceed the - * Material's max stack size, with the remainder going to the cursor. - */ - EVEN, -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/FurnaceBurnEvent.java b/LiveWeather/src/org/bukkit/event/inventory/FurnaceBurnEvent.java deleted file mode 100755 index 8ca1ff7..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/FurnaceBurnEvent.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.event.block.BlockEvent; -import org.bukkit.inventory.ItemStack; - -/** - * Called when an ItemStack is successfully burned as fuel in a furnace. - */ -public class FurnaceBurnEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final ItemStack fuel; - private int burnTime; - private boolean cancelled; - private boolean burning; - - public FurnaceBurnEvent(final Block furnace, final ItemStack fuel, final int burnTime) { - super(furnace); - this.fuel = fuel; - this.burnTime = burnTime; - this.cancelled = false; - this.burning = true; - } - - /** - * Gets the block for the furnace involved in this event - * - * @return the block of the furnace - * @deprecated In favour of {@link #getBlock()}. - */ - @Deprecated - public Block getFurnace() { - return getBlock(); - } - - /** - * Gets the fuel ItemStack for this event - * - * @return the fuel ItemStack - */ - public ItemStack getFuel() { - return fuel; - } - - /** - * Gets the burn time for this fuel - * - * @return the burn time for this fuel - */ - public int getBurnTime() { - return burnTime; - } - - /** - * Sets the burn time for this fuel - * - * @param burnTime the burn time for this fuel - */ - public void setBurnTime(int burnTime) { - this.burnTime = burnTime; - } - - /** - * Gets whether the furnace's fuel is burning or not. - * - * @return whether the furnace's fuel is burning or not. - */ - public boolean isBurning() { - return this.burning; - } - - /** - * Sets whether the furnace's fuel is burning or not. - * - * @param burning true if the furnace's fuel is burning - */ - public void setBurning(boolean burning) { - this.burning = burning; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/FurnaceExtractEvent.java b/LiveWeather/src/org/bukkit/event/inventory/FurnaceExtractEvent.java deleted file mode 100755 index b7381fa..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/FurnaceExtractEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockExpEvent; - -/** - * This event is called when a player takes items out of the furnace - */ -public class FurnaceExtractEvent extends BlockExpEvent { - private final Player player; - private final Material itemType; - private final int itemAmount; - - public FurnaceExtractEvent(Player player, Block block, Material itemType, int itemAmount, int exp) { - super(block, exp); - this.player = player; - this.itemType = itemType; - this.itemAmount = itemAmount; - } - - /** - * Get the player that triggered the event - * - * @return the relevant player - */ - public Player getPlayer() { - return player; - } - - /** - * Get the Material of the item being retrieved - * - * @return the material of the item - */ - public Material getItemType() { - return itemType; - } - - /** - * Get the item count being retrieved - * - * @return the amount of the item - */ - public int getItemAmount() { - return itemAmount; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/FurnaceSmeltEvent.java b/LiveWeather/src/org/bukkit/event/inventory/FurnaceSmeltEvent.java deleted file mode 100755 index e9d1a54..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/FurnaceSmeltEvent.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.block.Block; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.event.block.BlockEvent; -import org.bukkit.inventory.ItemStack; - -/** - * Called when an ItemStack is successfully smelted in a furnace. - */ -public class FurnaceSmeltEvent extends BlockEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final ItemStack source; - private ItemStack result; - private boolean cancelled; - - public FurnaceSmeltEvent(final Block furnace, final ItemStack source, final ItemStack result) { - super(furnace); - this.source = source; - this.result = result; - this.cancelled = false; - } - - /** - * Gets the block for the furnace involved in this event - * - * @return the block of the furnace - * @deprecated In favour of {@link #getBlock()}. - */ - @Deprecated - public Block getFurnace() { - return getBlock(); - } - - /** - * Gets the smelted ItemStack for this event - * - * @return smelting source ItemStack - */ - public ItemStack getSource() { - return source; - } - - /** - * Gets the resultant ItemStack for this event - * - * @return smelting result ItemStack - */ - public ItemStack getResult() { - return result; - } - - /** - * Sets the resultant ItemStack for this event - * - * @param result new result ItemStack - */ - public void setResult(ItemStack result) { - this.result = result; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryAction.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryAction.java deleted file mode 100755 index a7bc694..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryAction.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bukkit.event.inventory; - -/** - * An estimation of what the result will be. - */ -public enum InventoryAction { - - /** - * Nothing will happen from the click. - *

          - * There may be cases where nothing will happen and this is value is not - * provided, but it is guaranteed that this value is accurate when given. - */ - NOTHING, - /** - * All of the items on the clicked slot are moved to the cursor. - */ - PICKUP_ALL, - /** - * Some of the items on the clicked slot are moved to the cursor. - */ - PICKUP_SOME, - /** - * Half of the items on the clicked slot are moved to the cursor. - */ - PICKUP_HALF, - /** - * One of the items on the clicked slot are moved to the cursor. - */ - PICKUP_ONE, - /** - * All of the items on the cursor are moved to the clicked slot. - */ - PLACE_ALL, - /** - * Some of the items from the cursor are moved to the clicked slot - * (usually up to the max stack size). - */ - PLACE_SOME, - /** - * A single item from the cursor is moved to the clicked slot. - */ - PLACE_ONE, - /** - * The clicked item and the cursor are exchanged. - */ - SWAP_WITH_CURSOR, - /** - * The entire cursor item is dropped. - */ - DROP_ALL_CURSOR, - /** - * One item is dropped from the cursor. - */ - DROP_ONE_CURSOR, - /** - * The entire clicked slot is dropped. - */ - DROP_ALL_SLOT, - /** - * One item is dropped from the clicked slot. - */ - DROP_ONE_SLOT, - /** - * The item is moved to the opposite inventory if a space is found. - */ - MOVE_TO_OTHER_INVENTORY, - /** - * The clicked item is moved to the hotbar, and the item currently there - * is re-added to the player's inventory. - */ - HOTBAR_MOVE_AND_READD, - /** - * The clicked slot and the picked hotbar slot are swapped. - */ - HOTBAR_SWAP, - /** - * A max-size stack of the clicked item is put on the cursor. - */ - CLONE_STACK, - /** - * The inventory is searched for the same material, and they are put on - * the cursor up to {@link org.bukkit.Material#getMaxStackSize()}. - */ - COLLECT_TO_CURSOR, - /** - * An unrecognized ClickType. - */ - UNKNOWN, - ; -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryClickEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryClickEvent.java deleted file mode 100755 index 0c8dbc9..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryClickEvent.java +++ /dev/null @@ -1,230 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.event.inventory.InventoryType.SlotType; -import org.bukkit.Location; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.plugin.Plugin; - -/** - * This event is called when a player clicks a slot in an inventory. - *

          - * Because InventoryClickEvent occurs within a modification of the Inventory, - * not all Inventory related methods are safe to use. - *

          - * The following should never be invoked by an EventHandler for - * InventoryClickEvent using the HumanEntity or InventoryView associated with - * this event: - *

            - *
          • {@link HumanEntity#closeInventory()} - *
          • {@link HumanEntity#openInventory(Inventory)} - *
          • {@link HumanEntity#openWorkbench(Location, boolean)} - *
          • {@link HumanEntity#openEnchanting(Location, boolean)} - *
          • {@link InventoryView#close()} - *
          - * To invoke one of these methods, schedule a task using - * {@link BukkitScheduler#runTask(Plugin, Runnable)}, which will run the task - * on the next tick. Also be aware that this is not an exhaustive list, and - * other methods could potentially create issues as well. - *

          - * Assuming the EntityHuman associated with this event is an instance of a - * Player, manipulating the MaxStackSize or contents of an Inventory will - * require an Invocation of {@link Player#updateInventory()}. - *

          - * Modifications to slots that are modified by the results of this - * InventoryClickEvent can be overwritten. To change these slots, this event - * should be cancelled and all desired changes to the inventory applied. - * Alternatively, scheduling a task using {@link BukkitScheduler#runTask( - * Plugin, Runnable)}, which would execute the task on the next tick, would - * work as well. - */ -public class InventoryClickEvent extends InventoryInteractEvent { - private static final HandlerList handlers = new HandlerList(); - private final ClickType click; - private final InventoryAction action; - private SlotType slot_type; - private int whichSlot; - private int rawSlot; - private ItemStack current = null; - private int hotbarKey = -1; - - @Deprecated - public InventoryClickEvent(InventoryView view, SlotType type, int slot, boolean right, boolean shift) { - this(view, type, slot, right ? (shift ? ClickType.SHIFT_RIGHT : ClickType.RIGHT) : (shift ? ClickType.SHIFT_LEFT : ClickType.LEFT), InventoryAction.SWAP_WITH_CURSOR); - } - - public InventoryClickEvent(InventoryView view, SlotType type, int slot, ClickType click, InventoryAction action) { - super(view); - this.slot_type = type; - this.rawSlot = slot; - this.whichSlot = view.convertSlot(slot); - this.click = click; - this.action = action; - } - - public InventoryClickEvent(InventoryView view, SlotType type, int slot, ClickType click, InventoryAction action, int key) { - this(view, type, slot, click, action); - this.hotbarKey = key; - } - - /** - * Gets the type of slot that was clicked. - * - * @return the slot type - */ - public SlotType getSlotType() { - return slot_type; - } - - /** - * Gets the current ItemStack on the cursor. - * - * @return the cursor ItemStack - */ - public ItemStack getCursor() { - return getView().getCursor(); - } - - /** - * Gets the ItemStack currently in the clicked slot. Returns air for empty - * slots and null for clicking outside the inventory. - * - * @return the item in the clicked slot - */ - public ItemStack getCurrentItem() { - if (slot_type == SlotType.OUTSIDE) { - return current; - } - return getView().getItem(rawSlot); - } - - /** - * Gets whether or not the ClickType for this event represents a right - * click. - * - * @return true if the ClickType uses the right mouse button. - * @see ClickType#isRightClick() - */ - public boolean isRightClick() { - return click.isRightClick(); - } - - /** - * Gets whether or not the ClickType for this event represents a left - * click. - * - * @return true if the ClickType uses the left mouse button. - * @see ClickType#isLeftClick() - */ - public boolean isLeftClick() { - return click.isLeftClick(); - } - - /** - * Gets whether the ClickType for this event indicates that the key was - * pressed down when the click was made. - * - * @return true if the ClickType uses Shift or Ctrl. - * @see ClickType#isShiftClick() - */ - public boolean isShiftClick() { - return click.isShiftClick(); - } - - /** - * Sets the item on the cursor. - * - * @param stack the new cursor item - * @deprecated This changes the ItemStack in their hand before any - * calculations are applied to the Inventory, which has a tendency to - * create inconsistencies between the Player and the server, and to - * make unexpected changes in the behavior of the clicked Inventory. - */ - @Deprecated - public void setCursor(ItemStack stack) { - getView().setCursor(stack); - } - - /** - * Sets the ItemStack currently in the clicked slot. - * - * @param stack the item to be placed in the current slot - */ - public void setCurrentItem(ItemStack stack) { - if (slot_type == SlotType.OUTSIDE) { - current = stack; - } else { - getView().setItem(rawSlot, stack); - } - } - - /** - * The slot number that was clicked, ready for passing to - * {@link Inventory#getItem(int)}. Note that there may be two slots with - * the same slot number, since a view links two different inventories. - * - * @return The slot number. - */ - public int getSlot() { - return whichSlot; - } - - /** - * The raw slot number clicked, ready for passing to {@link InventoryView - * #getItem(int)} This slot number is unique for the view. - * - * @return the slot number - */ - public int getRawSlot() { - return rawSlot; - } - - /** - * If the ClickType is NUMBER_KEY, this method will return the index of - * the pressed key (0-8). - * - * @return the number on the key minus 1 (range 0-8); or -1 if not - * a NUMBER_KEY action - */ - public int getHotbarButton() { - return hotbarKey; - } - - /** - * Gets the InventoryAction that triggered this event. - *

          - * This action cannot be changed, and represents what the normal outcome - * of the event will be. To change the behavior of this - * InventoryClickEvent, changes must be manually applied. - * - * @return the InventoryAction that triggered this event. - */ - public InventoryAction getAction() { - return action; - } - - /** - * Gets the ClickType for this event. - *

          - * This is insulated against changes to the inventory by other plugins. - * - * @return the type of inventory click - */ - public ClickType getClick() { - return click; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryCloseEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryCloseEvent.java deleted file mode 100755 index 19889b2..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryCloseEvent.java +++ /dev/null @@ -1,35 +0,0 @@ - -package org.bukkit.event.inventory; - -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.InventoryView; - -/** - * Represents a player related inventory event - */ -public class InventoryCloseEvent extends InventoryEvent { - private static final HandlerList handlers = new HandlerList(); - - public InventoryCloseEvent(InventoryView transaction) { - super(transaction); - } - - /** - * Returns the player involved in this event - * - * @return Player who is involved in this event - */ - public final HumanEntity getPlayer() { - return transaction.getPlayer(); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryCreativeEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryCreativeEvent.java deleted file mode 100755 index da7dffc..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryCreativeEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.event.inventory.InventoryType.SlotType; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -/** - * This event is called when a player in creative mode puts down or picks up - * an item in their inventory / hotbar and when they drop items from their - * Inventory while in creative mode. - */ -public class InventoryCreativeEvent extends InventoryClickEvent { - private ItemStack item; - - public InventoryCreativeEvent(InventoryView what, SlotType type, int slot, ItemStack newItem) { - super(what, type, slot, ClickType.CREATIVE, InventoryAction.PLACE_ALL); - this.item = newItem; - } - - public ItemStack getCursor() { - return item; - } - - public void setCursor(ItemStack item) { - this.item = item; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryDragEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryDragEvent.java deleted file mode 100755 index e7e54a7..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryDragEvent.java +++ /dev/null @@ -1,164 +0,0 @@ -package org.bukkit.event.inventory; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.Location; -import org.bukkit.entity.HumanEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.Plugin; -import org.bukkit.scheduler.BukkitScheduler; - -import com.google.common.collect.ImmutableSet; - -/** - * This event is called when the player drags an item in their cursor across - * the inventory. The ItemStack is distributed across the slots the - * HumanEntity dragged over. The method of distribution is described by the - * DragType returned by {@link #getType()}. - *

          - * Canceling this event will result in none of the changes described in - * {@link #getNewItems()} being applied to the Inventory. - *

          - * Because InventoryDragEvent occurs within a modification of the Inventory, - * not all Inventory related methods are safe to use. - *

          - * The following should never be invoked by an EventHandler for - * InventoryDragEvent using the HumanEntity or InventoryView associated with - * this event. - *

            - *
          • {@link HumanEntity#closeInventory()} - *
          • {@link HumanEntity#openInventory(Inventory)} - *
          • {@link HumanEntity#openWorkbench(Location, boolean)} - *
          • {@link HumanEntity#openEnchanting(Location, boolean)} - *
          • {@link InventoryView#close()} - *
          - * To invoke one of these methods, schedule a task using - * {@link BukkitScheduler#runTask(Plugin, Runnable)}, which will run the task - * on the next tick. Also be aware that this is not an exhaustive list, and - * other methods could potentially create issues as well. - *

          - * Assuming the EntityHuman associated with this event is an instance of a - * Player, manipulating the MaxStackSize or contents of an Inventory will - * require an Invocation of {@link Player#updateInventory()}. - *

          - * Any modifications to slots that are modified by the results of this - * InventoryDragEvent will be overwritten. To change these slots, this event - * should be cancelled and the changes applied. Alternatively, scheduling a - * task using {@link BukkitScheduler#runTask(Plugin, Runnable)}, which would - * execute the task on the next tick, would work as well. - */ -public class InventoryDragEvent extends InventoryInteractEvent { - private static final HandlerList handlers = new HandlerList(); - private final DragType type; - private final Map addedItems; - private final Set containerSlots; - private final ItemStack oldCursor; - private ItemStack newCursor; - - public InventoryDragEvent(InventoryView what, ItemStack newCursor, ItemStack oldCursor, boolean right, Map slots) { - super(what); - - Validate.notNull(oldCursor); - Validate.notNull(slots); - - type = right ? DragType.SINGLE : DragType.EVEN; - this.newCursor = newCursor; - this.oldCursor = oldCursor; - this.addedItems = slots; - ImmutableSet.Builder b = ImmutableSet.builder(); - for (Integer slot : slots.keySet()) { - b.add(what.convertSlot(slot)); - } - this.containerSlots = b.build(); - } - - /** - * Gets all items to be added to the inventory in this drag. - * - * @return map from raw slot id to new ItemStack - */ - public Map getNewItems() { - return Collections.unmodifiableMap(addedItems); - } - - /** - * Gets the raw slot ids to be changed in this drag. - * - * @return list of raw slot ids, suitable for getView().getItem(int) - */ - public Set getRawSlots() { - return addedItems.keySet(); - } - - /** - * Gets the slots to be changed in this drag. - * - * @return list of converted slot ids, suitable for {@link - * org.bukkit.inventory.Inventory#getItem(int)}. - */ - public Set getInventorySlots() { - return containerSlots; - } - - /** - * Gets the result cursor after the drag is done. The returned value is - * mutable. - * - * @return the result cursor - */ - public ItemStack getCursor() { - return newCursor; - } - - /** - * Sets the result cursor after the drag is done. - *

          - * Changing this item stack changes the cursor item. Note that changing - * the affected "dragged" slots does not change this ItemStack, nor does - * changing this ItemStack affect the "dragged" slots. - * - * @param newCursor the new cursor ItemStack - */ - public void setCursor(ItemStack newCursor) { - this.newCursor = newCursor; - } - - /** - * Gets an ItemStack representing the cursor prior to any modifications - * as a result of this drag. - * - * @return the original cursor - */ - public ItemStack getOldCursor() { - return oldCursor.clone(); - } - - /** - * Gets the DragType that describes the behavior of ItemStacks placed - * after this InventoryDragEvent. - *

          - * The ItemStacks and the raw slots that they're being applied to can be - * found using {@link #getNewItems()}. - * - * @return the DragType of this InventoryDragEvent - */ - public DragType getType() { - return type; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryEvent.java deleted file mode 100755 index 973c392..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryEvent.java +++ /dev/null @@ -1,59 +0,0 @@ - -package org.bukkit.event.inventory; - -import java.util.List; - -import org.bukkit.event.HandlerList; -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.Event; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryView; - -/** - * Represents a player related inventory event - */ -public class InventoryEvent extends Event { - private static final HandlerList handlers = new HandlerList(); - protected InventoryView transaction; - - public InventoryEvent(InventoryView transaction) { - this.transaction = transaction; - } - - /** - * Gets the primary Inventory involved in this transaction - * - * @return The upper inventory. - */ - public Inventory getInventory() { - return transaction.getTopInventory(); - } - - /** - * Gets the list of players viewing the primary (upper) inventory involved - * in this event - * - * @return A list of people viewing. - */ - public List getViewers() { - return transaction.getTopInventory().getViewers(); - } - - /** - * Gets the view object itself - * - * @return InventoryView - */ - public InventoryView getView() { - return transaction; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryInteractEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryInteractEvent.java deleted file mode 100755 index 8624f8d..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryInteractEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event.Result; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -/** - * An abstract base class for events that describe an interaction between a - * HumanEntity and the contents of an Inventory. - */ -public abstract class InventoryInteractEvent extends InventoryEvent implements Cancellable { - private Result result = Result.DEFAULT; - - public InventoryInteractEvent(InventoryView transaction) { - super(transaction); - } - - /** - * Gets the player who performed the click. - * - * @return The clicking player. - */ - public HumanEntity getWhoClicked() { - return getView().getPlayer(); - } - - /** - * Sets the result of this event. This will change whether or not this - * event is considered cancelled. - * - * @see #isCancelled() - * @param newResult the new {@link Result} for this event - */ - public void setResult(Result newResult) { - result = newResult; - } - - /** - * Gets the {@link Result} of this event. The Result describes the - * behavior that will be applied to the inventory in relation to this - * event. - * - * @return the Result of this event. - */ - public Result getResult() { - return result; - } - - /** - * Gets whether or not this event is cancelled. This is based off of the - * Result value returned by {@link #getResult()}. Result.ALLOW and - * Result.DEFAULT will result in a returned value of false, but - * Result.DENY will result in a returned value of true. - *

          - * {@inheritDoc} - * - * @return whether the event is cancelled - */ - public boolean isCancelled() { - return getResult() == Result.DENY; - } - - /** - * Proxy method to {@link #setResult(Event.Result)} for the Cancellable - * interface. {@link #setResult(Event.Result)} is preferred, as it allows - * you to specify the Result beyond Result.DENY and Result.ALLOW. - *

          - * {@inheritDoc} - * - * @param toCancel result becomes DENY if true, ALLOW if false - */ - public void setCancelled(boolean toCancel) { - setResult(toCancel ? Result.DENY : Result.ALLOW); - } - -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryMoveItemEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryMoveItemEvent.java deleted file mode 100755 index 06ec99a..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryMoveItemEvent.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bukkit.event.inventory; - -import org.apache.commons.lang.Validate; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -/** - * Called when some entity or block (e.g. hopper) tries to move items directly - * from one inventory to another. - *

          - * When this event is called, the initiator may already have removed the item - * from the source inventory and is ready to move it into the destination - * inventory. - *

          - * If this event is cancelled, the items will be returned to the source - * inventory, if needed. - *

          - * If this event is not cancelled, the initiator will try to put the ItemStack - * into the destination inventory. If this is not possible and the ItemStack - * has not been modified, the source inventory slot will be restored to its - * former state. Otherwise any additional items will be discarded. - */ -public class InventoryMoveItemEvent extends Event implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Inventory sourceInventory; - private final Inventory destinationInventory; - private ItemStack itemStack; - private final boolean didSourceInitiate; - - public InventoryMoveItemEvent(final Inventory sourceInventory, final ItemStack itemStack, final Inventory destinationInventory, final boolean didSourceInitiate) { - Validate.notNull(itemStack, "ItemStack cannot be null"); - this.sourceInventory = sourceInventory; - this.itemStack = itemStack; - this.destinationInventory = destinationInventory; - this.didSourceInitiate = didSourceInitiate; - } - - /** - * Gets the Inventory that the ItemStack is being taken from - * - * @return Inventory that the ItemStack is being taken from - */ - public Inventory getSource() { - return sourceInventory; - } - - /** - * Gets the ItemStack being moved; if modified, the original item will not - * be removed from the source inventory. - * - * @return ItemStack - */ - public ItemStack getItem() { - return itemStack.clone(); - } - - /** - * Sets the ItemStack being moved; if this is different from the original - * ItemStack, the original item will not be removed from the source - * inventory. - * - * @param itemStack The ItemStack - */ - public void setItem(ItemStack itemStack) { - Validate.notNull(itemStack, "ItemStack cannot be null. Cancel the event if you want nothing to be transferred."); - this.itemStack = itemStack.clone(); - } - - /** - * Gets the Inventory that the ItemStack is being put into - * - * @return Inventory that the ItemStack is being put into - */ - public Inventory getDestination() { - return destinationInventory; - } - - /** - * Gets the Inventory that initiated the transfer. This will always be - * either the destination or source Inventory. - * - * @return Inventory that initiated the transfer - */ - public Inventory getInitiator() { - return didSourceInitiate ? sourceInventory : destinationInventory; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryOpenEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryOpenEvent.java deleted file mode 100755 index c3570aa..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryOpenEvent.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.inventory.InventoryView; -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Represents a player related inventory event - */ -public class InventoryOpenEvent extends InventoryEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - - public InventoryOpenEvent(InventoryView transaction) { - super(transaction); - this.cancelled = false; - } - - /** - * Returns the player involved in this event - * - * @return Player who is involved in this event - */ - public final HumanEntity getPlayer() { - return transaction.getPlayer(); - } - - /** - * Gets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins. - *

          - * If an inventory open event is cancelled, the inventory screen will not - * show. - * - * @return true if this event is cancelled - */ - public boolean isCancelled() { - return cancelled; - } - - /** - * Sets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins. - *

          - * If an inventory open event is cancelled, the inventory screen will not - * show. - * - * @param cancel true if you wish to cancel this event - */ - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryPickupItemEvent.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryPickupItemEvent.java deleted file mode 100755 index af6ad5b..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryPickupItemEvent.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.entity.Item; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.Inventory; - -/** - * Called when a hopper or hopper minecart picks up a dropped item. - */ -public class InventoryPickupItemEvent extends Event implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Inventory inventory; - private final Item item; - - public InventoryPickupItemEvent(final Inventory inventory, final Item item) { - super(); - this.inventory = inventory; - this.item = item; - } - - /** - * Gets the Inventory that picked up the item - * - * @return Inventory - */ - public Inventory getInventory() { - return inventory; - } - - /** - * Gets the Item entity that was picked up - * - * @return Item - */ - public Item getItem() { - return item; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/InventoryType.java b/LiveWeather/src/org/bukkit/event/inventory/InventoryType.java deleted file mode 100755 index b83580a..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/InventoryType.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit.event.inventory; - -public enum InventoryType { - - /** - * A chest inventory, with 0, 9, 18, 27, 36, 45, or 54 slots of type - * CONTAINER. - */ - CHEST(27,"Chest"), - /** - * A dispenser inventory, with 9 slots of type CONTAINER. - */ - DISPENSER(9,"Dispenser"), - /** - * A dropper inventory, with 9 slots of type CONTAINER. - */ - DROPPER(9, "Dropper"), - /** - * A furnace inventory, with a RESULT slot, a CRAFTING slot, and a FUEL - * slot. - */ - FURNACE(3,"Furnace"), - /** - * A workbench inventory, with 9 CRAFTING slots and a RESULT slot. - */ - WORKBENCH(10,"Crafting"), - /** - * A player's crafting inventory, with 4 CRAFTING slots and a RESULT slot. - * Also implies that the 4 ARMOR slots are accessible. - */ - CRAFTING(5,"Crafting"), - /** - * An enchantment table inventory, with one CRAFTING slot and three - * enchanting buttons. - */ - ENCHANTING(1,"Enchanting"), - /** - * A brewing stand inventory, with one FUEL slot and three CRAFTING slots. - */ - BREWING(4,"Brewing"), - /** - * A player's inventory, with 9 QUICKBAR slots, 27 CONTAINER slots, and 4 - * ARMOR slots. The ARMOUR slots may not be visible to the player, though. - */ - PLAYER(36,"Player"), - /** - * The creative mode inventory, with only 9 QUICKBAR slots and nothing - * else. (The actual creative interface with the items is client-side and - * cannot be altered by the server.) - */ - CREATIVE(9,"Creative"), - /** - * The merchant inventory, with 2 TRADE-IN slots, and 1 RESULT slot. - */ - MERCHANT(3,"Villager"), - /** - * The ender chest inventory, with 27 slots. - */ - ENDER_CHEST(27,"Ender Chest"), - /** - * An anvil inventory, with 2 CRAFTING slots and 1 RESULT slot - */ - ANVIL(3, "Repairing"), - /** - * A beacon inventory, with 1 CRAFTING slot - */ - BEACON(1, "container.beacon"), - /** - * A hopper inventory, with 5 slots of type CONTAINER. - */ - HOPPER(5, "Item Hopper"), - ; - - private final int size; - private final String title; - - private InventoryType(int defaultSize, String defaultTitle) { - size = defaultSize; - title = defaultTitle; - } - - public int getDefaultSize() { - return size; - } - - public String getDefaultTitle() { - return title; - } - - public enum SlotType { - /** - * A result slot in a furnace or crafting inventory. - */ - RESULT, - /** - * A slot in the crafting matrix, or the input slot in a furnace - * inventory, the potion slot in the brewing stand, or the enchanting - * slot. - */ - CRAFTING, - /** - * An armour slot in the player's inventory. - */ - ARMOR, - /** - * A regular slot in the container or the player's inventory; anything - * not covered by the other enum values. - */ - CONTAINER, - /** - * A slot in the bottom row or quickbar. - */ - QUICKBAR, - /** - * A pseudo-slot representing the area outside the inventory window. - */ - OUTSIDE, - /** - * The fuel slot in a furnace inventory, or the ingredient slot in a - * brewing stand inventory. - */ - FUEL; - } -} diff --git a/LiveWeather/src/org/bukkit/event/inventory/PrepareItemCraftEvent.java b/LiveWeather/src/org/bukkit/event/inventory/PrepareItemCraftEvent.java deleted file mode 100755 index 5731190..0000000 --- a/LiveWeather/src/org/bukkit/event/inventory/PrepareItemCraftEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.event.inventory; - -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.Recipe; - -public class PrepareItemCraftEvent extends InventoryEvent { - private static final HandlerList handlers = new HandlerList(); - private boolean repair; - private CraftingInventory matrix; - - public PrepareItemCraftEvent(CraftingInventory what, InventoryView view, boolean isRepair) { - super(view); - this.matrix = what; - this.repair = isRepair; - } - - /** - * Get the recipe that has been formed. If this event was triggered by a - * tool repair, this will be a temporary shapeless recipe representing the - * repair. - * - * @return The recipe being crafted. - */ - public Recipe getRecipe() { - return matrix.getRecipe(); - } - - /** - * @return The crafting inventory on which the recipe was formed. - */ - @Override - public CraftingInventory getInventory() { - return matrix; - } - - /** - * Check if this event was triggered by a tool repair operation rather - * than a crafting recipe. - * - * @return True if this is a repair. - */ - public boolean isRepair() { - return repair; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/painting/PaintingBreakByEntityEvent.java b/LiveWeather/src/org/bukkit/event/painting/PaintingBreakByEntityEvent.java deleted file mode 100755 index 1dc4987..0000000 --- a/LiveWeather/src/org/bukkit/event/painting/PaintingBreakByEntityEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.event.painting; - -import org.bukkit.Warning; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Painting; - -/** - * Triggered when a painting is removed by an entity - * - * @deprecated Use {@link org.bukkit.event.hanging.HangingBreakByEntityEvent} - * instead. - */ -@Deprecated -@Warning(reason="This event has been replaced by HangingBreakByEntityEvent") -public class PaintingBreakByEntityEvent extends PaintingBreakEvent { - private final Entity remover; - - public PaintingBreakByEntityEvent(final Painting painting, final Entity remover) { - super(painting, RemoveCause.ENTITY); - this.remover = remover; - } - - /** - * Gets the entity that removed the painting - * - * @return the entity that removed the painting. - */ - public Entity getRemover() { - return remover; - } -} diff --git a/LiveWeather/src/org/bukkit/event/painting/PaintingBreakEvent.java b/LiveWeather/src/org/bukkit/event/painting/PaintingBreakEvent.java deleted file mode 100755 index 3e27c69..0000000 --- a/LiveWeather/src/org/bukkit/event/painting/PaintingBreakEvent.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bukkit.event.painting; - -import org.bukkit.Warning; -import org.bukkit.entity.Painting; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Triggered when a painting is removed - * - * @deprecated Use {@link org.bukkit.event.hanging.HangingBreakEvent} instead. - */ -@Deprecated -@Warning(reason="This event has been replaced by HangingBreakEvent") -public class PaintingBreakEvent extends PaintingEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final RemoveCause cause; - - public PaintingBreakEvent(final Painting painting, final RemoveCause cause) { - super(painting); - this.cause = cause; - } - - /** - * Gets the cause for the painting's removal - * - * @return the RemoveCause for the painting's removal - */ - public RemoveCause getCause() { - return cause; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * An enum to specify the cause of the removal - */ - public enum RemoveCause { - /** - * Removed by an entity - */ - ENTITY, - /** - * Removed by fire - */ - FIRE, - /** - * Removed by placing a block on it - */ - OBSTRUCTION, - /** - * Removed by water flowing over it - */ - WATER, - /** - * Removed by destroying the block behind it, etc - */ - PHYSICS, - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/painting/PaintingEvent.java b/LiveWeather/src/org/bukkit/event/painting/PaintingEvent.java deleted file mode 100755 index 3a51348..0000000 --- a/LiveWeather/src/org/bukkit/event/painting/PaintingEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.event.painting; - -import org.bukkit.Warning; -import org.bukkit.entity.Painting; -import org.bukkit.event.Event; - -/** - * Represents a painting-related event. - * - * @deprecated Use {@link org.bukkit.event.hanging.HangingEvent} instead. - */ -@Deprecated -@Warning(reason="This event has been replaced by HangingEvent") -public abstract class PaintingEvent extends Event { - protected Painting painting; - - protected PaintingEvent(final Painting painting) { - this.painting = painting; - } - - /** - * Gets the painting involved in this event. - * - * @return the painting - */ - public Painting getPainting() { - return painting; - } -} diff --git a/LiveWeather/src/org/bukkit/event/painting/PaintingPlaceEvent.java b/LiveWeather/src/org/bukkit/event/painting/PaintingPlaceEvent.java deleted file mode 100755 index 3250b29..0000000 --- a/LiveWeather/src/org/bukkit/event/painting/PaintingPlaceEvent.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bukkit.event.painting; - -import org.bukkit.Warning; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Painting; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Triggered when a painting is created in the world - * - * @deprecated Use {@link org.bukkit.event.hanging.HangingPlaceEvent} instead. - */ -@Deprecated -@Warning(reason="This event has been replaced by HangingPlaceEvent") -public class PaintingPlaceEvent extends PaintingEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Player player; - private final Block block; - private final BlockFace blockFace; - - public PaintingPlaceEvent(final Painting painting, final Player player, final Block block, final BlockFace blockFace) { - super(painting); - this.player = player; - this.block = block; - this.blockFace = blockFace; - } - - /** - * Returns the player placing the painting - * - * @return Entity returns the player placing the painting - */ - public Player getPlayer() { - return player; - } - - /** - * Returns the block that the painting was placed on - * - * @return Block returns the block painting placed on - */ - public Block getBlock() { - return block; - } - - /** - * Returns the face of the block that the painting was placed on - * - * @return BlockFace returns the face of the block the painting was placed - * on - */ - public BlockFace getBlockFace() { - return blockFace; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/AsyncPlayerChatEvent.java b/LiveWeather/src/org/bukkit/event/player/AsyncPlayerChatEvent.java deleted file mode 100755 index a796292..0000000 --- a/LiveWeather/src/org/bukkit/event/player/AsyncPlayerChatEvent.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.bukkit.event.player; - -import java.util.IllegalFormatException; -import java.util.Set; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * This event will sometimes fire synchronously, depending on how it was - * triggered. - *

          - * The constructor provides a boolean to indicate if the event was fired - * synchronously or asynchronously. When asynchronous, this event can be - * called from any thread, sans the main thread, and has limited access to the - * API. - *

          - * If a player is the direct cause of this event by an incoming packet, this - * event will be asynchronous. If a plugin triggers this event by compelling a - * player to chat, this event will be synchronous. - *

          - * Care should be taken to check {@link #isAsynchronous()} and treat the event - * appropriately. - */ -public class AsyncPlayerChatEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private String message; - private String format = "<%1$s> %2$s"; - private final Set recipients; - - /** - * - * @param async This changes the event to a synchronous state. - * @param who the chat sender - * @param message the message sent - * @param players the players to receive the message. This may be a lazy - * or unmodifiable collection. - */ - public AsyncPlayerChatEvent(final boolean async, final Player who, final String message, final Set players) { - super(who, async); - this.message = message; - recipients = players; - } - - /** - * Gets the message that the player is attempting to send. This message - * will be used with {@link #getFormat()}. - * - * @return Message the player is attempting to send - */ - public String getMessage() { - return message; - } - - /** - * Sets the message that the player will send. This message will be used - * with {@link #getFormat()}. - * - * @param message New message that the player will send - */ - public void setMessage(String message) { - this.message = message; - } - - /** - * Gets the format to use to display this chat message. - *

          - * When this event finishes execution, the first format parameter is the - * {@link Player#getDisplayName()} and the second parameter is {@link - * #getMessage()} - * - * @return {@link String#format(String, Object...)} compatible format - * string - */ - public String getFormat() { - return format; - } - - /** - * Sets the format to use to display this chat message. - *

          - * When this event finishes execution, the first format parameter is the - * {@link Player#getDisplayName()} and the second parameter is {@link - * #getMessage()} - * - * @param format {@link String#format(String, Object...)} compatible - * format string - * @throws IllegalFormatException if the underlying API throws the - * exception - * @throws NullPointerException if format is null - * @see String#format(String, Object...) - */ - public void setFormat(final String format) throws IllegalFormatException, NullPointerException { - // Oh for a better way to do this! - try { - String.format(format, player, message); - } catch (RuntimeException ex) { - ex.fillInStackTrace(); - throw ex; - } - - this.format = format; - } - - /** - * Gets a set of recipients that this chat message will be displayed to. - *

          - * The set returned is not guaranteed to be mutable and may auto-populate - * on access. Any listener accessing the returned set should be aware that - * it may reduce performance for a lazy set implementation. - *

          - * Listeners should be aware that modifying the list may throw {@link - * UnsupportedOperationException} if the event caller provides an - * unmodifiable set. - * - * @return All Players who will see this chat message - */ - public Set getRecipients() { - return recipients; - } - - public boolean isCancelled() { - return cancel ; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/LiveWeather/src/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java deleted file mode 100755 index 1d57188..0000000 --- a/LiveWeather/src/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java +++ /dev/null @@ -1,201 +0,0 @@ -package org.bukkit.event.player; - -import java.net.InetAddress; -import java.util.UUID; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * Stores details for players attempting to log in. - *

          - * This event is asynchronous, and not run using main thread. - */ -public class AsyncPlayerPreLoginEvent extends Event { - private static final HandlerList handlers = new HandlerList(); - private Result result; - private String message; - private final String name; - private final InetAddress ipAddress; - private final UUID uniqueId; - - @Deprecated - public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress) { - this(name, ipAddress, null); - } - - public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress, final UUID uniqueId) { - super(true); - this.result = Result.ALLOWED; - this.message = ""; - this.name = name; - this.ipAddress = ipAddress; - this.uniqueId = uniqueId; - } - - /** - * Gets the current result of the login, as an enum - * - * @return Current Result of the login - */ - public Result getLoginResult() { - return result; - } - - /** - * Gets the current result of the login, as an enum - * - * @return Current Result of the login - * @deprecated This method uses a deprecated enum from {@link - * PlayerPreLoginEvent} - * @see #getLoginResult() - */ - @Deprecated - public PlayerPreLoginEvent.Result getResult() { - return result == null ? null : result.old(); - } - - /** - * Sets the new result of the login, as an enum - * - * @param result New result to set - */ - public void setLoginResult(final Result result) { - this.result = result; - } - - /** - * Sets the new result of the login, as an enum - * - * @param result New result to set - * @deprecated This method uses a deprecated enum from {@link - * PlayerPreLoginEvent} - * @see #setLoginResult(Result) - */ - @Deprecated - public void setResult(final PlayerPreLoginEvent.Result result) { - this.result = result == null ? null : Result.valueOf(result.name()); - } - - /** - * Gets the current kick message that will be used if getResult() != - * Result.ALLOWED - * - * @return Current kick message - */ - public String getKickMessage() { - return message; - } - - /** - * Sets the kick message to display if getResult() != Result.ALLOWED - * - * @param message New kick message - */ - public void setKickMessage(final String message) { - this.message = message; - } - - /** - * Allows the player to log in - */ - public void allow() { - result = Result.ALLOWED; - message = ""; - } - - /** - * Disallows the player from logging in, with the given reason - * - * @param result New result for disallowing the player - * @param message Kick message to display to the user - */ - public void disallow(final Result result, final String message) { - this.result = result; - this.message = message; - } - - /** - * Disallows the player from logging in, with the given reason - * - * @param result New result for disallowing the player - * @param message Kick message to display to the user - * @deprecated This method uses a deprecated enum from {@link - * PlayerPreLoginEvent} - * @see #disallow(Result, String) - */ - @Deprecated - public void disallow(final PlayerPreLoginEvent.Result result, final String message) { - this.result = result == null ? null : Result.valueOf(result.name()); - this.message = message; - } - - /** - * Gets the player's name. - * - * @return the player's name - */ - public String getName() { - return name; - } - - /** - * Gets the player IP address. - * - * @return The IP address - */ - public InetAddress getAddress() { - return ipAddress; - } - - /** - * Gets the player's unique ID. - * - * @return The unique ID - */ - public UUID getUniqueId() { - return uniqueId; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * Basic kick reasons for communicating to plugins - */ - public enum Result { - - /** - * The player is allowed to log in - */ - ALLOWED, - /** - * The player is not allowed to log in, due to the server being full - */ - KICK_FULL, - /** - * The player is not allowed to log in, due to them being banned - */ - KICK_BANNED, - /** - * The player is not allowed to log in, due to them not being on the - * white list - */ - KICK_WHITELIST, - /** - * The player is not allowed to log in, for reasons undefined - */ - KICK_OTHER; - - @Deprecated - private PlayerPreLoginEvent.Result old() { - return PlayerPreLoginEvent.Result.valueOf(name()); - } - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerAchievementAwardedEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerAchievementAwardedEvent.java deleted file mode 100755 index e33fade..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerAchievementAwardedEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Achievement; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player earns an achievement. - */ -public class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Achievement achievement; - private boolean isCancelled = false; - - public PlayerAchievementAwardedEvent(Player player, Achievement achievement) { - super(player); - this.achievement = achievement; - } - - /** - * Gets the Achievement being awarded. - * - * @return the achievement being awarded - */ - public Achievement getAchievement() { - return achievement; - } - - public boolean isCancelled() { - return isCancelled; - } - - public void setCancelled(boolean cancel) { - this.isCancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerAnimationEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerAnimationEvent.java deleted file mode 100755 index cabe77d..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerAnimationEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Represents a player animation event - */ -public class PlayerAnimationEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final PlayerAnimationType animationType; - private boolean isCancelled = false; - - /** - * Construct a new PlayerAnimation event - * - * @param player The player instance - */ - public PlayerAnimationEvent(final Player player) { - super(player); - - // Only supported animation type for now: - animationType = PlayerAnimationType.ARM_SWING; - } - - /** - * Get the type of this animation event - * - * @return the animation type - */ - public PlayerAnimationType getAnimationType() { - return animationType; - } - - public boolean isCancelled() { - return this.isCancelled; - } - - public void setCancelled(boolean cancel) { - this.isCancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerAnimationType.java b/LiveWeather/src/org/bukkit/event/player/PlayerAnimationType.java deleted file mode 100755 index ea4bf26..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerAnimationType.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bukkit.event.player; - -/** - * Different types of player animations - */ -public enum PlayerAnimationType { - ARM_SWING -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerBedEnterEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerBedEnterEvent.java deleted file mode 100755 index 09f1a66..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerBedEnterEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * This event is fired when the player is almost about to enter the bed. - */ -public class PlayerBedEnterEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final Block bed; - - public PlayerBedEnterEvent(final Player who, final Block bed) { - super(who); - this.bed = bed; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Returns the bed block involved in this event. - * - * @return the bed block involved in this event - */ - public Block getBed() { - return bed; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerBedLeaveEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerBedLeaveEvent.java deleted file mode 100755 index 628ab0b..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerBedLeaveEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * This event is fired when the player is leaving a bed. - */ -public class PlayerBedLeaveEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final Block bed; - - public PlayerBedLeaveEvent(final Player who, final Block bed) { - super(who); - this.bed = bed; - } - - /** - * Returns the bed block involved in this event. - * - * @return the bed block involved in this event - */ - public Block getBed() { - return bed; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerBucketEmptyEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerBucketEmptyEvent.java deleted file mode 100755 index 8fb121a..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerBucketEmptyEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a player empties a bucket - */ -public class PlayerBucketEmptyEvent extends PlayerBucketEvent { - private static final HandlerList handlers = new HandlerList(); - - public PlayerBucketEmptyEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand) { - super(who, blockClicked, blockFace, bucket, itemInHand); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerBucketEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerBucketEvent.java deleted file mode 100755 index d32c55e..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerBucketEvent.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a player interacts with a Bucket - */ -public abstract class PlayerBucketEvent extends PlayerEvent implements Cancellable { - private ItemStack itemStack; - private boolean cancelled = false; - private final Block blockClicked; - private final BlockFace blockFace; - private final Material bucket; - - public PlayerBucketEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand) { - super(who); - this.blockClicked = blockClicked; - this.blockFace = blockFace; - this.itemStack = itemInHand; - this.bucket = bucket; - } - - /** - * Returns the bucket used in this event - * - * @return the used bucket - */ - public Material getBucket() { - return bucket; - } - - /** - * Get the resulting item in hand after the bucket event - * - * @return Itemstack hold in hand after the event. - */ - public ItemStack getItemStack() { - return itemStack; - } - - /** - * Set the item in hand after the event - * - * @param itemStack the new held itemstack after the bucket event. - */ - public void setItemStack(ItemStack itemStack) { - this.itemStack = itemStack; - } - - /** - * Return the block clicked - * - * @return the blicked block - */ - public Block getBlockClicked() { - return blockClicked; - } - - /** - * Get the face on the clicked block - * - * @return the clicked face - */ - public BlockFace getBlockFace() { - return blockFace; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerBucketFillEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerBucketFillEvent.java deleted file mode 100755 index 94e042a..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerBucketFillEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Called when a player fills a bucket - */ -public class PlayerBucketFillEvent extends PlayerBucketEvent { - private static final HandlerList handlers = new HandlerList(); - - public PlayerBucketFillEvent(final Player who, final Block blockClicked, final BlockFace blockFace, final Material bucket, final ItemStack itemInHand) { - super(who, blockClicked, blockFace, bucket, itemInHand); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerChangedWorldEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerChangedWorldEvent.java deleted file mode 100755 index 76c9c20..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerChangedWorldEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player switches to another world. - */ -public class PlayerChangedWorldEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final World from; - - public PlayerChangedWorldEvent(final Player player, final World from) { - super(player); - this.from = from; - } - - /** - * Gets the world the player is switching from. - * - * @return player's previous world - */ - public World getFrom() { - return from; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerChannelEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerChannelEvent.java deleted file mode 100755 index 054efbc..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerChannelEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * This event is called after a player registers or unregisters a new plugin - * channel. - */ -public abstract class PlayerChannelEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final String channel; - - public PlayerChannelEvent(final Player player, final String channel) { - super(player); - this.channel = channel; - } - - public final String getChannel() { - return channel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerChatEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerChatEvent.java deleted file mode 100755 index 1fb5cd7..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerChatEvent.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.bukkit.event.player; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.Warning; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Holds information for player chat and commands - * - * @deprecated This event will fire from the main thread and allows the use of - * all of the Bukkit API, unlike the {@link AsyncPlayerChatEvent}. - *

          - * Listening to this event forces chat to wait for the main thread which - * causes delays for chat. {@link AsyncPlayerChatEvent} is the encouraged - * alternative for thread safe implementations. - */ -@Deprecated -@Warning(reason="Listening to this event forces chat to wait for the main thread, delaying chat messages.") -public class PlayerChatEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private String message; - private String format; - private final Set recipients; - - public PlayerChatEvent(final Player player, final String message) { - super(player); - this.message = message; - this.format = "<%1$s> %2$s"; - this.recipients = new HashSet(player.getServer().getOnlinePlayers()); - } - - public PlayerChatEvent(final Player player, final String message, final String format, final Set recipients) { - super(player); - this.message = message; - this.format = format; - this.recipients = recipients; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the message that the player is attempting to send - * - * @return Message the player is attempting to send - */ - public String getMessage() { - return message; - } - - /** - * Sets the message that the player will send - * - * @param message New message that the player will send - */ - public void setMessage(String message) { - this.message = message; - } - - /** - * Sets the player that this message will display as, or command will be - * executed as - * - * @param player New player which this event will execute as - */ - public void setPlayer(final Player player) { - Validate.notNull(player, "Player cannot be null"); - this.player = player; - } - - /** - * Gets the format to use to display this chat message - * - * @return String.Format compatible format string - */ - public String getFormat() { - return format; - } - - /** - * Sets the format to use to display this chat message - * - * @param format String.Format compatible format string - */ - public void setFormat(final String format) { - // Oh for a better way to do this! - try { - String.format(format, player, message); - } catch (RuntimeException ex) { - ex.fillInStackTrace(); - throw ex; - } - - this.format = format; - } - - /** - * Gets a set of recipients that this chat message will be displayed to - * - * @return All Players who will see this chat message - */ - public Set getRecipients() { - return recipients; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerChatTabCompleteEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerChatTabCompleteEvent.java deleted file mode 100755 index 7241a9b..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerChatTabCompleteEvent.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.bukkit.event.player; - -import java.util.Collection; - -import org.apache.commons.lang.Validate; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player attempts to tab-complete a chat message. - */ -public class PlayerChatTabCompleteEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final String message; - private final String lastToken; - private final Collection completions; - - public PlayerChatTabCompleteEvent(final Player who, final String message, final Collection completions) { - super(who); - Validate.notNull(message, "Message cannot be null"); - Validate.notNull(completions, "Completions cannot be null"); - this.message = message; - int i = message.lastIndexOf(' '); - if (i < 0) { - this.lastToken = message; - } else { - this.lastToken = message.substring(i + 1); - } - this.completions = completions; - } - - /** - * Gets the chat message being tab-completed. - * - * @return the chat message - */ - public String getChatMessage() { - return message; - } - - /** - * Gets the last 'token' of the message being tab-completed. - *

          - * The token is the substring starting with the character after the last - * space in the message. - * - * @return The last token for the chat message - */ - public String getLastToken() { - return lastToken; - } - - /** - * This is the collection of completions for this event. - * - * @return the current completions - */ - public Collection getTabCompletions() { - return completions; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerCommandPreprocessEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerCommandPreprocessEvent.java deleted file mode 100755 index 1ec8173..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerCommandPreprocessEvent.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.bukkit.event.player; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * This event is called whenever a player runs a command (by placing a slash - * at the start of their message). It is called early in the command handling - * process, and modifications in this event (via {@link #setMessage(String)}) - * will be shown in the behavior. - *

          - * Many plugins will have no use for this event, and you should - * attempt to avoid using it if it is not necessary. - *

          - * Some examples of valid uses for this event are: - *

            - *
          • Logging executed commands to a separate file - *
          • Variable substitution. For example, replacing - * ${nearbyPlayer} with the name of the nearest other - * player, or simulating the @a and @p - * decorators used by Command Blocks in plugins that do not handle it. - *
          • Conditionally blocking commands belonging to other plugins. For - * example, blocking the use of the /home command in a - * combat arena. - *
          • Per-sender command aliases. For example, after a player runs the - * command /calias cr gamemode creative, the next time they - * run /cr, it gets replaced into - * /gamemode creative. (Global command aliases should be - * done by registering the alias.) - *
          - *

          - * Examples of incorrect uses are: - *

            - *
          • Using this event to run command logic - *
          - *

          - * If the event is cancelled, processing of the command will halt. - *

          - * The state of whether or not there is a slash (/) at the - * beginning of the message should be preserved. If a slash is added or - * removed, unexpected behavior may result. - */ -public class PlayerCommandPreprocessEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private String message; - private String format = "<%1$s> %2$s"; - private final Set recipients; - - public PlayerCommandPreprocessEvent(final Player player, final String message) { - super(player); - this.recipients = new HashSet(player.getServer().getOnlinePlayers()); - this.message = message; - } - - public PlayerCommandPreprocessEvent(final Player player, final String message, final Set recipients) { - super(player); - this.recipients = recipients; - this.message = message; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the command that the player is attempting to send. - *

          - * All commands begin with a special character; implementations do not - * consider the first character when executing the content. - * - * @return Message the player is attempting to send - */ - public String getMessage() { - return message; - } - - /** - * Sets the command that the player will send. - *

          - * All commands begin with a special character; implementations do not - * consider the first character when executing the content. - * - * @param command New message that the player will send - * @throws IllegalArgumentException if command is null or empty - */ - public void setMessage(String command) throws IllegalArgumentException { - Validate.notNull(command, "Command cannot be null"); - Validate.notEmpty(command, "Command cannot be empty"); - this.message = command; - } - - /** - * Sets the player that this command will be executed as. - * - * @param player New player which this event will execute as - * @throws IllegalArgumentException if the player provided is null - */ - public void setPlayer(final Player player) throws IllegalArgumentException { - Validate.notNull(player, "Player cannot be null"); - this.player = player; - } - - /** - * Gets the format to use to display this chat message - * - * @deprecated This method is provided for backward compatibility with no - * guarantee to the use of the format. - * @return String.Format compatible format string - */ - @Deprecated - public String getFormat() { - return format; - } - - /** - * Sets the format to use to display this chat message - * - * @deprecated This method is provided for backward compatibility with no - * guarantee to the effect of modifying the format. - * @param format String.Format compatible format string - */ - @Deprecated - public void setFormat(final String format) { - // Oh for a better way to do this! - try { - String.format(format, player, message); - } catch (RuntimeException ex) { - ex.fillInStackTrace(); - throw ex; - } - - this.format = format; - } - - /** - * Gets a set of recipients that this chat message will be displayed to. - *

          - * The set returned is not guaranteed to be mutable and may auto-populate - * on access. Any listener accessing the returned set should be aware that - * it may reduce performance for a lazy set implementation. Listeners - * should be aware that modifying the list may throw {@link - * UnsupportedOperationException} if the event caller provides an - * unmodifiable set. - * - * @deprecated This method is provided for backward compatibility with no - * guarantee to the effect of viewing or modifying the set. - * @return All Players who will see this chat message - */ - @Deprecated - public Set getRecipients() { - return recipients; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerDropItemEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerDropItemEvent.java deleted file mode 100755 index 5b41b65..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerDropItemEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a player drops an item from their inventory - */ -public class PlayerDropItemEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Item drop; - private boolean cancel = false; - - public PlayerDropItemEvent(final Player player, final Item drop) { - super(player); - this.drop = drop; - } - - /** - * Gets the ItemDrop created by the player - * - * @return ItemDrop created by the player - */ - public Item getItemDrop() { - return drop; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerEditBookEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerEditBookEvent.java deleted file mode 100755 index ea7ecef..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerEditBookEvent.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit.event.player; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.meta.BookMeta; - -/** - * Called when a player edits or signs a book and quill item. If the event is - * cancelled, no changes are made to the BookMeta - */ -public class PlayerEditBookEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - - private final BookMeta previousBookMeta; - private final int slot; - private BookMeta newBookMeta; - private boolean isSigning; - private boolean cancel; - - public PlayerEditBookEvent(Player who, int slot, BookMeta previousBookMeta, BookMeta newBookMeta, boolean isSigning) { - super(who); - - Validate.isTrue(slot >= 0 && slot <=8, "Slot must be in range 0-8 inclusive"); - Validate.notNull(previousBookMeta, "Previous book meta must not be null"); - Validate.notNull(newBookMeta, "New book meta must not be null"); - - Bukkit.getItemFactory().equals(previousBookMeta, newBookMeta); - - this.previousBookMeta = previousBookMeta; - this.newBookMeta = newBookMeta; - this.slot = slot; - this.isSigning = isSigning; - this.cancel = false; - } - - /** - * Gets the book meta currently on the book. - *

          - * Note: this is a copy of the book meta. You cannot use this object to - * change the existing book meta. - * - * @return the book meta currently on the book - */ - public BookMeta getPreviousBookMeta() { - return previousBookMeta.clone(); - } - - /** - * Gets the book meta that the player is attempting to add to the book. - *

          - * Note: this is a copy of the proposed new book meta. Use {@link - * #setNewBookMeta(BookMeta)} to change what will actually be added to the - * book. - * - * @return the book meta that the player is attempting to add - */ - public BookMeta getNewBookMeta() { - return newBookMeta.clone(); - } - - /** - * Gets the inventory slot number for the book item that triggered this - * event. - *

          - * This is a slot number on the player's hotbar in the range 0-8. - * - * @return the inventory slot number that the book item occupies - */ - public int getSlot() { - return slot; - } - - /** - * Sets the book meta that will actually be added to the book. - * - * @param newBookMeta new book meta - * @throws IllegalArgumentException if the new book meta is null - */ - public void setNewBookMeta(BookMeta newBookMeta) throws IllegalArgumentException { - Validate.notNull(newBookMeta, "New book meta must not be null"); - Bukkit.getItemFactory().equals(newBookMeta, null); - this.newBookMeta = newBookMeta.clone(); - } - - /** - * Gets whether or not the book is being signed. If a book is signed the - * Material changes from BOOK_AND_QUILL to WRITTEN_BOOK. - * - * @return true if the book is being signed - */ - public boolean isSigning() { - return isSigning; - } - - /** - * Sets whether or not the book is being signed. If a book is signed the - * Material changes from BOOK_AND_QUILL to WRITTEN_BOOK. - * - * @param signing whether or not the book is being signed. - */ - public void setSigning(boolean signing) { - isSigning = signing; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerEggThrowEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerEggThrowEvent.java deleted file mode 100755 index 896347e..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerEggThrowEvent.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.CreatureType; -import org.bukkit.entity.Egg; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player throws an egg and it might hatch - */ -public class PlayerEggThrowEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final Egg egg; - private boolean hatching; - private EntityType hatchType; - private byte numHatches; - - public PlayerEggThrowEvent(final Player player, final Egg egg, final boolean hatching, final byte numHatches, final EntityType hatchingType) { - super(player); - this.egg = egg; - this.hatching = hatching; - this.numHatches = numHatches; - this.hatchType = hatchingType; - } - - @Deprecated - public PlayerEggThrowEvent(Player player, Egg egg, boolean hatching, byte numHatches, CreatureType hatchingType) { - this(player, egg, hatching, numHatches, hatchingType.toEntityType()); - } - - /** - * Gets the egg involved in this event. - * - * @return the egg involved in this event - */ - public Egg getEgg() { - return egg; - } - - /** - * Gets whether the egg is hatching or not. Will be what the server - * would've done without interaction. - * - * @return boolean Whether the egg is going to hatch or not - */ - public boolean isHatching() { - return hatching; - } - - /** - * Sets whether the egg will hatch or not. - * - * @param hatching true if you want the egg to hatch, false if you want it - * not to - */ - public void setHatching(boolean hatching) { - this.hatching = hatching; - } - - /** - * Get the type of the mob being hatched (EntityType.CHICKEN by default) - * - * @return The type of the mob being hatched by the egg - * @deprecated In favour of {@link #getHatchingType()}. - */ - @Deprecated - public CreatureType getHatchType() { - return CreatureType.fromEntityType(hatchType); - } - - /** - * Get the type of the mob being hatched (EntityType.CHICKEN by default) - * - * @return The type of the mob being hatched by the egg - */ - public EntityType getHatchingType() { - return hatchType; - } - - /** - * Change the type of mob being hatched by the egg - * - * @param hatchType The type of the mob being hatched by the egg - * @deprecated In favour of {@link #setHatchingType(EntityType)}. - */ - @Deprecated - public void setHatchType(CreatureType hatchType) { - this.hatchType = hatchType.toEntityType(); - } - - /** - * Change the type of mob being hatched by the egg - * - * @param hatchType The type of the mob being hatched by the egg - */ - public void setHatchingType(EntityType hatchType) { - if(!hatchType.isSpawnable()) throw new IllegalArgumentException("Can't spawn that entity type from an egg!"); - this.hatchType = hatchType; - } - - /** - * Get the number of mob hatches from the egg. By default the number will - * be the number the server would've done - *

            - *
          • 7/8 chance of being 0 - *
          • 31/256 ~= 1/8 chance to be 1 - *
          • 1/256 chance to be 4 - *
          - * - * @return The number of mobs going to be hatched by the egg - */ - public byte getNumHatches() { - return numHatches; - } - - /** - * Change the number of mobs coming out of the hatched egg - *

          - * The boolean hatching will override this number. Ie. If hatching = - * false, this number will not matter - * - * @param numHatches The number of mobs coming out of the egg - */ - public void setNumHatches(byte numHatches) { - this.numHatches = numHatches; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerEvent.java deleted file mode 100755 index 0d4833f..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Event; - -/** - * Represents a player related event - */ -public abstract class PlayerEvent extends Event { - protected Player player; - - public PlayerEvent(final Player who) { - player = who; - } - - PlayerEvent(final Player who, boolean async) { - super(async); - player = who; - - } - - /** - * Returns the player involved in this event - * - * @return Player who is involved in this event - */ - public final Player getPlayer() { - return player; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerExpChangeEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerExpChangeEvent.java deleted file mode 100755 index f37491d..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerExpChangeEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a players experience changes naturally - */ -public class PlayerExpChangeEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private int exp; - - public PlayerExpChangeEvent(final Player player, final int expAmount) { - super(player); - exp = expAmount; - } - - /** - * Get the amount of experience the player will receive - * - * @return The amount of experience - */ - public int getAmount() { - return exp; - } - - /** - * Set the amount of experience the player will receive - * - * @param amount The amount of experience to set - */ - public void setAmount(int amount) { - exp = amount; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerFishEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerFishEvent.java deleted file mode 100755 index 5695208..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerFishEvent.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Fish; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.entity.Entity; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a player is fishing - */ -public class PlayerFishEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Entity entity; - private boolean cancel = false; - private int exp; - private final State state; - private final Fish hookEntity; - - /** - * @deprecated replaced by {@link #PlayerFishEvent(Player, Entity, Fish, - * State)} to include the {@link Fish} hook entity. - * @param player - * @param entity - * @param state - */ - @Deprecated - public PlayerFishEvent(final Player player, final Entity entity, final State state) { - this(player, entity, null, state); - } - - public PlayerFishEvent(final Player player, final Entity entity, final Fish hookEntity, final State state) { - super(player); - this.entity = entity; - this.hookEntity = hookEntity; - this.state = state; - } - - /** - * Gets the entity caught by the player. - *

          - * If player has fished successfully, the result may be cast to {@link - * Item}. - * - * @return Entity caught by the player, Entity if fishing, and null if - * bobber has gotten stuck in the ground or nothing has been caught - */ - public Entity getCaught() { - return entity; - } - - /** - * Gets the fishing hook. - * - * @return Fish the entity representing the fishing hook/bobber. - */ - public Fish getHook() { - return hookEntity; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the amount of experience received when fishing. - *

          - * Note: This value has no default effect unless the event state is {@link - * State#CAUGHT_FISH}. - * - * @return the amount of experience to drop - */ - public int getExpToDrop() { - return exp; - } - - /** - * Sets the amount of experience received when fishing. - *

          - * Note: This value has no default effect unless the event state is {@link - * State#CAUGHT_FISH}. - * - * @param amount the amount of experience to drop - */ - public void setExpToDrop(int amount) { - exp = amount; - } - - /** - * Gets the state of the fishing - * - * @return A State detailing the state of the fishing - */ - public State getState() { - return state; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the state of the fishing - */ - public enum State { - - /** - * When a player is fishing, ie casting the line out. - */ - FISHING, - /** - * When a player has successfully caught a fish and is reeling it in. - */ - CAUGHT_FISH, - /** - * When a player has successfully caught an entity - */ - CAUGHT_ENTITY, - /** - * When a bobber is stuck in the ground - */ - IN_GROUND, - /** - * When a player fails to catch anything while fishing usually due to - * poor aiming or timing - */ - FAILED_ATTEMPT, - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerGameModeChangeEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerGameModeChangeEvent.java deleted file mode 100755 index 8c9afa8..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerGameModeChangeEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when the GameMode of the player is changed. - */ -public class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final GameMode newGameMode; - - public PlayerGameModeChangeEvent(final Player player, final GameMode newGameMode) { - super(player); - this.newGameMode = newGameMode; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * Gets the GameMode the player is switched to. - * - * @return player's new GameMode - */ - public GameMode getNewGameMode() { - return newGameMode; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerInteractEntityEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerInteractEntityEvent.java deleted file mode 100755 index 935211d..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerInteractEntityEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Represents an event that is called when a player right clicks an entity. - */ -public class PlayerInteractEntityEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected Entity clickedEntity; - boolean cancelled = false; - - public PlayerInteractEntityEvent(final Player who, final Entity clickedEntity) { - super(who); - this.clickedEntity = clickedEntity; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - /** - * Gets the entity that was rightclicked by the player. - * - * @return entity right clicked by player - */ - public Entity getRightClicked() { - return this.clickedEntity; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerInteractEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerInteractEvent.java deleted file mode 100755 index 59567d9..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerInteractEvent.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.block.Action; - -/** - * Called when a player interacts with an object or air. - */ -public class PlayerInteractEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected ItemStack item; - protected Action action; - protected Block blockClicked; - protected BlockFace blockFace; - private Result useClickedBlock; - private Result useItemInHand; - - public PlayerInteractEvent(final Player who, final Action action, final ItemStack item, final Block clickedBlock, final BlockFace clickedFace) { - super(who); - this.action = action; - this.item = item; - this.blockClicked = clickedBlock; - this.blockFace = clickedFace; - - useItemInHand = Result.DEFAULT; - useClickedBlock = clickedBlock == null ? Result.DENY : Result.ALLOW; - } - - /** - * Returns the action type - * - * @return Action returns the type of interaction - */ - public Action getAction() { - return action; - } - - /** - * Gets the cancellation state of this event. Set to true if you want to - * prevent buckets from placing water and so forth - * - * @return boolean cancellation state - */ - public boolean isCancelled() { - return useInteractedBlock() == Result.DENY; - } - - /** - * Sets the cancellation state of this event. A canceled event will not be - * executed in the server, but will still pass to other plugins - *

          - * Canceling this event will prevent use of food (player won't lose the - * food item), prevent bows/snowballs/eggs from firing, etc. (player won't - * lose the ammo) - * - * @param cancel true if you wish to cancel this event - */ - public void setCancelled(boolean cancel) { - setUseInteractedBlock(cancel ? Result.DENY : useInteractedBlock() == Result.DENY ? Result.DEFAULT : useInteractedBlock()); - setUseItemInHand(cancel ? Result.DENY : useItemInHand() == Result.DENY ? Result.DEFAULT : useItemInHand()); - } - - /** - * Returns the item in hand represented by this event - * - * @return ItemStack the item used - */ - public ItemStack getItem() { - return this.item; - } - - /** - * Convenience method. Returns the material of the item represented by - * this event - * - * @return Material the material of the item used - */ - public Material getMaterial() { - if (!hasItem()) { - return Material.AIR; - } - - return item.getType(); - } - - /** - * Check if this event involved a block - * - * @return boolean true if it did - */ - public boolean hasBlock() { - return this.blockClicked != null; - } - - /** - * Check if this event involved an item - * - * @return boolean true if it did - */ - public boolean hasItem() { - return this.item != null; - } - - /** - * Convenience method to inform the user whether this was a block - * placement event. - * - * @return boolean true if the item in hand was a block - */ - public boolean isBlockInHand() { - if (!hasItem()) { - return false; - } - - return item.getType().isBlock(); - } - - /** - * Returns the clicked block - * - * @return Block returns the block clicked with this item. - */ - public Block getClickedBlock() { - return blockClicked; - } - - /** - * Returns the face of the block that was clicked - * - * @return BlockFace returns the face of the block that was clicked - */ - public BlockFace getBlockFace() { - return blockFace; - } - - /** - * This controls the action to take with the block (if any) that was - * clicked on. This event gets processed for all blocks, but most don't - * have a default action - * - * @return the action to take with the interacted block - */ - public Result useInteractedBlock() { - return useClickedBlock; - } - - /** - * @param useInteractedBlock the action to take with the interacted block - */ - public void setUseInteractedBlock(Result useInteractedBlock) { - this.useClickedBlock = useInteractedBlock; - } - - /** - * This controls the action to take with the item the player is holding. - * This includes both blocks and items (such as flint and steel or - * records). When this is set to default, it will be allowed if no action - * is taken on the interacted block. - * - * @return the action to take with the item in hand - */ - public Result useItemInHand() { - return useItemInHand; - } - - /** - * @param useItemInHand the action to take with the item in hand - */ - public void setUseItemInHand(Result useItemInHand) { - this.useItemInHand = useItemInHand; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerInventoryEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerInventoryEvent.java deleted file mode 100755 index 2ec69d7..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerInventoryEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryOpenEvent; -import org.bukkit.inventory.Inventory; - -/** - * Represents a player related inventory event; note that this event never - * actually did anything - * - * @deprecated Use {@link InventoryClickEvent} or {@link InventoryOpenEvent} - * instead, or one of the other inventory events in {@link - * org.bukkit.event.inventory}. - */ -@Deprecated -public class PlayerInventoryEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - protected Inventory inventory; - - public PlayerInventoryEvent(final Player player, final Inventory inventory) { - super(player); - this.inventory = inventory; - } - - /** - * Gets the Inventory involved in this event - * - * @return Inventory - */ - public Inventory getInventory() { - return inventory; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerItemBreakEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerItemBreakEvent.java deleted file mode 100755 index 176cd91..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerItemBreakEvent.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * Fired when a player's item breaks (such as a shovel or flint and steel). - *

          - * The item that's breaking will exist in the inventory with a stack size of - * 0. After the event, the item's durability will be reset to 0. - */ -public class PlayerItemBreakEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final ItemStack brokenItem; - - public PlayerItemBreakEvent(final Player player, final ItemStack brokenItem) { - super(player); - this.brokenItem = brokenItem; - } - - /** - * Gets the item that broke - * - * @return The broken item - */ - public ItemStack getBrokenItem() { - return brokenItem; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerItemConsumeEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerItemConsumeEvent.java deleted file mode 100755 index 8ab76b1..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerItemConsumeEvent.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.inventory.ItemStack; - -/** - * This event will fire when a player is finishing consuming an item (food, - * potion, milk bucket). - *
          - * If the ItemStack is modified the server will use the effects of the new - * item and not remove the original one from the player's inventory. - *
          - * If the event is cancelled the effect will not be applied and the item will - * not be removed from the player's inventory. - */ -public class PlayerItemConsumeEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean isCancelled = false; - private ItemStack item; - - /** - * @param player the player consuming - * @param item the ItemStack being consumed - */ - public PlayerItemConsumeEvent(final Player player, final ItemStack item) { - super(player); - - this.item = item; - } - - /** - * Gets the item that is being consumed. Modifying the returned item will - * have no effect, you must use {@link - * #setItem(org.bukkit.inventory.ItemStack)} instead. - * - * @return an ItemStack for the item being consumed - */ - public ItemStack getItem() { - return item.clone(); - } - - /** - * Set the item being consumed - * - * @param item the item being consumed - */ - public void setItem(ItemStack item) { - if (item == null) { - this.item = new ItemStack(Material.AIR); - } else { - this.item = item; - } - } - - public boolean isCancelled() { - return this.isCancelled; - } - - public void setCancelled(boolean cancel) { - this.isCancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerItemHeldEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerItemHeldEvent.java deleted file mode 100755 index f0d055a..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerItemHeldEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Fired when a player changes their currently held item - */ -public class PlayerItemHeldEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final int previous; - private final int current; - - public PlayerItemHeldEvent(final Player player, final int previous, final int current) { - super(player); - this.previous = previous; - this.current = current; - } - - /** - * Gets the previous held slot index - * - * @return Previous slot index - */ - public int getPreviousSlot() { - return previous; - } - - /** - * Gets the new held slot index - * - * @return New slot index - */ - public int getNewSlot() { - return current; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerJoinEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerJoinEvent.java deleted file mode 100755 index e7481f9..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerJoinEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player joins a server - */ -public class PlayerJoinEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private String joinMessage; - - public PlayerJoinEvent(final Player playerJoined, final String joinMessage) { - super(playerJoined); - this.joinMessage = joinMessage; - } - - /** - * Gets the join message to send to all online players - * - * @return string join message - */ - public String getJoinMessage() { - return joinMessage; - } - - /** - * Sets the join message to send to all online players - * - * @param joinMessage join message - */ - public void setJoinMessage(String joinMessage) { - this.joinMessage = joinMessage; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerKickEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerKickEvent.java deleted file mode 100755 index 2c31365..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerKickEvent.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player gets kicked from the server - */ -public class PlayerKickEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private String leaveMessage; - private String kickReason; - private Boolean cancel; - - public PlayerKickEvent(final Player playerKicked, final String kickReason, final String leaveMessage) { - super(playerKicked); - this.kickReason = kickReason; - this.leaveMessage = leaveMessage; - this.cancel = false; - } - - /** - * Gets the reason why the player is getting kicked - * - * @return string kick reason - */ - public String getReason() { - return kickReason; - } - - /** - * Gets the leave message sent to all online players - * - * @return string kick reason - */ - public String getLeaveMessage() { - return leaveMessage; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Sets the reason why the player is getting kicked - * - * @param kickReason kick reason - */ - public void setReason(String kickReason) { - this.kickReason = kickReason; - } - - /** - * Sets the leave message send to all online players - * - * @param leaveMessage leave message - */ - public void setLeaveMessage(String leaveMessage) { - this.leaveMessage = leaveMessage; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerLevelChangeEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerLevelChangeEvent.java deleted file mode 100755 index 730a776..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerLevelChangeEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a players level changes - */ -public class PlayerLevelChangeEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final int oldLevel; - private final int newLevel; - - public PlayerLevelChangeEvent(final Player player, final int oldLevel, final int newLevel) { - super(player); - this.oldLevel = oldLevel; - this.newLevel = newLevel; - } - - /** - * Gets the old level of the player - * - * @return The old level of the player - */ - public int getOldLevel() { - return oldLevel; - } - - /** - * Gets the new level of the player - * - * @return The new (current) level of the player - */ - public int getNewLevel() { - return newLevel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerLoginEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerLoginEvent.java deleted file mode 100755 index b74b7b8..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerLoginEvent.java +++ /dev/null @@ -1,188 +0,0 @@ -package org.bukkit.event.player; - -import java.net.InetAddress; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Stores details for players attempting to log in - */ -public class PlayerLoginEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private final InetAddress address; - private final String hostname; - private Result result = Result.ALLOWED; - private String message = ""; - - /** - * @deprecated Address should be provided in other constructor - */ - @Deprecated - public PlayerLoginEvent(final Player player) { - this(player, "", null); - } - - /** - * @deprecated Address should be provided in other constructor - */ - @Deprecated - public PlayerLoginEvent(final Player player, final String hostname) { - this(player, hostname, null); - } - - /** - * This constructor defaults message to an empty string, and result to - * ALLOWED - * - * @param player The {@link Player} for this event - * @param hostname The hostname that was used to connect to the server - * @param address The address the player used to connect, provided for - * timing issues - */ - public PlayerLoginEvent(final Player player, final String hostname, final InetAddress address) { - super(player); - this.hostname = hostname; - this.address = address; - } - - /** - * @deprecated Address and hostname should be provided in other - * constructor - */ - @Deprecated - public PlayerLoginEvent(final Player player, final Result result, final String message) { - this(player, "", null, result, message); - } - - /** - * This constructor pre-configures the event with a result and message - * - * @param player The {@link Player} for this event - * @param hostname The hostname that was used to connect to the server - * @param address The address the player used to connect, provided for - * timing issues - * @param result The result status for this event - * @param message The message to be displayed if result denies login - */ - public PlayerLoginEvent(final Player player, String hostname, final InetAddress address, final Result result, final String message) { - this(player, hostname, address); - this.result = result; - this.message = message; - } - - /** - * Gets the current result of the login, as an enum - * - * @return Current Result of the login - */ - public Result getResult() { - return result; - } - - /** - * Sets the new result of the login, as an enum - * - * @param result New result to set - */ - public void setResult(final Result result) { - this.result = result; - } - - /** - * Gets the current kick message that will be used if getResult() != - * Result.ALLOWED - * - * @return Current kick message - */ - public String getKickMessage() { - return message; - } - - /** - * Sets the kick message to display if getResult() != Result.ALLOWED - * - * @param message New kick message - */ - public void setKickMessage(final String message) { - this.message = message; - } - - /** - * Gets the hostname that the player used to connect to the server, or - * blank if unknown - * - * @return The hostname - */ - public String getHostname() { - return hostname; - } - - /** - * Allows the player to log in - */ - public void allow() { - result = Result.ALLOWED; - message = ""; - } - - /** - * Disallows the player from logging in, with the given reason - * - * @param result New result for disallowing the player - * @param message Kick message to display to the user - */ - public void disallow(final Result result, final String message) { - this.result = result; - this.message = message; - } - - /** - * Gets the {@link InetAddress} for the Player associated with this event. - * This method is provided as a workaround for player.getAddress() - * returning null during PlayerLoginEvent. - * - * @return The address for this player. For legacy compatibility, this may - * be null. - */ - public InetAddress getAddress() { - return address; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * Basic kick reasons for communicating to plugins - */ - public enum Result { - - /** - * The player is allowed to log in - */ - ALLOWED, - /** - * The player is not allowed to log in, due to the server being full - */ - KICK_FULL, - /** - * The player is not allowed to log in, due to them being banned - */ - KICK_BANNED, - /** - * The player is not allowed to log in, due to them not being on the - * white list - */ - KICK_WHITELIST, - /** - * The player is not allowed to log in, for reasons undefined - */ - KICK_OTHER - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerMoveEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerMoveEvent.java deleted file mode 100755 index fa3b340..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerMoveEvent.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Holds information for player movement events - */ -public class PlayerMoveEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private Location from; - private Location to; - - public PlayerMoveEvent(final Player player, final Location from, final Location to) { - super(player); - this.from = from; - this.to = to; - } - - /** - * Gets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins - *

          - * If a move or teleport event is cancelled, the player will be moved or - * teleported back to the Location as defined by getFrom(). This will not - * fire an event - * - * @return true if this event is cancelled - */ - public boolean isCancelled() { - return cancel; - } - - /** - * Sets the cancellation state of this event. A cancelled event will not - * be executed in the server, but will still pass to other plugins - *

          - * If a move or teleport event is cancelled, the player will be moved or - * teleported back to the Location as defined by getFrom(). This will not - * fire an event - * - * @param cancel true if you wish to cancel this event - */ - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the location this player moved from - * - * @return Location the player moved from - */ - public Location getFrom() { - return from; - } - - /** - * Sets the location to mark as where the player moved from - * - * @param from New location to mark as the players previous location - */ - public void setFrom(Location from) { - this.from = from; - } - - /** - * Gets the location this player moved to - * - * @return Location the player moved to - */ - public Location getTo() { - return to; - } - - /** - * Sets the location that this player will move to - * - * @param to New Location this player will move to - */ - public void setTo(Location to) { - this.to = to; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerPickupItemEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerPickupItemEvent.java deleted file mode 100755 index dfba816..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerPickupItemEvent.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Thrown when a player picks an item up from the ground - */ -public class PlayerPickupItemEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Item item; - private boolean cancel = false; - private final int remaining; - - public PlayerPickupItemEvent(final Player player, final Item item, final int remaining) { - super(player); - this.item = item; - this.remaining = remaining; - } - - /** - * Gets the Item picked up by the player. - * - * @return Item - */ - public Item getItem() { - return item; - } - - /** - * Gets the amount remaining on the ground, if any - * - * @return amount remaining on the ground - */ - public int getRemaining() { - return remaining; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerPortalEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerPortalEvent.java deleted file mode 100755 index 93752f7..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerPortalEvent.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Location; -import org.bukkit.TravelAgent; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player is about to teleport because it is in contact with a - * portal. - *

          - * For other entities see {@link org.bukkit.event.entity.EntityPortalEvent} - */ -public class PlayerPortalEvent extends PlayerTeleportEvent { - private static final HandlerList handlers = new HandlerList(); - protected boolean useTravelAgent = true; - protected TravelAgent travelAgent; - - public PlayerPortalEvent(final Player player, final Location from, final Location to, final TravelAgent pta) { - super(player, from, to); - this.travelAgent = pta; - } - - public PlayerPortalEvent(Player player, Location from, Location to, TravelAgent pta, TeleportCause cause) { - super(player, from, to, cause); - this.travelAgent = pta; - } - - /** - * Sets whether or not the Travel Agent will be used. - *

          - * If this is set to true, the TravelAgent will try to find a Portal at - * the {@link #getTo()} Location, and will try to create one if there is - * none. - *

          - * If this is set to false, the {@link #getPlayer()} will only be - * teleported to the {@link #getTo()} Location. - * - * @param useTravelAgent whether to use the Travel Agent - */ - public void useTravelAgent(boolean useTravelAgent) { - this.useTravelAgent = useTravelAgent; - } - - /** - * Gets whether or not the Travel Agent will be used. - *

          - * If this is set to true, the TravelAgent will try to find a Portal at - * the {@link #getTo()} Location, and will try to create one if there is - * none. - *

          - * If this is set to false, the {@link #getPlayer()}} will only be - * teleported to the {@link #getTo()} Location. - * - * @return whether to use the Travel Agent - */ - public boolean useTravelAgent() { - return useTravelAgent && travelAgent != null; - } - - /** - * Gets the Travel Agent used (or not) in this event. - * - * @return the Travel Agent used (or not) in this event - */ - public TravelAgent getPortalTravelAgent() { - return this.travelAgent; - } - - /** - * Sets the Travel Agent used (or not) in this event. - * - * @param travelAgent the Travel Agent used (or not) in this event - */ - public void setPortalTravelAgent(TravelAgent travelAgent) { - this.travelAgent = travelAgent; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerPreLoginEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerPreLoginEvent.java deleted file mode 100755 index e8553f0..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerPreLoginEvent.java +++ /dev/null @@ -1,159 +0,0 @@ -package org.bukkit.event.player; - -import java.net.InetAddress; -import java.util.UUID; - -import org.bukkit.Warning; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - * Stores details for players attempting to log in - * - * @deprecated This event causes synchronization from the login thread; {@link - * AsyncPlayerPreLoginEvent} is preferred to keep the secondary threads - * asynchronous. - */ -@Deprecated -@Warning(reason="This event causes a login thread to synchronize with the main thread") -public class PlayerPreLoginEvent extends Event { - private static final HandlerList handlers = new HandlerList(); - private Result result; - private String message; - private final String name; - private final InetAddress ipAddress; - private final UUID uniqueId; - - @Deprecated - public PlayerPreLoginEvent(final String name, final InetAddress ipAddress) { - this(name, ipAddress, null); - } - - public PlayerPreLoginEvent(final String name, final InetAddress ipAddress, final UUID uniqueId) { - this.result = Result.ALLOWED; - this.message = ""; - this.name = name; - this.ipAddress = ipAddress; - this.uniqueId = uniqueId; - } - - /** - * Gets the current result of the login, as an enum - * - * @return Current Result of the login - */ - public Result getResult() { - return result; - } - - /** - * Sets the new result of the login, as an enum - * - * @param result New result to set - */ - public void setResult(final Result result) { - this.result = result; - } - - /** - * Gets the current kick message that will be used if getResult() != - * Result.ALLOWED - * - * @return Current kick message - */ - public String getKickMessage() { - return message; - } - - /** - * Sets the kick message to display if getResult() != Result.ALLOWED - * - * @param message New kick message - */ - public void setKickMessage(final String message) { - this.message = message; - } - - /** - * Allows the player to log in - */ - public void allow() { - result = Result.ALLOWED; - message = ""; - } - - /** - * Disallows the player from logging in, with the given reason - * - * @param result New result for disallowing the player - * @param message Kick message to display to the user - */ - public void disallow(final Result result, final String message) { - this.result = result; - this.message = message; - } - - /** - * Gets the player's name. - * - * @return the player's name - */ - public String getName() { - return name; - } - - /** - * Gets the player IP address. - * - * @return The IP address - */ - public InetAddress getAddress() { - return ipAddress; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - /** - * Gets the player's unique ID. - * - * @return The unique ID - */ - public UUID getUniqueId() { - return uniqueId; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * Basic kick reasons for communicating to plugins - */ - public enum Result { - - /** - * The player is allowed to log in - */ - ALLOWED, - /** - * The player is not allowed to log in, due to the server being full - */ - KICK_FULL, - /** - * The player is not allowed to log in, due to them being banned - */ - KICK_BANNED, - /** - * The player is not allowed to log in, due to them not being on the - * white list - */ - KICK_WHITELIST, - /** - * The player is not allowed to log in, for reasons undefined - */ - KICK_OTHER - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerQuitEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerQuitEvent.java deleted file mode 100755 index 5c8dc1b..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerQuitEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player leaves a server - */ -public class PlayerQuitEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private String quitMessage; - - public PlayerQuitEvent(final Player who, final String quitMessage) { - super(who); - this.quitMessage = quitMessage; - } - - /** - * Gets the quit message to send to all online players - * - * @return string quit message - */ - public String getQuitMessage() { - return quitMessage; - } - - /** - * Sets the quit message to send to all online players - * - * @param quitMessage quit message - */ - public void setQuitMessage(String quitMessage) { - this.quitMessage = quitMessage; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerRegisterChannelEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerRegisterChannelEvent.java deleted file mode 100755 index 442ac7f..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerRegisterChannelEvent.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; - -/** - * This is called immediately after a player registers for a plugin channel. - */ -public class PlayerRegisterChannelEvent extends PlayerChannelEvent { - - public PlayerRegisterChannelEvent(final Player player, final String channel) { - super(player, channel); - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerRespawnEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerRespawnEvent.java deleted file mode 100755 index 35900dd..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerRespawnEvent.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.event.player; - -import org.apache.commons.lang.Validate; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Called when a player respawns. - */ -public class PlayerRespawnEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - private Location respawnLocation; - private final boolean isBedSpawn; - - public PlayerRespawnEvent(final Player respawnPlayer, final Location respawnLocation, final boolean isBedSpawn) { - super(respawnPlayer); - this.respawnLocation = respawnLocation; - this.isBedSpawn = isBedSpawn; - } - - /** - * Gets the current respawn location - * - * @return Location current respawn location - */ - public Location getRespawnLocation() { - return this.respawnLocation; - } - - /** - * Sets the new respawn location - * - * @param respawnLocation new location for the respawn - */ - public void setRespawnLocation(Location respawnLocation) { - Validate.notNull(respawnLocation, "Respawn location can not be null"); - Validate.notNull(respawnLocation.getWorld(), "Respawn world can not be null"); - - this.respawnLocation = respawnLocation; - } - - /** - * Gets whether the respawn location is the player's bed. - * - * @return true if the respawn location is the player's bed. - */ - public boolean isBedSpawn() { - return this.isBedSpawn; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerShearEntityEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerShearEntityEvent.java deleted file mode 100755 index 38afb3c..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerShearEntityEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player shears an entity - */ -public class PlayerShearEntityEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel; - private final Entity what; - - public PlayerShearEntityEvent(final Player who, final Entity what) { - super(who); - this.cancel = false; - this.what = what; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the entity the player is shearing - * - * @return the entity the player is shearing - */ - public Entity getEntity() { - return what; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerStatisticIncrementEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerStatisticIncrementEvent.java deleted file mode 100755 index 3b64d70..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerStatisticIncrementEvent.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Material; -import org.bukkit.Statistic; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player statistic is incremented. - *

          - * This event is not called for {@link org.bukkit.Statistic#PLAY_ONE_TICK} or - * movement based statistics. - * - */ -public class PlayerStatisticIncrementEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - protected final Statistic statistic; - private final int initialValue; - private final int newValue; - private boolean isCancelled = false; - private final EntityType entityType; - private final Material material; - - public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue) { - super (player); - this.statistic = statistic; - this.initialValue = initialValue; - this.newValue = newValue; - this.entityType = null; - this.material = null; - } - - public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue, EntityType entityType) { - super (player); - this.statistic = statistic; - this.initialValue = initialValue; - this.newValue = newValue; - this.entityType = entityType; - this.material = null; - } - - public PlayerStatisticIncrementEvent(Player player, Statistic statistic, int initialValue, int newValue, Material material) { - super (player); - this.statistic = statistic; - this.initialValue = initialValue; - this.newValue = newValue; - this.entityType = null; - this.material = material; - } - - /** - * Gets the statistic that is being incremented. - * - * @return the incremented statistic - */ - public Statistic getStatistic() { - return statistic; - } - - /** - * Gets the previous value of the statistic. - * - * @return the previous value of the statistic - */ - public int getPreviousValue() { - return initialValue; - } - - /** - * Gets the new value of the statistic. - * - * @return the new value of the statistic - */ - public int getNewValue() { - return newValue; - } - - /** - * Gets the EntityType if {@link #getStatistic() getStatistic()} is an - * entity statistic otherwise returns null. - * - * @return the EntityType of the statistic - */ - public EntityType getEntityType() { - return entityType; - } - - /** - * Gets the Material if {@link #getStatistic() getStatistic()} is a block - * or item statistic otherwise returns null. - * - * @return the Material of the statistic - */ - public Material getMaterial() { - return material; - } - - public boolean isCancelled() { - return isCancelled; - } - - public void setCancelled(boolean cancel) { - this.isCancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerTeleportEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerTeleportEvent.java deleted file mode 100755 index 7e2e128..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerTeleportEvent.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; - -/** - * Holds information for player teleport events - */ -public class PlayerTeleportEvent extends PlayerMoveEvent { - private static final HandlerList handlers = new HandlerList(); - private TeleportCause cause = TeleportCause.UNKNOWN; - - public PlayerTeleportEvent(final Player player, final Location from, final Location to) { - super(player, from, to); - } - - public PlayerTeleportEvent(final Player player, final Location from, final Location to, final TeleportCause cause) { - this(player, from, to); - - this.cause = cause; - } - - /** - * Gets the cause of this teleportation event - * - * @return Cause of the event - */ - public TeleportCause getCause() { - return cause; - } - - public enum TeleportCause { - /** - * Indicates the teleporation was caused by a player throwing an Ender - * Pearl - */ - ENDER_PEARL, - /** - * Indicates the teleportation was caused by a player executing a - * command - */ - COMMAND, - /** - * Indicates the teleportation was caused by a plugin - */ - PLUGIN, - /** - * Indicates the teleportation was caused by a player entering a - * Nether portal - */ - NETHER_PORTAL, - /** - * Indicates the teleportation was caused by a player entering an End - * portal - */ - END_PORTAL, - /** - * Indicates the teleportation was caused by an event not covered by - * this enum - */ - UNKNOWN; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerToggleFlightEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerToggleFlightEvent.java deleted file mode 100755 index 1c5ec37..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerToggleFlightEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player toggles their flying state - */ -public class PlayerToggleFlightEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final boolean isFlying; - private boolean cancel = false; - - public PlayerToggleFlightEvent(final Player player, final boolean isFlying) { - super(player); - this.isFlying = isFlying; - } - - /** - * Returns whether the player is trying to start or stop flying. - * - * @return flying state - */ - public boolean isFlying() { - return isFlying; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerToggleSneakEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerToggleSneakEvent.java deleted file mode 100755 index 667acad..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerToggleSneakEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player toggles their sneaking state - */ -public class PlayerToggleSneakEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final boolean isSneaking; - private boolean cancel = false; - - public PlayerToggleSneakEvent(final Player player, final boolean isSneaking) { - super(player); - this.isSneaking = isSneaking; - } - - /** - * Returns whether the player is now sneaking or not. - * - * @return sneaking state - */ - public boolean isSneaking() { - return isSneaking; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerToggleSprintEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerToggleSprintEvent.java deleted file mode 100755 index cf065e1..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerToggleSprintEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a player toggles their sprinting state - */ -public class PlayerToggleSprintEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final boolean isSprinting; - private boolean cancel = false; - - public PlayerToggleSprintEvent(final Player player, final boolean isSprinting) { - super(player); - this.isSprinting = isSprinting; - } - - /** - * Gets whether the player is now sprinting or not. - * - * @return sprinting state - */ - public boolean isSprinting() { - return isSprinting; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerUnleashEntityEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerUnleashEntityEvent.java deleted file mode 100755 index f6aebef..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerUnleashEntityEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.entity.EntityUnleashEvent; - -/** - * Called prior to an entity being unleashed due to a player's action. - */ -public class PlayerUnleashEntityEvent extends EntityUnleashEvent implements Cancellable { - private final Player player; - private boolean cancelled = false; - - public PlayerUnleashEntityEvent(Entity entity, Player player) { - super(entity, UnleashReason.PLAYER_UNLEASH); - this.player = player; - } - - /** - * Returns the player who is unleashing the entity. - * - * @return The player - */ - public Player getPlayer() { - return player; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerUnregisterChannelEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerUnregisterChannelEvent.java deleted file mode 100755 index 11c77e3..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerUnregisterChannelEvent.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; - -/** - * This is called immediately after a player unregisters for a plugin channel. - */ -public class PlayerUnregisterChannelEvent extends PlayerChannelEvent { - - public PlayerUnregisterChannelEvent(final Player player, final String channel) { - super(player, channel); - } -} diff --git a/LiveWeather/src/org/bukkit/event/player/PlayerVelocityEvent.java b/LiveWeather/src/org/bukkit/event/player/PlayerVelocityEvent.java deleted file mode 100755 index 69d2fce..0000000 --- a/LiveWeather/src/org/bukkit/event/player/PlayerVelocityEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bukkit.event.player; - -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.util.Vector; - -/** - * Called when the velocity of a player changes. - */ -public class PlayerVelocityEvent extends PlayerEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private Vector velocity; - - public PlayerVelocityEvent(final Player player, final Vector velocity) { - super(player); - this.velocity = velocity; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the velocity vector that will be sent to the player - * - * @return Vector the player will get - */ - public Vector getVelocity() { - return velocity; - } - - /** - * Sets the velocity vector that will be sent to the player - * - * @param velocity The velocity vector that will be sent to the player - */ - public void setVelocity(Vector velocity) { - this.velocity = velocity; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/MapInitializeEvent.java b/LiveWeather/src/org/bukkit/event/server/MapInitializeEvent.java deleted file mode 100755 index 8834489..0000000 --- a/LiveWeather/src/org/bukkit/event/server/MapInitializeEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.HandlerList; -import org.bukkit.map.MapView; - -/** - * Called when a map is initialized. - */ -public class MapInitializeEvent extends ServerEvent { - private static final HandlerList handlers = new HandlerList(); - private final MapView mapView; - - public MapInitializeEvent(final MapView mapView) { - this.mapView = mapView; - } - - /** - * Gets the map initialized in this event. - * - * @return Map for this event - */ - public MapView getMap() { - return mapView; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/PluginDisableEvent.java b/LiveWeather/src/org/bukkit/event/server/PluginDisableEvent.java deleted file mode 100755 index 932c4fd..0000000 --- a/LiveWeather/src/org/bukkit/event/server/PluginDisableEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.Plugin; - -/** - * Called when a plugin is disabled. - */ -public class PluginDisableEvent extends PluginEvent { - private static final HandlerList handlers = new HandlerList(); - - public PluginDisableEvent(final Plugin plugin) { - super(plugin); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/PluginEnableEvent.java b/LiveWeather/src/org/bukkit/event/server/PluginEnableEvent.java deleted file mode 100755 index 865316d..0000000 --- a/LiveWeather/src/org/bukkit/event/server/PluginEnableEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.Plugin; - -/** - * Called when a plugin is enabled. - */ -public class PluginEnableEvent extends PluginEvent { - private static final HandlerList handlers = new HandlerList(); - - public PluginEnableEvent(final Plugin plugin) { - super(plugin); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/PluginEvent.java b/LiveWeather/src/org/bukkit/event/server/PluginEvent.java deleted file mode 100755 index 1ad656d..0000000 --- a/LiveWeather/src/org/bukkit/event/server/PluginEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.plugin.Plugin; - -/** - * Used for plugin enable and disable events - */ -public abstract class PluginEvent extends ServerEvent { - private final Plugin plugin; - - public PluginEvent(final Plugin plugin) { - this.plugin = plugin; - } - - /** - * Gets the plugin involved in this event - * - * @return Plugin for this event - */ - public Plugin getPlugin() { - return plugin; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/RemoteServerCommandEvent.java b/LiveWeather/src/org/bukkit/event/server/RemoteServerCommandEvent.java deleted file mode 100755 index 2a49237..0000000 --- a/LiveWeather/src/org/bukkit/event/server/RemoteServerCommandEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.command.CommandSender; -import org.bukkit.event.HandlerList; - -/** - * This event is called when a command is recieved over RCON. See the javadocs - * of {@link ServerCommandEvent} for more information. - */ -public class RemoteServerCommandEvent extends ServerCommandEvent { - private static final HandlerList handlers = new HandlerList(); - - public RemoteServerCommandEvent(final CommandSender sender, final String command) { - super(sender, command); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/ServerCommandEvent.java b/LiveWeather/src/org/bukkit/event/server/ServerCommandEvent.java deleted file mode 100755 index 8a5972a..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServerCommandEvent.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.command.CommandSender; -import org.bukkit.event.HandlerList; - -/** - * This event is called when a command is run from the server console. It is - * called early in the command handling process, and modifications in this - * event (via {@link #setCommand(String)}) will be shown in the behavior. - *

          - * Many plugins will have no use for this event, and you should - * attempt to avoid using it if it is not necessary. - *

          - * Some examples of valid uses for this event are: - *

            - *
          • Logging executed commands to a separate file - *
          • Variable substitution. For example, replacing ${ip:Steve} - * with the connection IP of the player named Steve, or simulating the - * @a and @p decorators used by Command Blocks - * for plugins that do not handle it. - *
          • Conditionally blocking commands belonging to other plugins. - *
          • Per-sender command aliases. For example, after the console runs the - * command /calias cr gamemode creative, the next time they - * run /cr, it gets replaced into - * /gamemode creative. (Global command aliases should be - * done by registering the alias.) - *
          - *

          - * Examples of incorrect uses are: - *

            - *
          • Using this event to run command logic - *
          - *

          - * If the event is cancelled, processing of the command will halt. - *

          - * The state of whether or not there is a slash (/) at the - * beginning of the message should be preserved. If a slash is added or - * removed, unexpected behavior may result. - */ -public class ServerCommandEvent extends ServerEvent { - private static final HandlerList handlers = new HandlerList(); - private String command; - private final CommandSender sender; - - public ServerCommandEvent(final CommandSender sender, final String command) { - this.command = command; - this.sender = sender; - } - - /** - * Gets the command that the user is attempting to execute from the - * console - * - * @return Command the user is attempting to execute - */ - public String getCommand() { - return command; - } - - /** - * Sets the command that the server will execute - * - * @param message New message that the server will execute - */ - public void setCommand(String message) { - this.command = message; - } - - /** - * Get the command sender. - * - * @return The sender - */ - public CommandSender getSender() { - return sender; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/ServerEvent.java b/LiveWeather/src/org/bukkit/event/server/ServerEvent.java deleted file mode 100755 index eb00d6a..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServerEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.Event; - -/** - * Miscellaneous server events - */ -public abstract class ServerEvent extends Event { -} diff --git a/LiveWeather/src/org/bukkit/event/server/ServerListPingEvent.java b/LiveWeather/src/org/bukkit/event/server/ServerListPingEvent.java deleted file mode 100755 index c61afdf..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServerListPingEvent.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.bukkit.event.server; - -import java.net.InetAddress; -import java.util.Iterator; - -import org.apache.commons.lang.Validate; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.util.CachedServerIcon; - -/** - * Called when a server list ping is coming in. Displayed players can be - * checked and removed by {@link #iterator() iterating} over this event. - */ -public class ServerListPingEvent extends ServerEvent implements Iterable { - private static final int MAGIC_PLAYER_COUNT = Integer.MIN_VALUE; - private static final HandlerList handlers = new HandlerList(); - private final InetAddress address; - private String motd; - private final int numPlayers; - private int maxPlayers; - - public ServerListPingEvent(final InetAddress address, final String motd, final int numPlayers, final int maxPlayers) { - Validate.isTrue(numPlayers >= 0, "Cannot have negative number of players online", numPlayers); - this.address = address; - this.motd = motd; - this.numPlayers = numPlayers; - this.maxPlayers = maxPlayers; - } - - /** - * This constructor is intended for implementations that provide the - * {@link #iterator()} method, thus provided the {@link #getNumPlayers()} - * count. - */ - protected ServerListPingEvent(final InetAddress address, final String motd, final int maxPlayers) { - this.numPlayers = MAGIC_PLAYER_COUNT; - this.address = address; - this.motd = motd; - this.maxPlayers = maxPlayers; - } - - /** - * Get the address the ping is coming from. - * - * @return the address - */ - public InetAddress getAddress() { - return address; - } - - /** - * Get the message of the day message. - * - * @return the message of the day - */ - public String getMotd() { - return motd; - } - - /** - * Change the message of the day message. - * - * @param motd the message of the day - */ - public void setMotd(String motd) { - this.motd = motd; - } - - /** - * Get the number of players sent. - * - * @return the number of players - */ - public int getNumPlayers() { - int numPlayers = this.numPlayers; - if (numPlayers == MAGIC_PLAYER_COUNT) { - numPlayers = 0; - for (@SuppressWarnings("unused") final Player player : this) { - numPlayers++; - } - } - return numPlayers; - } - - /** - * Get the maximum number of players sent. - * - * @return the maximum number of players - */ - public int getMaxPlayers() { - return maxPlayers; - } - - /** - * Set the maximum number of players sent. - * - * @param maxPlayers the maximum number of player - */ - public void setMaxPlayers(int maxPlayers) { - this.maxPlayers = maxPlayers; - } - - /** - * Sets the server-icon sent to the client. - * - * @param icon the icon to send to the client - * @throws IllegalArgumentException if the {@link CachedServerIcon} is not - * created by the caller of this event; null may be accepted for some - * implementations - * @throws UnsupportedOperationException if the caller of this event does - * not support setting the server icon - */ - public void setServerIcon(CachedServerIcon icon) throws IllegalArgumentException, UnsupportedOperationException { - throw new UnsupportedOperationException(); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * {@inheritDoc} - *

          - * Calling the {@link Iterator#remove()} method will force that particular - * player to not be displayed on the player list, decrease the size - * returned by {@link #getNumPlayers()}, and will not be returned again by - * any new iterator. - * - * @throws UnsupportedOperationException if the caller of this event does - * not support removing players - */ - @Override - public Iterator iterator() throws UnsupportedOperationException { - throw new UnsupportedOperationException(); - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/ServiceEvent.java b/LiveWeather/src/org/bukkit/event/server/ServiceEvent.java deleted file mode 100755 index 69bf872..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServiceEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.plugin.RegisteredServiceProvider; - -/** - * An event relating to a registered service. This is called in a {@link - * org.bukkit.plugin.ServicesManager} - */ -public abstract class ServiceEvent extends ServerEvent { - private final RegisteredServiceProvider provider; - - public ServiceEvent(final RegisteredServiceProvider provider) { - this.provider = provider; - } - - public RegisteredServiceProvider getProvider() { - return provider; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/event/server/ServiceRegisterEvent.java b/LiveWeather/src/org/bukkit/event/server/ServiceRegisterEvent.java deleted file mode 100755 index 7dfadde..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServiceRegisterEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.RegisteredServiceProvider; - -/** - * This event is called when a service is registered. - *

          - * Warning: The order in which register and unregister events are called - * should not be relied upon. - */ -public class ServiceRegisterEvent extends ServiceEvent { - private static final HandlerList handlers = new HandlerList(); - - public ServiceRegisterEvent(RegisteredServiceProvider registeredProvider) { - super(registeredProvider); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/server/ServiceUnregisterEvent.java b/LiveWeather/src/org/bukkit/event/server/ServiceUnregisterEvent.java deleted file mode 100755 index db61d23..0000000 --- a/LiveWeather/src/org/bukkit/event/server/ServiceUnregisterEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bukkit.event.server; - -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.RegisteredServiceProvider; - -/** - * This event is called when a service is unregistered. - *

          - * Warning: The order in which register and unregister events are called - * should not be relied upon. - */ -public class ServiceUnregisterEvent extends ServiceEvent { - private static final HandlerList handlers = new HandlerList(); - - public ServiceUnregisterEvent(RegisteredServiceProvider serviceProvider) { - super(serviceProvider); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java deleted file mode 100755 index b643b57..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.block.Block; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.HandlerList; - -/** - * Raised when a vehicle collides with a block. - */ -public class VehicleBlockCollisionEvent extends VehicleCollisionEvent { - private static final HandlerList handlers = new HandlerList(); - private final Block block; - - public VehicleBlockCollisionEvent(final Vehicle vehicle, final Block block) { - super(vehicle); - this.block = block; - } - - /** - * Gets the block the vehicle collided with - * - * @return the block the vehicle collided with - */ - public Block getBlock() { - return block; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleCollisionEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleCollisionEvent.java deleted file mode 100755 index 9dd0579..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleCollisionEvent.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Vehicle; - -/** - * Raised when a vehicle collides. - */ -public abstract class VehicleCollisionEvent extends VehicleEvent { - public VehicleCollisionEvent(final Vehicle vehicle) { - super(vehicle); - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleCreateEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleCreateEvent.java deleted file mode 100755 index 22eda72..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleCreateEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Vehicle; -import org.bukkit.event.HandlerList; - -/** - * Raised when a vehicle is created. - */ -public class VehicleCreateEvent extends VehicleEvent { - private static final HandlerList handlers = new HandlerList(); - - public VehicleCreateEvent(final Vehicle vehicle) { - super(vehicle); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleDamageEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleDamageEvent.java deleted file mode 100755 index 304ee2c..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleDamageEvent.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; -import org.bukkit.util.NumberConversions; - -/** - * Raised when a vehicle receives damage. - */ -public class VehicleDamageEvent extends VehicleEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Entity attacker; - private double damage; - private boolean cancelled; - - @Deprecated - public VehicleDamageEvent(final Vehicle vehicle, final Entity attacker, final int damage) { - this(vehicle, attacker, (double) damage); - } - - public VehicleDamageEvent(final Vehicle vehicle, final Entity attacker, final double damage) { - super(vehicle); - this.attacker = attacker; - this.damage = damage; - } - - /** - * Gets the Entity that is attacking the vehicle - * - * @return the Entity that is attacking the vehicle - */ - public Entity getAttacker() { - return attacker; - } - - /** - * Gets the damage done to the vehicle - * - * @return the damage done to the vehicle - */ - public double getDamage() { - return damage; - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public int _INVALID_getDamage() { - return NumberConversions.ceil(getDamage()); - } - - /** - * Sets the damage done to the vehicle - * - * @param damage The damage - */ - public void setDamage(double damage) { - this.damage = damage; - } - - /** - * This method exists for legacy reasons to provide backwards - * compatibility. It will not exist at runtime and should not be used - * under any circumstances. - */ - @Deprecated - public void _INVALID_setDamage(int damage) { - setDamage(damage); - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleDestroyEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleDestroyEvent.java deleted file mode 100755 index f1176fd..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleDestroyEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Raised when a vehicle is destroyed, which could be caused by either a - * player or the environment. This is not raised if the boat is simply - * 'removed' due to other means. - */ -public class VehicleDestroyEvent extends VehicleEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Entity attacker; - private boolean cancelled; - - public VehicleDestroyEvent(final Vehicle vehicle, final Entity attacker) { - super(vehicle); - this.attacker = attacker; - } - - /** - * Gets the Entity that has destroyed the vehicle, potentially null - * - * @return the Entity that has destroyed the vehicle, potentially null - */ - public Entity getAttacker() { - return attacker; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEnterEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleEnterEvent.java deleted file mode 100755 index 85c9b21..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEnterEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Raised when an entity enters a vehicle. - */ -public class VehicleEnterEvent extends VehicleEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final Entity entered; - - public VehicleEnterEvent(final Vehicle vehicle, final Entity entered) { - super(vehicle); - this.entered = entered; - } - - /** - * Gets the Entity that entered the vehicle. - * - * @return the Entity that entered the vehicle - */ - public Entity getEntered() { - return entered; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java deleted file mode 100755 index 4d4d0e2..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Raised when a vehicle collides with an entity. - */ -public class VehicleEntityCollisionEvent extends VehicleCollisionEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private final Entity entity; - private boolean cancelled = false; - private boolean cancelledPickup = false; - private boolean cancelledCollision = false; - - public VehicleEntityCollisionEvent(final Vehicle vehicle, final Entity entity) { - super(vehicle); - this.entity = entity; - } - - public Entity getEntity() { - return entity; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - public boolean isPickupCancelled() { - return cancelledPickup; - } - - public void setPickupCancelled(boolean cancel) { - cancelledPickup = cancel; - } - - public boolean isCollisionCancelled() { - return cancelledCollision; - } - - public void setCollisionCancelled(boolean cancel) { - cancelledCollision = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleEvent.java deleted file mode 100755 index b8255c0..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Event; - -/** - * Represents a vehicle-related event. - */ -public abstract class VehicleEvent extends Event { - protected Vehicle vehicle; - - public VehicleEvent(final Vehicle vehicle) { - this.vehicle = vehicle; - } - - /** - * Get the vehicle. - * - * @return the vehicle - */ - public final Vehicle getVehicle() { - return vehicle; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleExitEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleExitEvent.java deleted file mode 100755 index 364451b..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleExitEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Raised when a living entity exits a vehicle. - */ -public class VehicleExitEvent extends VehicleEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled; - private final LivingEntity exited; - - public VehicleExitEvent(final Vehicle vehicle, final LivingEntity exited) { - super(vehicle); - this.exited = exited; - } - - /** - * Get the living entity that exited the vehicle. - * - * @return The entity. - */ - public LivingEntity getExited() { - return exited; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleMoveEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleMoveEvent.java deleted file mode 100755 index 9a13e29..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleMoveEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.Location; -import org.bukkit.entity.Vehicle; -import org.bukkit.event.HandlerList; - -/** - * Raised when a vehicle moves. - */ -public class VehicleMoveEvent extends VehicleEvent { - private static final HandlerList handlers = new HandlerList(); - private final Location from; - private final Location to; - - public VehicleMoveEvent(final Vehicle vehicle, final Location from, final Location to) { - super(vehicle); - - this.from = from; - this.to = to; - } - - /** - * Get the previous position. - * - * @return Old position. - */ - public Location getFrom() { - return from; - } - - /** - * Get the next position. - * - * @return New position. - */ - public Location getTo() { - return to; - } - - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/vehicle/VehicleUpdateEvent.java b/LiveWeather/src/org/bukkit/event/vehicle/VehicleUpdateEvent.java deleted file mode 100755 index eebfdb1..0000000 --- a/LiveWeather/src/org/bukkit/event/vehicle/VehicleUpdateEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.vehicle; - -import org.bukkit.entity.Vehicle; -import org.bukkit.event.HandlerList; - -/** - * Called when a vehicle updates - */ -public class VehicleUpdateEvent extends VehicleEvent { - private static final HandlerList handlers = new HandlerList(); - - public VehicleUpdateEvent(final Vehicle vehicle) { - super(vehicle); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/weather/LightningStrikeEvent.java b/LiveWeather/src/org/bukkit/event/weather/LightningStrikeEvent.java deleted file mode 100755 index 66fd763..0000000 --- a/LiveWeather/src/org/bukkit/event/weather/LightningStrikeEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.event.weather; - -import org.bukkit.World; -import org.bukkit.entity.LightningStrike; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Stores data for lightning striking - */ -public class LightningStrikeEvent extends WeatherEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final LightningStrike bolt; - - public LightningStrikeEvent(final World world, final LightningStrike bolt) { - super(world); - this.bolt = bolt; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - /** - * Gets the bolt which is striking the earth. - * - * @return lightning entity - */ - public LightningStrike getLightning() { - return bolt; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/weather/ThunderChangeEvent.java b/LiveWeather/src/org/bukkit/event/weather/ThunderChangeEvent.java deleted file mode 100755 index 5e3716e..0000000 --- a/LiveWeather/src/org/bukkit/event/weather/ThunderChangeEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.weather; - -import org.bukkit.World; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Stores data for thunder state changing in a world - */ -public class ThunderChangeEvent extends WeatherEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final boolean to; - - public ThunderChangeEvent(final World world, final boolean to) { - super(world); - this.to = to; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - /** - * Gets the state of thunder that the world is being set to - * - * @return true if the weather is being set to thundering, false otherwise - */ - public boolean toThunderState() { - return to; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/weather/WeatherChangeEvent.java b/LiveWeather/src/org/bukkit/event/weather/WeatherChangeEvent.java deleted file mode 100755 index 5d1234e..0000000 --- a/LiveWeather/src/org/bukkit/event/weather/WeatherChangeEvent.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.event.weather; - -import org.bukkit.World; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Stores data for weather changing in a world - */ -public class WeatherChangeEvent extends WeatherEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean canceled; - private final boolean to; - - public WeatherChangeEvent(final World world, final boolean to) { - super(world); - this.to = to; - } - - public boolean isCancelled() { - return canceled; - } - - public void setCancelled(boolean cancel) { - canceled = cancel; - } - - /** - * Gets the state of weather that the world is being set to - * - * @return true if the weather is being set to raining, false otherwise - */ - public boolean toWeatherState() { - return to; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/weather/WeatherEvent.java b/LiveWeather/src/org/bukkit/event/weather/WeatherEvent.java deleted file mode 100755 index 0cae9bc..0000000 --- a/LiveWeather/src/org/bukkit/event/weather/WeatherEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.weather; - -import org.bukkit.World; -import org.bukkit.event.Event; - -/** - * Represents a Weather-related event - */ -public abstract class WeatherEvent extends Event { - protected World world; - - public WeatherEvent(final World where) { - world = where; - } - - /** - * Returns the World where this event is occurring - * - * @return World this event is occurring in - */ - public final World getWorld() { - return world; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/ChunkEvent.java b/LiveWeather/src/org/bukkit/event/world/ChunkEvent.java deleted file mode 100755 index 4710d40..0000000 --- a/LiveWeather/src/org/bukkit/event/world/ChunkEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.Chunk; - -/** - * Represents a Chunk related event - */ -public abstract class ChunkEvent extends WorldEvent { - protected Chunk chunk; - - protected ChunkEvent(final Chunk chunk) { - super(chunk.getWorld()); - this.chunk = chunk; - } - - /** - * Gets the chunk being loaded/unloaded - * - * @return Chunk that triggered this event - */ - public Chunk getChunk() { - return chunk; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/ChunkLoadEvent.java b/LiveWeather/src/org/bukkit/event/world/ChunkLoadEvent.java deleted file mode 100755 index a45b1cd..0000000 --- a/LiveWeather/src/org/bukkit/event/world/ChunkLoadEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.Chunk; -import org.bukkit.event.HandlerList; - -/** - * Called when a chunk is loaded - */ -public class ChunkLoadEvent extends ChunkEvent { - private static final HandlerList handlers = new HandlerList(); - private final boolean newChunk; - - public ChunkLoadEvent(final Chunk chunk, final boolean newChunk) { - super(chunk); - this.newChunk = newChunk; - } - - /** - * Gets if this chunk was newly created or not. - *

          - * Note that if this chunk is new, it will not be populated at this time. - * - * @return true if the chunk is new, otherwise false - */ - public boolean isNewChunk() { - return newChunk; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/ChunkPopulateEvent.java b/LiveWeather/src/org/bukkit/event/world/ChunkPopulateEvent.java deleted file mode 100755 index 705d955..0000000 --- a/LiveWeather/src/org/bukkit/event/world/ChunkPopulateEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.Chunk; -import org.bukkit.event.HandlerList; -import org.bukkit.generator.BlockPopulator; - -/** - * Thrown when a new chunk has finished being populated. - *

          - * If your intent is to populate the chunk using this event, please see {@link - * BlockPopulator} - */ -public class ChunkPopulateEvent extends ChunkEvent { - private static final HandlerList handlers = new HandlerList(); - - public ChunkPopulateEvent(final Chunk chunk) { - super(chunk); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/ChunkUnloadEvent.java b/LiveWeather/src/org/bukkit/event/world/ChunkUnloadEvent.java deleted file mode 100755 index f59d091..0000000 --- a/LiveWeather/src/org/bukkit/event/world/ChunkUnloadEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.Chunk; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a chunk is unloaded - */ -public class ChunkUnloadEvent extends ChunkEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - - public ChunkUnloadEvent(final Chunk chunk) { - super(chunk); - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/PortalCreateEvent.java b/LiveWeather/src/org/bukkit/event/world/PortalCreateEvent.java deleted file mode 100755 index d83d7a9..0000000 --- a/LiveWeather/src/org/bukkit/event/world/PortalCreateEvent.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.block.Block; -import org.bukkit.World; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -import java.util.ArrayList; -import java.util.Collection; - -/** - * Called when a portal is created - */ -public class PortalCreateEvent extends WorldEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final ArrayList blocks = new ArrayList(); - private CreateReason reason = CreateReason.FIRE; - - public PortalCreateEvent(final Collection blocks, final World world, CreateReason reason) { - super(world); - - this.blocks.addAll(blocks); - this.reason = reason; - } - - /** - * Gets an array list of all the blocks associated with the created portal - * - * @return array list of all the blocks associated with the created portal - */ - public ArrayList getBlocks() { - return this.blocks; - } - - public boolean isCancelled() { - return cancel; - } - - public void setCancelled(boolean cancel) { - this.cancel = cancel; - } - - /** - * Gets the reason for the portal's creation - * - * @return CreateReason for the portal's creation - */ - public CreateReason getReason() { - return reason; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - /** - * An enum to specify the various reasons for a portal's creation - */ - public enum CreateReason { - /** - * When a portal is created 'traditionally' due to a portal frame - * being set on fire. - */ - FIRE, - /** - * When a portal is created as a destination for an existing portal - * when using the custom PortalTravelAgent - */ - OBC_DESTINATION - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/SpawnChangeEvent.java b/LiveWeather/src/org/bukkit/event/world/SpawnChangeEvent.java deleted file mode 100755 index e99c3c0..0000000 --- a/LiveWeather/src/org/bukkit/event/world/SpawnChangeEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.Location; -import org.bukkit.event.HandlerList; - -/** - * An event that is called when a world's spawn changes. The world's previous - * spawn location is included. - */ -public class SpawnChangeEvent extends WorldEvent { - private static final HandlerList handlers = new HandlerList(); - private final Location previousLocation; - - public SpawnChangeEvent(final World world, final Location previousLocation) { - super(world); - this.previousLocation = previousLocation; - } - - /** - * Gets the previous spawn location - * - * @return Location that used to be spawn - */ - public Location getPreviousLocation() { - return previousLocation; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/StructureGrowEvent.java b/LiveWeather/src/org/bukkit/event/world/StructureGrowEvent.java deleted file mode 100755 index d1c9822..0000000 --- a/LiveWeather/src/org/bukkit/event/world/StructureGrowEvent.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bukkit.event.world; - -import java.util.List; -import org.bukkit.Location; -import org.bukkit.TreeType; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Event that is called when an organic structure attempts to grow (Sapling -> - * Tree), (Mushroom -> Huge Mushroom), naturally or using bonemeal. - */ -public class StructureGrowEvent extends WorldEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean cancelled = false; - private final Location location; - private final TreeType species; - private final boolean bonemeal; - private final Player player; - private final List blocks; - - public StructureGrowEvent(final Location location, final TreeType species, final boolean bonemeal, final Player player, final List blocks) { - super(location.getWorld()); - this.location = location; - this.species = species; - this.bonemeal = bonemeal; - this.player = player; - this.blocks = blocks; - } - - /** - * Gets the location of the structure. - * - * @return Location of the structure - */ - public Location getLocation() { - return location; - } - - /** - * Gets the species type (birch, normal, pine, red mushroom, brown - * mushroom) - * - * @return Structure species - */ - public TreeType getSpecies() { - return species; - } - - /** - * Checks if structure was grown using bonemeal. - * - * @return True if the structure was grown using bonemeal. - */ - public boolean isFromBonemeal() { - return bonemeal; - } - - /** - * Gets the player that created the structure. - * - * @return Player that created the structure, null if was not created - * manually - */ - public Player getPlayer() { - return player; - } - - /** - * Gets an ArrayList of all blocks associated with the structure. - * - * @return ArrayList of all blocks associated with the structure. - */ - public List getBlocks() { - return blocks; - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/WorldEvent.java b/LiveWeather/src/org/bukkit/event/world/WorldEvent.java deleted file mode 100755 index bd89b81..0000000 --- a/LiveWeather/src/org/bukkit/event/world/WorldEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.event.Event; - -/** - * Represents events within a world - */ -public abstract class WorldEvent extends Event { - private final World world; - - public WorldEvent(final World world) { - this.world = world; - } - - /** - * Gets the world primarily involved with this event - * - * @return World which caused this event - */ - public World getWorld() { - return world; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/WorldInitEvent.java b/LiveWeather/src/org/bukkit/event/world/WorldInitEvent.java deleted file mode 100755 index 6bf13e0..0000000 --- a/LiveWeather/src/org/bukkit/event/world/WorldInitEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.event.HandlerList; - -/** - * Called when a World is initializing - */ -public class WorldInitEvent extends WorldEvent { - private static final HandlerList handlers = new HandlerList(); - - public WorldInitEvent(final World world) { - super(world); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/WorldLoadEvent.java b/LiveWeather/src/org/bukkit/event/world/WorldLoadEvent.java deleted file mode 100755 index c5545aa..0000000 --- a/LiveWeather/src/org/bukkit/event/world/WorldLoadEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.event.HandlerList; - -/** - * Called when a World is loaded - */ -public class WorldLoadEvent extends WorldEvent { - private static final HandlerList handlers = new HandlerList(); - - public WorldLoadEvent(final World world) { - super(world); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/WorldSaveEvent.java b/LiveWeather/src/org/bukkit/event/world/WorldSaveEvent.java deleted file mode 100755 index d46b413..0000000 --- a/LiveWeather/src/org/bukkit/event/world/WorldSaveEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.event.HandlerList; - -/** - * Called when a World is saved. - */ -public class WorldSaveEvent extends WorldEvent { - private static final HandlerList handlers = new HandlerList(); - - public WorldSaveEvent(final World world) { - super(world); - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/event/world/WorldUnloadEvent.java b/LiveWeather/src/org/bukkit/event/world/WorldUnloadEvent.java deleted file mode 100755 index 110544b..0000000 --- a/LiveWeather/src/org/bukkit/event/world/WorldUnloadEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.event.world; - -import org.bukkit.World; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -/** - * Called when a World is unloaded - */ -public class WorldUnloadEvent extends WorldEvent implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - private boolean isCancelled; - - public WorldUnloadEvent(final World world) { - super(world); - } - - public boolean isCancelled() { - return this.isCancelled; - } - - public void setCancelled(boolean cancel) { - this.isCancelled = cancel; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/LiveWeather/src/org/bukkit/generator/BlockPopulator.java b/LiveWeather/src/org/bukkit/generator/BlockPopulator.java deleted file mode 100755 index 6a70bdb..0000000 --- a/LiveWeather/src/org/bukkit/generator/BlockPopulator.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.generator; - -import java.util.Random; -import org.bukkit.Chunk; -import org.bukkit.World; - -/** - * A block populator is responsible for generating a small area of blocks. - *

          - * For example, generating glowstone inside the nether or generating dungeons - * full of treasure - */ -public abstract class BlockPopulator { - - /** - * Populates an area of blocks at or around the given chunk. - *

          - * The chunks on each side of the specified chunk must already exist; that - * is, there must be one north, east, south and west of the specified - * chunk. The "corner" chunks may not exist, in which scenario the - * populator should record any changes required for those chunks and - * perform the changes when they are ready. - * - * @param world The world to generate in - * @param random The random generator to use - * @param source The chunk to generate for - */ - public abstract void populate(World world, Random random, Chunk source); -} diff --git a/LiveWeather/src/org/bukkit/generator/ChunkGenerator.java b/LiveWeather/src/org/bukkit/generator/ChunkGenerator.java deleted file mode 100755 index 8e08bdc..0000000 --- a/LiveWeather/src/org/bukkit/generator/ChunkGenerator.java +++ /dev/null @@ -1,268 +0,0 @@ -package org.bukkit.generator; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; - -/** - * A chunk generator is responsible for the initial shaping of an entire - * chunk. For example, the nether chunk generator should shape netherrack and - * soulsand - */ -public abstract class ChunkGenerator { - - /** - * Interface to biome data for chunk to be generated: initialized with - * default values for world type and seed. - *

          - * Custom generator is free to access and tailor values during - * generateBlockSections() or generateExtBlockSections(). - */ - public interface BiomeGrid { - - /** - * Get biome at x, z within chunk being generated - * - * @param x - 0-15 - * @param z - 0-15 - * @return Biome value - */ - Biome getBiome(int x, int z); - - /** - * Set biome at x, z within chunk being generated - * - * @param x - 0-15 - * @param z - 0-15 - * @param bio - Biome value - */ - void setBiome(int x, int z, Biome bio); - } - @Deprecated - /** - * Shapes the chunk for the given coordinates. - *

          - * This method should return a byte[32768] in the following format: - *

          -     * for (int x = 0; x < 16; x++) {
          -     *     for (int z = 0; z < 16; z++) {
          -     *         for (int y = 0; y < 128; y++) {
          -     *             // result[(x * 16 + z) * 128 + y] = ??;
          -     *         }
          -     *     }
          -     * }
          -     * 
          - *

          - * Note that this method should never attempt to get the Chunk at - * the passed coordinates, as doing so may cause an infinite loop - *

          - * Note this deprecated method will only be called when both - * generateExtBlockSections() and generateBlockSections() are - * unimplemented and return null. - * - * @param world The world this chunk will be used for - * @param random The random generator to use - * @param x The X-coordinate of the chunk - * @param z The Z-coordinate of the chunk - * @return byte[] containing the types for each block created by this - * generator - */ - public byte[] generate(World world, Random random, int x, int z) { - throw new UnsupportedOperationException("Custom generator is missing required methods: generate(), generateBlockSections() and generateExtBlockSections()"); - } - - /** - * Shapes the chunk for the given coordinates, with extended block IDs - * supported (0-4095). - *

          - * As of 1.2, chunks are represented by a vertical array of chunk - * sections, each of which is 16 x 16 x 16 blocks. If a section is empty - * (all zero), the section does not need to be supplied, reducing memory - * usage. - *

          - * This method must return a short[][] array in the following format: - *

          -     *     short[][] result = new short[world-height / 16][];
          -     * 
          - * Each section (sectionID = (Y>>4)) that has blocks needs to be allocated - * space for the 4096 blocks in that section: - *
          -     *     result[sectionID] = new short[4096];
          -     * 
          - * while sections that are not populated can be left null. - *

          - * Setting a block at X, Y, Z within the chunk can be done with the - * following mapping function: - *

          -     *    void setBlock(short[][] result, int x, int y, int z, short blkid) {
          -     *        if (result[y >> 4] == null) {
          -     *            result[y >> 4] = new short[4096];
          -     *        }
          -     *        result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid;
          -     *    }
          -     * 
          - * while reading a block ID can be done with the following mapping - * function: - *
          -     *    short getBlock(short[][] result, int x, int y, int z) {
          -     *        if (result[y >> 4] == null) {
          -     *            return (short)0;
          -     *        }
          -     *        return result[y >> 4][((y & 0xF) << 8) | (z << 4) | x];
          -     *    }
          -     * 
          - * while sections that are not populated can be left null. - *

          - * Setting a block at X, Y, Z within the chunk can be done with the - * following mapping function: - *

          -     *    void setBlock(short[][] result, int x, int y, int z, short blkid) {
          -     *        if (result[y >> 4) == null) {
          -     *            result[y >> 4] = new short[4096];
          -     *        }
          -     *        result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid;
          -     *    }
          -     * 
          - * while reading a block ID can be done with the following mapping - * function: - *
          -     *    short getBlock(short[][] result, int x, int y, int z) {
          -     *        if (result[y >> 4) == null) {
          -     *            return (short)0;
          -     *        }
          -     *        return result[y >> 4][((y & 0xF) << 8) | (z << 4) | x];
          -     *    }
          -     * 
          - *

          - * Note that this method should never attempt to get the Chunk at - * the passed coordinates, as doing so may cause an infinite loop - *

          - * Note generators that do not return block IDs above 255 should not - * implement this method, or should have it return null (which will result - * in the generateBlockSections() method being called). - * - * @param world The world this chunk will be used for - * @param random The random generator to use - * @param x The X-coordinate of the chunk - * @param z The Z-coordinate of the chunk - * @param biomes Proposed biome values for chunk - can be updated by - * generator - * @return short[][] containing the types for each block created by this - * generator - * @deprecated Magic value - */ - @Deprecated - public short[][] generateExtBlockSections(World world, Random random, int x, int z, BiomeGrid biomes) { - return null; // Default - returns null, which drives call to generateBlockSections() - } - - /** - * Shapes the chunk for the given coordinates. - *

          - * As of 1.2, chunks are represented by a vertical array of chunk - * sections, each of which is 16 x 16 x 16 blocks. If a section is empty - * (all zero), the section does not need to be supplied, reducing memory - * usage. - *

          - * This method must return a byte[][] array in the following format: - *

          -     *     byte[][] result = new byte[world-height / 16][];
          -     * 
          - * Each section (sectionID = (Y>>4)) that has blocks needs to be allocated - * space for the 4096 blocks in that section: - *
          -     *     result[sectionID] = new byte[4096];
          -     * 
          - * while sections that are not populated can be left null. - *

          - * Setting a block at X, Y, Z within the chunk can be done with the - * following mapping function: - *

          -     *    void setBlock(byte[][] result, int x, int y, int z, byte blkid) {
          -     *        if (result[y >> 4) == null) {
          -     *            result[y >> 4] = new byte[4096];
          -     *        }
          -     *        result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid;
          -     *    }
          -     * 
          - * while reading a block ID can be done with the following mapping - * function: - *
          -     *    byte getBlock(byte[][] result, int x, int y, int z) {
          -     *        if (result[y >> 4) == null) {
          -     *            return (byte)0;
          -     *        }
          -     *        return result[y >> 4][((y & 0xF) << 8) | (z << 4) | x];
          -     *    }
          -     * 
          - * - * Note that this method should never attempt to get the Chunk at - * the passed coordinates, as doing so may cause an infinite loop - * - * @param world The world this chunk will be used for - * @param random The random generator to use - * @param x The X-coordinate of the chunk - * @param z The Z-coordinate of the chunk - * @param biomes Proposed biome values for chunk - can be updated by - * generator - * @return short[][] containing the types for each block created by this - * generator - * @deprecated Magic value - */ - @Deprecated - public byte[][] generateBlockSections(World world, Random random, int x, int z, BiomeGrid biomes) { - return null; // Default - returns null, which drives call to generate() - } - - /** - * Tests if the specified location is valid for a natural spawn position - * - * @param world The world we're testing on - * @param x X-coordinate of the block to test - * @param z Z-coordinate of the block to test - * @return true if the location is valid, otherwise false - */ - public boolean canSpawn(World world, int x, int z) { - Block highest = world.getBlockAt(x, world.getHighestBlockYAt(x, z), z); - - switch (world.getEnvironment()) { - case NETHER: - return true; - case THE_END: - return highest.getType() != Material.AIR && highest.getType() != Material.WATER && highest.getType() != Material.LAVA; - case NORMAL: - default: - return highest.getType() == Material.SAND || highest.getType() == Material.GRAVEL; - } - } - - /** - * Gets a list of default {@link BlockPopulator}s to apply to a given - * world - * - * @param world World to apply to - * @return List containing any amount of BlockPopulators - */ - public List getDefaultPopulators(World world) { - return new ArrayList(); - } - - /** - * Gets a fixed spawn location to use for a given world. - *

          - * A null value is returned if a world should not use a fixed spawn point, - * and will instead attempt to find one randomly. - * - * @param world The world to locate a spawn point for - * @param random Random generator to use in the calculation - * @return Location containing a new spawn point, otherwise null - */ - public Location getFixedSpawnLocation(World world, Random random) { - return null; - } -} diff --git a/LiveWeather/src/org/bukkit/help/GenericCommandHelpTopic.java b/LiveWeather/src/org/bukkit/help/GenericCommandHelpTopic.java deleted file mode 100755 index 3e85e77..0000000 --- a/LiveWeather/src/org/bukkit/help/GenericCommandHelpTopic.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bukkit.help; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.apache.commons.lang.StringUtils; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.command.defaults.VanillaCommand; -import org.bukkit.help.HelpTopic; - -/** - * Lacking an alternative, the help system will create instances of - * GenericCommandHelpTopic for each command in the server's CommandMap. You - * can use this class as a base class for custom help topics, or as an example - * for how to write your own. - */ -public class GenericCommandHelpTopic extends HelpTopic { - - protected Command command; - - public GenericCommandHelpTopic(Command command) { - this.command = command; - - if (command.getLabel().startsWith("/")) { - name = command.getLabel(); - } else { - name = "/" + command.getLabel(); - } - - // The short text is the first line of the description - int i = command.getDescription().indexOf("\n"); - if (i > 1) { - shortText = command.getDescription().substring(0, i - 1); - } else { - shortText = command.getDescription(); - } - - // Build full text - StringBuffer sb = new StringBuffer(); - - sb.append(ChatColor.GOLD); - sb.append("Description: "); - sb.append(ChatColor.WHITE); - sb.append(command.getDescription()); - - sb.append("\n"); - - sb.append(ChatColor.GOLD); - sb.append("Usage: "); - sb.append(ChatColor.WHITE); - sb.append(command.getUsage().replace("", name.substring(1))); - - if (command.getAliases().size() > 0) { - sb.append("\n"); - sb.append(ChatColor.GOLD); - sb.append("Aliases: "); - sb.append(ChatColor.WHITE); - sb.append(ChatColor.WHITE + StringUtils.join(command.getAliases(), ", ")); - } - fullText = sb.toString(); - } - - public boolean canSee(CommandSender sender) { - if (!command.isRegistered() && !(command instanceof VanillaCommand)) { - // Unregistered commands should not show up in the help (ignore VanillaCommands) - return false; - } - - if (sender instanceof ConsoleCommandSender) { - return true; - } - - if (amendedPermission != null) { - return sender.hasPermission(amendedPermission); - } else { - return command.testPermissionSilent(sender); - } - } -} diff --git a/LiveWeather/src/org/bukkit/help/HelpMap.java b/LiveWeather/src/org/bukkit/help/HelpMap.java deleted file mode 100755 index 9c1b51b..0000000 --- a/LiveWeather/src/org/bukkit/help/HelpMap.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.help; - -import java.util.Collection; -import java.util.List; - -/** - * The HelpMap tracks all help topics registered in a Bukkit server. When the - * server starts up or is reloaded, help is processed and topics are added in - * the following order: - *

          - *

            - *
          1. General topics are loaded from the help.yml - *
          2. Plugins load and optionally call {@code addTopic()} - *
          3. Registered plugin commands are processed by {@link HelpTopicFactory} - * objects to create topics - *
          4. Topic contents are amended as directed in help.yml - *
          - */ -public interface HelpMap { - /** - * Returns a help topic for a given topic name. - * - * @param topicName The help topic name to look up. - * @return A {@link HelpTopic} object matching the topic name or null if - * none can be found. - */ - public HelpTopic getHelpTopic(String topicName); - - /** - * Returns a collection of all the registered help topics. - * - * @return All the registered help topics. - */ - public Collection getHelpTopics(); - - /** - * Adds a topic to the server's help index. - * - * @param topic The new help topic to add. - */ - public void addTopic(HelpTopic topic); - - /** - * Clears out the contents of the help index. Normally called during - * server reload. - */ - public void clear(); - - /** - * Associates a {@link HelpTopicFactory} object with given command base - * class. Plugins typically call this method during {@code onLoad()}. Once - * registered, the custom HelpTopicFactory will be used to create a custom - * {@link HelpTopic} for all commands deriving from the {@code - * commandClass} base class, or all commands deriving from {@link - * org.bukkit.command.PluginCommand} who's executor derives from {@code - * commandClass} base class. - * - * @param commandClass The class for which the custom HelpTopicFactory - * applies. Must derive from either {@link org.bukkit.command.Command} - * or {@link org.bukkit.command.CommandExecutor}. - * @param factory The {@link HelpTopicFactory} implementation to associate - * with the {@code commandClass}. - * @throws IllegalArgumentException Thrown if {@code commandClass} does - * not derive from a legal base class. - */ - public void registerHelpTopicFactory(Class commandClass, HelpTopicFactory factory); - - /** - * Gets the list of plugins the server administrator has chosen to exclude - * from the help index. Plugin authors who choose to directly extend - * {@link org.bukkit.command.Command} instead of {@link - * org.bukkit.command.PluginCommand} will need to check this collection in - * their {@link HelpTopicFactory} implementations to ensure they meet the - * server administrator's expectations. - * - * @return A list of plugins that should be excluded from the help index. - */ - public List getIgnoredPlugins(); -} diff --git a/LiveWeather/src/org/bukkit/help/HelpTopic.java b/LiveWeather/src/org/bukkit/help/HelpTopic.java deleted file mode 100755 index a2ba5f5..0000000 --- a/LiveWeather/src/org/bukkit/help/HelpTopic.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bukkit.help; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -/** - * HelpTopic implementations are displayed to the user when the user uses the - * /help command. - *

          - * Custom implementations of this class can work at two levels. A simple - * implementation only needs to set the value of {@code name}, {@code - * shortText}, and {@code fullText} in the constructor. This base class will - * take care of the rest. - *

          - * Complex implementations can be created by overriding the behavior of all - * the methods in this class. - */ -public abstract class HelpTopic { - protected String name; - protected String shortText; - protected String fullText; - protected String amendedPermission; - - /** - * Determines if a {@link Player} is allowed to see this help topic. - *

          - * HelpTopic implementations should take server administrator wishes into - * account as set by the {@link HelpTopic#amendCanSee(String)} function. - * - * @param player The Player in question. - * @return True of the Player can see this help topic, false otherwise. - */ - public abstract boolean canSee(CommandSender player); - - /** - * Allows the server administrator to override the permission required to - * see a help topic. - *

          - * HelpTopic implementations should take this into account when - * determining topic visibility on the {@link - * HelpTopic#canSee(org.bukkit.command.CommandSender)} function. - * - * @param amendedPermission The permission node the server administrator - * wishes to apply to this topic. - */ - public void amendCanSee(String amendedPermission) { - this.amendedPermission = amendedPermission; - } - - /** - * Returns the name of this help topic. - * - * @return The topic name. - */ - public String getName() { - return name; - } - - /** - * Returns a brief description that will be displayed in the topic index. - * - * @return A brief topic description. - */ - public String getShortText() { - return shortText; - } - - /** - * Returns the full description of this help topic that is displayed when - * the user requests this topic's details. - *

          - * The result will be paginated to properly fit the user's client. - * - * @param forWho The player or console requesting the full text. Useful - * for further security trimming the command's full text based on - * sub-permissions in custom implementations. - * - * @return A full topic description. - */ - public String getFullText(CommandSender forWho) { - return fullText; - } - - /** - * Allows the server admin (or another plugin) to add or replace the - * contents of a help topic. - *

          - * A null in either parameter will leave that part of the topic unchanged. - * In either amending parameter, the string {@literal } is replaced - * with the existing contents in the help topic. Use this to append or - * prepend additional content into an automatically generated help topic. - * - * @param amendedShortText The new topic short text to use, or null to - * leave alone. - * @param amendedFullText The new topic full text to use, or null to leave - * alone. - */ - public void amendTopic(String amendedShortText, String amendedFullText) { - shortText = applyAmendment(shortText, amendedShortText); - fullText = applyAmendment(fullText, amendedFullText); - } - - /** - * Developers implementing their own custom HelpTopic implementations can - * use this utility method to ensure their implementations comply with the - * expected behavior of the {@link HelpTopic#amendTopic(String, String)} - * method. - * - * @param baseText The existing text of the help topic. - * @param amendment The amending text from the amendTopic() method. - * @return The application of the amending text to the existing text, - * according to the expected rules of amendTopic(). - */ - protected String applyAmendment(String baseText, String amendment) { - if (amendment == null) { - return baseText; - } else { - return amendment.replaceAll("", baseText); - } - } -} diff --git a/LiveWeather/src/org/bukkit/help/HelpTopicComparator.java b/LiveWeather/src/org/bukkit/help/HelpTopicComparator.java deleted file mode 100755 index 3e43eb3..0000000 --- a/LiveWeather/src/org/bukkit/help/HelpTopicComparator.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bukkit.help; - -import org.bukkit.help.HelpTopic; - -import java.util.Comparator; - -/** - * Used to impose a custom total ordering on help topics. - *

          - * All topics are listed in alphabetic order, but topics that start with a - * slash come after topics that don't. - */ -public class HelpTopicComparator implements Comparator { - - // Singleton implementations - private static final TopicNameComparator tnc = new TopicNameComparator(); - public static TopicNameComparator topicNameComparatorInstance() { - return tnc; - } - - private static final HelpTopicComparator htc = new HelpTopicComparator(); - public static HelpTopicComparator helpTopicComparatorInstance() { - return htc; - } - - private HelpTopicComparator() {} - - public int compare(HelpTopic lhs, HelpTopic rhs) { - return tnc.compare(lhs.getName(), rhs.getName()); - } - - public static class TopicNameComparator implements Comparator { - private TopicNameComparator(){} - - public int compare(String lhs, String rhs) { - boolean lhsStartSlash = lhs.startsWith("/"); - boolean rhsStartSlash = rhs.startsWith("/"); - - if (lhsStartSlash && !rhsStartSlash) { - return 1; - } else if (!lhsStartSlash && rhsStartSlash) { - return -1; - } else { - return lhs.compareToIgnoreCase(rhs); - } - } - } -} diff --git a/LiveWeather/src/org/bukkit/help/HelpTopicFactory.java b/LiveWeather/src/org/bukkit/help/HelpTopicFactory.java deleted file mode 100755 index 87d3697..0000000 --- a/LiveWeather/src/org/bukkit/help/HelpTopicFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bukkit.help; - -import org.bukkit.command.Command; - -/** - * A HelpTopicFactory is used to create custom {@link HelpTopic} objects from - * commands that inherit from a common base class or have executors that - * inherit from a common base class. You can use a custom HelpTopic to change - * the way all the commands in your plugin display in the help. If your plugin - * implements a complex permissions system, a custom help topic may also be - * appropriate. - *

          - * To automatically bind your plugin's commands to your custom HelpTopic - * implementation, first make sure all your commands or executors derive from - * a custom base class (it doesn't have to do anything). Next implement a - * custom HelpTopicFactory that accepts your custom command base class and - * instantiates an instance of your custom HelpTopic from it. Finally, - * register your HelpTopicFactory against your command base class using the - * {@link HelpMap#registerHelpTopicFactory(Class, HelpTopicFactory)} method. - *

          - * As the help system iterates over all registered commands to make help - * topics, it first checks to see if there is a HelpTopicFactory registered - * for the command's base class. If so, the factory is used to make a help - * topic rather than a generic help topic. If no factory is found for the - * command's base class and the command derives from {@link - * org.bukkit.command.PluginCommand}, then the type of the command's executor - * is inspected looking for a registered HelpTopicFactory. Finally, if no - * factory is found, a generic help topic is created for the command. - * - * @param The base class for your custom commands. - */ -public interface HelpTopicFactory { - /** - * This method accepts a command deriving from a custom command base class - * and constructs a custom HelpTopic for it. - * - * @param command The custom command to build a help topic for. - * @return A new custom help topic or {@code null} to intentionally NOT - * create a topic. - */ - public HelpTopic createTopic(TCommand command); -} diff --git a/LiveWeather/src/org/bukkit/help/IndexHelpTopic.java b/LiveWeather/src/org/bukkit/help/IndexHelpTopic.java deleted file mode 100755 index c474031..0000000 --- a/LiveWeather/src/org/bukkit/help/IndexHelpTopic.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bukkit.help; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.util.ChatPaginator; - -import java.util.Collection; - -/** - * This help topic generates a list of other help topics. This class is useful - * for adding your own index help topics. To enforce a particular order, use a - * sorted collection. - *

          - * If a preamble is provided to the constructor, that text will be displayed - * before the first item in the index. - */ -public class IndexHelpTopic extends HelpTopic { - - protected String permission; - protected String preamble; - protected Collection allTopics; - - public IndexHelpTopic(String name, String shortText, String permission, Collection topics) { - this(name, shortText, permission, topics, null); - } - - public IndexHelpTopic(String name, String shortText, String permission, Collection topics, String preamble) { - this.name = name; - this.shortText = shortText; - this.permission = permission; - this.preamble = preamble; - setTopicsCollection(topics); - } - - /** - * Sets the contents of the internal allTopics collection. - * - * @param topics The topics to set. - */ - protected void setTopicsCollection(Collection topics) { - this.allTopics = topics; - } - - public boolean canSee(CommandSender sender) { - if (sender instanceof ConsoleCommandSender) { - return true; - } - if (permission == null) { - return true; - } - return sender.hasPermission(permission); - } - - @Override - public void amendCanSee(String amendedPermission) { - permission = amendedPermission; - } - - public String getFullText(CommandSender sender) { - StringBuilder sb = new StringBuilder(); - - if (preamble != null) { - sb.append(buildPreamble(sender)); - sb.append("\n"); - } - - for (HelpTopic topic : allTopics) { - if (topic.canSee(sender)) { - String lineStr = buildIndexLine(sender, topic).replace("\n", ". "); - if (sender instanceof Player && lineStr.length() > ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH) { - sb.append(lineStr.substring(0, ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH - 3)); - sb.append("..."); - } else { - sb.append(lineStr); - } - sb.append("\n"); - } - } - return sb.toString(); - } - - /** - * Builds the topic preamble. Override this method to change how the index - * preamble looks. - * - * @param sender The command sender requesting the preamble. - * @return The topic preamble. - */ - protected String buildPreamble(CommandSender sender) { - return ChatColor.GRAY + preamble; - } - - /** - * Builds individual lines in the index topic. Override this method to - * change how index lines are rendered. - * - * @param sender The command sender requesting the index line. - * @param topic The topic to render into an index line. - * @return The rendered index line. - */ - protected String buildIndexLine(CommandSender sender, HelpTopic topic) { - StringBuilder line = new StringBuilder(); - line.append(ChatColor.GOLD); - line.append(topic.getName()); - line.append(": "); - line.append(ChatColor.WHITE); - line.append(topic.getShortText()); - return line.toString(); - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/AnvilInventory.java b/LiveWeather/src/org/bukkit/inventory/AnvilInventory.java deleted file mode 100755 index 70fae71..0000000 --- a/LiveWeather/src/org/bukkit/inventory/AnvilInventory.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bukkit.inventory; - -/** - * Interface to the inventory of an Anvil. - */ -public interface AnvilInventory extends Inventory { -} diff --git a/LiveWeather/src/org/bukkit/inventory/BeaconInventory.java b/LiveWeather/src/org/bukkit/inventory/BeaconInventory.java deleted file mode 100755 index 2f8769e..0000000 --- a/LiveWeather/src/org/bukkit/inventory/BeaconInventory.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.inventory; - -/** - * Interface to the inventory of a Beacon. - */ -public interface BeaconInventory extends Inventory { - - /** - * Set the item powering the beacon. - * - * @param item The new item - */ - void setItem(ItemStack item); - - /** - * Get the item powering the beacon. - * - * @return The current item. - */ - ItemStack getItem(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/BrewerInventory.java b/LiveWeather/src/org/bukkit/inventory/BrewerInventory.java deleted file mode 100755 index 9cc31c9..0000000 --- a/LiveWeather/src/org/bukkit/inventory/BrewerInventory.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.block.BrewingStand; - -/** - * Interface to the inventory of a Brewing Stand. - */ -public interface BrewerInventory extends Inventory { - - /** - * Get the current ingredient for brewing. - * - * @return The ingredient. - */ - ItemStack getIngredient(); - - /** - * Set the current ingredient for brewing. - * - * @param ingredient The ingredient - */ - void setIngredient(ItemStack ingredient); - - BrewingStand getHolder(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/CraftingInventory.java b/LiveWeather/src/org/bukkit/inventory/CraftingInventory.java deleted file mode 100755 index f71533c..0000000 --- a/LiveWeather/src/org/bukkit/inventory/CraftingInventory.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.inventory; - -/** - * Interface to the crafting inventories - */ -public interface CraftingInventory extends Inventory { - - /** - * Check what item is in the result slot of this crafting inventory. - * - * @return The result item. - */ - ItemStack getResult(); - - /** - * Get the contents of the crafting matrix. - * - * @return The contents. - */ - ItemStack[] getMatrix(); - - /** - * Set the item in the result slot of the crafting inventory. - * - * @param newResult The new result item. - */ - void setResult(ItemStack newResult); - - /** - * Replace the contents of the crafting matrix - * - * @param contents The new contents. - * @throws IllegalArgumentException if the length of contents is greater - * than the size of the crafting matrix. - */ - void setMatrix(ItemStack[] contents); - - /** - * Get the current recipe formed on the crafting inventory, if any. - * - * @return The recipe, or null if the current contents don't match any - * recipe. - */ - Recipe getRecipe(); -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/inventory/DoubleChestInventory.java b/LiveWeather/src/org/bukkit/inventory/DoubleChestInventory.java deleted file mode 100755 index c03ad53..0000000 --- a/LiveWeather/src/org/bukkit/inventory/DoubleChestInventory.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.block.DoubleChest; - -/** - * Interface to the inventory of a Double Chest. - */ -public interface DoubleChestInventory extends Inventory { - - /** - * Get the left half of this double chest. - * - * @return The left side inventory - */ - Inventory getLeftSide(); - - /** - * Get the right side of this double chest. - * - * @return The right side inventory - */ - Inventory getRightSide(); - - DoubleChest getHolder(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/EnchantingInventory.java b/LiveWeather/src/org/bukkit/inventory/EnchantingInventory.java deleted file mode 100755 index 74a863e..0000000 --- a/LiveWeather/src/org/bukkit/inventory/EnchantingInventory.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.inventory; - -/** - * Interface to the inventory of an Enchantment Table. - */ -public interface EnchantingInventory extends Inventory { - - /** - * Set the item being enchanted. - * - * @param item The new item - */ - void setItem(ItemStack item); - - /** - * Get the item being enchanted. - * - * @return The current item. - */ - ItemStack getItem(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/EntityEquipment.java b/LiveWeather/src/org/bukkit/inventory/EntityEquipment.java deleted file mode 100755 index 9e71235..0000000 --- a/LiveWeather/src/org/bukkit/inventory/EntityEquipment.java +++ /dev/null @@ -1,236 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.entity.Entity; - -/** - * An interface to a creatures inventory - */ -public interface EntityEquipment { - - /** - * Gets a copy of the item the entity is currently holding - * - * @return the currently held item - */ - ItemStack getItemInHand(); - - /** - * Sets the item the entity is holding - * - * @param stack The item to put into the entities hand - */ - void setItemInHand(ItemStack stack); - - /** - * Gets a copy of the helmet currently being worn by the entity - * - * @return The helmet being worn - */ - ItemStack getHelmet(); - - /** - * Sets the helmet worn by the entity - * - * @param helmet The helmet to put on the entity - */ - void setHelmet(ItemStack helmet); - - /** - * Gets a copy of the chest plate currently being worn by the entity - * - * @return The chest plate being worn - */ - ItemStack getChestplate(); - - /** - * Sets the chest plate worn by the entity - * - * @param chestplate The chest plate to put on the entity - */ - void setChestplate(ItemStack chestplate); - - /** - * Gets a copy of the leggings currently being worn by the entity - * - * @return The leggings being worn - */ - ItemStack getLeggings(); - - /** - * Sets the leggings worn by the entity - * - * @param leggings The leggings to put on the entity - */ - void setLeggings(ItemStack leggings); - - /** - * Gets a copy of the boots currently being worn by the entity - * - * @return The boots being worn - */ - ItemStack getBoots(); - - /** - * Sets the boots worn by the entity - * - * @param boots The boots to put on the entity - */ - void setBoots(ItemStack boots); - - /** - * Gets a copy of all worn armor - * - * @return The array of worn armor - */ - ItemStack[] getArmorContents(); - - /** - * Sets the entities armor to the provided array of ItemStacks - * - * @param items The items to set the armor as - */ - void setArmorContents(ItemStack[] items); - - /** - * Clears the entity of all armor and held items - */ - void clear(); - - /** - * Gets the chance of the currently held item being dropped upon this - * creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @return chance of the currently held item being dropped (1 for players) - */ - float getItemInHandDropChance(); - - /** - * Sets the chance of the item this creature is currently holding being - * dropped upon this creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @param chance the chance of the currently held item being dropped - * @throws UnsupportedOperationException when called on players - */ - void setItemInHandDropChance(float chance); - - /** - * Gets the chance of the helmet being dropped upon this creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @return the chance of the helmet being dropped (1 for players) - */ - float getHelmetDropChance(); - - /** - * Sets the chance of the helmet being dropped upon this creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @param chance of the helmet being dropped - * @throws UnsupportedOperationException when called on players - */ - void setHelmetDropChance(float chance); - - /** - * Gets the chance of the chest plate being dropped upon this creature's - * death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @return the chance of the chest plate being dropped (1 for players) - */ - float getChestplateDropChance(); - - /** - * Sets the chance of the chest plate being dropped upon this creature's - * death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @param chance of the chest plate being dropped - * @throws UnsupportedOperationException when called on players - */ - void setChestplateDropChance(float chance); - - /** - * Gets the chance of the leggings being dropped upon this creature's - * death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @return the chance of the leggings being dropped (1 for players) - */ - float getLeggingsDropChance(); - - /** - * Sets the chance of the leggings being dropped upon this creature's - * death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @param chance chance of the leggings being dropped - * @throws UnsupportedOperationException when called on players - */ - void setLeggingsDropChance(float chance); - - /** - * Gets the chance of the boots being dropped upon this creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @return the chance of the boots being dropped (1 for players) - */ - float getBootsDropChance(); - - /** - * Sets the chance of the boots being dropped upon this creature's death - *

          - *

            - *
          • A drop chance of 0F will never drop - *
          • A drop chance of 1F will always drop - *
          - * - * @param chance of the boots being dropped - * @throws UnsupportedOperationException when called on players - */ - void setBootsDropChance(float chance); - - /** - * Get the entity this EntityEquipment belongs to - * - * @return the entity this EntityEquipment belongs to - */ - Entity getHolder(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/FurnaceInventory.java b/LiveWeather/src/org/bukkit/inventory/FurnaceInventory.java deleted file mode 100755 index 93b41d3..0000000 --- a/LiveWeather/src/org/bukkit/inventory/FurnaceInventory.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.block.Furnace; - -/** - * Interface to the inventory of a Furnace. - */ -public interface FurnaceInventory extends Inventory { - - /** - * Get the current item in the result slot. - * - * @return The item - */ - ItemStack getResult(); - - /** - * Get the current fuel. - * - * @return The item - */ - ItemStack getFuel(); - - /** - * Get the item currently smelting. - * - * @return The item - */ - ItemStack getSmelting(); - - /** - * Set the current fuel. - * - * @param stack The item - */ - void setFuel(ItemStack stack); - - /** - * Set the current item in the result slot. - * - * @param stack The item - */ - void setResult(ItemStack stack); - - /** - * Set the item currently smelting. - * - * @param stack The item - */ - void setSmelting(ItemStack stack); - - Furnace getHolder(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/FurnaceRecipe.java b/LiveWeather/src/org/bukkit/inventory/FurnaceRecipe.java deleted file mode 100755 index 8075323..0000000 --- a/LiveWeather/src/org/bukkit/inventory/FurnaceRecipe.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.Material; -import org.bukkit.material.MaterialData; - -/** - * Represents a smelting recipe. - */ -public class FurnaceRecipe implements Recipe { - private ItemStack output; - private ItemStack ingredient; - - /** - * Create a furnace recipe to craft the specified ItemStack. - * - * @param result The item you want the recipe to create. - * @param source The input material. - */ - public FurnaceRecipe(ItemStack result, Material source) { - this(result, source, 0); - } - - /** - * Create a furnace recipe to craft the specified ItemStack. - * - * @param result The item you want the recipe to create. - * @param source The input material. - */ - public FurnaceRecipe(ItemStack result, MaterialData source) { - this(result, source.getItemType(), source.getData()); - } - - /** - * Create a furnace recipe to craft the specified ItemStack. - * - * @param result The item you want the recipe to create. - * @param source The input material. - * @param data The data value. (Note: This is currently ignored by the - * CraftBukkit server.) - * @deprecated Magic value - */ - @Deprecated - public FurnaceRecipe(ItemStack result, Material source, int data) { - this.output = new ItemStack(result); - this.ingredient = new ItemStack(source, 1, (short) data); - } - - /** - * Sets the input of this furnace recipe. - * - * @param input The input material. - * @return The changed recipe, so you can chain calls. - */ - public FurnaceRecipe setInput(MaterialData input) { - return setInput(input.getItemType(), input.getData()); - } - - /** - * Sets the input of this furnace recipe. - * - * @param input The input material. - * @return The changed recipe, so you can chain calls. - */ - public FurnaceRecipe setInput(Material input) { - return setInput(input, 0); - } - - /** - * Sets the input of this furnace recipe. - * - * @param input The input material. - * @param data The data value. (Note: This is currently ignored by the - * CraftBukkit server.) - * @return The changed recipe, so you can chain calls. - * @deprecated Magic value - */ - @Deprecated - public FurnaceRecipe setInput(Material input, int data) { - this.ingredient = new ItemStack(input, 1, (short) data); - return this; - } - - /** - * Get the input material. - * - * @return The input material. - */ - public ItemStack getInput() { - return this.ingredient.clone(); - } - - /** - * Get the result of this recipe. - * - * @return The resulting stack. - */ - public ItemStack getResult() { - return output.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/HorseInventory.java b/LiveWeather/src/org/bukkit/inventory/HorseInventory.java deleted file mode 100755 index a71efb8..0000000 --- a/LiveWeather/src/org/bukkit/inventory/HorseInventory.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.inventory; - -/** - * An interface to the inventory of a Horse. - */ -public interface HorseInventory extends Inventory { - - /** - * Gets the item in the horse's saddle slot. - * - * @return the saddle item - */ - ItemStack getSaddle(); - - /** - * Gets the item in the horse's armor slot. - * - * @return the armor item - */ - ItemStack getArmor(); - - /** - * Sets the item in the horse's saddle slot. - * - * @param stack the new item - */ - void setSaddle(ItemStack stack); - - /** - * Sets the item in the horse's armor slot. - * - * @param stack the new item - */ - void setArmor(ItemStack stack); -} diff --git a/LiveWeather/src/org/bukkit/inventory/Inventory.java b/LiveWeather/src/org/bukkit/inventory/Inventory.java deleted file mode 100755 index da5d83e..0000000 --- a/LiveWeather/src/org/bukkit/inventory/Inventory.java +++ /dev/null @@ -1,381 +0,0 @@ -package org.bukkit.inventory; - -import java.util.HashMap; -import java.util.List; -import java.util.ListIterator; - -import org.bukkit.Material; -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.inventory.InventoryType; - -/** - * Interface to the various inventories. Behavior relating to {@link - * Material#AIR} is unspecified. - */ -public interface Inventory extends Iterable { - - /** - * Returns the size of the inventory - * - * @return The size of the inventory - */ - public int getSize(); - - /** - * Returns the maximum stack size for an ItemStack in this inventory. - * - * @return The maximum size for an ItemStack in this inventory. - */ - public int getMaxStackSize(); - - /** - * This method allows you to change the maximum stack size for an - * inventory. - *

          - * Caveats: - *

            - *
          • Not all inventories respect this value. - *
          • Stacks larger than 127 may be clipped when the world is saved. - *
          • This value is not guaranteed to be preserved; be sure to set it - * before every time you want to set a slot over the max stack size. - *
          • Stacks larger than the default max size for this type of inventory - * may not display correctly in the client. - *
          - * - * @param size The new maximum stack size for items in this inventory. - */ - public void setMaxStackSize(int size); - - /** - * Returns the name of the inventory - * - * @return The String with the name of the inventory - */ - public String getName(); - - /** - * Returns the ItemStack found in the slot at the given index - * - * @param index The index of the Slot's ItemStack to return - * @return The ItemStack in the slot - */ - public ItemStack getItem(int index); - - /** - * Stores the ItemStack at the given index of the inventory. - * - * @param index The index where to put the ItemStack - * @param item The ItemStack to set - */ - public void setItem(int index, ItemStack item); - - /** - * Stores the given ItemStacks in the inventory. This will try to fill - * existing stacks and empty slots as well as it can. - *

          - * The returned HashMap contains what it couldn't store, where the key is - * the index of the parameter, and the value is the ItemStack at that - * index of the varargs parameter. If all items are stored, it will return - * an empty HashMap. - *

          - * If you pass in ItemStacks which exceed the maximum stack size for the - * Material, first they will be added to partial stacks where - * Material.getMaxStackSize() is not exceeded, up to - * Material.getMaxStackSize(). When there are no partial stacks left - * stacks will be split on Inventory.getMaxStackSize() allowing you to - * exceed the maximum stack size for that material. - * - * @param items The ItemStacks to add - * @return A HashMap containing items that didn't fit. - * @throws IllegalArgumentException if items or any element in it is null - */ - public HashMap addItem(ItemStack... items) throws IllegalArgumentException; - - /** - * Removes the given ItemStacks from the inventory. - *

          - * It will try to remove 'as much as possible' from the types and amounts - * you give as arguments. - *

          - * The returned HashMap contains what it couldn't remove, where the key is - * the index of the parameter, and the value is the ItemStack at that - * index of the varargs parameter. If all the given ItemStacks are - * removed, it will return an empty HashMap. - * - * @param items The ItemStacks to remove - * @return A HashMap containing items that couldn't be removed. - * @throws IllegalArgumentException if items is null - */ - public HashMap removeItem(ItemStack... items) throws IllegalArgumentException; - - /** - * Returns all ItemStacks from the inventory - * - * @return An array of ItemStacks from the inventory. - */ - public ItemStack[] getContents(); - - /** - * Completely replaces the inventory's contents. Removes all existing - * contents and replaces it with the ItemStacks given in the array. - * - * @param items A complete replacement for the contents; the length must - * be less than or equal to {@link #getSize()}. - * @throws IllegalArgumentException If the array has more items than the - * inventory. - */ - public void setContents(ItemStack[] items) throws IllegalArgumentException; - - /** - * Checks if the inventory contains any ItemStacks with the given - * materialId - * - * @param materialId The materialId to check for - * @return true if an ItemStack in this inventory contains the materialId - * @deprecated Magic value - */ - @Deprecated - public boolean contains(int materialId); - - /** - * Checks if the inventory contains any ItemStacks with the given - * material. - * - * @param material The material to check for - * @return true if an ItemStack is found with the given Material - * @throws IllegalArgumentException if material is null - */ - public boolean contains(Material material) throws IllegalArgumentException; - - /** - * Checks if the inventory contains any ItemStacks matching the given - * ItemStack. - *

          - * This will only return true if both the type and the amount of the stack - * match. - * - * @param item The ItemStack to match against - * @return false if item is null, true if any exactly matching ItemStacks - * were found - */ - public boolean contains(ItemStack item); - - /** - * Checks if the inventory contains any ItemStacks with the given - * materialId, adding to at least the minimum amount specified. - * - * @param materialId The materialId to check for - * @param amount The minimum amount to look for - * @return true if this contains any matching ItemStack with the given - * materialId and amount - * @deprecated Magic value - */ - @Deprecated - public boolean contains(int materialId, int amount); - - /** - * Checks if the inventory contains any ItemStacks with the given - * material, adding to at least the minimum amount specified. - * - * @param material The material to check for - * @param amount The minimum amount - * @return true if amount is less than 1, true if enough ItemStacks were - * found to add to the given amount - * @throws IllegalArgumentException if material is null - */ - public boolean contains(Material material, int amount) throws IllegalArgumentException; - - /** - * Checks if the inventory contains at least the minimum amount specified - * of exactly matching ItemStacks. - *

          - * An ItemStack only counts if both the type and the amount of the stack - * match. - * - * @param item the ItemStack to match against - * @param amount how many identical stacks to check for - * @return false if item is null, true if amount less than 1, true if - * amount of exactly matching ItemStacks were found - * @see #containsAtLeast(ItemStack, int) - */ - public boolean contains(ItemStack item, int amount); - - /** - * Checks if the inventory contains ItemStacks matching the given - * ItemStack whose amounts sum to at least the minimum amount specified. - * - * @param item the ItemStack to match against - * @param amount the minimum amount - * @return false if item is null, true if amount less than 1, true if - * enough ItemStacks were found to add to the given amount - */ - public boolean containsAtLeast(ItemStack item, int amount); - - /** - * Returns a HashMap with all slots and ItemStacks in the inventory with - * given materialId. - *

          - * The HashMap contains entries where, the key is the slot index, and the - * value is the ItemStack in that slot. If no matching ItemStack with the - * given materialId is found, an empty map is returned. - * - * @param materialId The materialId to look for - * @return A HashMap containing the slot index, ItemStack pairs - * @deprecated Magic value - */ - @Deprecated - public HashMap all(int materialId); - - /** - * Returns a HashMap with all slots and ItemStacks in the inventory with - * the given Material. - *

          - * The HashMap contains entries where, the key is the slot index, and the - * value is the ItemStack in that slot. If no matching ItemStack with the - * given Material is found, an empty map is returned. - * - * @param material The material to look for - * @return A HashMap containing the slot index, ItemStack pairs - * @throws IllegalArgumentException if material is null - */ - public HashMap all(Material material) throws IllegalArgumentException; - - /** - * Finds all slots in the inventory containing any ItemStacks with the - * given ItemStack. This will only match slots if both the type and the - * amount of the stack match - *

          - * The HashMap contains entries where, the key is the slot index, and the - * value is the ItemStack in that slot. If no matching ItemStack with the - * given Material is found, an empty map is returned. - * - * @param item The ItemStack to match against - * @return A map from slot indexes to item at index - */ - public HashMap all(ItemStack item); - - /** - * Finds the first slot in the inventory containing an ItemStack with the - * given materialId. - * - * @param materialId The materialId to look for - * @return The slot index of the given materialId or -1 if not found - * @deprecated Magic value - */ - @Deprecated - public int first(int materialId); - - /** - * Finds the first slot in the inventory containing an ItemStack with the - * given material - * - * @param material The material to look for - * @return The slot index of the given Material or -1 if not found - * @throws IllegalArgumentException if material is null - */ - public int first(Material material) throws IllegalArgumentException; - - /** - * Returns the first slot in the inventory containing an ItemStack with - * the given stack. This will only match a slot if both the type and the - * amount of the stack match - * - * @param item The ItemStack to match against - * @return The slot index of the given ItemStack or -1 if not found - */ - public int first(ItemStack item); - - /** - * Returns the first empty Slot. - * - * @return The first empty Slot found, or -1 if no empty slots. - */ - public int firstEmpty(); - - /** - * Removes all stacks in the inventory matching the given materialId. - * - * @param materialId The material to remove - * @deprecated Magic value - */ - @Deprecated - public void remove(int materialId); - - /** - * Removes all stacks in the inventory matching the given material. - * - * @param material The material to remove - * @throws IllegalArgumentException if material is null - */ - public void remove(Material material) throws IllegalArgumentException; - - /** - * Removes all stacks in the inventory matching the given stack. - *

          - * This will only match a slot if both the type and the amount of the - * stack match - * - * @param item The ItemStack to match against - */ - public void remove(ItemStack item); - - /** - * Clears out a particular slot in the index. - * - * @param index The index to empty. - */ - public void clear(int index); - - /** - * Clears out the whole Inventory. - */ - public void clear(); - - /** - * Gets a list of players viewing the inventory. Note that a player is - * considered to be viewing their own inventory and internal crafting - * screen even when said inventory is not open. They will normally be - * considered to be viewing their inventory even when they have a - * different inventory screen open, but it's possible for customized - * inventory screens to exclude the viewer's inventory, so this should - * never be assumed to be non-empty. - * - * @return A list of HumanEntities who are viewing this Inventory. - */ - public List getViewers(); - - /** - * Returns the title of this inventory. - * - * @return A String with the title. - */ - public String getTitle(); - - /** - * Returns what type of inventory this is. - * - * @return The InventoryType representing the type of inventory. - */ - public InventoryType getType(); - - /** - * Gets the block or entity belonging to the open inventory - * - * @return The holder of the inventory; null if it has no holder. - */ - public InventoryHolder getHolder(); - - @Override - public ListIterator iterator(); - - /** - * Returns an iterator starting at the given index. If the index is - * positive, then the first call to next() will return the item at that - * index; if it is negative, the first call to previous will return the - * item at index (getSize() + index). - * - * @param index The index. - * @return An iterator. - */ - public ListIterator iterator(int index); -} diff --git a/LiveWeather/src/org/bukkit/inventory/InventoryHolder.java b/LiveWeather/src/org/bukkit/inventory/InventoryHolder.java deleted file mode 100755 index 9c06a3d..0000000 --- a/LiveWeather/src/org/bukkit/inventory/InventoryHolder.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.bukkit.inventory; - -public interface InventoryHolder { - - /** - * Get the object's inventory. - * - * @return The inventory. - */ - public Inventory getInventory(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/InventoryView.java b/LiveWeather/src/org/bukkit/inventory/InventoryView.java deleted file mode 100755 index 7e98d52..0000000 --- a/LiveWeather/src/org/bukkit/inventory/InventoryView.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.GameMode; -import org.bukkit.entity.HumanEntity; -import org.bukkit.event.inventory.InventoryType; - -/** - * Represents a view linking two inventories and a single player (whose - * inventory may or may not be one of the two). - *

          - * Note: If you implement this interface but fail to satisfy the expected - * contracts of certain methods, there's no guarantee that the game will work - * as it should. - */ -public abstract class InventoryView { - public final static int OUTSIDE = -999; - /** - * Represents various extra properties of certain inventory windows. - */ - public enum Property { - /** - * The progress of the down-pointing arrow in a brewing inventory. - */ - BREW_TIME(0, InventoryType.BREWING), - /** - * The progress of the right-pointing arrow in a furnace inventory. - */ - COOK_TIME(0, InventoryType.FURNACE), - /** - * The progress of the flame in a furnace inventory. - */ - BURN_TIME(1, InventoryType.FURNACE), - /** - * How many total ticks the current fuel should last. - */ - TICKS_FOR_CURRENT_FUEL(2, InventoryType.FURNACE), - /** - * In an enchanting inventory, the top button's experience level - * value. - */ - ENCHANT_BUTTON1(0, InventoryType.ENCHANTING), - /** - * In an enchanting inventory, the middle button's experience level - * value. - */ - ENCHANT_BUTTON2(1, InventoryType.ENCHANTING), - /** - * In an enchanting inventory, the bottom button's experience level - * value. - */ - ENCHANT_BUTTON3(2, InventoryType.ENCHANTING); - int id; - InventoryType style; - private Property(int id, InventoryType appliesTo) { - this.id = id; - style = appliesTo; - } - - public InventoryType getType() { - return style; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - } - /** - * Get the upper inventory involved in this transaction. - * - * @return the inventory - */ - public abstract Inventory getTopInventory(); - - /** - * Get the lower inventory involved in this transaction. - * - * @return the inventory - */ - public abstract Inventory getBottomInventory(); - - /** - * Get the player viewing. - * - * @return the player - */ - public abstract HumanEntity getPlayer(); - - /** - * Determine the type of inventory involved in the transaction. This - * indicates the window style being shown. It will never return PLAYER, - * since that is common to all windows. - * - * @return the inventory type - */ - public abstract InventoryType getType(); - - /** - * Sets one item in this inventory view by its raw slot ID. - *

          - * Note: If slot ID -999 is chosen, it may be expected that the item is - * dropped on the ground. This is not required behaviour, however. - * - * @param slot The ID as returned by InventoryClickEvent.getRawSlot() - * @param item The new item to put in the slot, or null to clear it. - */ - public void setItem(int slot, ItemStack item) { - if (slot != OUTSIDE) { - if (slot < getTopInventory().getSize()) { - getTopInventory().setItem(convertSlot(slot),item); - } else { - getBottomInventory().setItem(convertSlot(slot),item); - } - } else { - getPlayer().getWorld().dropItemNaturally(getPlayer().getLocation(), item); - } - } - - /** - * Gets one item in this inventory view by its raw slot ID. - * - * @param slot The ID as returned by InventoryClickEvent.getRawSlot() - * @return The item currently in the slot. - */ - public ItemStack getItem(int slot) { - if (slot == OUTSIDE) { - return null; - } - if (slot < getTopInventory().getSize()) { - return getTopInventory().getItem(convertSlot(slot)); - } else { - return getBottomInventory().getItem(convertSlot(slot)); - } - } - - /** - * Sets the item on the cursor of one of the viewing players. - * - * @param item The item to put on the cursor, or null to remove the item - * on their cursor. - */ - public final void setCursor(ItemStack item) { - getPlayer().setItemOnCursor(item); - } - - /** - * Get the item on the cursor of one of the viewing players. - * - * @return The item on the player's cursor, or null if they aren't holding - * one. - */ - public final ItemStack getCursor() { - return getPlayer().getItemOnCursor(); - } - - /** - * Converts a raw slot ID into its local slot ID into whichever of the two - * inventories the slot points to. - *

          - * If the raw slot refers to the upper inventory, it will be returned - * unchanged and thus be suitable for getTopInventory().getItem(); if it - * refers to the lower inventory, the output will differ from the input - * and be suitable for getBottomInventory().getItem(). - * - * @param rawSlot The raw slot ID. - * @return The converted slot ID. - */ - public final int convertSlot(int rawSlot) { - int numInTop = getTopInventory().getSize(); - if (rawSlot < numInTop) { - return rawSlot; - } - int slot = rawSlot - numInTop; - if (getPlayer().getGameMode() == GameMode.CREATIVE && getType() == InventoryType.PLAYER) { - return slot; - } - if (getType() == InventoryType.CRAFTING) { - if(slot < 4) return 39 - slot; - else slot -= 4; - } - if (slot >= 27) slot -= 27; - else slot += 9; - return slot; - } - - /** - * Closes the inventory view. - */ - public final void close() { - getPlayer().closeInventory(); - } - - /** - * Check the total number of slots in this view, combining the upper and - * lower inventories. - *

          - * Note though that it's possible for this to be greater than the sum of - * the two inventories if for example some slots are not being used. - * - * @return The total size - */ - public final int countSlots() { - return getTopInventory().getSize() + getBottomInventory().getSize(); - } - - /** - * Sets an extra property of this inventory if supported by that - * inventory, for example the state of a progress bar. - * - * @param prop the window property to update - * @param value the new value for the window property - * @return true if the property was updated successfully, false if the - * property is not supported by that inventory - */ - public final boolean setProperty(Property prop, int value) { - return getPlayer().setWindowProperty(prop, value); - } - - /** - * Get the title of this inventory window. - * - * @return The title. - */ - public final String getTitle() { - return getTopInventory().getTitle(); - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/ItemFactory.java b/LiveWeather/src/org/bukkit/inventory/ItemFactory.java deleted file mode 100755 index 52a8d4d..0000000 --- a/LiveWeather/src/org/bukkit/inventory/ItemFactory.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.Server; -import org.bukkit.inventory.meta.BookMeta; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; - -/** - * An instance of the ItemFactory can be obtained with {@link - * Server#getItemFactory()}. - *

          - * The ItemFactory is solely responsible for creating item meta containers to - * apply on item stacks. - */ -public interface ItemFactory { - - /** - * This creates a new item meta for the material. - * - * @param material The material to consider as base for the meta - * @return a new ItemMeta that could be applied to an item stack of the - * specified material - */ - ItemMeta getItemMeta(final Material material); - - /** - * This method checks the item meta to confirm that it is applicable (no - * data lost if applied) to the specified ItemStack. - *

          - * A {@link SkullMeta} would not be valid for a sword, but a normal {@link - * ItemMeta} from an enchanted dirt block would. - * - * @param meta Meta to check - * @param stack Item that meta will be applied to - * @return true if the meta can be applied without losing data, false - * otherwise - * @throws IllegalArgumentException if the meta was not created by this - * factory - */ - boolean isApplicable(final ItemMeta meta, final ItemStack stack) throws IllegalArgumentException; - - /** - * This method checks the item meta to confirm that it is applicable (no - * data lost if applied) to the specified Material. - *

          - * A {@link SkullMeta} would not be valid for a sword, but a normal {@link - * ItemMeta} from an enchanted dirt block would. - * - * @param meta Meta to check - * @param material Material that meta will be applied to - * @return true if the meta can be applied without losing data, false - * otherwise - * @throws IllegalArgumentException if the meta was not created by this - * factory - */ - boolean isApplicable(final ItemMeta meta, final Material material) throws IllegalArgumentException; - - /** - * This method is used to compare two item meta data objects. - * - * @param meta1 First meta to compare, and may be null to indicate no data - * @param meta2 Second meta to compare, and may be null to indicate no - * data - * @return false if one of the meta has data the other does not, otherwise - * true - * @throws IllegalArgumentException if either meta was not created by this - * factory - */ - boolean equals(final ItemMeta meta1, final ItemMeta meta2) throws IllegalArgumentException; - - /** - * Returns an appropriate item meta for the specified stack. - *

          - * The item meta returned will always be a valid meta for a given - * ItemStack of the specified material. It may be a more or less specific - * meta, and could also be the same meta or meta type as the parameter. - * The item meta returned will also always be the most appropriate meta. - *

          - * Example, if a {@link SkullMeta} is being applied to a book, this method - * would return a {@link BookMeta} containing all information in the - * specified meta that is applicable to an {@link ItemMeta}, the highest - * common interface. - * - * @param meta the meta to convert - * @param stack the stack to convert the meta for - * @return An appropriate item meta for the specified item stack. No - * guarantees are made as to if a copy is returned. This will be null - * for a stack of air. - * @throws IllegalArgumentException if the specified meta was not created - * by this factory - */ - ItemMeta asMetaFor(final ItemMeta meta, final ItemStack stack) throws IllegalArgumentException; - - /** - * Returns an appropriate item meta for the specified material. - *

          - * The item meta returned will always be a valid meta for a given - * ItemStack of the specified material. It may be a more or less specific - * meta, and could also be the same meta or meta type as the parameter. - * The item meta returned will also always be the most appropriate meta. - *

          - * Example, if a {@link SkullMeta} is being applied to a book, this method - * would return a {@link BookMeta} containing all information in the - * specified meta that is applicable to an {@link ItemMeta}, the highest - * common interface. - * - * @param meta the meta to convert - * @param material the material to convert the meta for - * @return An appropriate item meta for the specified item material. No - * guarantees are made as to if a copy is returned. This will be null for air. - * @throws IllegalArgumentException if the specified meta was not created - * by this factory - */ - ItemMeta asMetaFor(final ItemMeta meta, final Material material) throws IllegalArgumentException; - - /** - * Returns the default color for all leather armor. - * - * @return the default color for leather armor - */ - Color getDefaultLeatherColor(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/ItemStack.java b/LiveWeather/src/org/bukkit/inventory/ItemStack.java deleted file mode 100755 index 6137c99..0000000 --- a/LiveWeather/src/org/bukkit/inventory/ItemStack.java +++ /dev/null @@ -1,603 +0,0 @@ -package org.bukkit.inventory; - -import com.google.common.collect.ImmutableMap; -import java.util.LinkedHashMap; -import java.util.Map; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.Utility; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.material.MaterialData; - -/** - * Represents a stack of items - */ -public class ItemStack implements Cloneable, ConfigurationSerializable { - private int type = 0; - private int amount = 0; - private MaterialData data = null; - private short durability = 0; - private ItemMeta meta; - - @Utility - protected ItemStack() {} - - /** - * Defaults stack size to 1, with no extra data - * - * @param type item material id - * @deprecated Magic value - */ - @Deprecated - public ItemStack(final int type) { - this(type, 1); - } - - /** - * Defaults stack size to 1, with no extra data - * - * @param type item material - */ - public ItemStack(final Material type) { - this(type, 1); - } - - /** - * An item stack with no extra data - * - * @param type item material id - * @param amount stack size - * @deprecated Magic value - */ - @Deprecated - public ItemStack(final int type, final int amount) { - this(type, amount, (short) 0); - } - - /** - * An item stack with no extra data - * - * @param type item material - * @param amount stack size - */ - public ItemStack(final Material type, final int amount) { - this(type.getId(), amount); - } - - /** - * An item stack with the specified damage / durability - * - * @param type item material id - * @param amount stack size - * @param damage durability / damage - * @deprecated Magic value - */ - @Deprecated - public ItemStack(final int type, final int amount, final short damage) { - this.type = type; - this.amount = amount; - this.durability = damage; - } - - /** - * An item stack with the specified damage / durabiltiy - * - * @param type item material - * @param amount stack size - * @param damage durability / damage - */ - public ItemStack(final Material type, final int amount, final short damage) { - this(type.getId(), amount, damage); - } - - /** - * @deprecated this method uses an ambiguous data byte object - */ - @Deprecated - public ItemStack(final int type, final int amount, final short damage, final Byte data) { - this.type = type; - this.amount = amount; - this.durability = damage; - if (data != null) { - createData(data); - this.durability = data; - } - } - - /** - * @deprecated this method uses an ambiguous data byte object - */ - @Deprecated - public ItemStack(final Material type, final int amount, final short damage, final Byte data) { - this(type.getId(), amount, damage, data); - } - - /** - * Creates a new item stack derived from the specified stack - * - * @param stack the stack to copy - * @throws IllegalArgumentException if the specified stack is null or - * returns an item meta not created by the item factory - */ - public ItemStack(final ItemStack stack) throws IllegalArgumentException { - Validate.notNull(stack, "Cannot copy null stack"); - this.type = stack.getTypeId(); - this.amount = stack.getAmount(); - this.durability = stack.getDurability(); - this.data = stack.getData(); - if (stack.hasItemMeta()) { - setItemMeta0(stack.getItemMeta(), getType0()); - } - } - - /** - * Gets the type of this item - * - * @return Type of the items in this stack - */ - @Utility - public Material getType() { - return getType0(getTypeId()); - } - - private Material getType0() { - return getType0(this.type); - } - - private static Material getType0(int id) { - Material material = Material.getMaterial(id); - return material == null ? Material.AIR : material; - } - - /** - * Sets the type of this item - *

          - * Note that in doing so you will reset the MaterialData for this stack - * - * @param type New type to set the items in this stack to - */ - @Utility - public void setType(Material type) { - Validate.notNull(type, "Material cannot be null"); - setTypeId(type.getId()); - } - - /** - * Gets the type id of this item - * - * @return Type Id of the items in this stack - * @deprecated Magic value - */ - @Deprecated - public int getTypeId() { - return type; - } - - /** - * Sets the type id of this item - *

          - * Note that in doing so you will reset the MaterialData for this stack - * - * @param type New type id to set the items in this stack to - * @deprecated Magic value - */ - @Deprecated - public void setTypeId(int type) { - this.type = type; - if (this.meta != null) { - this.meta = Bukkit.getItemFactory().asMetaFor(meta, getType0()); - } - createData((byte) 0); - } - - /** - * Gets the amount of items in this stack - * - * @return Amount of items in this stick - */ - public int getAmount() { - return amount; - } - - /** - * Sets the amount of items in this stack - * - * @param amount New amount of items in this stack - */ - public void setAmount(int amount) { - this.amount = amount; - } - - /** - * Gets the MaterialData for this stack of items - * - * @return MaterialData for this item - */ - public MaterialData getData() { - Material mat = getType(); - if (data == null && mat != null && mat.getData() != null) { - data = mat.getNewData((byte) this.getDurability()); - } - - return data; - } - - /** - * Sets the MaterialData for this stack of items - * - * @param data New MaterialData for this item - */ - public void setData(MaterialData data) { - Material mat = getType(); - - if (data == null || mat == null || mat.getData() == null) { - this.data = data; - } else { - if ((data.getClass() == mat.getData()) || (data.getClass() == MaterialData.class)) { - this.data = data; - } else { - throw new IllegalArgumentException("Provided data is not of type " + mat.getData().getName() + ", found " + data.getClass().getName()); - } - } - } - - /** - * Sets the durability of this item - * - * @param durability Durability of this item - */ - public void setDurability(final short durability) { - this.durability = durability; - } - - /** - * Gets the durability of this item - * - * @return Durability of this item - */ - public short getDurability() { - return durability; - } - - /** - * Get the maximum stacksize for the material hold in this ItemStack. - * (Returns -1 if it has no idea) - * - * @return The maximum you can stack this material to. - */ - @Utility - public int getMaxStackSize() { - Material material = getType(); - if (material != null) { - return material.getMaxStackSize(); - } - return -1; - } - - private void createData(final byte data) { - Material mat = Material.getMaterial(type); - - if (mat == null) { - this.data = new MaterialData(type, data); - } else { - this.data = mat.getNewData(data); - } - } - - @Override - @Utility - public String toString() { - StringBuilder toString = new StringBuilder("ItemStack{").append(getType().name()).append(" x ").append(getAmount()); - if (hasItemMeta()) { - toString.append(", ").append(getItemMeta()); - } - return toString.append('}').toString(); - } - - @Override - @Utility - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ItemStack)) { - return false; - } - - ItemStack stack = (ItemStack) obj; - return getAmount() == stack.getAmount() && isSimilar(stack); - } - - /** - * This method is the same as equals, but does not consider stack size - * (amount). - * - * @param stack the item stack to compare to - * @return true if the two stacks are equal, ignoring the amount - */ - @Utility - public boolean isSimilar(ItemStack stack) { - if (stack == null) { - return false; - } - if (stack == this) { - return true; - } - return getTypeId() == stack.getTypeId() && getDurability() == stack.getDurability() && hasItemMeta() == stack.hasItemMeta() && (hasItemMeta() ? Bukkit.getItemFactory().equals(getItemMeta(), stack.getItemMeta()) : true); - } - - @Override - public ItemStack clone() { - try { - ItemStack itemStack = (ItemStack) super.clone(); - - if (this.meta != null) { - itemStack.meta = this.meta.clone(); - } - - if (this.data != null) { - itemStack.data = this.data.clone(); - } - - return itemStack; - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } - - @Override - @Utility - public final int hashCode() { - int hash = 1; - - hash = hash * 31 + getTypeId(); - hash = hash * 31 + getAmount(); - hash = hash * 31 + (getDurability() & 0xffff); - hash = hash * 31 + (hasItemMeta() ? (meta == null ? getItemMeta().hashCode() : meta.hashCode()) : 0); - - return hash; - } - - /** - * Checks if this ItemStack contains the given {@link Enchantment} - * - * @param ench Enchantment to test - * @return True if this has the given enchantment - */ - public boolean containsEnchantment(Enchantment ench) { - return meta == null ? false : meta.hasEnchant(ench); - } - - /** - * Gets the level of the specified enchantment on this item stack - * - * @param ench Enchantment to check - * @return Level of the enchantment, or 0 - */ - public int getEnchantmentLevel(Enchantment ench) { - return meta == null ? 0 : meta.getEnchantLevel(ench); - } - - /** - * Gets a map containing all enchantments and their levels on this item. - * - * @return Map of enchantments. - */ - public Map getEnchantments() { - return meta == null ? ImmutableMap.of() : meta.getEnchants(); - } - - /** - * Adds the specified enchantments to this item stack. - *

          - * This method is the same as calling {@link - * #addEnchantment(org.bukkit.enchantments.Enchantment, int)} for each - * element of the map. - * - * @param enchantments Enchantments to add - * @throws IllegalArgumentException if the specified enchantments is null - * @throws IllegalArgumentException if any specific enchantment or level - * is null. Warning: Some enchantments may be added before this - * exception is thrown. - */ - @Utility - public void addEnchantments(Map enchantments) { - Validate.notNull(enchantments, "Enchantments cannot be null"); - for (Map.Entry entry : enchantments.entrySet()) { - addEnchantment(entry.getKey(), entry.getValue()); - } - } - - /** - * Adds the specified {@link Enchantment} to this item stack. - *

          - * If this item stack already contained the given enchantment (at any - * level), it will be replaced. - * - * @param ench Enchantment to add - * @param level Level of the enchantment - * @throws IllegalArgumentException if enchantment null, or enchantment is - * not applicable - */ - @Utility - public void addEnchantment(Enchantment ench, int level) { - Validate.notNull(ench, "Enchantment cannot be null"); - if ((level < ench.getStartLevel()) || (level > ench.getMaxLevel())) { - throw new IllegalArgumentException("Enchantment level is either too low or too high (given " + level + ", bounds are " + ench.getStartLevel() + " to " + ench.getMaxLevel() + ")"); - } else if (!ench.canEnchantItem(this)) { - throw new IllegalArgumentException("Specified enchantment cannot be applied to this itemstack"); - } - - addUnsafeEnchantment(ench, level); - } - - /** - * Adds the specified enchantments to this item stack in an unsafe manner. - *

          - * This method is the same as calling {@link - * #addUnsafeEnchantment(org.bukkit.enchantments.Enchantment, int)} for - * each element of the map. - * - * @param enchantments Enchantments to add - */ - @Utility - public void addUnsafeEnchantments(Map enchantments) { - for (Map.Entry entry : enchantments.entrySet()) { - addUnsafeEnchantment(entry.getKey(), entry.getValue()); - } - } - - /** - * Adds the specified {@link Enchantment} to this item stack. - *

          - * If this item stack already contained the given enchantment (at any - * level), it will be replaced. - *

          - * This method is unsafe and will ignore level restrictions or item type. - * Use at your own discretion. - * - * @param ench Enchantment to add - * @param level Level of the enchantment - */ - public void addUnsafeEnchantment(Enchantment ench, int level) { - (meta == null ? meta = Bukkit.getItemFactory().getItemMeta(getType0()) : meta).addEnchant(ench, level, true); - } - - /** - * Removes the specified {@link Enchantment} if it exists on this - * ItemStack - * - * @param ench Enchantment to remove - * @return Previous level, or 0 - */ - public int removeEnchantment(Enchantment ench) { - int level = getEnchantmentLevel(ench); - if (level == 0 || meta == null) { - return level; - } - meta.removeEnchant(ench); - return level; - } - - @Utility - public Map serialize() { - Map result = new LinkedHashMap(); - - result.put("type", getType().name()); - - if (getDurability() != 0) { - result.put("damage", getDurability()); - } - - if (getAmount() != 1) { - result.put("amount", getAmount()); - } - - ItemMeta meta = getItemMeta(); - if (!Bukkit.getItemFactory().equals(meta, null)) { - result.put("meta", meta); - } - - return result; - } - - /** - * Required method for configuration serialization - * - * @param args map to deserialize - * @return deserialized item stack - * @see ConfigurationSerializable - */ - public static ItemStack deserialize(Map args) { - Material type = Material.getMaterial((String) args.get("type")); - short damage = 0; - int amount = 1; - - if (args.containsKey("damage")) { - damage = ((Number) args.get("damage")).shortValue(); - } - - if (args.containsKey("amount")) { - amount = (Integer) args.get("amount"); - } - - ItemStack result = new ItemStack(type, amount, damage); - - if (args.containsKey("enchantments")) { // Backward compatiblity, @deprecated - Object raw = args.get("enchantments"); - - if (raw instanceof Map) { - Map map = (Map) raw; - - for (Map.Entry entry : map.entrySet()) { - Enchantment enchantment = Enchantment.getByName(entry.getKey().toString()); - - if ((enchantment != null) && (entry.getValue() instanceof Integer)) { - result.addUnsafeEnchantment(enchantment, (Integer) entry.getValue()); - } - } - } - } else if (args.containsKey("meta")) { // We cannot and will not have meta when enchantments (pre-ItemMeta) exist - Object raw = args.get("meta"); - if (raw instanceof ItemMeta) { - result.setItemMeta((ItemMeta) raw); - } - } - - return result; - } - - /** - * Get a copy of this ItemStack's {@link ItemMeta}. - * - * @return a copy of the current ItemStack's ItemData - */ - public ItemMeta getItemMeta() { - return this.meta == null ? Bukkit.getItemFactory().getItemMeta(getType0()) : this.meta.clone(); - } - - /** - * Checks to see if any meta data has been defined. - * - * @return Returns true if some meta data has been set for this item - */ - public boolean hasItemMeta() { - return !Bukkit.getItemFactory().equals(meta, null); - } - - /** - * Set the ItemMeta of this ItemStack. - * - * @param itemMeta new ItemMeta, or null to indicate meta data be cleared. - * @return True if successfully applied ItemMeta, see {@link - * ItemFactory#isApplicable(ItemMeta, ItemStack)} - * @throws IllegalArgumentException if the item meta was not created by - * the {@link ItemFactory} - */ - public boolean setItemMeta(ItemMeta itemMeta) { - return setItemMeta0(itemMeta, getType0()); - } - - /* - * Cannot be overridden, so it's safe for constructor call - */ - private boolean setItemMeta0(ItemMeta itemMeta, Material material) { - if (itemMeta == null) { - this.meta = null; - return true; - } - if (!Bukkit.getItemFactory().isApplicable(itemMeta, material)) { - return false; - } - this.meta = Bukkit.getItemFactory().asMetaFor(itemMeta, material); - if (this.meta == itemMeta) { - this.meta = itemMeta.clone(); - } - - return true; - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/MerchantInventory.java b/LiveWeather/src/org/bukkit/inventory/MerchantInventory.java deleted file mode 100755 index 163f459..0000000 --- a/LiveWeather/src/org/bukkit/inventory/MerchantInventory.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.bukkit.inventory; - -public interface MerchantInventory extends Inventory { -} diff --git a/LiveWeather/src/org/bukkit/inventory/PlayerInventory.java b/LiveWeather/src/org/bukkit/inventory/PlayerInventory.java deleted file mode 100755 index d18c9f4..0000000 --- a/LiveWeather/src/org/bukkit/inventory/PlayerInventory.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.bukkit.inventory; - -import org.bukkit.entity.HumanEntity; - -/** - * Interface to the inventory of a Player, including the four armor slots. - */ -public interface PlayerInventory extends Inventory { - - /** - * Get all ItemStacks from the armor slots - * - * @return All the ItemStacks from the armor slots - */ - public ItemStack[] getArmorContents(); - - /** - * Return the ItemStack from the helmet slot - * - * @return The ItemStack in the helmet slot - */ - public ItemStack getHelmet(); - - /** - * Return the ItemStack from the chestplate slot - * - * @return The ItemStack in the chestplate slot - */ - public ItemStack getChestplate(); - - /** - * Return the ItemStack from the leg slot - * - * @return The ItemStack in the leg slot - */ - public ItemStack getLeggings(); - - /** - * Return the ItemStack from the boots slot - * - * @return The ItemStack in the boots slot - */ - public ItemStack getBoots(); - - /** - * Put the given ItemStacks into the armor slots - * - * @param items The ItemStacks to use as armour - */ - public void setArmorContents(ItemStack[] items); - - /** - * Put the given ItemStack into the helmet slot. This does not check if - * the ItemStack is a helmet - * - * @param helmet The ItemStack to use as helmet - */ - public void setHelmet(ItemStack helmet); - - /** - * Put the given ItemStack into the chestplate slot. This does not check - * if the ItemStack is a chestplate - * - * @param chestplate The ItemStack to use as chestplate - */ - public void setChestplate(ItemStack chestplate); - - /** - * Put the given ItemStack into the leg slot. This does not check if the - * ItemStack is a pair of leggings - * - * @param leggings The ItemStack to use as leggings - */ - public void setLeggings(ItemStack leggings); - - /** - * Put the given ItemStack into the boots slot. This does not check if the - * ItemStack is a boots - * - * @param boots The ItemStack to use as boots - */ - public void setBoots(ItemStack boots); - - /** - * Returns the ItemStack currently hold - * - * @return The currently held ItemStack - */ - public ItemStack getItemInHand(); - - /** - * Sets the item in hand - * - * @param stack Stack to set - */ - public void setItemInHand(ItemStack stack); - - /** - * Get the slot number of the currently held item - * - * @return Held item slot number - */ - public int getHeldItemSlot(); - - /** - * Set the slot number of the currently held item. - *

          - * This validates whether the slot is between 0 and 8 inclusive. - * - * @param slot The new slot number - * @throws IllegalArgumentException Thrown if slot is not between 0 and 8 - * inclusive - */ - public void setHeldItemSlot(int slot); - - /** - * Clears all matching items from the inventory. Setting either value to - * -1 will skip it's check, while setting both to -1 will clear all items - * in your inventory unconditionally. - * - * @param id the id of the item you want to clear from the inventory - * @param data the data of the item you want to clear from the inventory - * @return The number of items cleared - * @deprecated Magic value - */ - @Deprecated - public int clear(int id, int data); - - public HumanEntity getHolder(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/Recipe.java b/LiveWeather/src/org/bukkit/inventory/Recipe.java deleted file mode 100755 index 7977ce2..0000000 --- a/LiveWeather/src/org/bukkit/inventory/Recipe.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.bukkit.inventory; - -/** - * Represents some type of crafting recipe. - */ -public interface Recipe { - - /** - * Get the result of this recipe. - * - * @return The result stack - */ - ItemStack getResult(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/ShapedRecipe.java b/LiveWeather/src/org/bukkit/inventory/ShapedRecipe.java deleted file mode 100755 index 2796473..0000000 --- a/LiveWeather/src/org/bukkit/inventory/ShapedRecipe.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.bukkit.inventory; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang.Validate; - -import org.bukkit.Material; -import org.bukkit.material.MaterialData; - -/** - * Represents a shaped (ie normal) crafting recipe. - */ -public class ShapedRecipe implements Recipe { - private ItemStack output; - private String[] rows; - private Map ingredients = new HashMap(); - - /** - * Create a shaped recipe to craft the specified ItemStack. The - * constructor merely determines the result and type; to set the actual - * recipe, you'll need to call the appropriate methods. - * - * @param result The item you want the recipe to create. - * @see ShapedRecipe#shape(String...) - * @see ShapedRecipe#setIngredient(char, Material) - * @see ShapedRecipe#setIngredient(char, Material, int) - * @see ShapedRecipe#setIngredient(char, MaterialData) - */ - public ShapedRecipe(ItemStack result) { - this.output = new ItemStack(result); - } - - /** - * Set the shape of this recipe to the specified rows. Each character - * represents a different ingredient; exactly what each character - * represents is set separately. The first row supplied corresponds with - * the upper most part of the recipe on the workbench e.g. if all three - * rows are supplies the first string represents the top row on the - * workbench. - * - * @param shape The rows of the recipe (up to 3 rows). - * @return The changed recipe, so you can chain calls. - */ - public ShapedRecipe shape(final String... shape) { - Validate.notNull(shape, "Must provide a shape"); - Validate.isTrue(shape.length > 0 && shape.length < 4, "Crafting recipes should be 1, 2, 3 rows, not ", shape.length); - - for (String row : shape) { - Validate.notNull(row, "Shape cannot have null rows"); - Validate.isTrue(row.length() > 0 && row.length() < 4, "Crafting rows should be 1, 2, or 3 characters, not ", row.length()); - } - this.rows = new String[shape.length]; - for (int i = 0; i < shape.length; i++) { - this.rows[i] = shape[i]; - } - - // Remove character mappings for characters that no longer exist in the shape - HashMap newIngredients = new HashMap(); - for (String row : shape) { - for (Character c : row.toCharArray()) { - newIngredients.put(c, ingredients.get(c)); - } - } - this.ingredients = newIngredients; - - return this; - } - - /** - * Sets the material that a character in the recipe shape refers to. - * - * @param key The character that represents the ingredient in the shape. - * @param ingredient The ingredient. - * @return The changed recipe, so you can chain calls. - */ - public ShapedRecipe setIngredient(char key, MaterialData ingredient) { - return setIngredient(key, ingredient.getItemType(), ingredient.getData()); - } - - /** - * Sets the material that a character in the recipe shape refers to. - * - * @param key The character that represents the ingredient in the shape. - * @param ingredient The ingredient. - * @return The changed recipe, so you can chain calls. - */ - public ShapedRecipe setIngredient(char key, Material ingredient) { - return setIngredient(key, ingredient, 0); - } - - /** - * Sets the material that a character in the recipe shape refers to. - * - * @param key The character that represents the ingredient in the shape. - * @param ingredient The ingredient. - * @param raw The raw material data as an integer. - * @return The changed recipe, so you can chain calls. - * @deprecated Magic value - */ - @Deprecated - public ShapedRecipe setIngredient(char key, Material ingredient, int raw) { - Validate.isTrue(ingredients.containsKey(key), "Symbol does not appear in the shape:", key); - - // -1 is the old wildcard, map to Short.MAX_VALUE as the new one - if (raw == -1) { - raw = Short.MAX_VALUE; - } - - ingredients.put(key, new ItemStack(ingredient, 1, (short) raw)); - return this; - } - - /** - * Get a copy of the ingredients map. - * - * @return The mapping of character to ingredients. - */ - public Map getIngredientMap() { - HashMap result = new HashMap(); - for (Map.Entry ingredient : ingredients.entrySet()) { - if (ingredient.getValue() == null) { - result.put(ingredient.getKey(), null); - } else { - result.put(ingredient.getKey(), ingredient.getValue().clone()); - } - } - return result; - } - - /** - * Get the shape. - * - * @return The recipe's shape. - */ - public String[] getShape() { - return rows.clone(); - } - - /** - * Get the result. - * - * @return The result stack. - */ - public ItemStack getResult() { - return output.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/ShapelessRecipe.java b/LiveWeather/src/org/bukkit/inventory/ShapelessRecipe.java deleted file mode 100755 index a718086..0000000 --- a/LiveWeather/src/org/bukkit/inventory/ShapelessRecipe.java +++ /dev/null @@ -1,226 +0,0 @@ -package org.bukkit.inventory; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.lang.Validate; - -import org.bukkit.Material; -import org.bukkit.material.MaterialData; - -/** - * Represents a shapeless recipe, where the arrangement of the ingredients on - * the crafting grid does not matter. - */ -public class ShapelessRecipe implements Recipe { - private ItemStack output; - private List ingredients = new ArrayList(); - - /** - * Create a shapeless recipe to craft the specified ItemStack. The - * constructor merely determines the result and type; to set the actual - * recipe, you'll need to call the appropriate methods. - * - * @param result The item you want the recipe to create. - * @see ShapelessRecipe#addIngredient(Material) - * @see ShapelessRecipe#addIngredient(MaterialData) - * @see ShapelessRecipe#addIngredient(Material,int) - * @see ShapelessRecipe#addIngredient(int,Material) - * @see ShapelessRecipe#addIngredient(int,MaterialData) - * @see ShapelessRecipe#addIngredient(int,Material,int) - */ - public ShapelessRecipe(ItemStack result) { - this.output = new ItemStack(result); - } - - /** - * Adds the specified ingredient. - * - * @param ingredient The ingredient to add. - * @return The changed recipe, so you can chain calls. - */ - public ShapelessRecipe addIngredient(MaterialData ingredient) { - return addIngredient(1, ingredient); - } - - /** - * Adds the specified ingredient. - * - * @param ingredient The ingredient to add. - * @return The changed recipe, so you can chain calls. - */ - public ShapelessRecipe addIngredient(Material ingredient) { - return addIngredient(1, ingredient, 0); - } - - /** - * Adds the specified ingredient. - * - * @param ingredient The ingredient to add. - * @param rawdata The data value, or -1 to allow any data value. - * @return The changed recipe, so you can chain calls. - * @deprecated Magic value - */ - @Deprecated - public ShapelessRecipe addIngredient(Material ingredient, int rawdata) { - return addIngredient(1, ingredient, rawdata); - } - - /** - * Adds multiples of the specified ingredient. - * - * @param count How many to add (can't be more than 9!) - * @param ingredient The ingredient to add. - * @return The changed recipe, so you can chain calls. - */ - public ShapelessRecipe addIngredient(int count, MaterialData ingredient) { - return addIngredient(count, ingredient.getItemType(), ingredient.getData()); - } - - /** - * Adds multiples of the specified ingredient. - * - * @param count How many to add (can't be more than 9!) - * @param ingredient The ingredient to add. - * @return The changed recipe, so you can chain calls. - */ - public ShapelessRecipe addIngredient(int count, Material ingredient) { - return addIngredient(count, ingredient, 0); - } - - /** - * Adds multiples of the specified ingredient. - * - * @param count How many to add (can't be more than 9!) - * @param ingredient The ingredient to add. - * @param rawdata The data value, or -1 to allow any data value. - * @return The changed recipe, so you can chain calls. - * @deprecated Magic value - */ - @Deprecated - public ShapelessRecipe addIngredient(int count, Material ingredient, int rawdata) { - Validate.isTrue(ingredients.size() + count <= 9, "Shapeless recipes cannot have more than 9 ingredients"); - - // -1 is the old wildcard, map to Short.MAX_VALUE as the new one - if (rawdata == -1) { - rawdata = Short.MAX_VALUE; - } - - while (count-- > 0) { - ingredients.add(new ItemStack(ingredient, 1, (short) rawdata)); - } - return this; - } - - /** - * Removes an ingredient from the list. If the ingredient occurs multiple - * times, only one instance of it is removed. Only removes exact matches, - * with a data value of 0. - * - * @param ingredient The ingredient to remove - * @return The changed recipe. - */ - public ShapelessRecipe removeIngredient(Material ingredient) { - return removeIngredient(ingredient, 0); - } - - /** - * Removes an ingredient from the list. If the ingredient occurs multiple - * times, only one instance of it is removed. If the data value is -1, - * only ingredients with a -1 data value will be removed. - * - * @param ingredient The ingredient to remove - * @return The changed recipe. - */ - public ShapelessRecipe removeIngredient(MaterialData ingredient) { - return removeIngredient(ingredient.getItemType(), ingredient.getData()); - } - - /** - * Removes multiple instances of an ingredient from the list. If there are - * less instances then specified, all will be removed. Only removes exact - * matches, with a data value of 0. - * - * @param count The number of copies to remove. - * @param ingredient The ingredient to remove - * @return The changed recipe. - */ - public ShapelessRecipe removeIngredient(int count, Material ingredient) { - return removeIngredient(count, ingredient, 0); - } - - /** - * Removes multiple instances of an ingredient from the list. If there are - * less instances then specified, all will be removed. If the data value - * is -1, only ingredients with a -1 data value will be removed. - * - * @param count The number of copies to remove. - * @param ingredient The ingredient to remove. - * @return The changed recipe. - */ - public ShapelessRecipe removeIngredient(int count, MaterialData ingredient) { - return removeIngredient(count, ingredient.getItemType(), ingredient.getData()); - } - - /** - * Removes an ingredient from the list. If the ingredient occurs multiple - * times, only one instance of it is removed. If the data value is -1, - * only ingredients with a -1 data value will be removed. - * - * @param ingredient The ingredient to remove - * @param rawdata The data value; - * @return The changed recipe. - * @deprecated Magic value - */ - @Deprecated - public ShapelessRecipe removeIngredient(Material ingredient, int rawdata) { - return removeIngredient(1, ingredient, rawdata); - } - - /** - * Removes multiple instances of an ingredient from the list. If there are - * less instances then specified, all will be removed. If the data value - * is -1, only ingredients with a -1 data value will be removed. - * - * @param count The number of copies to remove. - * @param ingredient The ingredient to remove. - * @param rawdata The data value. - * @return The changed recipe. - * @deprecated Magic value - */ - @Deprecated - public ShapelessRecipe removeIngredient(int count, Material ingredient, int rawdata) { - Iterator iterator = ingredients.iterator(); - while (count > 0 && iterator.hasNext()) { - ItemStack stack = iterator.next(); - if (stack.getType() == ingredient && stack.getDurability() == rawdata) { - iterator.remove(); - count--; - } - } - return this; - } - - /** - * Get the result of this recipe. - * - * @return The result stack. - */ - public ItemStack getResult() { - return output.clone(); - } - - /** - * Get the list of ingredients used for this recipe. - * - * @return The input list - */ - public List getIngredientList() { - ArrayList result = new ArrayList(ingredients.size()); - for (ItemStack ingredient : ingredients) { - result.add(ingredient.clone()); - } - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/BookMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/BookMeta.java deleted file mode 100755 index 0017596..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/BookMeta.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.bukkit.inventory.meta; - -import java.util.List; - -import org.bukkit.Material; - -/** - * Represents a book ({@link Material#BOOK_AND_QUILL} or {@link - * Material#WRITTEN_BOOK}) that can have a title, an author, and pages. - */ -public interface BookMeta extends ItemMeta { - - /** - * Checks for the existence of a title in the book. - * - * @return true if the book has a title - */ - boolean hasTitle(); - - /** - * Gets the title of the book. - *

          - * Plugins should check that hasTitle() returns true before calling this - * method. - * - * @return the title of the book - */ - String getTitle(); - - /** - * Sets the title of the book. - *

          - * Limited to 16 characters. Removes title when given null. - * - * @param title the title to set - * @return true if the title was successfully set - */ - boolean setTitle(String title); - - /** - * Checks for the existence of an author in the book. - * - * @return the author of the book - */ - boolean hasAuthor(); - - /** - * Gets the author of the book. - *

          - * Plugins should check that hasAuthor() returns true before calling this - * method. - * - * @return the author of the book - */ - String getAuthor(); - - /** - * Sets the author of the book. Removes author when given null. - * - * @param author the author of the book - */ - void setAuthor(String author); - - /** - * Checks for the existence of pages in the book. - * - * @return true if the book has pages - */ - boolean hasPages(); - - /** - * Gets the specified page in the book. The given page must exist. - * - * @param page the page number to get - * @return the page from the book - */ - String getPage(int page); - - /** - * Sets the specified page in the book. Pages of the book must be - * contiguous. - *

          - * The data can be up to 256 characters in length, additional characters - * are truncated. - * - * @param page the page number to set - * @param data the data to set for that page - */ - void setPage(int page, String data); - - /** - * Gets all the pages in the book. - * - * @return list of all the pages in the book - */ - List getPages(); - - /** - * Clears the existing book pages, and sets the book to use the provided - * pages. Maximum 50 pages with 256 characters per page. - * - * @param pages A list of pages to set the book to use - */ - void setPages(List pages); - - /** - * Clears the existing book pages, and sets the book to use the provided - * pages. Maximum 50 pages with 256 characters per page. - * - * @param pages A list of strings, each being a page - */ - void setPages(String... pages); - - /** - * Adds new pages to the end of the book. Up to a maximum of 50 pages with - * 256 characters per page. - * - * @param pages A list of strings, each being a page - */ - void addPage(String... pages); - - /** - * Gets the number of pages in the book. - * - * @return the number of pages in the book - */ - int getPageCount(); - - BookMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/EnchantmentStorageMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/EnchantmentStorageMeta.java deleted file mode 100755 index fb93d03..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/EnchantmentStorageMeta.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bukkit.inventory.meta; - -import java.util.Map; - -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; - -/** - * EnchantmentMeta is specific to items that can store enchantments, as - * opposed to being enchanted. {@link Material#ENCHANTED_BOOK} is an example - * of an item with enchantment storage. - */ -public interface EnchantmentStorageMeta extends ItemMeta { - - /** - * Checks for the existence of any stored enchantments. - * - * @return true if an enchantment exists on this meta - */ - boolean hasStoredEnchants(); - - /** - * Checks for storage of the specified enchantment. - * - * @param ench enchantment to check - * @return true if this enchantment is stored in this meta - */ - boolean hasStoredEnchant(Enchantment ench); - - /** - * Checks for the level of the stored enchantment. - * - * @param ench enchantment to check - * @return The level that the specified stored enchantment has, or 0 if - * none - */ - int getStoredEnchantLevel(Enchantment ench); - - /** - * Gets a copy the stored enchantments in this ItemMeta. - * - * @return An immutable copy of the stored enchantments - */ - Map getStoredEnchants(); - - /** - * Stores the specified enchantment in this item meta. - * - * @param ench Enchantment to store - * @param level Level for the enchantment - * @param ignoreLevelRestriction this indicates the enchantment should be - * applied, ignoring the level limit - * @return true if the item meta changed as a result of this call, false - * otherwise - * @throws IllegalArgumentException if enchantment is null - */ - boolean addStoredEnchant(Enchantment ench, int level, boolean ignoreLevelRestriction); - - /** - * Remove the specified stored enchantment from this item meta. - * - * @param ench Enchantment to remove - * @return true if the item meta changed as a result of this call, false - * otherwise - * @throws IllegalArgumentException if enchantment is null - */ - boolean removeStoredEnchant(Enchantment ench) throws IllegalArgumentException; - - /** - * Checks if the specified enchantment conflicts with any enchantments in - * this ItemMeta. - * - * @param ench enchantment to test - * @return true if the enchantment conflicts, false otherwise - */ - boolean hasConflictingStoredEnchant(Enchantment ench); - - EnchantmentStorageMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/FireworkEffectMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/FireworkEffectMeta.java deleted file mode 100755 index 47046f1..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/FireworkEffectMeta.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.inventory.meta; - -import org.bukkit.FireworkEffect; -import org.bukkit.Material; - -/** - * Represents a meta that can store a single FireworkEffect. An example - * includes {@link Material#FIREWORK_CHARGE}. - */ -public interface FireworkEffectMeta extends ItemMeta { - - /** - * Sets the firework effect for this meta. - * - * @param effect the effect to set, or null to indicate none. - */ - void setEffect(FireworkEffect effect); - - /** - * Checks if this meta has an effect. - * - * @return true if this meta has an effect, false otherwise - */ - boolean hasEffect(); - - /** - * Gets the firework effect for this meta. - * - * @return the current effect, or null if none - */ - FireworkEffect getEffect(); - - FireworkEffectMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/FireworkMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/FireworkMeta.java deleted file mode 100755 index 3e06ee0..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/FireworkMeta.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bukkit.inventory.meta; - -import java.util.List; - -import org.bukkit.FireworkEffect; -import org.bukkit.Material; - -/** - * Represents a {@link Material#FIREWORK} and its effects. - */ -public interface FireworkMeta extends ItemMeta { - - /** - * Add another effect to this firework. - * - * @param effect The firework effect to add - * @throws IllegalArgumentException If effect is null - */ - void addEffect(FireworkEffect effect) throws IllegalArgumentException; - - /** - * Add several effects to this firework. - * - * @param effects The firework effects to add - * @throws IllegalArgumentException If effects is null - * @throws IllegalArgumentException If any effect is null (may be thrown - * after changes have occurred) - */ - void addEffects(FireworkEffect...effects) throws IllegalArgumentException; - - /** - * Add several firework effects to this firework. - * - * @param effects An iterable object whose iterator yields the desired - * firework effects - * @throws IllegalArgumentException If effects is null - * @throws IllegalArgumentException If any effect is null (may be thrown - * after changes have occurred) - */ - void addEffects(Iterable effects) throws IllegalArgumentException; - - /** - * Get the effects in this firework. - * - * @return An immutable list of the firework effects - */ - List getEffects(); - - /** - * Get the number of effects in this firework. - * - * @return The number of effects - */ - int getEffectsSize(); - - /** - * Remove an effect from this firework. - * - * @param index The index of the effect to remove - * @throws IndexOutOfBoundsException If index < 0 or index > {@link - * #getEffectsSize()} - */ - void removeEffect(int index) throws IndexOutOfBoundsException; - - /** - * Remove all effects from this firework. - */ - void clearEffects(); - - /** - * Get whether this firework has any effects. - * - * @return true if it has effects, false if there are no effects - */ - boolean hasEffects(); - - /** - * Gets the approximate height the firework will fly. - * - * @return approximate flight height of the firework. - */ - int getPower(); - - /** - * Sets the approximate power of the firework. Each level of power is half - * a second of flight time. - * - * @param power the power of the firework, from 0-128 - * @throws IllegalArgumentException if height<0 or height>128 - */ - void setPower(int power) throws IllegalArgumentException; - - FireworkMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/ItemMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/ItemMeta.java deleted file mode 100755 index 397ba11..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/ItemMeta.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit.inventory.meta; - -import java.util.List; -import java.util.Map; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.enchantments.Enchantment; - -/** - * This type represents the storage mechanism for auxiliary item data. - *

          - * An implementation will handle the creation and application for ItemMeta. - * This class should not be implemented by a plugin in a live environment. - */ -public interface ItemMeta extends Cloneable, ConfigurationSerializable { - - /** - * Checks for existence of a display name. - * - * @return true if this has a display name - */ - boolean hasDisplayName(); - - /** - * Gets the display name that is set. - *

          - * Plugins should check that hasDisplayName() returns true - * before calling this method. - * - * @return the display name that is set - */ - String getDisplayName(); - - /** - * Sets the display name. - * - * @param name the name to set - */ - void setDisplayName(String name); - - /** - * Checks for existence of lore. - * - * @return true if this has lore - */ - boolean hasLore(); - - /** - * Gets the lore that is set. - *

          - * Plugins should check if hasLore() returns true before - * calling this method. - * - * @return a list of lore that is set - */ - List getLore(); - - /** - * Sets the lore for this item. - * Removes lore when given null. - * - * @param lore the lore that will be set - */ - void setLore(List lore); - - /** - * Checks for the existence of any enchantments. - * - * @return true if an enchantment exists on this meta - */ - boolean hasEnchants(); - - /** - * Checks for existence of the specified enchantment. - * - * @param ench enchantment to check - * @return true if this enchantment exists for this meta - */ - boolean hasEnchant(Enchantment ench); - - /** - * Checks for the level of the specified enchantment. - * - * @param ench enchantment to check - * @return The level that the specified enchantment has, or 0 if none - */ - int getEnchantLevel(Enchantment ench); - - /** - * Returns a copy the enchantments in this ItemMeta.
          - * Returns an empty map if none. - * - * @return An immutable copy of the enchantments - */ - Map getEnchants(); - - /** - * Adds the specified enchantment to this item meta. - * - * @param ench Enchantment to add - * @param level Level for the enchantment - * @param ignoreLevelRestriction this indicates the enchantment should be - * applied, ignoring the level limit - * @return true if the item meta changed as a result of this call, false - * otherwise - */ - boolean addEnchant(Enchantment ench, int level, boolean ignoreLevelRestriction); - - /** - * Removes the specified enchantment from this item meta. - * - * @param ench Enchantment to remove - * @return true if the item meta changed as a result of this call, false - * otherwise - */ - boolean removeEnchant(Enchantment ench); - - /** - * Checks if the specified enchantment conflicts with any enchantments in - * this ItemMeta. - * - * @param ench enchantment to test - * @return true if the enchantment conflicts, false otherwise - */ - boolean hasConflictingEnchant(Enchantment ench); - - @SuppressWarnings("javadoc") - ItemMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/LeatherArmorMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/LeatherArmorMeta.java deleted file mode 100755 index 2dc2420..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/LeatherArmorMeta.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.inventory.meta; - -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.inventory.ItemFactory; - -/** - * Represents leather armor ({@link Material#LEATHER_BOOTS}, {@link - * Material#LEATHER_CHESTPLATE}, {@link Material#LEATHER_HELMET}, or {@link - * Material#LEATHER_LEGGINGS}) that can be colored. - */ -public interface LeatherArmorMeta extends ItemMeta { - - /** - * Gets the color of the armor. If it has not been set otherwise, it will - * be {@link ItemFactory#getDefaultLeatherColor()}. - * - * @return the color of the armor, never null - */ - Color getColor(); - - /** - * Sets the color of the armor. - * - * @param color the color to set. Setting it to null is equivalent to - * setting it to {@link ItemFactory#getDefaultLeatherColor()}. - */ - void setColor(Color color); - - LeatherArmorMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/MapMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/MapMeta.java deleted file mode 100755 index fb5c297..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/MapMeta.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.inventory.meta; - -/** - * Represents a map that can be scalable. - */ -public interface MapMeta extends ItemMeta { - - /** - * Checks to see if this map is scaling. - * - * @return true if this map is scaling - */ - boolean isScaling(); - - /** - * Sets if this map is scaling or not. - * - * @param value true to scale - */ - void setScaling(boolean value); - - MapMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/PotionMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/PotionMeta.java deleted file mode 100755 index 8dca983..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/PotionMeta.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.inventory.meta; - -import org.bukkit.Material; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import java.util.List; - -/** - * Represents a potion ({@link Material#POTION}) that can have custom effects. - */ -public interface PotionMeta extends ItemMeta { - - /** - * Checks for the presence of custom potion effects. - * - * @return true if custom potion effects are applied - */ - boolean hasCustomEffects(); - - /** - * Gets an immutable list containing all custom potion effects applied to - * this potion. - *

          - * Plugins should check that hasCustomEffects() returns true before - * calling this method. - * - * @return the immutable list of custom potion effects - */ - List getCustomEffects(); - - /** - * Adds a custom potion effect to this potion. - * - * @param effect the potion effect to add - * @param overwrite true if any existing effect of the same type should be - * overwritten - * @return true if the potion meta changed as a result of this call - */ - boolean addCustomEffect(PotionEffect effect, boolean overwrite); - - /** - * Removes a custom potion effect from this potion. - * - * @param type the potion effect type to remove - * @return true if the potion meta changed as a result of this call - */ - boolean removeCustomEffect(PotionEffectType type); - - /** - * Checks for a specific custom potion effect type on this potion. - * - * @param type the potion effect type to check for - * @return true if the potion has this effect - */ - boolean hasCustomEffect(PotionEffectType type); - - /** - * Moves a potion effect to the top of the potion effect list. - *

          - * This causes the client to display the potion effect in the potion's - * name. - * - * @param type the potion effect type to move - * @return true if the potion meta changed as a result of this call - */ - boolean setMainEffect(PotionEffectType type); - - /** - * Removes all custom potion effects from this potion. - * - * @return true if the potion meta changed as a result of this call - */ - boolean clearCustomEffects(); - - PotionMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/Repairable.java b/LiveWeather/src/org/bukkit/inventory/meta/Repairable.java deleted file mode 100755 index c49844e..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/Repairable.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.inventory.meta; - -/** - * Represents an item that can be repaired at an anvil. - */ -public interface Repairable { - - /** - * Checks to see if this has a repair penalty - * - * @return true if this has a repair penalty - */ - boolean hasRepairCost(); - - /** - * Gets the repair penalty - * - * @return the repair penalty - */ - int getRepairCost(); - - /** - * Sets the repair penalty - * - * @param cost repair penalty - */ - void setRepairCost(int cost); - - @SuppressWarnings("javadoc") - Repairable clone(); -} diff --git a/LiveWeather/src/org/bukkit/inventory/meta/SkullMeta.java b/LiveWeather/src/org/bukkit/inventory/meta/SkullMeta.java deleted file mode 100755 index fab3119..0000000 --- a/LiveWeather/src/org/bukkit/inventory/meta/SkullMeta.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.inventory.meta; - -import org.bukkit.Material; - -/** - * Represents a skull ({@link Material#SKULL_ITEM}) that can have an owner. - */ -public interface SkullMeta extends ItemMeta { - - /** - * Gets the owner of the skull. - * - * @return the owner if the skull - */ - String getOwner(); - - /** - * Checks to see if the skull has an owner. - * - * @return true if the skull has an owner - */ - boolean hasOwner(); - - /** - * Sets the owner of the skull. - *

          - * Plugins should check that hasOwner() returns true before calling this - * plugin. - * - * @param owner the new owner of the skull - * @return true if the owner was successfully set - */ - boolean setOwner(String owner); - - SkullMeta clone(); -} diff --git a/LiveWeather/src/org/bukkit/map/MapCanvas.java b/LiveWeather/src/org/bukkit/map/MapCanvas.java deleted file mode 100755 index d68bb17..0000000 --- a/LiveWeather/src/org/bukkit/map/MapCanvas.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bukkit.map; - -import java.awt.Image; - -/** - * Represents a canvas for drawing to a map. Each canvas is associated with a - * specific {@link MapRenderer} and represents that renderer's layer on the - * map. - */ -public interface MapCanvas { - - /** - * Get the map this canvas is attached to. - * - * @return The MapView this canvas is attached to. - */ - public MapView getMapView(); - - /** - * Get the cursor collection associated with this canvas. - * - * @return The MapCursorCollection associated with this canvas. - */ - public MapCursorCollection getCursors(); - - /** - * Set the cursor collection associated with this canvas. This does not - * usually need to be called since a MapCursorCollection is already - * provided. - * - * @param cursors The MapCursorCollection to associate with this canvas. - */ - public void setCursors(MapCursorCollection cursors); - - /** - * Draw a pixel to the canvas. - * - * @param x The x coordinate, from 0 to 127. - * @param y The y coordinate, from 0 to 127. - * @param color The color. See {@link MapPalette}. - */ - public void setPixel(int x, int y, byte color); - - /** - * Get a pixel from the canvas. - * - * @param x The x coordinate, from 0 to 127. - * @param y The y coordinate, from 0 to 127. - * @return The color. See {@link MapPalette}. - */ - public byte getPixel(int x, int y); - - /** - * Get a pixel from the layers below this canvas. - * - * @param x The x coordinate, from 0 to 127. - * @param y The y coordinate, from 0 to 127. - * @return The color. See {@link MapPalette}. - */ - public byte getBasePixel(int x, int y); - - /** - * Draw an image to the map. The image will be clipped if necessary. - * - * @param x The x coordinate of the image. - * @param y The y coordinate of the image. - * @param image The Image to draw. - */ - public void drawImage(int x, int y, Image image); - - /** - * Render text to the map using fancy formatting. Newline (\n) characters - * will move down one line and return to the original column, and the text - * color can be changed using sequences such as "§12;", replacing 12 with - * the palette index of the color (see {@link MapPalette}). - * - * @param x The column to start rendering on. - * @param y The row to start rendering on. - * @param font The font to use. - * @param text The formatted text to render. - */ - public void drawText(int x, int y, MapFont font, String text); - -} diff --git a/LiveWeather/src/org/bukkit/map/MapCursor.java b/LiveWeather/src/org/bukkit/map/MapCursor.java deleted file mode 100755 index d3698a6..0000000 --- a/LiveWeather/src/org/bukkit/map/MapCursor.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.bukkit.map; - -/** - * Represents a cursor on a map. - */ -public final class MapCursor { - private byte x, y; - private byte direction, type; - private boolean visible; - - /** - * Initialize the map cursor. - * - * @param x The x coordinate, from -128 to 127. - * @param y The y coordinate, from -128 to 127. - * @param direction The facing of the cursor, from 0 to 15. - * @param type The type (color/style) of the map cursor. - * @param visible Whether the cursor is visible by default. - * @deprecated Magic value - */ - @Deprecated - public MapCursor(byte x, byte y, byte direction, byte type, boolean visible) { - this.x = x; - this.y = y; - setDirection(direction); - setRawType(type); - this.visible = visible; - } - - /** - * Get the X position of this cursor. - * - * @return The X coordinate. - */ - public byte getX() { - return x; - } - - /** - * Get the Y position of this cursor. - * - * @return The Y coordinate. - */ - public byte getY() { - return y; - } - - /** - * Get the direction of this cursor. - * - * @return The facing of the cursor, from 0 to 15. - */ - public byte getDirection() { - return direction; - } - - /** - * Get the type of this cursor. - * - * @return The type (color/style) of the map cursor. - */ - public Type getType() { - return Type.byValue(type); - } - - /** - * Get the type of this cursor. - * - * @return The type (color/style) of the map cursor. - * @deprecated Magic value - */ - @Deprecated - public byte getRawType() { - return type; - } - - /** - * Get the visibility status of this cursor. - * - * @return True if visible, false otherwise. - */ - public boolean isVisible() { - return visible; - } - - /** - * Set the X position of this cursor. - * - * @param x The X coordinate. - */ - public void setX(byte x) { - this.x = x; - } - - /** - * Set the Y position of this cursor. - * - * @param y The Y coordinate. - */ - public void setY(byte y) { - this.y = y; - } - - /** - * Set the direction of this cursor. - * - * @param direction The facing of the cursor, from 0 to 15. - */ - public void setDirection(byte direction) { - if (direction < 0 || direction > 15) { - throw new IllegalArgumentException("Direction must be in the range 0-15"); - } - this.direction = direction; - } - - /** - * Set the type of this cursor. - * - * @param type The type (color/style) of the map cursor. - */ - public void setType(Type type) { - setRawType(type.value); - } - - /** - * Set the type of this cursor. - * - * @param type The type (color/style) of the map cursor. - * @deprecated Magic value - */ - @Deprecated - public void setRawType(byte type) { - if (type < 0 || type > 15) { - throw new IllegalArgumentException("Type must be in the range 0-15"); - } - this.type = type; - } - - /** - * Set the visibility status of this cursor. - * - * @param visible True if visible. - */ - public void setVisible(boolean visible) { - this.visible = visible; - } - - /** - * Represents the standard types of map cursors. More may be made - * available by texture packs - the value is used by the client as an - * index in the file './misc/mapicons.png' from minecraft.jar or from a - * texture pack. - */ - public enum Type { - WHITE_POINTER(0), - GREEN_POINTER(1), - RED_POINTER(2), - BLUE_POINTER(3), - WHITE_CROSS(4); - - private byte value; - - private Type(int value) { - this.value = (byte) value; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public byte getValue() { - return value; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static Type byValue(byte value) { - for (Type t : values()) { - if (t.value == value) return t; - } - return null; - } - } - -} diff --git a/LiveWeather/src/org/bukkit/map/MapCursorCollection.java b/LiveWeather/src/org/bukkit/map/MapCursorCollection.java deleted file mode 100755 index 1dc9025..0000000 --- a/LiveWeather/src/org/bukkit/map/MapCursorCollection.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bukkit.map; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents all the map cursors on a {@link MapCanvas}. Like MapCanvas, a - * MapCursorCollection is linked to a specific {@link MapRenderer}. - */ -public final class MapCursorCollection { - private List cursors = new ArrayList(); - - /** - * Get the amount of cursors in this collection. - * - * @return The size of this collection. - */ - public int size() { - return cursors.size(); - } - - /** - * Get a cursor from this collection. - * - * @param index The index of the cursor. - * @return The MapCursor. - */ - public MapCursor getCursor(int index) { - return cursors.get(index); - } - - /** - * Remove a cursor from the collection. - * - * @param cursor The MapCursor to remove. - * @return Whether the cursor was removed successfully. - */ - public boolean removeCursor(MapCursor cursor) { - return cursors.remove(cursor); - } - - /** - * Add a cursor to the collection. - * - * @param cursor The MapCursor to add. - * @return The MapCursor that was passed. - */ - public MapCursor addCursor(MapCursor cursor) { - cursors.add(cursor); - return cursor; - } - - /** - * Add a cursor to the collection. - * - * @param x The x coordinate, from -128 to 127. - * @param y The y coordinate, from -128 to 127. - * @param direction The facing of the cursor, from 0 to 15. - * @return The newly added MapCursor. - */ - public MapCursor addCursor(int x, int y, byte direction) { - return addCursor(x, y, direction, (byte) 0, true); - } - - /** - * Add a cursor to the collection. - * - * @param x The x coordinate, from -128 to 127. - * @param y The y coordinate, from -128 to 127. - * @param direction The facing of the cursor, from 0 to 15. - * @param type The type (color/style) of the map cursor. - * @return The newly added MapCursor. - * @deprecated Magic value - */ - @Deprecated - public MapCursor addCursor(int x, int y, byte direction, byte type) { - return addCursor(x, y, direction, type, true); - } - - /** - * Add a cursor to the collection. - * - * @param x The x coordinate, from -128 to 127. - * @param y The y coordinate, from -128 to 127. - * @param direction The facing of the cursor, from 0 to 15. - * @param type The type (color/style) of the map cursor. - * @param visible Whether the cursor is visible. - * @return The newly added MapCursor. - * @deprecated Magic value - */ - @Deprecated - public MapCursor addCursor(int x, int y, byte direction, byte type, boolean visible) { - return addCursor(new MapCursor((byte) x, (byte) y, direction, type, visible)); - } - -} diff --git a/LiveWeather/src/org/bukkit/map/MapFont.java b/LiveWeather/src/org/bukkit/map/MapFont.java deleted file mode 100755 index ea8f0ea..0000000 --- a/LiveWeather/src/org/bukkit/map/MapFont.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.bukkit.map; - -import java.util.HashMap; - -/** - * Represents a bitmap font drawable to a map. - */ -public class MapFont { - - private final HashMap chars = new HashMap(); - private int height = 0; - protected boolean malleable = true; - - /** - * Set the sprite for a given character. - * - * @param ch The character to set the sprite for. - * @param sprite The CharacterSprite to set. - * @throws IllegalStateException if this font is static. - */ - public void setChar(char ch, CharacterSprite sprite) { - if (!malleable) { - throw new IllegalStateException("this font is not malleable"); - } - - chars.put(ch, sprite); - if (sprite.getHeight() > height) { - height = sprite.getHeight(); - } - } - - /** - * Get the sprite for a given character. - * - * @param ch The character to get the sprite for. - * @return The CharacterSprite associated with the character, or null if - * there is none. - */ - public CharacterSprite getChar(char ch) { - return chars.get(ch); - } - - /** - * Get the width of the given text as it would be rendered using this - * font. - * - * @param text The text. - * @return The width in pixels. - */ - public int getWidth(String text) { - if (!isValid(text)) { - throw new IllegalArgumentException("text contains invalid characters"); - } - - if (text.length() == 0){ - return 0; - } - - int result = 0; - for (int i = 0; i < text.length(); ++i) { - result += chars.get(text.charAt(i)).getWidth(); - } - result += text.length() - 1; // Account for 1px spacing between characters - - return result; - } - - /** - * Get the height of this font. - * - * @return The height of the font. - */ - public int getHeight() { - return height; - } - - /** - * Check whether the given text is valid. - * - * @param text The text. - * @return True if the string contains only defined characters, false - * otherwise. - */ - public boolean isValid(String text) { - for (int i = 0; i < text.length(); ++i) { - char ch = text.charAt(i); - if (ch == '\u00A7' || ch == '\n') continue; - if (chars.get(ch) == null) return false; - } - return true; - } - - /** - * Represents the graphics for a single character in a MapFont. - */ - public static class CharacterSprite { - - private final int width; - private final int height; - private final boolean[] data; - - public CharacterSprite(int width, int height, boolean[] data) { - this.width = width; - this.height = height; - this.data = data; - - if (data.length != width * height) { - throw new IllegalArgumentException("size of data does not match dimensions"); - } - } - - /** - * Get the value of a pixel of the character. - * - * @param row The row, in the range [0,8). - * @param col The column, in the range [0,8). - * @return True if the pixel is solid, false if transparent. - */ - public boolean get(int row, int col) { - if (row < 0 || col < 0 || row >= height || col >= width) return false; - return data[row * width + col]; - } - - /** - * Get the width of the character sprite. - * - * @return The width of the character. - */ - public int getWidth() { - return width; - } - - /** - * Get the height of the character sprite. - * - * @return The height of the character. - */ - public int getHeight() { - return height; - } - - } - -} diff --git a/LiveWeather/src/org/bukkit/map/MapPalette.java b/LiveWeather/src/org/bukkit/map/MapPalette.java deleted file mode 100755 index 35f3e19..0000000 --- a/LiveWeather/src/org/bukkit/map/MapPalette.java +++ /dev/null @@ -1,241 +0,0 @@ -package org.bukkit.map; - -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.image.BufferedImage; - -/** - * Represents the palette that map items use. - *

          - * These fields are hee base color ranges. Each entry corresponds to four - * colors of varying shades with values entry to entry + 3. - */ -public final class MapPalette { - // Internal mechanisms - private MapPalette() {} - - private static Color c(int r, int g, int b) { - return new Color(r, g, b); - } - - private static double getDistance(Color c1, Color c2) { - double rmean = (c1.getRed() + c2.getRed()) / 2.0; - double r = c1.getRed() - c2.getRed(); - double g = c1.getGreen() - c2.getGreen(); - int b = c1.getBlue() - c2.getBlue(); - double weightR = 2 + rmean / 256.0; - double weightG = 4.0; - double weightB = 2 + (255 - rmean) / 256.0; - return weightR * r * r + weightG * g * g + weightB * b * b; - } - - private static final Color[] colors = { - new Color(0, 0, 0, 0), new Color(0, 0, 0, 0), - new Color(0, 0, 0, 0), new Color(0, 0, 0, 0), - c(89, 125, 39), c(109, 153, 48), c(127, 178, 56), c(67, 94, 29), - c(174, 164, 115), c(213, 201, 140), c(247, 233, 163), c(130, 123, 86), - c(117, 117, 117), c(144, 144, 144), c(167, 167, 167), c(88, 88, 88), - c(180, 0, 0), c(220, 0, 0), c(255, 0, 0), c(135, 0, 0), - c(112, 112, 180), c(138, 138, 220), c(160, 160, 255), c(84, 84, 135), - c(117, 117, 117), c(144, 144, 144), c(167, 167, 167), c(88, 88, 88), - c(0, 87, 0), c(0, 106, 0), c(0, 124, 0), c(0, 65, 0), - c(180, 180, 180), c(220, 220, 220), c(255, 255, 255), c(135, 135, 135), - c(115, 118, 129), c(141, 144, 158), c(164, 168, 184), c(86, 88, 97), - c(129, 74, 33), c(157, 91, 40), c(183, 106, 47), c(96, 56, 24), - c(79, 79, 79), c(96, 96, 96), c(112, 112, 112), c(59, 59, 59), - c(45, 45, 180), c(55, 55, 220), c(64, 64, 255), c(33, 33, 135), - c(73, 58, 35), c(89, 71, 43), c(104, 83, 50), c(55, 43, 26), - c(180, 177, 172), c(220, 217, 211), c(255, 252, 245), c(135, 133, 129), - c(152, 89, 36), c(186, 109, 44), c(216, 127, 51), c(114, 67, 27), - c(125, 53, 152), c(153, 65, 186), c(178, 76, 216), c(94, 40, 114), - c(72, 108, 152), c(88, 132, 186), c(102, 153, 216), c(54, 81, 114), - c(161, 161, 36), c(197, 197, 44), c(229, 229, 51), c(121, 121, 27), - c(89, 144, 17), c(109, 176, 21), c(127, 204, 25), c(67, 108, 13), - c(170, 89, 116), c(208, 109, 142), c(242, 127, 165), c(128, 67, 87), - c(53, 53, 53), c(65, 65, 65), c(76, 76, 76), c(40, 40, 40), - c(108, 108, 108), c(132, 132, 132), c(153, 153, 153), c(81, 81, 81), - c(53, 89, 108), c(65, 109, 132), c(76, 127, 153), c(40, 67, 81), - c(89, 44, 125), c(109, 54, 153), c(127, 63, 178), c(67, 33, 94), - c(36, 53, 125), c(44, 65, 153), c(51, 76, 178), c(27, 40, 94), - c(72, 53, 36), c(88, 65, 44), c(102, 76, 51), c(54, 40, 27), - c(72, 89, 36), c(88, 109, 44), c(102, 127, 51), c(54, 67, 27), - c(108, 36, 36), c(132, 44, 44), c(153, 51, 51), c(81, 27, 27), - c(17, 17, 17), c(21, 21, 21), c(25, 25, 25), c(13, 13, 13), - c(176, 168, 54), c(215, 205, 66), c(250, 238, 77), c(132, 126, 40), - c(64, 154, 150), c(79, 188, 183), c(92, 219, 213), c(48, 115, 112), - c(52, 90, 180), c(63, 110, 220), c(74, 128, 255), c(39, 67, 135), - c(0, 153, 40), c(0, 187, 50), c(0, 217, 58), c(0, 114, 30), - c(14, 14, 21), c(18, 17, 26), c(21, 20, 31), c(11, 10, 16), - c(79, 1, 0), c(96, 1, 0), c(112, 2, 0), c(59, 1, 0) - }; - - // Interface - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte TRANSPARENT = 0; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte LIGHT_GREEN = 4; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte LIGHT_BROWN = 8; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte GRAY_1 = 12; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte RED = 16; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte PALE_BLUE = 20; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte GRAY_2 = 24; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte DARK_GREEN = 28; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte WHITE = 32; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte LIGHT_GRAY = 36; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte BROWN = 40; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte DARK_GRAY = 44; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte BLUE = 48; - /** - * @deprecated Magic value - */ - @Deprecated - public static final byte DARK_BROWN = 52; - - /** - * Resize an image to 128x128. - * - * @param image The image to resize. - * @return The resized image. - */ - public static BufferedImage resizeImage(Image image) { - BufferedImage result = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB); - Graphics2D graphics = result.createGraphics(); - graphics.drawImage(image, 0, 0, 128, 128, null); - graphics.dispose(); - return result; - } - - /** - * Convert an Image to a byte[] using the palette. - * - * @param image The image to convert. - * @return A byte[] containing the pixels of the image. - * @deprecated Magic value - */ - @Deprecated - public static byte[] imageToBytes(Image image) { - BufferedImage temp = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); - Graphics2D graphics = temp.createGraphics(); - graphics.drawImage(image, 0, 0, null); - graphics.dispose(); - - int[] pixels = new int[temp.getWidth() * temp.getHeight()]; - temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth()); - - byte[] result = new byte[temp.getWidth() * temp.getHeight()]; - for (int i = 0; i < pixels.length; i++) { - result[i] = matchColor(new Color(pixels[i], true)); - } - return result; - } - - /** - * Get the index of the closest matching color in the palette to the given - * color. - * - * @param r The red component of the color. - * @param b The blue component of the color. - * @param g The green component of the color. - * @return The index in the palette. - * @deprecated Magic value - */ - @Deprecated - public static byte matchColor(int r, int g, int b) { - return matchColor(new Color(r, g, b)); - } - - /** - * Get the index of the closest matching color in the palette to the given - * color. - * - * @param color The Color to match. - * @return The index in the palette. - * @deprecated Magic value - */ - @Deprecated - public static byte matchColor(Color color) { - if (color.getAlpha() < 128) return 0; - - int index = 0; - double best = -1; - - for (int i = 4; i < colors.length; i++) { - double distance = getDistance(color, colors[i]); - if (distance < best || best == -1) { - best = distance; - index = i; - } - } - - // Minecraft has 143 colors, some of which have negative byte representations - return (byte) (index < 128 ? index : -129 + (index - 127)); - } - - /** - * Get the value of the given color in the palette. - * - * @param index The index in the palette. - * @return The Color of the palette entry. - * @deprecated Magic value - */ - @Deprecated - public static Color getColor(byte index) { - if ((index > -113 && index < 0) || index > 127) { - throw new IndexOutOfBoundsException(); - } else { - // Minecraft has 143 colors, some of which have negative byte representations - return colors[index >= 0 ? index : index + 256]; - } - } -} diff --git a/LiveWeather/src/org/bukkit/map/MapRenderer.java b/LiveWeather/src/org/bukkit/map/MapRenderer.java deleted file mode 100755 index 322d0ce..0000000 --- a/LiveWeather/src/org/bukkit/map/MapRenderer.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.map; - -import org.bukkit.entity.Player; - -/** - * Represents a renderer for a map. - */ -public abstract class MapRenderer { - - private boolean contextual; - - /** - * Initialize the map renderer base to be non-contextual. See {@link - * #isContextual()}. - */ - public MapRenderer() { - this(false); - } - - /** - * Initialize the map renderer base with the given contextual status. - * - * @param contextual Whether the renderer is contextual. See {@link - * #isContextual()}. - */ - public MapRenderer(boolean contextual) { - this.contextual = contextual; - } - - /** - * Get whether the renderer is contextual, i.e. has different canvases for - * different players. - * - * @return True if contextual, false otherwise. - */ - final public boolean isContextual() { - return contextual; - } - - /** - * Initialize this MapRenderer for the given map. - * - * @param map The MapView being initialized. - */ - public void initialize(MapView map) {} - - /** - * Render to the given map. - * - * @param map The MapView being rendered to. - * @param canvas The canvas to use for rendering. - * @param player The player who triggered the rendering. - */ - abstract public void render(MapView map, MapCanvas canvas, Player player); - -} diff --git a/LiveWeather/src/org/bukkit/map/MapView.java b/LiveWeather/src/org/bukkit/map/MapView.java deleted file mode 100755 index ff370f4..0000000 --- a/LiveWeather/src/org/bukkit/map/MapView.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.bukkit.map; - -import java.util.List; -import org.bukkit.World; - -/** - * Represents a map item. - */ -public interface MapView { - - /** - * An enum representing all possible scales a map can be set to. - */ - public static enum Scale { - CLOSEST(0), - CLOSE(1), - NORMAL(2), - FAR(3), - FARTHEST(4); - - private byte value; - - private Scale(int value) { - this.value = (byte) value; - } - - /** - * Get the scale given the raw value. - * - * @param value The raw scale - * @return The enum scale, or null for an invalid input - * @deprecated Magic value - */ - @Deprecated - public static Scale valueOf(byte value) { - switch (value) { - case 0: return CLOSEST; - case 1: return CLOSE; - case 2: return NORMAL; - case 3: return FAR; - case 4: return FARTHEST; - default: return null; - } - } - - /** - * Get the raw value of this scale level. - * - * @return The scale value - * @deprecated Magic value - */ - @Deprecated - public byte getValue() { - return value; - } - } - - /** - * Get the ID of this map item. Corresponds to the damage value of a map - * in an inventory. - * - * @return The ID of the map. - * @deprecated Magic value - */ - @Deprecated - public short getId(); - - /** - * Check whether this map is virtual. A map is virtual if its lowermost - * MapRenderer is plugin-provided. - * - * @return Whether the map is virtual. - */ - public boolean isVirtual(); - - /** - * Get the scale of this map. - * - * @return The scale of the map. - */ - public Scale getScale(); - - /** - * Set the scale of this map. - * - * @param scale The scale to set. - */ - public void setScale(Scale scale); - - /** - * Get the center X position of this map. - * - * @return The center X position. - */ - public int getCenterX(); - - /** - * Get the center Z position of this map. - * - * @return The center Z position. - */ - public int getCenterZ(); - - /** - * Set the center X position of this map. - * - * @param x The center X position. - */ - public void setCenterX(int x); - - /** - * Set the center Z position of this map. - * - * @param z The center Z position. - */ - public void setCenterZ(int z); - - /** - * Get the world that this map is associated with. Primarily used by the - * internal renderer, but may be used by external renderers. May return - * null if the world the map is associated with is not loaded. - * - * @return The World this map is associated with. - */ - public World getWorld(); - - /** - * Set the world that this map is associated with. The world is used by - * the internal renderer, and may also be used by external renderers. - * - * @param world The World to associate this map with. - */ - public void setWorld(World world); - - /** - * Get a list of MapRenderers currently in effect. - * - * @return A List containing each map renderer. - */ - public List getRenderers(); - - /** - * Add a renderer to this map. - * - * @param renderer The MapRenderer to add. - */ - public void addRenderer(MapRenderer renderer); - - /** - * Remove a renderer from this map. - * - * @param renderer The MapRenderer to remove. - * @return True if the renderer was successfully removed. - */ - public boolean removeRenderer(MapRenderer renderer); - -} diff --git a/LiveWeather/src/org/bukkit/map/MinecraftFont.java b/LiveWeather/src/org/bukkit/map/MinecraftFont.java deleted file mode 100755 index 9ec8d10..0000000 --- a/LiveWeather/src/org/bukkit/map/MinecraftFont.java +++ /dev/null @@ -1,328 +0,0 @@ -package org.bukkit.map; - -/** - * Represents the built-in Minecraft font. - */ -public class MinecraftFont extends MapFont { - - private static final int spaceSize = 2; - - private static final String fontChars = - " !\"#$%&'()*+,-./0123456789:;<=>?" + - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + - "'abcdefghijklmnopqrstuvwxyz{|}~\u007F" + - "\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7" + // Çüéâäàåç - "\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5" + // êëèïîìÄÅ - "\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9" + // ÉæÆôöòûù - "\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0191" + // ÿÖÜø£Ø׃ - "\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA" + // áíóúñѪº - "\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB"; // ¿®¬½¼¡«» - - private static final int[][] fontData = new int[][] { - /* null */ {0,0,0,0,0,0,0,0}, - /* 1 */ {126,129,165,129,189,153,129,126}, - /* 2 */ {126,255,219,255,195,231,255,126}, - /* 3 */ {54,127,127,127,62,28,8,0}, - /* 4 */ {8,28,62,127,62,28,8,0}, - /* 5 */ {28,62,28,127,127,62,28,62}, - /* 6 */ {8,8,28,62,127,62,28,62}, - /* 7 */ {0,0,24,60,60,24,0,0}, - /* 8 */ {255,255,231,195,195,231,255,255}, - /* 9 */ {0,60,102,66,66,102,60,0}, - /* 10 */ {255,195,153,189,189,153,195,255}, - /* 11 */ {240,224,240,190,51,51,51,30}, - /* 12 */ {60,102,102,102,60,24,126,24}, - /* 13 */ {252,204,252,12,12,14,15,7}, - /* 14 */ {254,198,254,198,198,230,103,3}, - /* 15 */ {153,90,60,231,231,60,90,153}, - /* 16 */ {1,7,31,127,31,7,1,0}, - /* 17 */ {64,112,124,127,124,112,64,0}, - /* 18 */ {24,60,126,24,24,126,60,24}, - /* 19 */ {102,102,102,102,102,0,102,0}, - /* 20 */ {254,219,219,222,216,216,216,0}, - /* 21 */ {124,198,28,54,54,28,51,30}, - /* 22 */ {0,0,0,0,126,126,126,0}, - /* 23 */ {24,60,126,24,126,60,24,255}, - /* 24 */ {24,60,126,24,24,24,24,0}, - /* 25 */ {24,24,24,24,126,60,24,0}, - /* 26 */ {0,24,48,127,48,24,0,0}, - /* 27 */ {0,12,6,127,6,12,0,0}, - /* 28 */ {0,0,3,3,3,127,0,0}, - /* 29 */ {0,36,102,255,102,36,0,0}, - /* 30 */ {0,24,60,126,255,255,0,0}, - /* 31 */ {0,255,255,126,60,24,0,0}, - /* */ {0,0,0,0,0,0,0,0}, - /* ! */ {1,1,1,1,1,0,1,0}, - /* " */ {10,10,5,0,0,0,0,0}, - /* # */ {10,10,31,10,31,10,10,0}, - /* $ */ {4,30,1,14,16,15,4,0}, - /* % */ {17,9,8,4,2,18,17,0}, - /* & */ {4,10,4,22,13,9,22,0}, - /* ' */ {2,2,1,0,0,0,0,0}, - /* ( */ {12,2,1,1,1,2,12,0}, - /* ) */ {3,4,8,8,8,4,3,0}, - /* * */ {0,0,9,6,9,0,0,0}, - /* + */ {0,4,4,31,4,4,0,0}, - /* , */ {0,0,0,0,0,1,1,1}, - /* - */ {0,0,0,31,0,0,0,0}, - /* . */ {0,0,0,0,0,1,1,0}, - /* / */ {16,8,8,4,2,2,1,0}, - /* 0 */ {14,17,25,21,19,17,14,0}, - /* 1 */ {4,6,4,4,4,4,31,0}, - /* 2 */ {14,17,16,12,2,17,31,0}, - /* 3 */ {14,17,16,12,16,17,14,0}, - /* 4 */ {24,20,18,17,31,16,16,0}, - /* 5 */ {31,1,15,16,16,17,14,0}, - /* 6 */ {12,2,1,15,17,17,14,0}, - /* 7 */ {31,17,16,8,4,4,4,0}, - /* 8 */ {14,17,17,14,17,17,14,0}, - /* 9 */ {14,17,17,30,16,8,6,0}, - /* : */ {0,1,1,0,0,1,1,0}, - /* ; */ {0,1,1,0,0,1,1,1}, - /* < */ {8,4,2,1,2,4,8,0}, - /* = */ {0,0,31,0,0,31,0,0}, - /* > */ {1,2,4,8,4,2,1,0}, - /* ? */ {14,17,16,8,4,0,4,0}, - /* @ */ {30,33,45,45,61,1,30,0}, - /* A */ {14,17,31,17,17,17,17,0}, - /* B */ {15,17,15,17,17,17,15,0}, - /* C */ {14,17,1,1,1,17,14,0}, - /* D */ {15,17,17,17,17,17,15,0}, - /* E */ {31,1,7,1,1,1,31,0}, - /* F */ {31,1,7,1,1,1,1,0}, - /* G */ {30,1,25,17,17,17,14,0}, - /* H */ {17,17,31,17,17,17,17,0}, - /* I */ {7,2,2,2,2,2,7,0}, - /* J */ {16,16,16,16,16,17,14,0}, - /* K */ {17,9,7,9,17,17,17,0}, - /* L */ {1,1,1,1,1,1,31,0}, - /* M */ {17,27,21,17,17,17,17,0}, - /* N */ {17,19,21,25,17,17,17,0}, - /* O */ {14,17,17,17,17,17,14,0}, - /* P */ {15,17,15,1,1,1,1,0}, - /* Q */ {14,17,17,17,17,9,22,0}, - /* R */ {15,17,15,17,17,17,17,0}, - /* S */ {30,1,14,16,16,17,14,0}, - /* T */ {31,4,4,4,4,4,4,0}, - /* U */ {17,17,17,17,17,17,14,0}, - /* V */ {17,17,17,17,10,10,4,0}, - /* W */ {17,17,17,17,21,27,17,0}, - /* X */ {17,10,4,10,17,17,17,0}, - /* Y */ {17,10,4,4,4,4,4,0}, - /* Z */ {31,16,8,4,2,1,31,0}, - /* [ */ {7,1,1,1,1,1,7,0}, - /* \ */ {1,2,2,4,8,8,16,0}, - /* ] */ {7,4,4,4,4,4,7,0}, - /* ^ */ {4,10,17,0,0,0,0,0}, - /* _ */ {0,0,0,0,0,0,0,31}, - /* ` */ {1,1,2,0,0,0,0,0}, - /* a */ {0,0,14,16,30,17,30,0}, - /* b */ {1,1,13,19,17,17,15,0}, - /* c */ {0,0,14,17,1,17,14,0}, - /* d */ {16,16,22,25,17,17,30,0}, - /* e */ {0,0,14,17,31,1,30,0}, - /* f */ {12,2,15,2,2,2,2,0}, - /* g */ {0,0,30,17,17,30,16,15}, - /* h */ {1,1,13,19,17,17,17,0}, - /* i */ {1,0,1,1,1,1,1,0}, - /* j */ {16,0,16,16,16,17,17,14}, - /* k */ {1,1,9,5,3,5,9,0}, - /* l */ {1,1,1,1,1,1,2,0}, - /* m */ {0,0,11,21,21,17,17,0}, - /* n */ {0,0,15,17,17,17,17,0}, - /* o */ {0,0,14,17,17,17,14,0}, - /* p */ {0,0,13,19,17,15,1,1}, - /* q */ {0,0,22,25,17,30,16,16}, - /* r */ {0,0,13,19,1,1,1,0}, - /* s */ {0,0,30,1,14,16,15,0}, - /* t */ {2,2,7,2,2,2,4,0}, - /* u */ {0,0,17,17,17,17,30,0}, - /* v */ {0,0,17,17,17,10,4,0}, - /* w */ {0,0,17,17,21,21,30,0}, - /* x */ {0,0,17,10,4,10,17,0}, - /* y */ {0,0,17,17,17,30,16,15}, - /* z */ {0,0,31,8,4,2,31,0}, - /* { */ {12,2,2,1,2,2,12,0}, - /* | */ {1,1,1,0,1,1,1,0}, - /* } */ {3,4,4,8,4,4,3,0}, - /* ~ */ {38,25,0,0,0,0,0,0}, - /* ⌂ */ {0,0,4,10,17,17,31,0}, - /* Ç */ {14,17,1,1,17,14,16,12}, - /* ü */ {10,0,17,17,17,17,30,0}, - /* é */ {24,0,14,17,31,1,30,0}, - /* â */ {14,17,14,16,30,17,30,0}, - /* ä */ {10,0,14,16,30,17,30,0}, - /* à */ {3,0,14,16,30,17,30,0}, - /* å */ {4,0,14,16,30,17,30,0}, - /* ç */ {0,14,17,1,17,14,16,12}, - /* ê */ {14,17,14,17,31,1,30,0}, - /* ë */ {10,0,14,17,31,1,30,0}, - /* è */ {3,0,14,17,31,1,30,0}, - /* ï */ {5,0,2,2,2,2,2,0}, - /* î */ {14,17,4,4,4,4,4,0}, - /* ì */ {3,0,2,2,2,2,2,0}, - /* Ä */ {17,14,17,31,17,17,17,0}, - /* Å */ {4,0,14,17,31,17,17,0}, - /* É */ {24,0,31,1,7,1,31,0}, - /* æ */ {0,0,10,20,30,5,30,0}, - /* Æ */ {30,5,15,5,5,5,29,0}, - /* ô */ {14,17,14,17,17,17,14,0}, - /* ö */ {10,0,14,17,17,17,14,0}, - /* ò */ {3,0,14,17,17,17,14,0}, - /* û */ {14,17,0,17,17,17,30,0}, - /* ù */ {3,0,17,17,17,17,30,0}, - /* ÿ */ {10,0,17,17,17,30,16,15}, - /* Ö */ {17,14,17,17,17,17,14,0}, - /* Ü */ {17,0,17,17,17,17,14,0}, - /* ø */ {0,0,14,25,21,19,14,4}, - /* £ */ {12,18,2,15,2,2,31,0}, - /* Ø */ {14,17,25,21,19,17,14,0}, - /* × */ {0,0,5,2,5,0,0,0}, - /* ƒ */ {8,20,4,14,4,4,5,2}, - /* á */ {24,0,14,16,30,17,30,0}, - /* í */ {3,0,1,1,1,1,1,0}, - /* ó */ {24,0,14,17,17,17,14,0}, - /* ú */ {24,0,17,17,17,17,30,0}, - /* ñ */ {31,0,15,17,17,17,17,0}, - /* Ñ */ {31,0,17,19,21,25,17,0}, - /* ª */ {14,16,31,30,0,31,0,0}, - /* º */ {14,17,17,14,0,31,0,0}, - /* ¿ */ {4,0,4,2,1,17,14,0}, - /* ® */ {0,30,45,37,43,30,0,0}, - /* ¬ */ {0,0,0,31,16,16,0,0}, - /* ½ */ {17,9,8,4,18,10,25,0}, - /* ¼ */ {17,9,8,4,26,26,17,0}, - /* ¡ */ {0,1,0,1,1,1,1,0}, - /* « */ {0,20,10,5,10,20,0,0}, - /* » */ {0,5,10,20,10,5,0,0}, - /* 176 */ {68,17,68,17,68,17,68,17}, - /* 177 */ {170,85,170,85,170,85,170,85}, - /* 178 */ {219,238,219,119,219,238,219,119}, - /* 179 */ {24,24,24,24,24,24,24,24}, - /* 180 */ {24,24,24,24,31,24,24,24}, - /* 181 */ {24,24,31,24,31,24,24,24}, - /* 182 */ {108,108,108,108,111,108,108,108}, - /* 183 */ {0,0,0,0,127,108,108,108}, - /* 184 */ {0,0,31,24,31,24,24,24}, - /* 185 */ {108,108,111,96,111,108,108,108}, - /* 186 */ {108,108,108,108,108,108,108,108}, - /* 187 */ {0,0,127,96,111,108,108,108}, - /* 188 */ {108,108,111,96,127,0,0,0}, - /* 189 */ {108,108,108,108,127,0,0,0}, - /* 190 */ {24,24,31,24,31,0,0,0}, - /* 191 */ {0,0,0,0,31,24,24,24}, - /* 192 */ {24,24,24,24,248,0,0,0}, - /* 193 */ {24,24,24,24,255,0,0,0}, - /* 194 */ {0,0,0,0,255,24,24,24}, - /* 195 */ {24,24,24,24,248,24,24,24}, - /* 196 */ {0,0,0,0,255,0,0,0}, - /* 197 */ {24,24,24,24,255,24,24,24}, - /* 198 */ {24,24,248,24,248,24,24,24}, - /* 199 */ {108,108,108,108,236,108,108,108}, - /* 200 */ {108,108,236,12,252,0,0,0}, - /* 201 */ {0,0,252,12,236,108,108,108}, - /* 202 */ {108,108,239,0,255,0,0,0}, - /* 203 */ {0,0,255,0,239,108,108,108}, - /* 204 */ {108,108,236,12,236,108,108,108}, - /* 205 */ {0,0,255,0,255,0,0,0}, - /* 206 */ {108,108,239,0,239,108,108,108}, - /* 207 */ {24,24,255,0,255,0,0,0}, - /* 208 */ {108,108,108,108,255,0,0,0}, - /* 209 */ {0,0,255,0,255,24,24,24}, - /* 210 */ {0,0,0,0,255,108,108,108}, - /* 211 */ {108,108,108,108,252,0,0,0}, - /* 212 */ {24,24,248,24,248,0,0,0}, - /* 213 */ {0,0,248,24,248,24,24,24}, - /* 214 */ {0,0,0,0,252,108,108,108}, - /* 215 */ {108,108,108,108,255,108,108,108}, - /* 216 */ {24,24,255,24,255,24,24,24}, - /* 217 */ {24,24,24,24,31,0,0,0}, - /* 218 */ {0,0,0,0,248,24,24,24}, - /* 219 */ {255,255,255,255,255,255,255,255}, - /* 220 */ {0,0,0,0,255,255,255,255}, - /* 221 */ {15,15,15,15,15,15,15,15}, - /* 222 */ {240,240,240,240,240,240,240,240}, - /* 223 */ {255,255,255,255,0,0,0,0}, - /* 224 */ {0,0,110,59,19,59,110,0}, - /* 225 */ {0,30,51,31,51,31,3,3}, - /* 226 */ {0,63,51,3,3,3,3,0}, - /* 227 */ {0,127,54,54,54,54,54,0}, - /* 228 */ {63,51,6,12,6,51,63,0}, - /* 229 */ {0,0,126,27,27,27,14,0}, - /* 230 */ {0,102,102,102,102,62,6,3}, - /* 231 */ {0,110,59,24,24,24,24,0}, - /* 232 */ {63,12,30,51,51,30,12,63}, - /* 233 */ {28,54,99,127,99,54,28,0}, - /* 234 */ {28,54,99,99,54,54,119,0}, - /* 235 */ {56,12,24,62,51,51,30,0}, - /* 236 */ {0,0,126,219,219,126,0,0}, - /* 237 */ {96,48,126,219,219,126,6,3}, - /* 238 */ {28,6,3,31,3,6,28,0}, - /* 239 */ {30,51,51,51,51,51,51,0}, - /* 240 */ {0,63,0,63,0,63,0,0}, - /* 241 */ {12,12,63,12,12,0,63,0}, - /* 242 */ {6,12,24,12,6,0,63,0}, - /* 243 */ {24,12,6,12,24,0,63,0}, - /* 244 */ {112,216,216,24,24,24,24,24}, - /* 245 */ {24,24,24,24,24,27,27,14}, - /* 246 */ {12,12,0,63,0,12,12,0}, - /* 247 */ {0,110,59,0,110,59,0,0}, - /* 248 */ {28,54,54,28,0,0,0,0}, - /* 249 */ {0,0,0,24,24,0,0,0}, - /* 250 */ {0,0,0,0,24,0,0,0}, - /* 251 */ {240,48,48,48,55,54,60,56}, - /* 252 */ {30,54,54,54,54,0,0,0}, - /* 253 */ {14,24,12,6,30,0,0,0}, - /* 254 */ {0,0,60,60,60,60,0,0}, - /* 255 */ {0,0,0,0,0,0,0,0}, - }; - - /** - * A static non-malleable MinecraftFont. - */ - public static final MinecraftFont Font = new MinecraftFont(false); - - /** - * Initialize a new MinecraftFont. - */ - public MinecraftFont() { - this(true); - } - - private MinecraftFont(boolean malleable) { - for (int i = 1; i < fontData.length; ++i) { - char ch = (char) i; - if (i >= 32 && i < 32 + fontChars.length()) { - ch = fontChars.charAt(i - 32); - } - - if (ch == ' ') { - setChar(ch, new CharacterSprite(spaceSize, 8, new boolean[spaceSize * 8])); - continue; - } - - int[] rows = fontData[i]; - int width = 0; - for (int r = 0; r < 8; ++r) { - for (int c = 0; c < 8; ++c) { - if ((rows[r] & (1 << c)) != 0 && c > width) { - width = c; - } - } - } - ++width; - - boolean[] data = new boolean[width * 8]; - for (int r = 0; r < 8; ++r) { - for (int c = 0; c < width; ++c) { - data[r * width + c] = (rows[r] & (1 << c)) != 0; - } - } - - setChar(ch, new CharacterSprite(width, 8, data)); - } - - this.malleable = malleable; - } - -} diff --git a/LiveWeather/src/org/bukkit/material/Attachable.java b/LiveWeather/src/org/bukkit/material/Attachable.java deleted file mode 100755 index 1d3f107..0000000 --- a/LiveWeather/src/org/bukkit/material/Attachable.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; - -/** - * Indicates that a block can be attached to another block - */ -public interface Attachable extends Directional { - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace(); -} diff --git a/LiveWeather/src/org/bukkit/material/Bed.java b/LiveWeather/src/org/bukkit/material/Bed.java deleted file mode 100755 index a1c087a..0000000 --- a/LiveWeather/src/org/bukkit/material/Bed.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a bed. - */ -public class Bed extends MaterialData implements Directional { - - /** - * Default constructor for a bed. - */ - public Bed() { - super(Material.BED_BLOCK); - } - - /** - * Instantiate a bed facing in a particular direction. - * - * @param direction the direction the bed's head is facing - */ - public Bed(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Bed(final int type) { - super(type); - } - - public Bed(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Bed(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Bed(final Material type, final byte data) { - super(type, data); - } - - /** - * Determine if this block represents the head of the bed - * - * @return true if this is the head of the bed, false if it is the foot - */ - public boolean isHeadOfBed() { - return (getData() & 0x8) == 0x8; - } - - /** - * Configure this to be either the head or the foot of the bed - * - * @param isHeadOfBed True to make it the head. - */ - public void setHeadOfBed(boolean isHeadOfBed) { - setData((byte) (isHeadOfBed ? (getData() | 0x8) : (getData() & ~0x8))); - } - - /** - * Set which direction the head of the bed is facing. Note that this will - * only affect one of the two blocks the bed is made of. - */ - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case SOUTH: - data = 0x0; - break; - - case WEST: - data = 0x1; - break; - - case NORTH: - data = 0x2; - break; - - case EAST: - default: - data = 0x3; - } - - if (isHeadOfBed()) { - data |= 0x8; - } - - setData(data); - } - - /** - * Get the direction that this bed's head is facing toward - * - * @return the direction the head of the bed is facing - */ - public BlockFace getFacing() { - byte data = (byte) (getData() & 0x7); - - switch (data) { - case 0x0: - return BlockFace.SOUTH; - - case 0x1: - return BlockFace.WEST; - - case 0x2: - return BlockFace.NORTH; - - case 0x3: - default: - return BlockFace.EAST; - } - } - - @Override - public String toString() { - return (isHeadOfBed() ? "HEAD" : "FOOT") + " of " + super.toString() + " facing " + getFacing(); - } - - @Override - public Bed clone() { - return (Bed) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Button.java b/LiveWeather/src/org/bukkit/material/Button.java deleted file mode 100755 index 2eeeaa6..0000000 --- a/LiveWeather/src/org/bukkit/material/Button.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; -import org.bukkit.Material; - -/** - * Represents a button - */ -public class Button extends SimpleAttachableMaterialData implements Redstone { - public Button() { - super(Material.STONE_BUTTON); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Button(final int type) { - super(type); - } - - public Button(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Button(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Button(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered() { - return (getData() & 0x8) == 0x8; - } - - /** - * Sets the current state of this button - * - * @param bool - * whether or not the button is powered - */ - public void setPowered(boolean bool) { - setData((byte) (bool ? (getData() | 0x8) : (getData() & ~0x8))); - } - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace() { - byte data = (byte) (getData() & 0x7); - - switch (data) { - case 0x1: - return BlockFace.WEST; - - case 0x2: - return BlockFace.EAST; - - case 0x3: - return BlockFace.NORTH; - - case 0x4: - return BlockFace.SOUTH; - } - - return null; - } - - /** - * Sets the direction this button is pointing toward - */ - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0x8); - - switch (face) { - case EAST: - data |= 0x1; - break; - - case WEST: - data |= 0x2; - break; - - case SOUTH: - data |= 0x3; - break; - - case NORTH: - data |= 0x4; - break; - } - - setData(data); - } - - @Override - public String toString() { - return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; - } - - @Override - public Button clone() { - return (Button) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Cake.java b/LiveWeather/src/org/bukkit/material/Cake.java deleted file mode 100755 index 360ae58..0000000 --- a/LiveWeather/src/org/bukkit/material/Cake.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -public class Cake extends MaterialData { - public Cake() { - super(Material.CAKE_BLOCK); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Cake(int type) { - super(type); - } - - public Cake(Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Cake(int type, byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Cake(Material type, byte data) { - super(type, data); - } - - /** - * Gets the number of slices eaten from this cake - * - * @return The number of slices eaten - */ - public int getSlicesEaten() { - return getData(); - } - - /** - * Gets the number of slices remaining on this cake - * - * @return The number of slices remaining - */ - public int getSlicesRemaining() { - return 6 - getData(); - } - - /** - * Sets the number of slices eaten from this cake - * - * @param n The number of slices eaten - */ - public void setSlicesEaten(int n) { - if (n < 6) { - setData((byte) n); - } // TODO: else destroy the block? Probably not possible though - } - - /** - * Sets the number of slices remaining on this cake - * - * @param n The number of slices remaining - */ - public void setSlicesRemaining(int n) { - if (n > 6) { - n = 6; - } - setData((byte) (6 - n)); - } - - @Override - public String toString() { - return super.toString() + " " + getSlicesEaten() + "/" + getSlicesRemaining() + " slices eaten/remaining"; - } - - @Override - public Cake clone() { - return (Cake) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Cauldron.java b/LiveWeather/src/org/bukkit/material/Cauldron.java deleted file mode 100755 index b464bbd..0000000 --- a/LiveWeather/src/org/bukkit/material/Cauldron.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a cauldron - */ -public class Cauldron extends MaterialData { - private static final int CAULDRON_FULL = 3; - private static final int CAULDRON_EMPTY = 0; - - public Cauldron() { - super(Material.CAULDRON); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Cauldron(int type, byte data){ - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Cauldron(byte data) { - super(Material.CAULDRON, data); - } - - /** - * Check if the cauldron is full. - * - * @return True if it is full. - */ - public boolean isFull() { - return getData() >= CAULDRON_FULL; - } - - /** - * Check if the cauldron is empty. - * - * @return True if it is empty. - */ - public boolean isEmpty() { - return getData() <= CAULDRON_EMPTY; - } - - @Override - public String toString() { - return (isEmpty() ? "EMPTY" : (isFull() ? "FULL" : getData() + "/3 FULL")) + " CAULDRON"; - } - - @Override - public Cauldron clone() { - return (Cauldron) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Chest.java b/LiveWeather/src/org/bukkit/material/Chest.java deleted file mode 100755 index b9f6988..0000000 --- a/LiveWeather/src/org/bukkit/material/Chest.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a chest - */ -public class Chest extends DirectionalContainer { - - public Chest() { - super(Material.CHEST); - } - - /** - * Instantiate a chest facing in a particular direction. - * - * @param direction the direction the chest's lit opens towards - */ - public Chest(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Chest(final int type) { - super(type); - } - - public Chest(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Chest(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Chest(final Material type, final byte data) { - super(type, data); - } - - @Override - public Chest clone() { - return (Chest) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Coal.java b/LiveWeather/src/org/bukkit/material/Coal.java deleted file mode 100755 index 3a4f7c3..0000000 --- a/LiveWeather/src/org/bukkit/material/Coal.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.CoalType; -import org.bukkit.Material; - -/** - * Represents the different types of coals. - */ -public class Coal extends MaterialData { - public Coal() { - super(Material.COAL); - } - - public Coal(CoalType type) { - this(); - setType(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Coal(final int type) { - super(type); - } - - public Coal(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Coal(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Coal(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current type of this coal - * - * @return CoalType of this coal - */ - public CoalType getType() { - return CoalType.getByData(getData()); - } - - /** - * Sets the type of this coal - * - * @param type New type of this coal - */ - public void setType(CoalType type) { - setData(type.getData()); - } - - @Override - public String toString() { - return getType() + " " + super.toString(); - } - - @Override - public Coal clone() { - return (Coal) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/CocoaPlant.java b/LiveWeather/src/org/bukkit/material/CocoaPlant.java deleted file mode 100755 index b8280b5..0000000 --- a/LiveWeather/src/org/bukkit/material/CocoaPlant.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents the cocoa plant - */ -public class CocoaPlant extends MaterialData implements Directional, Attachable { - - public enum CocoaPlantSize { - SMALL, - MEDIUM, - LARGE - } - - public CocoaPlant() { - super(Material.COCOA); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public CocoaPlant(final int type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public CocoaPlant(final int type, final byte data) { - super(type, data); - } - - public CocoaPlant(CocoaPlantSize sz) { - this(); - setSize(sz); - } - - public CocoaPlant(CocoaPlantSize sz, BlockFace dir) { - this(); - setSize(sz); - setFacingDirection(dir); - } - - /** - * Get size of plant - * - * @return size - */ - public CocoaPlantSize getSize() { - switch (getData() & 0xC) { - case 0: - return CocoaPlantSize.SMALL; - case 4: - return CocoaPlantSize.MEDIUM; - default: - return CocoaPlantSize.LARGE; - } - } - - /** - * Set size of plant - * - * @param sz - size of plant - */ - public void setSize(CocoaPlantSize sz) { - int dat = getData() & 0x3; - switch (sz) { - case SMALL: - break; - case MEDIUM: - dat |= 0x4; - break; - case LARGE: - dat |= 0x8; - break; - } - setData((byte) dat); - } - - public BlockFace getAttachedFace() { - return getFacing().getOppositeFace(); - } - - public void setFacingDirection(BlockFace face) { - int dat = getData() & 0xC; - switch (face) { - default: - case SOUTH: - break; - case WEST: - dat |= 0x1; - break; - case NORTH: - dat |= 0x2; - break; - case EAST: - dat |= 0x3; - break; - } - setData((byte) dat); - } - - public BlockFace getFacing() { - switch (getData() & 0x3) { - case 0: - return BlockFace.SOUTH; - case 1: - return BlockFace.WEST; - case 2: - return BlockFace.NORTH; - case 3: - return BlockFace.EAST; - } - return null; - } - - @Override - public CocoaPlant clone() { - return (CocoaPlant) super.clone(); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + " " + getSize(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Colorable.java b/LiveWeather/src/org/bukkit/material/Colorable.java deleted file mode 100755 index 3b91b24..0000000 --- a/LiveWeather/src/org/bukkit/material/Colorable.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.DyeColor; - -/** - * An object that can be colored. - */ -public interface Colorable { - - /** - * Gets the color of this object. - * - * @return The DyeColor of this object. - */ - public DyeColor getColor(); - - /** - * Sets the color of this object to the specified DyeColor. - * - * @param color The color of the object, as a DyeColor. - */ - public void setColor(DyeColor color); - -} diff --git a/LiveWeather/src/org/bukkit/material/Command.java b/LiveWeather/src/org/bukkit/material/Command.java deleted file mode 100755 index 174e1ff..0000000 --- a/LiveWeather/src/org/bukkit/material/Command.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a command block - */ -public class Command extends MaterialData implements Redstone { - public Command() { - super(Material.COMMAND); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Command(final int type) { - super(type); - } - - public Command(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Command(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Command(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered() { - return (getData() & 1) != 0; - } - - /** - * Sets the current state of this Material - * - * @param bool - * whether or not the command block is powered - */ - public void setPowered(boolean bool) { - setData((byte) (bool ? (getData() | 1) : (getData() & -2))); - } - - @Override - public String toString() { - return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; - } - - @Override - public Command clone() { - return (Command) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Crops.java b/LiveWeather/src/org/bukkit/material/Crops.java deleted file mode 100755 index 2791998..0000000 --- a/LiveWeather/src/org/bukkit/material/Crops.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.CropState; -import org.bukkit.Material; - -/** - * Represents the different types of crops. - */ -public class Crops extends MaterialData { - public Crops() { - super(Material.CROPS); - } - - public Crops(CropState state) { - this(); - setState(state); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Crops(final int type) { - super(type); - } - - public Crops(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Crops(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Crops(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current growth state of this crop - * - * @return CropState of this crop - */ - public CropState getState() { - return CropState.getByData(getData()); - } - - /** - * Sets the growth state of this crop - * - * @param state New growth state of this crop - */ - public void setState(CropState state) { - setData(state.getData()); - } - - @Override - public String toString() { - return getState() + " " + super.toString(); - } - - @Override - public Crops clone() { - return (Crops) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/DetectorRail.java b/LiveWeather/src/org/bukkit/material/DetectorRail.java deleted file mode 100755 index b1d3073..0000000 --- a/LiveWeather/src/org/bukkit/material/DetectorRail.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a detector rail - */ -public class DetectorRail extends ExtendedRails implements PressureSensor { - public DetectorRail() { - super(Material.DETECTOR_RAIL); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public DetectorRail(final int type) { - super(type); - } - - public DetectorRail(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public DetectorRail(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public DetectorRail(final Material type, final byte data) { - super(type, data); - } - - public boolean isPressed() { - return (getData() & 0x8) == 0x8; - } - - public void setPressed(boolean isPressed) { - setData((byte) (isPressed ? (getData() | 0x8) : (getData() & ~0x8))); - } - - @Override - public DetectorRail clone() { - return (DetectorRail) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Diode.java b/LiveWeather/src/org/bukkit/material/Diode.java deleted file mode 100755 index 04210b7..0000000 --- a/LiveWeather/src/org/bukkit/material/Diode.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -public class Diode extends MaterialData implements Directional { - public Diode() { - super(Material.DIODE_BLOCK_ON); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Diode(int type) { - super(type); - } - - public Diode(Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Diode(int type, byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Diode(Material type, byte data) { - super(type, data); - } - - /** - * Sets the delay of the repeater - * - * @param delay - * The new delay (1-4) - */ - public void setDelay(int delay) { - if (delay > 4) { - delay = 4; - } - if (delay < 1) { - delay = 1; - } - byte newData = (byte) (getData() & 0x3); - - setData((byte) (newData | ((delay - 1) << 2))); - } - - /** - * Gets the delay of the repeater in ticks - * - * @return The delay (1-4) - */ - public int getDelay() { - return (getData() >> 2) + 1; - } - - public void setFacingDirection(BlockFace face) { - int delay = getDelay(); - byte data; - - switch (face) { - case EAST: - data = 0x1; - break; - - case SOUTH: - data = 0x2; - break; - - case WEST: - data = 0x3; - break; - - case NORTH: - default: - data = 0x0; - } - - setData(data); - setDelay(delay); - } - - public BlockFace getFacing() { - byte data = (byte) (getData() & 0x3); - - switch (data) { - case 0x0: - default: - return BlockFace.NORTH; - - case 0x1: - return BlockFace.EAST; - - case 0x2: - return BlockFace.SOUTH; - - case 0x3: - return BlockFace.WEST; - } - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + " with " + getDelay() + " ticks delay"; - } - - @Override - public Diode clone() { - return (Diode) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Directional.java b/LiveWeather/src/org/bukkit/material/Directional.java deleted file mode 100755 index 25624d2..0000000 --- a/LiveWeather/src/org/bukkit/material/Directional.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; - -public interface Directional { - - /** - * Sets the direction that this block is facing in - * - * @param face The facing direction - */ - public void setFacingDirection(BlockFace face); - - /** - * Gets the direction this block is facing - * - * @return the direction this block is facing - */ - public BlockFace getFacing(); -} diff --git a/LiveWeather/src/org/bukkit/material/DirectionalContainer.java b/LiveWeather/src/org/bukkit/material/DirectionalContainer.java deleted file mode 100755 index 9b0a047..0000000 --- a/LiveWeather/src/org/bukkit/material/DirectionalContainer.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a furnace or a dispenser. - */ -public class DirectionalContainer extends MaterialData implements Directional { - /** - * - * @deprecated Magic value - */ - @Deprecated - public DirectionalContainer(final int type) { - super(type); - } - - public DirectionalContainer(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public DirectionalContainer(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public DirectionalContainer(final Material type, final byte data) { - super(type, data); - } - - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case NORTH: - data = 0x2; - break; - - case SOUTH: - data = 0x3; - break; - - case WEST: - data = 0x4; - break; - - case EAST: - default: - data = 0x5; - } - - setData(data); - } - - public BlockFace getFacing() { - byte data = getData(); - - switch (data) { - case 0x2: - return BlockFace.NORTH; - - case 0x3: - return BlockFace.SOUTH; - - case 0x4: - return BlockFace.WEST; - - case 0x5: - default: - return BlockFace.EAST; - } - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing(); - } - - @Override - public DirectionalContainer clone() { - return (DirectionalContainer) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Dispenser.java b/LiveWeather/src/org/bukkit/material/Dispenser.java deleted file mode 100755 index b62f8c9..0000000 --- a/LiveWeather/src/org/bukkit/material/Dispenser.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a dispenser. - */ -public class Dispenser extends FurnaceAndDispenser { - - public Dispenser() { - super(Material.DISPENSER); - } - - public Dispenser(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dispenser(final int type) { - super(type); - } - - public Dispenser(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dispenser(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dispenser(final Material type, final byte data) { - super(type, data); - } - - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case DOWN: - data = 0x0; - break; - - case UP: - data = 0x1; - break; - - case NORTH: - data = 0x2; - break; - - case SOUTH: - data = 0x3; - break; - - case WEST: - data = 0x4; - break; - - case EAST: - default: - data = 0x5; - } - - setData(data); - } - - public BlockFace getFacing() { - int data = getData() & 0x7; - - switch (data) { - case 0x0: - return BlockFace.DOWN; - - case 0x1: - return BlockFace.UP; - - case 0x2: - return BlockFace.NORTH; - - case 0x3: - return BlockFace.SOUTH; - - case 0x4: - return BlockFace.WEST; - - case 0x5: - default: - return BlockFace.EAST; - } - } - - @Override - public Dispenser clone() { - return (Dispenser) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Door.java b/LiveWeather/src/org/bukkit/material/Door.java deleted file mode 100755 index 65fa32c..0000000 --- a/LiveWeather/src/org/bukkit/material/Door.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a door. - * - * @deprecated No longer functions. Do not use. - */ -@Deprecated -public class Door extends MaterialData implements Directional, Openable { - public Door() { - super(Material.WOODEN_DOOR); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Door(final int type) { - super(type); - } - - public Door(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Door(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Door(final Material type, final byte data) { - super(type, data); - } - - /** - * @deprecated Does not work (correctly) anymore - */ - @Deprecated - public boolean isOpen() { - return ((getData() & 0x4) == 0x4); - } - - /** - * @deprecated Does not work (correctly) anymore - */ - @Deprecated - public void setOpen(boolean isOpen) { - setData((byte) (isOpen ? (getData() | 0x4) : (getData() & ~0x4))); - } - - /** - * @return whether this is the top half of the door - */ - public boolean isTopHalf() { - return ((getData() & 0x8) == 0x8); - } - - /** - * Configure this part of the door to be either the top or the bottom half - * - * @param isTopHalf True to make it the top half. - * @deprecated Shouldn't be used anymore - */ - @Deprecated - public void setTopHalf(boolean isTopHalf) { - setData((byte) (isTopHalf ? (getData() | 0x8) : (getData() & ~0x8))); - } - - /** - * @return BlockFace.SELF - * @deprecated Does not work (correctly) anymore - */ - @Deprecated - public BlockFace getHingeCorner() { - byte d = getData(); - - if ((d & 0x3) == 0x3) { - return BlockFace.NORTH_WEST; - } else if ((d & 0x1) == 0x1) { - return BlockFace.SOUTH_EAST; - } else if ((d & 0x2) == 0x2) { - return BlockFace.SOUTH_WEST; - } - - return BlockFace.NORTH_EAST; - } - - @Override - public String toString() { - return (isTopHalf() ? "TOP" : "BOTTOM") + " half of " + super.toString(); - } - - /** - * Set the direction that this door should is facing. - * - * @param face the direction - * @deprecated Does not work (correctly) anymore - */ - @Deprecated - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0x12); - switch (face) { - case NORTH: - data |= 0x1; - break; - - case EAST: - data |= 0x2; - break; - - case SOUTH: - data |= 0x3; - break; - } - setData(data); - } - - /** - * Get the direction that this door is facing. - * - * @return the direction - * @deprecated Does not work (correctly) anymore - */ - @Deprecated - public BlockFace getFacing() { - byte data = (byte) (getData() & 0x3); - switch (data) { - case 0: - return BlockFace.WEST; - - case 1: - return BlockFace.NORTH; - - case 2: - return BlockFace.EAST; - - case 3: - return BlockFace.SOUTH; - } - return null; // shouldn't happen - } - - @Override - public Door clone() { - return (Door) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Dye.java b/LiveWeather/src/org/bukkit/material/Dye.java deleted file mode 100755 index 4412c1f..0000000 --- a/LiveWeather/src/org/bukkit/material/Dye.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.DyeColor; -import org.bukkit.Material; - -/** - * Represents dye - */ -public class Dye extends MaterialData implements Colorable { - public Dye() { - super(Material.INK_SACK); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dye(final int type) { - super(type); - } - - public Dye(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dye(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Dye(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current color of this dye - * - * @return DyeColor of this dye - */ - public DyeColor getColor() { - return DyeColor.getByDyeData(getData()); - } - - /** - * Sets the color of this dye - * - * @param color New color of this dye - */ - public void setColor(DyeColor color) { - setData(color.getDyeData()); - } - - @Override - public String toString() { - return getColor() + " DYE(" + getData() + ")"; - } - - @Override - public Dye clone() { - return (Dye) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/EnderChest.java b/LiveWeather/src/org/bukkit/material/EnderChest.java deleted file mode 100755 index 696dc65..0000000 --- a/LiveWeather/src/org/bukkit/material/EnderChest.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents an ender chest - */ -public class EnderChest extends DirectionalContainer { - - public EnderChest() { - super(Material.ENDER_CHEST); - } - - /** - * Instantiate an ender chest facing in a particular direction. - * - * @param direction the direction the ender chest's lid opens towards - */ - public EnderChest(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public EnderChest(final int type) { - super(type); - } - - public EnderChest(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public EnderChest(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public EnderChest(final Material type, final byte data) { - super(type, data); - } - - @Override - public EnderChest clone() { - return (EnderChest) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/ExtendedRails.java b/LiveWeather/src/org/bukkit/material/ExtendedRails.java deleted file mode 100755 index 0dbbf7c..0000000 --- a/LiveWeather/src/org/bukkit/material/ExtendedRails.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * This is the superclass for the {@link DetectorRail} and {@link PoweredRail} - * classes - */ -public class ExtendedRails extends Rails { - /** - * - * @deprecated Magic value - */ - @Deprecated - public ExtendedRails(final int type) { - super(type); - } - - public ExtendedRails(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public ExtendedRails(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public ExtendedRails(final Material type, final byte data) { - super(type, data); - } - - @Override - public boolean isCurve() { - return false; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - @Override - protected byte getConvertedData() { - return (byte) (getData() & 0x7); - } - - @Override - public void setDirection(BlockFace face, boolean isOnSlope) { - boolean extraBitSet = (getData() & 0x8) == 0x8; - - if (face != BlockFace.WEST && face != BlockFace.EAST && face != BlockFace.NORTH && face != BlockFace.SOUTH) { - throw new IllegalArgumentException("Detector rails and powered rails cannot be set on a curve!"); - } - - super.setDirection(face, isOnSlope); - setData((byte) (extraBitSet ? (getData() | 0x8) : (getData() & ~0x8))); - } - - @Override - public ExtendedRails clone() { - return (ExtendedRails) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/FlowerPot.java b/LiveWeather/src/org/bukkit/material/FlowerPot.java deleted file mode 100755 index 787c58d..0000000 --- a/LiveWeather/src/org/bukkit/material/FlowerPot.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.GrassSpecies; -import org.bukkit.Material; -import org.bukkit.TreeSpecies; - -/** - * Represents a flower pot. - */ -public class FlowerPot extends MaterialData { - - /** - * Default constructor for a flower pot. - */ - public FlowerPot() { - super(Material.FLOWER_POT); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FlowerPot(final int type) { - super(type); - } - - public FlowerPot(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FlowerPot(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FlowerPot(final Material type, final byte data) { - super(type, data); - } - - /** - * Get the material in the flower pot - * - * @return material MaterialData for the block currently in the flower pot - * or null if empty - */ - public MaterialData getContents() { - switch (getData()) { - case 1: - return new MaterialData(Material.RED_ROSE); - case 2: - return new MaterialData(Material.YELLOW_FLOWER); - case 3: - return new Tree(TreeSpecies.GENERIC); - case 4: - return new Tree(TreeSpecies.REDWOOD); - case 5: - return new Tree(TreeSpecies.BIRCH); - case 6: - return new Tree(TreeSpecies.JUNGLE); - case 7: - return new MaterialData(Material.RED_MUSHROOM); - case 8: - return new MaterialData(Material.BROWN_MUSHROOM); - case 9: - return new MaterialData(Material.CACTUS); - case 10: - return new MaterialData(Material.DEAD_BUSH); - case 11: - return new LongGrass(GrassSpecies.FERN_LIKE); - default: - return null; - } - } - - /** - * Set the contents of the flower pot - * - * @param materialData MaterialData of the block to put in the flower pot. - */ - public void setContents(MaterialData materialData) { - Material mat = materialData.getItemType(); - - if (mat == Material.RED_ROSE) { - setData((byte) 1); - } else if (mat == Material.YELLOW_FLOWER) { - setData((byte) 2); - } else if (mat == Material.RED_MUSHROOM) { - setData((byte) 7); - } else if (mat == Material.BROWN_MUSHROOM) { - setData((byte) 8); - } else if (mat == Material.CACTUS) { - setData((byte) 9); - } else if (mat == Material.DEAD_BUSH) { - setData((byte) 10); - } else if (mat == Material.SAPLING) { - TreeSpecies species = ((Tree) materialData).getSpecies(); - - if (species == TreeSpecies.GENERIC) { - setData((byte) 3); - } else if (species == TreeSpecies.REDWOOD) { - setData((byte) 4); - } else if (species == TreeSpecies.BIRCH) { - setData((byte) 5); - } else { - setData((byte) 6); - } - } else if (mat == Material.LONG_GRASS) { - GrassSpecies species = ((LongGrass) materialData).getSpecies(); - - if (species == GrassSpecies.FERN_LIKE) { - setData((byte) 11); - } - } - } - - @Override - public String toString() { - return super.toString() + " containing " + getContents(); - } - - @Override - public FlowerPot clone() { - return (FlowerPot) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Furnace.java b/LiveWeather/src/org/bukkit/material/Furnace.java deleted file mode 100755 index 49645aa..0000000 --- a/LiveWeather/src/org/bukkit/material/Furnace.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a furnace. - */ -public class Furnace extends FurnaceAndDispenser { - - public Furnace() { - super(Material.FURNACE); - } - - /** - * Instantiate a furnace facing in a particular direction. - * - * @param direction the direction the furnace's "opening" is facing - */ - public Furnace(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Furnace(final int type) { - super(type); - } - - public Furnace(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Furnace(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Furnace(final Material type, final byte data) { - super(type, data); - } - - @Override - public Furnace clone() { - return (Furnace) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/FurnaceAndDispenser.java b/LiveWeather/src/org/bukkit/material/FurnaceAndDispenser.java deleted file mode 100755 index 3665479..0000000 --- a/LiveWeather/src/org/bukkit/material/FurnaceAndDispenser.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a furnace or dispenser, two types of directional containers - */ -public class FurnaceAndDispenser extends DirectionalContainer { - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FurnaceAndDispenser(final int type) { - super(type); - } - - public FurnaceAndDispenser(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FurnaceAndDispenser(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public FurnaceAndDispenser(final Material type, final byte data) { - super(type, data); - } - - @Override - public FurnaceAndDispenser clone() { - return (FurnaceAndDispenser) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Gate.java b/LiveWeather/src/org/bukkit/material/Gate.java deleted file mode 100755 index 8adc1cf..0000000 --- a/LiveWeather/src/org/bukkit/material/Gate.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a fence gate - */ -public class Gate extends MaterialData implements Directional, Openable { - private static final byte OPEN_BIT = 0x4; - private static final byte DIR_BIT = 0x3; - private static final byte GATE_SOUTH = 0x0; - private static final byte GATE_WEST = 0x1; - private static final byte GATE_NORTH = 0x2; - private static final byte GATE_EAST = 0x3; - - public Gate() { - super(Material.FENCE_GATE); - } - - public Gate(int type, byte data){ - super(type, data); - } - - public Gate(byte data) { - super(Material.FENCE_GATE, data); - } - - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() &~ DIR_BIT); - - switch (face) { - default: - case EAST: - data |= GATE_SOUTH; - break; - case SOUTH: - data |= GATE_WEST; - break; - case WEST: - data |= GATE_NORTH; - break; - case NORTH: - data |= GATE_EAST; - break; - } - - setData(data); - } - - public BlockFace getFacing() { - switch (getData() & DIR_BIT) { - case GATE_SOUTH: - return BlockFace.EAST; - case GATE_WEST: - return BlockFace.SOUTH; - case GATE_NORTH: - return BlockFace.WEST; - case GATE_EAST: - return BlockFace.NORTH; - } - - return BlockFace.EAST; - } - - public boolean isOpen() { - return (getData() & OPEN_BIT) > 0; - } - - public void setOpen(boolean isOpen) { - byte data = getData(); - - if (isOpen) { - data |= OPEN_BIT; - } else { - data &= ~OPEN_BIT; - } - - setData(data); - } - - @Override - public String toString() { - return (isOpen() ? "OPEN " : "CLOSED ") + " facing and opening " + getFacing(); - } - - @Override - public Gate clone() { - return (Gate) super.clone(); - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/material/Ladder.java b/LiveWeather/src/org/bukkit/material/Ladder.java deleted file mode 100755 index 09862bf..0000000 --- a/LiveWeather/src/org/bukkit/material/Ladder.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; -import org.bukkit.Material; - -/** - * Represents Ladder data - */ -public class Ladder extends SimpleAttachableMaterialData { - public Ladder() { - super(Material.LADDER); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Ladder(final int type) { - super(type); - } - - public Ladder(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Ladder(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Ladder(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace() { - byte data = getData(); - - switch (data) { - case 0x2: - return BlockFace.SOUTH; - - case 0x3: - return BlockFace.NORTH; - - case 0x4: - return BlockFace.EAST; - - case 0x5: - return BlockFace.WEST; - } - - return null; - } - - /** - * Sets the direction this ladder is facing - */ - public void setFacingDirection(BlockFace face) { - byte data = (byte) 0x0; - - switch (face) { - case SOUTH: - data = 0x2; - break; - - case NORTH: - data = 0x3; - break; - - case EAST: - data = 0x4; - break; - - case WEST: - data = 0x5; - break; - } - - setData(data); - - } - - @Override - public Ladder clone() { - return (Ladder) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Leaves.java b/LiveWeather/src/org/bukkit/material/Leaves.java deleted file mode 100755 index 97ba382..0000000 --- a/LiveWeather/src/org/bukkit/material/Leaves.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.TreeSpecies; - -/** - * Represents the different types of leaves. - */ -public class Leaves extends MaterialData { - public Leaves() { - super(Material.LEAVES); - } - - public Leaves(TreeSpecies species) { - this(); - setSpecies(species); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Leaves(final int type) { - super(type); - } - - public Leaves(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Leaves(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Leaves(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current species of this leave - * - * @return TreeSpecies of this leave - */ - public TreeSpecies getSpecies() { - return TreeSpecies.getByData((byte) (getData() & 3)); - } - - /** - * Sets the species of this leave - * - * @param species New species of this leave - */ - public void setSpecies(TreeSpecies species) { - setData(species.getData()); - } - - @Override - public String toString() { - return getSpecies() + " " + super.toString(); - } - - @Override - public Leaves clone() { - return (Leaves) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Lever.java b/LiveWeather/src/org/bukkit/material/Lever.java deleted file mode 100755 index b88c536..0000000 --- a/LiveWeather/src/org/bukkit/material/Lever.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; -import org.bukkit.Material; - -/** - * Represents a lever - */ -public class Lever extends SimpleAttachableMaterialData implements Redstone { - public Lever() { - super(Material.LEVER); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Lever(final int type) { - super(type); - } - - public Lever(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Lever(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Lever(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered() { - return (getData() & 0x8) == 0x8; - } - - /** - * Set this lever to be powered or not. - * - * @param isPowered whether the lever should be powered or not - */ - public void setPowered(boolean isPowered) { - setData((byte) (isPowered ? (getData() | 0x8) : (getData() & ~0x8))); - } - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace() { - byte data = (byte) (getData() & 0x7); - - switch (data) { - case 0x1: - return BlockFace.WEST; - - case 0x2: - return BlockFace.EAST; - - case 0x3: - return BlockFace.NORTH; - - case 0x4: - return BlockFace.SOUTH; - - case 0x5: - case 0x6: - return BlockFace.DOWN; - - case 0x0: - case 0x7: - return BlockFace.UP; - - } - - return null; - } - - /** - * Sets the direction this lever is pointing in - */ - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0x8); - BlockFace attach = getAttachedFace(); - - if (attach == BlockFace.DOWN) { - switch (face) { - case SOUTH: - case NORTH: - data |= 0x5; - break; - - case EAST: - case WEST: - data |= 0x6; - break; - } - } else if (attach == BlockFace.UP) { - switch (face) { - case SOUTH: - case NORTH: - data |= 0x7; - break; - - case EAST: - case WEST: - data |= 0x0; - break; - } - } else { - switch (face) { - case EAST: - data |= 0x1; - break; - - case WEST: - data |= 0x2; - break; - - case SOUTH: - data |= 0x3; - break; - - case NORTH: - data |= 0x4; - break; - } - } - setData(data); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; - } - - @Override - public Lever clone() { - return (Lever) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/LongGrass.java b/LiveWeather/src/org/bukkit/material/LongGrass.java deleted file mode 100755 index e8d1f38..0000000 --- a/LiveWeather/src/org/bukkit/material/LongGrass.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.GrassSpecies; -import org.bukkit.Material; - -/** - * Represents the different types of long grasses. - */ -public class LongGrass extends MaterialData { - public LongGrass() { - super(Material.LONG_GRASS); - } - - public LongGrass(GrassSpecies species) { - this(); - setSpecies(species); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public LongGrass(final int type) { - super(type); - } - - public LongGrass(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public LongGrass(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public LongGrass(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current species of this grass - * - * @return GrassSpecies of this grass - */ - public GrassSpecies getSpecies() { - return GrassSpecies.getByData(getData()); - } - - /** - * Sets the species of this grass - * - * @param species New species of this grass - */ - public void setSpecies(GrassSpecies species) { - setData(species.getData()); - } - - @Override - public String toString() { - return getSpecies() + " " + super.toString(); - } - - @Override - public LongGrass clone() { - return (LongGrass) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/MaterialData.java b/LiveWeather/src/org/bukkit/material/MaterialData.java deleted file mode 100755 index ad7675f..0000000 --- a/LiveWeather/src/org/bukkit/material/MaterialData.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.inventory.ItemStack; -import org.bukkit.Material; - -/** - * Handles specific metadata for certain items or blocks - */ -public class MaterialData implements Cloneable { - private final int type; - private byte data = 0; - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MaterialData(final int type) { - this(type, (byte) 0); - } - - public MaterialData(final Material type) { - this(type, (byte) 0); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MaterialData(final int type, final byte data) { - this.type = type; - this.data = data; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MaterialData(final Material type, final byte data) { - this(type.getId(), data); - } - - /** - * Gets the raw data in this material - * - * @return Raw data - * @deprecated Magic value - */ - @Deprecated - public byte getData() { - return data; - } - - /** - * Sets the raw data of this material - * - * @param data New raw data - * @deprecated Magic value - */ - @Deprecated - public void setData(byte data) { - this.data = data; - } - - /** - * Gets the Material that this MaterialData represents - * - * @return Material represented by this MaterialData - */ - public Material getItemType() { - return Material.getMaterial(type); - } - - /** - * Gets the Material Id that this MaterialData represents - * - * @return Material Id represented by this MaterialData - * @deprecated Magic value - */ - @Deprecated - public int getItemTypeId() { - return type; - } - - /** - * Creates a new ItemStack based on this MaterialData - * - * @return New ItemStack containing a copy of this MaterialData - */ - public ItemStack toItemStack() { - return new ItemStack(type, 0, data); - } - - /** - * Creates a new ItemStack based on this MaterialData - * - * @param amount The stack size of the new stack - * @return New ItemStack containing a copy of this MaterialData - */ - public ItemStack toItemStack(int amount) { - return new ItemStack(type, amount, data); - } - - @Override - public String toString() { - return getItemType() + "(" + getData() + ")"; - } - - @Override - public int hashCode() { - return ((getItemTypeId() << 8) ^ getData()); - } - - @Override - public boolean equals(Object obj) { - if (obj != null && obj instanceof MaterialData) { - MaterialData md = (MaterialData) obj; - - return (md.getItemTypeId() == getItemTypeId() && md.getData() == getData()); - } else { - return false; - } - } - - @Override - public MaterialData clone() { - try { - return (MaterialData) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } -} diff --git a/LiveWeather/src/org/bukkit/material/MonsterEggs.java b/LiveWeather/src/org/bukkit/material/MonsterEggs.java deleted file mode 100755 index d8b627b..0000000 --- a/LiveWeather/src/org/bukkit/material/MonsterEggs.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.bukkit.material; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Material; - -/** - * Represents the different types of monster eggs - */ -public class MonsterEggs extends TexturedMaterial { - - private static final List textures = new ArrayList(); - static { - textures.add(Material.STONE); - textures.add(Material.COBBLESTONE); - textures.add(Material.SMOOTH_BRICK); - } - - public MonsterEggs() { - super(Material.MONSTER_EGGS); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MonsterEggs(final int type) { - super(type); - } - - public MonsterEggs(final Material type) { - super((textures.contains(type)) ? Material.MONSTER_EGGS : type); - if (textures.contains(type)) { - setMaterial(type); - } - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MonsterEggs(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public MonsterEggs(final Material type, final byte data) { - super(type, data); - } - - @Override - public List getTextures() { - return textures; - } - - @Override - public MonsterEggs clone() { - return (MonsterEggs) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Mushroom.java b/LiveWeather/src/org/bukkit/material/Mushroom.java deleted file mode 100755 index 716d378..0000000 --- a/LiveWeather/src/org/bukkit/material/Mushroom.java +++ /dev/null @@ -1,197 +0,0 @@ -package org.bukkit.material; - -import java.util.EnumSet; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a huge mushroom block - */ -public class Mushroom extends MaterialData { - private static final byte SHROOM_NONE = 0; - private static final byte SHROOM_STEM = 10; - private static final byte NORTH_LIMIT = 4; - private static final byte SOUTH_LIMIT = 6; - private static final byte EAST_WEST_LIMIT = 3; - private static final byte EAST_REMAINDER = 0; - private static final byte WEST_REMAINDER = 1; - private static final byte NORTH_SOUTH_MOD = 3; - private static final byte EAST_WEST_MOD = 1; - - public Mushroom(Material shroom) { - super(shroom); - Validate.isTrue(shroom == Material.HUGE_MUSHROOM_1 || shroom == Material.HUGE_MUSHROOM_2, "Not a mushroom!"); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Mushroom(Material shroom, byte data) { - super(shroom, data); - Validate.isTrue(shroom == Material.HUGE_MUSHROOM_1 || shroom == Material.HUGE_MUSHROOM_2, "Not a mushroom!"); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Mushroom(int type, byte data){ - super(type, data); - Validate.isTrue(type == Material.HUGE_MUSHROOM_1.getId() || type == Material.HUGE_MUSHROOM_2.getId(), "Not a mushroom!"); - } - - /** - * @return Whether this is a mushroom stem. - */ - public boolean isStem() { - return getData() == SHROOM_STEM; - } - - /** - * Sets this to be a mushroom stem. - */ - public void setStem() { - setData((byte) 10); - } - - /** - * Checks whether a face of the block is painted. - * - * @param face The face to check. - * @return True if it is painted. - */ - public boolean isFacePainted(BlockFace face) { - byte data = getData(); - - if (data == SHROOM_NONE || data == SHROOM_STEM) { - return false; - } - - switch (face) { - case WEST: - return data < NORTH_LIMIT; - case EAST: - return data > SOUTH_LIMIT; - case NORTH: - return data % EAST_WEST_LIMIT == EAST_REMAINDER; - case SOUTH: - return data % EAST_WEST_LIMIT == WEST_REMAINDER; - case UP: - return true; - default: - return false; - } - } - - /** - * Set a face of the block to be painted or not. Note that due to the - * nature of how the data is stored, setting a face painted or not is not - * guaranteed to leave the other faces unchanged. - * - * @param face The face to paint or unpaint. - * @param painted True if you want to paint it, false if you want the - * pores to show. - */ - public void setFacePainted(BlockFace face, boolean painted) { - if (painted == isFacePainted(face)) { - return; - } - - byte data = getData(); - - if (data == SHROOM_STEM) { - data = 5; - } - - switch (face) { - case WEST: - if (painted) { - data -= NORTH_SOUTH_MOD; - } else { - data += NORTH_SOUTH_MOD; - } - - break; - case EAST: - if (painted) { - data += NORTH_SOUTH_MOD; - } else { - data -= NORTH_SOUTH_MOD; - } - - break; - case NORTH: - if (painted) { - data += EAST_WEST_MOD; - } else { - data -= EAST_WEST_MOD; - } - - break; - case SOUTH: - if (painted) { - data -= EAST_WEST_MOD; - } else { - data += EAST_WEST_MOD; - } - - break; - case UP: - if (!painted) { - data = 0; - } - - break; - default: - throw new IllegalArgumentException("Can't paint that face of a mushroom!"); - } - - setData(data); - } - - /** - * @return A set of all faces that are currently painted (an empty set if - * it is a stem) - */ - public Set getPaintedFaces() { - EnumSet faces = EnumSet.noneOf(BlockFace.class); - - if (isFacePainted(BlockFace.WEST)) { - faces.add(BlockFace.WEST); - } - - if (isFacePainted(BlockFace.NORTH)) { - faces.add(BlockFace.NORTH); - } - - if (isFacePainted(BlockFace.SOUTH)) { - faces.add(BlockFace.SOUTH); - } - - if (isFacePainted(BlockFace.EAST)) { - faces.add(BlockFace.EAST); - } - - if (isFacePainted(BlockFace.UP)) { - faces.add(BlockFace.UP); - } - - return faces; - } - - @Override - public String toString() { - return Material.getMaterial(getItemTypeId()).toString() + (isStem() ? "{STEM}" : getPaintedFaces()); - } - - @Override - public Mushroom clone() { - return (Mushroom) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/NetherWarts.java b/LiveWeather/src/org/bukkit/material/NetherWarts.java deleted file mode 100755 index 99ea3f0..0000000 --- a/LiveWeather/src/org/bukkit/material/NetherWarts.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.NetherWartsState; - -/** - * Represents nether wart - */ -public class NetherWarts extends MaterialData { - public NetherWarts() { - super(Material.NETHER_WARTS); - } - - public NetherWarts(NetherWartsState state) { - this(); - setState(state); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public NetherWarts(final int type) { - super(type); - } - - public NetherWarts(final Material type) { - super (type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public NetherWarts(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public NetherWarts(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current growth state of this nether wart - * - * @return NetherWartsState of this nether wart - */ - public NetherWartsState getState() { - switch (getData()) { - case 0: - return NetherWartsState.SEEDED; - case 1: - return NetherWartsState.STAGE_ONE; - case 2: - return NetherWartsState.STAGE_TWO; - default: - return NetherWartsState.RIPE; - } - } - - /** - * Sets the growth state of this nether wart - * - * @param state New growth state of this nether wart - */ - public void setState(NetherWartsState state) { - switch (state) { - case SEEDED: - setData((byte) 0x0); - return; - case STAGE_ONE: - setData((byte) 0x1); - return; - case STAGE_TWO: - setData((byte) 0x2); - return; - case RIPE: - setData((byte) 0x3); - return; - } - } - - @Override - public String toString() { - return getState() + " " + super.toString(); - } - - @Override - public NetherWarts clone() { - return (NetherWarts) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Openable.java b/LiveWeather/src/org/bukkit/material/Openable.java deleted file mode 100755 index 0ae54f9..0000000 --- a/LiveWeather/src/org/bukkit/material/Openable.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bukkit.material; - -public interface Openable { - - /** - * Check to see if the door is open. - * - * @return true if the door has swung counterclockwise around its hinge. - */ - boolean isOpen(); - - /** - * Configure this door to be either open or closed; - * - * @param isOpen True to open the door. - */ - void setOpen(boolean isOpen); -} diff --git a/LiveWeather/src/org/bukkit/material/PistonBaseMaterial.java b/LiveWeather/src/org/bukkit/material/PistonBaseMaterial.java deleted file mode 100755 index f3586dc..0000000 --- a/LiveWeather/src/org/bukkit/material/PistonBaseMaterial.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Material data for the piston base block - */ -public class PistonBaseMaterial extends MaterialData implements Directional, Redstone { - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonBaseMaterial(final int type) { - super(type); - } - - public PistonBaseMaterial(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonBaseMaterial(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonBaseMaterial(final Material type, final byte data) { - super(type, data); - } - - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0x8); - - switch (face) { - case UP: - data |= 1; - break; - case NORTH: - data |= 2; - break; - case SOUTH: - data |= 3; - break; - case WEST: - data |= 4; - break; - case EAST: - data |= 5; - break; - } - setData(data); - } - - public BlockFace getFacing() { - byte dir = (byte) (getData() & 7); - - switch (dir) { - case 0: - return BlockFace.DOWN; - case 1: - return BlockFace.UP; - case 2: - return BlockFace.NORTH; - case 3: - return BlockFace.SOUTH; - case 4: - return BlockFace.WEST; - case 5: - return BlockFace.EAST; - default: - return BlockFace.SELF; - } - } - - public boolean isPowered() { - return (getData() & 0x8) == 0x8; - } - - /** - * Sets the current state of this piston - * - * @param powered true if the piston is extended & powered, or false - */ - public void setPowered(boolean powered) { - setData((byte) (powered ? (getData() | 0x8) : (getData() & ~0x8))); - } - - /** - * Checks if this piston base is sticky, and returns true if so - * - * @return true if this piston is "sticky", or false - */ - public boolean isSticky() { - return this.getItemType() == Material.PISTON_STICKY_BASE; - } - - @Override - public PistonBaseMaterial clone() { - return (PistonBaseMaterial) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/PistonExtensionMaterial.java b/LiveWeather/src/org/bukkit/material/PistonExtensionMaterial.java deleted file mode 100755 index 85dee84..0000000 --- a/LiveWeather/src/org/bukkit/material/PistonExtensionMaterial.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Material data for the piston extension block - */ -public class PistonExtensionMaterial extends MaterialData implements Attachable { - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonExtensionMaterial(final int type) { - super(type); - } - - public PistonExtensionMaterial(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonExtensionMaterial(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PistonExtensionMaterial(final Material type, final byte data) { - super(type, data); - } - - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0x8); - - switch (face) { - case UP: - data |= 1; - break; - case NORTH: - data |= 2; - break; - case SOUTH: - data |= 3; - break; - case WEST: - data |= 4; - break; - case EAST: - data |= 5; - break; - } - setData(data); - } - - public BlockFace getFacing() { - byte dir = (byte) (getData() & 7); - - switch (dir) { - case 0: - return BlockFace.DOWN; - case 1: - return BlockFace.UP; - case 2: - return BlockFace.NORTH; - case 3: - return BlockFace.SOUTH; - case 4: - return BlockFace.WEST; - case 5: - return BlockFace.EAST; - default: - return BlockFace.SELF; - } - } - - /** - * Checks if this piston extension is sticky, and returns true if so - * - * @return true if this piston is "sticky", or false - */ - public boolean isSticky() { - return (getData() & 8) == 8; - } - - /** - * Sets whether or not this extension is sticky - * - * @param sticky true if sticky, otherwise false - */ - public void setSticky(boolean sticky) { - setData((byte) (sticky ? (getData() | 0x8) : (getData() & ~0x8))); - } - - public BlockFace getAttachedFace() { - return getFacing().getOppositeFace(); - } - - @Override - public PistonExtensionMaterial clone() { - return (PistonExtensionMaterial) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/PoweredRail.java b/LiveWeather/src/org/bukkit/material/PoweredRail.java deleted file mode 100755 index 444e53b..0000000 --- a/LiveWeather/src/org/bukkit/material/PoweredRail.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a powered rail - */ -public class PoweredRail extends ExtendedRails implements Redstone { - public PoweredRail() { - super(Material.POWERED_RAIL); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PoweredRail(final int type) { - super(type); - } - - public PoweredRail(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PoweredRail(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PoweredRail(final Material type, final byte data) { - super(type, data); - } - - public boolean isPowered() { - return (getData() & 0x8) == 0x8; - } - - /** - * Set whether this PoweredRail should be powered or not. - * - * @param isPowered whether or not the rail is powered - */ - public void setPowered(boolean isPowered) { - setData((byte) (isPowered ? (getData() | 0x8) : (getData() & ~0x8))); - } - - @Override - public PoweredRail clone() { - return (PoweredRail) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/PressurePlate.java b/LiveWeather/src/org/bukkit/material/PressurePlate.java deleted file mode 100755 index 8c3bc75..0000000 --- a/LiveWeather/src/org/bukkit/material/PressurePlate.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a pressure plate - */ -public class PressurePlate extends MaterialData implements PressureSensor { - public PressurePlate() { - super(Material.WOOD_PLATE); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PressurePlate(int type) { - super(type); - } - - public PressurePlate(Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PressurePlate(int type, byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public PressurePlate(Material type, byte data) { - super(type, data); - } - - public boolean isPressed() { - return getData() == 0x1; - } - - @Override - public String toString() { - return super.toString() + (isPressed() ? " PRESSED" : ""); - } - - @Override - public PressurePlate clone() { - return (PressurePlate) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/PressureSensor.java b/LiveWeather/src/org/bukkit/material/PressureSensor.java deleted file mode 100755 index de20bd3..0000000 --- a/LiveWeather/src/org/bukkit/material/PressureSensor.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.bukkit.material; - -public interface PressureSensor { - public boolean isPressed(); -} diff --git a/LiveWeather/src/org/bukkit/material/Pumpkin.java b/LiveWeather/src/org/bukkit/material/Pumpkin.java deleted file mode 100755 index d6ca83c..0000000 --- a/LiveWeather/src/org/bukkit/material/Pumpkin.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a pumpkin. - */ -public class Pumpkin extends MaterialData implements Directional { - - public Pumpkin() { - super(Material.PUMPKIN); - } - - /** - * Instantiate a pumpkin facing in a particular direction. - * - * @param direction the direction the pumkin's face is facing - */ - public Pumpkin(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Pumpkin(final int type) { - super(type); - } - - public Pumpkin(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Pumpkin(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Pumpkin(final Material type, final byte data) { - super(type, data); - } - - public boolean isLit() { - return getItemType() == Material.JACK_O_LANTERN; - } - - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case NORTH: - data = 0x0; - break; - - case EAST: - data = 0x1; - break; - - case SOUTH: - data = 0x2; - break; - - case WEST: - default: - data = 0x3; - } - - setData(data); - } - - public BlockFace getFacing() { - byte data = getData(); - - switch (data) { - case 0x0: - return BlockFace.NORTH; - - case 0x1: - return BlockFace.EAST; - - case 0x2: - return BlockFace.SOUTH; - - case 0x3: - default: - return BlockFace.EAST; - } - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + " " + (isLit() ? "" : "NOT ") + "LIT"; - } - - @Override - public Pumpkin clone() { - return (Pumpkin) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Rails.java b/LiveWeather/src/org/bukkit/material/Rails.java deleted file mode 100755 index 74fd95a..0000000 --- a/LiveWeather/src/org/bukkit/material/Rails.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents minecart rails. - */ -public class Rails extends MaterialData { - - public Rails() { - super(Material.RAILS); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Rails(final int type) { - super(type); - } - - public Rails(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Rails(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Rails(final Material type, final byte data) { - super(type, data); - } - - /** - * @return the whether this track is set on a slope - */ - public boolean isOnSlope() { - byte d = getConvertedData(); - - return (d == 0x2 || d == 0x3 || d == 0x4 || d == 0x5); - } - - /** - * @return the whether this track is set as a curve - */ - public boolean isCurve() { - byte d = getConvertedData(); - - return (d == 0x6 || d == 0x7 || d == 0x8 || d == 0x9); - } - - /** - * @return the direction these tracks are set - *

          - * Note that tracks are bidirectional and that the direction returned - * is the ascending direction if the track is set on a slope. If it is - * set as a curve, the corner of the track is returned. - */ - public BlockFace getDirection() { - byte d = getConvertedData(); - - switch (d) { - case 0x0: - default: - return BlockFace.SOUTH; - - case 0x1: - return BlockFace.EAST; - - case 0x2: - return BlockFace.EAST; - - case 0x3: - return BlockFace.WEST; - - case 0x4: - return BlockFace.NORTH; - - case 0x5: - return BlockFace.SOUTH; - - case 0x6: - return BlockFace.NORTH_WEST; - - case 0x7: - return BlockFace.NORTH_EAST; - - case 0x8: - return BlockFace.SOUTH_EAST; - - case 0x9: - return BlockFace.SOUTH_WEST; - } - } - - @Override - public String toString() { - return super.toString() + " facing " + getDirection() + (isCurve() ? " on a curve" : (isOnSlope() ? " on a slope" : "")); - } - - /** - * Return the data without the extended properties used by {@link - * PoweredRail} and {@link DetectorRail}. Overridden in {@link - * ExtendedRails} - * - * @return the data without the extended part - * @deprecated Magic value - */ - @Deprecated - protected byte getConvertedData() { - return getData(); - } - - /** - * Set the direction of these tracks - *

          - * Note that tracks are bidirectional and that the direction returned is - * the ascending direction if the track is set on a slope. If it is set as - * a curve, the corner of the track should be supplied. - * - * @param face the direction the track should be facing - * @param isOnSlope whether or not the track should be on a slope - */ - public void setDirection(BlockFace face, boolean isOnSlope) { - switch (face) { - case EAST: - setData((byte) (isOnSlope ? 0x2 : 0x1)); - break; - - case WEST: - setData((byte) (isOnSlope ? 0x3 : 0x1)); - break; - - case NORTH: - setData((byte) (isOnSlope ? 0x4 : 0x0)); - break; - - case SOUTH: - setData((byte) (isOnSlope ? 0x5 : 0x0)); - break; - - case NORTH_WEST: - setData((byte) 0x6); - break; - - case NORTH_EAST: - setData((byte) 0x7); - break; - - case SOUTH_EAST: - setData((byte) 0x8); - break; - - case SOUTH_WEST: - setData((byte) 0x9); - break; - } - } - - @Override - public Rails clone() { - return (Rails) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Redstone.java b/LiveWeather/src/org/bukkit/material/Redstone.java deleted file mode 100755 index 3e46603..0000000 --- a/LiveWeather/src/org/bukkit/material/Redstone.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.material; - -/** - * Indicated a Material that may carry or create a Redstone current - */ -public interface Redstone { - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered(); -} diff --git a/LiveWeather/src/org/bukkit/material/RedstoneTorch.java b/LiveWeather/src/org/bukkit/material/RedstoneTorch.java deleted file mode 100755 index 76a3ddd..0000000 --- a/LiveWeather/src/org/bukkit/material/RedstoneTorch.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents a redstone torch - */ -public class RedstoneTorch extends Torch implements Redstone { - public RedstoneTorch() { - super(Material.REDSTONE_TORCH_ON); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneTorch(final int type) { - super(type); - } - - public RedstoneTorch(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneTorch(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneTorch(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered() { - return getItemType() == Material.REDSTONE_TORCH_ON; - } - - @Override - public String toString() { - return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; - } - - @Override - public RedstoneTorch clone() { - return (RedstoneTorch) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/RedstoneWire.java b/LiveWeather/src/org/bukkit/material/RedstoneWire.java deleted file mode 100755 index b429af0..0000000 --- a/LiveWeather/src/org/bukkit/material/RedstoneWire.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents redstone wire - */ -public class RedstoneWire extends MaterialData implements Redstone { - public RedstoneWire() { - super(Material.REDSTONE_WIRE); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneWire(final int type) { - super(type); - } - - public RedstoneWire(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneWire(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public RedstoneWire(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current state of this Material, indicating if it's powered or - * unpowered - * - * @return true if powered, otherwise false - */ - public boolean isPowered() { - return getData() > 0; - } - - @Override - public String toString() { - return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; - } - - @Override - public RedstoneWire clone() { - return (RedstoneWire) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Sandstone.java b/LiveWeather/src/org/bukkit/material/Sandstone.java deleted file mode 100755 index 26cbbb5..0000000 --- a/LiveWeather/src/org/bukkit/material/Sandstone.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.SandstoneType; - -/** - * Represents the different types of sandstone. - */ -public class Sandstone extends MaterialData { - public Sandstone() { - super(Material.SANDSTONE); - } - - public Sandstone(SandstoneType type) { - this(); - setType(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sandstone(final int type) { - super(type); - } - - public Sandstone(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sandstone(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sandstone(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current type of this sandstone - * - * @return SandstoneType of this sandstone - */ - public SandstoneType getType() { - return SandstoneType.getByData(getData()); - } - - /** - * Sets the type of this sandstone - * - * @param type New type of this sandstone - */ - public void setType(SandstoneType type) { - setData(type.getData()); - } - - @Override - public String toString() { - return getType() + " " + super.toString(); - } - - @Override - public Sandstone clone() { - return (Sandstone) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Sign.java b/LiveWeather/src/org/bukkit/material/Sign.java deleted file mode 100755 index e8da7aa..0000000 --- a/LiveWeather/src/org/bukkit/material/Sign.java +++ /dev/null @@ -1,250 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; -import org.bukkit.Material; - -/** - * MaterialData for signs - */ -public class Sign extends MaterialData implements Attachable { - public Sign() { - super(Material.SIGN_POST); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sign(final int type) { - super(type); - } - - public Sign(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sign(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Sign(final Material type, final byte data) { - super(type, data); - } - - /** - * Check if this sign is attached to a wall - * - * @return true if this sign is attached to a wall, false if set on top of - * a block - */ - public boolean isWallSign() { - return getItemType() == Material.WALL_SIGN; - } - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace() { - if (isWallSign()) { - byte data = getData(); - - switch (data) { - case 0x2: - return BlockFace.SOUTH; - - case 0x3: - return BlockFace.NORTH; - - case 0x4: - return BlockFace.EAST; - - case 0x5: - return BlockFace.WEST; - } - - return null; - } else { - return BlockFace.DOWN; - } - } - - /** - * Gets the direction that this sign is currently facing - * - * @return BlockFace indicating where this sign is facing - */ - public BlockFace getFacing() { - byte data = getData(); - - if (!isWallSign()) { - switch (data) { - case 0x0: - return BlockFace.SOUTH; - - case 0x1: - return BlockFace.SOUTH_SOUTH_WEST; - - case 0x2: - return BlockFace.SOUTH_WEST; - - case 0x3: - return BlockFace.WEST_SOUTH_WEST; - - case 0x4: - return BlockFace.WEST; - - case 0x5: - return BlockFace.WEST_NORTH_WEST; - - case 0x6: - return BlockFace.NORTH_WEST; - - case 0x7: - return BlockFace.NORTH_NORTH_WEST; - - case 0x8: - return BlockFace.NORTH; - - case 0x9: - return BlockFace.NORTH_NORTH_EAST; - - case 0xA: - return BlockFace.NORTH_EAST; - - case 0xB: - return BlockFace.EAST_NORTH_EAST; - - case 0xC: - return BlockFace.EAST; - - case 0xD: - return BlockFace.EAST_SOUTH_EAST; - - case 0xE: - return BlockFace.SOUTH_EAST; - - case 0xF: - return BlockFace.SOUTH_SOUTH_EAST; - } - - return null; - } else { - return getAttachedFace().getOppositeFace(); - } - } - - public void setFacingDirection(BlockFace face) { - byte data; - - if (isWallSign()) { - switch (face) { - case NORTH: - data = 0x2; - break; - - case SOUTH: - data = 0x3; - break; - - case WEST: - data = 0x4; - break; - - case EAST: - default: - data = 0x5; - } - } else { - switch (face) { - case SOUTH: - data = 0x0; - break; - - case SOUTH_SOUTH_WEST: - data = 0x1; - break; - - case SOUTH_WEST: - data = 0x2; - break; - - case WEST_SOUTH_WEST: - data = 0x3; - break; - - case WEST: - data = 0x4; - break; - - case WEST_NORTH_WEST: - data = 0x5; - break; - - case NORTH_WEST: - data = 0x6; - break; - - case NORTH_NORTH_WEST: - data = 0x7; - break; - - case NORTH: - data = 0x8; - break; - - case NORTH_NORTH_EAST: - data = 0x9; - break; - - case NORTH_EAST: - data = 0xA; - break; - - case EAST_NORTH_EAST: - data = 0xB; - break; - - case EAST: - data = 0xC; - break; - - case EAST_SOUTH_EAST: - data = 0xD; - break; - - case SOUTH_SOUTH_EAST: - data = 0xF; - break; - - case SOUTH_EAST: - default: - data = 0xE; - } - } - - setData(data); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing(); - } - - @Override - public Sign clone() { - return (Sign) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/SimpleAttachableMaterialData.java b/LiveWeather/src/org/bukkit/material/SimpleAttachableMaterialData.java deleted file mode 100755 index b5703c6..0000000 --- a/LiveWeather/src/org/bukkit/material/SimpleAttachableMaterialData.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Simple utility class for attachable MaterialData subclasses - */ -public abstract class SimpleAttachableMaterialData extends MaterialData implements Attachable { - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SimpleAttachableMaterialData(int type) { - super(type); - } - - public SimpleAttachableMaterialData(int type, BlockFace direction) { - this(type); - setFacingDirection(direction); - } - - public SimpleAttachableMaterialData(Material type, BlockFace direction) { - this(type); - setFacingDirection(direction); - } - - public SimpleAttachableMaterialData(Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SimpleAttachableMaterialData(int type, byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SimpleAttachableMaterialData(Material type, byte data) { - super(type, data); - } - - public BlockFace getFacing() { - BlockFace attachedFace = getAttachedFace(); - return attachedFace == null ? null : attachedFace.getOppositeFace(); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing(); - } - - @Override - public SimpleAttachableMaterialData clone() { - return (SimpleAttachableMaterialData) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Skull.java b/LiveWeather/src/org/bukkit/material/Skull.java deleted file mode 100755 index 6e0d71f..0000000 --- a/LiveWeather/src/org/bukkit/material/Skull.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a skull. - */ -public class Skull extends MaterialData implements Directional { - public Skull() { - super(Material.SKULL); - } - - /** - * Instantiate a skull facing in a particular direction. - * - * @param direction the direction the skull's face is facing - */ - public Skull(BlockFace direction) { - this(); - setFacingDirection(direction); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Skull(final int type) { - super(type); - } - - public Skull(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Skull(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Skull(final Material type, final byte data) { - super(type, data); - } - - public void setFacingDirection(BlockFace face) { - int data; - - switch (face) { - case SELF: - default: - data = 0x1; - break; - - case NORTH: - data = 0x2; - break; - - case EAST: - data = 0x4; - break; - - case SOUTH: - data = 0x3; - break; - - case WEST: - data = 0x5; - } - - setData((byte) data); - } - - public BlockFace getFacing() { - int data = getData(); - - switch (data) { - case 0x1: - default: - return BlockFace.SELF; - - case 0x2: - return BlockFace.NORTH; - - case 0x3: - return BlockFace.SOUTH; - - case 0x4: - return BlockFace.EAST; - - case 0x5: - return BlockFace.WEST; - } - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing(); - } - - @Override - public Skull clone() { - return (Skull) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/SmoothBrick.java b/LiveWeather/src/org/bukkit/material/SmoothBrick.java deleted file mode 100755 index b7ab607..0000000 --- a/LiveWeather/src/org/bukkit/material/SmoothBrick.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.bukkit.material; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Material; - -/** - * Represents the different types of smooth bricks. - */ -public class SmoothBrick extends TexturedMaterial { - - private static final List textures = new ArrayList(); - static { - textures.add(Material.STONE); - textures.add(Material.MOSSY_COBBLESTONE); - textures.add(Material.COBBLESTONE); - textures.add(Material.SMOOTH_BRICK); - } - - public SmoothBrick() { - super(Material.SMOOTH_BRICK); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SmoothBrick(final int type) { - super(type); - } - - public SmoothBrick(final Material type) { - super((textures.contains(type)) ? Material.SMOOTH_BRICK : type); - if (textures.contains(type)) { - setMaterial(type); - } - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SmoothBrick(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SmoothBrick(final Material type, final byte data) { - super(type, data); - } - - @Override - public List getTextures() { - return textures; - } - - @Override - public SmoothBrick clone() { - return (SmoothBrick) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/SpawnEgg.java b/LiveWeather/src/org/bukkit/material/SpawnEgg.java deleted file mode 100755 index ed973c5..0000000 --- a/LiveWeather/src/org/bukkit/material/SpawnEgg.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; - -/** - * Represents a spawn egg that can be used to spawn mobs - */ -public class SpawnEgg extends MaterialData { - - public SpawnEgg() { - super(Material.MONSTER_EGG); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SpawnEgg(int type, byte data){ - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public SpawnEgg(byte data) { - super(Material.MONSTER_EGG, data); - } - - public SpawnEgg(EntityType type) { - this(); - setSpawnedType(type); - } - - /** - * Get the type of entity this egg will spawn. - * - * @return The entity type. - */ - public EntityType getSpawnedType() { - return EntityType.fromId(getData()); - } - - /** - * Set the type of entity this egg will spawn. - * - * @param type The entity type. - */ - public void setSpawnedType(EntityType type) { - setData((byte) type.getTypeId()); - } - - @Override - public String toString() { - return "SPAWN EGG{" + getSpawnedType() + "}"; - } - - @Override - public SpawnEgg clone() { - return (SpawnEgg) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Stairs.java b/LiveWeather/src/org/bukkit/material/Stairs.java deleted file mode 100755 index 1f73c77..0000000 --- a/LiveWeather/src/org/bukkit/material/Stairs.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents stairs. - */ -public class Stairs extends MaterialData implements Directional { - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Stairs(final int type) { - super(type); - } - - public Stairs(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Stairs(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Stairs(final Material type, final byte data) { - super(type, data); - } - - /** - * @return the direction the stairs ascend towards - */ - public BlockFace getAscendingDirection() { - byte data = getData(); - - switch (data & 0x3) { - case 0x0: - default: - return BlockFace.EAST; - - case 0x1: - return BlockFace.WEST; - - case 0x2: - return BlockFace.SOUTH; - - case 0x3: - return BlockFace.NORTH; - } - } - - /** - * @return the direction the stairs descend towards - */ - public BlockFace getDescendingDirection() { - return getAscendingDirection().getOppositeFace(); - } - - /** - * Set the direction the stair part of the block is facing - */ - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case NORTH: - data = 0x3; - break; - - case SOUTH: - data = 0x2; - break; - - case EAST: - default: - data = 0x0; - break; - - case WEST: - data = 0x1; - break; - } - - setData((byte) ((getData() & 0xC) | data)); - } - - /** - * @return the direction the stair part of the block is facing - */ - public BlockFace getFacing() { - return getDescendingDirection(); - } - - /** - * Test if step is inverted - * - * @return true if inverted (top half), false if normal (bottom half) - */ - public boolean isInverted() { - return ((getData() & 0x4) != 0); - } - - /** - * Set step inverted state - * - * @param inv - true if step is inverted (top half), false if step is - * normal (bottom half) - */ - public void setInverted(boolean inv) { - int dat = getData() & 0x3; - if (inv) { - dat |= 0x4; - } - setData((byte) dat); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + (isInverted()?" inverted":""); - } - - @Override - public Stairs clone() { - return (Stairs) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Step.java b/LiveWeather/src/org/bukkit/material/Step.java deleted file mode 100755 index 605f817..0000000 --- a/LiveWeather/src/org/bukkit/material/Step.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bukkit.material; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Material; - -/** - * Represents the different types of steps. - */ -public class Step extends TexturedMaterial { - private static final List textures = new ArrayList(); - static { - textures.add(Material.STONE); - textures.add(Material.SANDSTONE); - textures.add(Material.WOOD); - textures.add(Material.COBBLESTONE); - textures.add(Material.BRICK); - textures.add(Material.SMOOTH_BRICK); - textures.add(Material.NETHER_BRICK); - textures.add(Material.QUARTZ_BLOCK); - } - - public Step() { - super(Material.STEP); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Step(final int type) { - super(type); - } - - public Step(final Material type) { - super((textures.contains(type)) ? Material.STEP : type); - if (textures.contains(type)) { - setMaterial(type); - } - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Step(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Step(final Material type, final byte data) { - super(type, data); - } - - @Override - public List getTextures() { - return textures; - } - - /** - * Test if step is inverted - * - * @return true if inverted (top half), false if normal (bottom half) - */ - public boolean isInverted() { - return ((getData() & 0x8) != 0); - } - - /** - * Set step inverted state - * - * @param inv - true if step is inverted (top half), false if step is - * normal (bottom half) - */ - public void setInverted(boolean inv) { - int dat = getData() & 0x7; - if (inv) { - dat |= 0x8; - } - setData((byte) dat); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - @Override - protected int getTextureIndex() { - return getData() & 0x7; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - @Override - protected void setTextureIndex(int idx) { - setData((byte) ((getData() & 0x8) | idx)); - } - - @Override - public Step clone() { - return (Step) super.clone(); - } - - @Override - public String toString() { - return super.toString() + (isInverted()?"inverted":""); - } -} diff --git a/LiveWeather/src/org/bukkit/material/TexturedMaterial.java b/LiveWeather/src/org/bukkit/material/TexturedMaterial.java deleted file mode 100755 index cfd971b..0000000 --- a/LiveWeather/src/org/bukkit/material/TexturedMaterial.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.bukkit.material; - -import java.util.List; - -import org.bukkit.Material; - -/** - * Represents textured materials like steps and smooth bricks - */ -public abstract class TexturedMaterial extends MaterialData { - - public TexturedMaterial(Material m) { - super(m); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TexturedMaterial(int type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TexturedMaterial(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TexturedMaterial(final Material type, final byte data) { - super(type, data); - } - - /** - * Retrieve a list of possible textures. The first element of the list - * will be used as a default. - * - * @return a list of possible textures for this block - */ - public abstract List getTextures(); - - /** - * Gets the current Material this block is made of - * - * @return Material of this block - */ - public Material getMaterial() { - int n = getTextureIndex(); - if (n > getTextures().size() - 1) { - n = 0; - } - - return getTextures().get(n); - } - - /** - * Sets the material this block is made of - * - * @param material - * New material of this block - */ - public void setMaterial(Material material) { - if (getTextures().contains(material)) { - setTextureIndex(getTextures().indexOf(material)); - } else { - setTextureIndex(0x0); - } - } - - /** - * Get material index from data - * - * @return index of data in textures list - * @deprecated Magic value - */ - @Deprecated - protected int getTextureIndex() { - return getData(); // Default to using all bits - override for other mappings - } - - /** - * Set material index - * - * @param idx - index of data in textures list - * @deprecated Magic value - */ - @Deprecated - protected void setTextureIndex(int idx) { - setData((byte) idx); // Defult to using all bits - override for other mappings - } - - @Override - public String toString() { - return getMaterial() + " " + super.toString(); - } - - @Override - public TexturedMaterial clone() { - return (TexturedMaterial) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Torch.java b/LiveWeather/src/org/bukkit/material/Torch.java deleted file mode 100755 index f03b3cf..0000000 --- a/LiveWeather/src/org/bukkit/material/Torch.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.block.BlockFace; -import org.bukkit.Material; - -/** - * MaterialData for torches - */ -public class Torch extends SimpleAttachableMaterialData { - public Torch() { - super(Material.TORCH); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Torch(final int type) { - super(type); - } - - public Torch(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Torch(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Torch(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the face that this block is attached on - * - * @return BlockFace attached to - */ - public BlockFace getAttachedFace() { - byte data = getData(); - - switch (data) { - case 0x1: - return BlockFace.WEST; - - case 0x2: - return BlockFace.EAST; - - case 0x3: - return BlockFace.NORTH; - - case 0x4: - return BlockFace.SOUTH; - - case 0x5: - default: - return BlockFace.DOWN; - } - } - - public void setFacingDirection(BlockFace face) { - byte data; - - switch (face) { - case EAST: - data = 0x1; - break; - - case WEST: - data = 0x2; - break; - - case SOUTH: - data = 0x3; - break; - - case NORTH: - data = 0x4; - break; - - case UP: - default: - data = 0x5; - } - - setData(data); - } - - @Override - public Torch clone() { - return (Torch) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/TrapDoor.java b/LiveWeather/src/org/bukkit/material/TrapDoor.java deleted file mode 100755 index bd4bcc2..0000000 --- a/LiveWeather/src/org/bukkit/material/TrapDoor.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a trap door - */ -public class TrapDoor extends SimpleAttachableMaterialData implements Openable { - public TrapDoor() { - super(Material.TRAP_DOOR); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TrapDoor(final int type) { - super(type); - } - - public TrapDoor(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TrapDoor(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TrapDoor(final Material type, final byte data) { - super(type, data); - } - - public boolean isOpen() { - return ((getData() & 0x4) == 0x4); - } - - public void setOpen(boolean isOpen) { - byte data = getData(); - - if (isOpen) { - data |= 0x4; - } else { - data &= ~0x4; - } - - setData(data); - } - - /** - * Test if trapdoor is inverted - * - * @return true if inverted (top half), false if normal (bottom half) - */ - public boolean isInverted() { - return ((getData() & 0x8) != 0); - } - - /** - * Set trapdoor inverted state - * - * @param inv - true if inverted (top half), false if normal (bottom half) - */ - public void setInverted(boolean inv) { - int dat = getData() & 0x7; - if (inv) { - dat |= 0x8; - } - setData((byte) dat); - } - - public BlockFace getAttachedFace() { - byte data = (byte) (getData() & 0x3); - - switch (data) { - case 0x0: - return BlockFace.SOUTH; - - case 0x1: - return BlockFace.NORTH; - - case 0x2: - return BlockFace.EAST; - - case 0x3: - return BlockFace.WEST; - } - - return null; - - } - - public void setFacingDirection(BlockFace face) { - byte data = (byte) (getData() & 0xC); - - switch (face) { - case SOUTH: - data |= 0x1; - break; - case WEST: - data |= 0x2; - break; - case EAST: - data |= 0x3; - break; - } - - setData(data); - } - - @Override - public String toString() { - return (isOpen() ? "OPEN " : "CLOSED ") + super.toString() + " with hinges set " + getAttachedFace() + (isInverted() ? " inverted" : ""); - } - - @Override - public TrapDoor clone() { - return (TrapDoor) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Tree.java b/LiveWeather/src/org/bukkit/material/Tree.java deleted file mode 100755 index fe56872..0000000 --- a/LiveWeather/src/org/bukkit/material/Tree.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.TreeSpecies; -import org.bukkit.block.BlockFace; - -/** - * Represents the different types of Trees. - */ -public class Tree extends MaterialData { - public Tree() { - super(Material.LOG); - } - - public Tree(TreeSpecies species) { - this(); - setSpecies(species); - } - - public Tree(TreeSpecies species, BlockFace dir) { - this(); - setSpecies(species); - setDirection(dir); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Tree(final int type) { - super(type); - } - - public Tree(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Tree(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Tree(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current species of this tree - * - * @return TreeSpecies of this tree - */ - public TreeSpecies getSpecies() { - return TreeSpecies.getByData((byte) (getData() & 0x3)); - } - - /** - * Sets the species of this tree - * - * @param species New species of this tree - */ - public void setSpecies(TreeSpecies species) { - setData((byte) ((getData() & 0xC) | species.getData())); - } - - /** - * Get direction of the log - * - * @return one of: - *

            - *
          • BlockFace.TOP for upright (default) - *
          • BlockFace.NORTH (east-west) - *
          • BlockFace.WEST (north-south) - *
          • BlockFace.SELF (directionless) - *
          - */ - public BlockFace getDirection() { - switch ((getData() >> 2) & 0x3) { - case 0: // Up-down - default: - return BlockFace.UP; - case 1: // North-south - return BlockFace.WEST; - case 2: // East-west - return BlockFace.NORTH; - case 3: // Directionless (bark on all sides) - return BlockFace.SELF; - } - } - /** - * Set direction of the log - * - * @param dir - direction of end of log (BlockFace.SELF for no direction) - */ - public void setDirection(BlockFace dir) { - int dat; - switch (dir) { - case UP: - case DOWN: - default: - dat = 0; - break; - case WEST: - case EAST: - dat = 1; - break; - case NORTH: - case SOUTH: - dat = 2; - break; - case SELF: - dat = 3; - break; - } - setData((byte) ((getData() & 0x3) | (dat << 2))); - } - - @Override - public String toString() { - return getSpecies() + " " + getDirection() + " " + super.toString(); - } - - @Override - public Tree clone() { - return (Tree) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Tripwire.java b/LiveWeather/src/org/bukkit/material/Tripwire.java deleted file mode 100755 index 583860b..0000000 --- a/LiveWeather/src/org/bukkit/material/Tripwire.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; - -/** - * Represents the tripwire - */ -public class Tripwire extends MaterialData { - - public Tripwire() { - super(Material.TRIPWIRE); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Tripwire(final int type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Tripwire(final int type, final byte data) { - super(type, data); - } - - /** - * Test if tripwire is currently activated - * - * @return true if activated, false if not - */ - public boolean isActivated() { - return (getData() & 0x4) != 0; - } - - /** - * Set tripwire activated state - * - * @param act - true if activated, false if not - */ - public void setActivated(boolean act) { - int dat = getData() & (0x8 | 0x3); - if (act) { - dat |= 0x4; - } - setData((byte) dat); - } - - /** - * Test if object triggering this tripwire directly - * - * @return true if object activating tripwire, false if not - */ - public boolean isObjectTriggering() { - return (getData() & 0x1) != 0; - } - - /** - * Set object triggering state for this tripwire - * - * @param trig - true if object activating tripwire, false if not - */ - public void setObjectTriggering(boolean trig) { - int dat = getData() & 0xE; - if (trig) { - dat |= 0x1; - } - setData((byte) dat); - } - - @Override - public Tripwire clone() { - return (Tripwire) super.clone(); - } - - @Override - public String toString() { - return super.toString() + (isActivated()?" Activated":"") + (isObjectTriggering()?" Triggered":""); - } -} diff --git a/LiveWeather/src/org/bukkit/material/TripwireHook.java b/LiveWeather/src/org/bukkit/material/TripwireHook.java deleted file mode 100755 index 7ad2d2a..0000000 --- a/LiveWeather/src/org/bukkit/material/TripwireHook.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents the tripwire hook - */ -public class TripwireHook extends SimpleAttachableMaterialData implements Redstone { - - public TripwireHook() { - super(Material.TRIPWIRE_HOOK); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TripwireHook(final int type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public TripwireHook(final int type, final byte data) { - super(type, data); - } - - public TripwireHook(BlockFace dir) { - this(); - setFacingDirection(dir); - } - - /** - * Test if tripwire is connected - * - * @return true if connected, false if not - */ - public boolean isConnected() { - return (getData() & 0x4) != 0; - } - - /** - * Set tripwire connection state - * - * @param connected - true if connected, false if not - */ - public void setConnected(boolean connected) { - int dat = getData() & (0x8 | 0x3); - if (connected) { - dat |= 0x4; - } - setData((byte) dat); - } - - /** - * Test if hook is currently activated - * - * @return true if activated, false if not - */ - public boolean isActivated() { - return (getData() & 0x8) != 0; - } - - /** - * Set hook activated state - * - * @param act - true if activated, false if not - */ - public void setActivated(boolean act) { - int dat = getData() & (0x4 | 0x3); - if (act) { - dat |= 0x8; - } - setData((byte) dat); - } - - public void setFacingDirection(BlockFace face) { - int dat = getData() & 0xC; - switch (face) { - case WEST: - dat |= 0x1; - break; - case NORTH: - dat |= 0x2; - break; - case EAST: - dat |= 0x3; - break; - case SOUTH: - default: - break; - } - setData((byte) dat); - } - - public BlockFace getAttachedFace() { - switch (getData() & 0x3) { - case 0: - return BlockFace.NORTH; - case 1: - return BlockFace.EAST; - case 2: - return BlockFace.SOUTH; - case 3: - return BlockFace.WEST; - } - return null; - } - - public boolean isPowered() { - return isActivated(); - } - - @Override - public TripwireHook clone() { - return (TripwireHook) super.clone(); - } - - @Override - public String toString() { - return super.toString() + " facing " + getFacing() + (isActivated()?" Activated":"") + (isConnected()?" Connected":""); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Vine.java b/LiveWeather/src/org/bukkit/material/Vine.java deleted file mode 100755 index a4f7ad5..0000000 --- a/LiveWeather/src/org/bukkit/material/Vine.java +++ /dev/null @@ -1,196 +0,0 @@ -package org.bukkit.material; - -import java.util.Arrays; -import java.util.EnumSet; - -import org.bukkit.Material; -import org.bukkit.block.BlockFace; - -/** - * Represents a vine - */ -public class Vine extends MaterialData { - private static final int VINE_NORTH = 0x4; - private static final int VINE_EAST = 0x8; - private static final int VINE_WEST = 0x2; - private static final int VINE_SOUTH = 0x1; - EnumSet possibleFaces = EnumSet.of(BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.EAST); - - public Vine() { - super(Material.VINE); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Vine(int type, byte data){ - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Vine(byte data) { - super(Material.VINE, data); - } - - public Vine(BlockFace... faces) { - this(EnumSet.copyOf(Arrays.asList(faces))); - } - - public Vine(EnumSet faces) { - this((byte) 0); - faces.retainAll(possibleFaces); - - byte data = 0; - - if (faces.contains(BlockFace.WEST)) { - data |= VINE_WEST; - } - - if (faces.contains(BlockFace.NORTH)) { - data |= VINE_NORTH; - } - - if (faces.contains(BlockFace.SOUTH)) { - data |= VINE_SOUTH; - } - - if (faces.contains(BlockFace.EAST)) { - data |= VINE_EAST; - } - - setData(data); - } - - /** - * Check if the vine is attached to the specified face of an adjacent - * block. You can check two faces at once by passing e.g. {@link - * BlockFace#NORTH_EAST}. - * - * @param face The face to check. - * @return Whether it is attached to that face. - */ - public boolean isOnFace(BlockFace face) { - switch (face) { - case WEST: - return (getData() & VINE_WEST) == VINE_WEST; - case NORTH: - return (getData() & VINE_NORTH) == VINE_NORTH; - case SOUTH: - return (getData() & VINE_SOUTH) == VINE_SOUTH; - case EAST: - return (getData() & VINE_EAST) == VINE_EAST; - case NORTH_EAST: - return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.NORTH); - case NORTH_WEST: - return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.NORTH); - case SOUTH_EAST: - return isOnFace(BlockFace.EAST) && isOnFace(BlockFace.SOUTH); - case SOUTH_WEST: - return isOnFace(BlockFace.WEST) && isOnFace(BlockFace.SOUTH); - case UP: // It's impossible to be accurate with this since it's contextual - return true; - default: - return false; - } - } - - /** - * Attach the vine to the specified face of an adjacent block. - * - * @param face The face to attach. - */ - public void putOnFace(BlockFace face) { - switch(face) { - case WEST: - setData((byte) (getData() | VINE_WEST)); - break; - case NORTH: - setData((byte) (getData() | VINE_NORTH)); - break; - case SOUTH: - setData((byte) (getData() | VINE_SOUTH)); - break; - case EAST: - setData((byte) (getData() | VINE_EAST)); - break; - case NORTH_WEST: - putOnFace(BlockFace.WEST); - putOnFace(BlockFace.NORTH); - break; - case SOUTH_WEST: - putOnFace(BlockFace.WEST); - putOnFace(BlockFace.SOUTH); - break; - case NORTH_EAST: - putOnFace(BlockFace.EAST); - putOnFace(BlockFace.NORTH); - break; - case SOUTH_EAST: - putOnFace(BlockFace.EAST); - putOnFace(BlockFace.SOUTH); - break; - case UP: - break; - default: - throw new IllegalArgumentException("Vines can't go on face " + face.toString()); - } - } - - /** - * Detach the vine from the specified face of an adjacent block. - * - * @param face The face to detach. - */ - public void removeFromFace(BlockFace face) { - switch(face) { - case WEST: - setData((byte) (getData() & ~VINE_WEST)); - break; - case NORTH: - setData((byte) (getData() & ~VINE_NORTH)); - break; - case SOUTH: - setData((byte) (getData() & ~VINE_SOUTH)); - break; - case EAST: - setData((byte) (getData() & ~VINE_EAST)); - break; - case NORTH_WEST: - removeFromFace(BlockFace.WEST); - removeFromFace(BlockFace.NORTH); - break; - case SOUTH_WEST: - removeFromFace(BlockFace.WEST); - removeFromFace(BlockFace.SOUTH); - break; - case NORTH_EAST: - removeFromFace(BlockFace.EAST); - removeFromFace(BlockFace.NORTH); - break; - case SOUTH_EAST: - removeFromFace(BlockFace.EAST); - removeFromFace(BlockFace.SOUTH); - break; - case UP: - break; - default: - throw new IllegalArgumentException("Vines can't go on face " + face.toString()); - } - } - - @Override - public String toString() { - return "VINE"; - } - - @Override - public Vine clone() { - return (Vine) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/material/WoodenStep.java b/LiveWeather/src/org/bukkit/material/WoodenStep.java deleted file mode 100755 index 9584e25..0000000 --- a/LiveWeather/src/org/bukkit/material/WoodenStep.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.Material; -import org.bukkit.TreeSpecies; - -/** - * Represents the different types of wooden steps. - */ -public class WoodenStep extends MaterialData { - - public WoodenStep() { - super(Material.WOOD_STEP); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public WoodenStep(final int type) { - super(type); - } - - public WoodenStep(TreeSpecies species) { - this(); - setSpecies(species); - } - - public WoodenStep(TreeSpecies species, boolean inv) { - this(); - setSpecies(species); - setInverted(inv); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public WoodenStep(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public WoodenStep(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current species of this tree - * - * @return TreeSpecies of this tree - */ - public TreeSpecies getSpecies() { - return TreeSpecies.getByData((byte) (getData() & 0x3)); - } - - /** - * Sets the species of this tree - * - * @param species New species of this tree - */ - public void setSpecies(TreeSpecies species) { - setData((byte) ((getData() & 0xC) | species.getData())); - } - - /** - * Test if step is inverted - * - * @return true if inverted (top half), false if normal (bottom half) - */ - public boolean isInverted() { - return ((getData() & 0x8) != 0); - } - - /** - * Set step inverted state - * - * @param inv - true if step is inverted (top half), false if step is - * normal (bottom half) - */ - public void setInverted(boolean inv) { - int dat = getData() & 0x7; - if (inv) { - dat |= 0x8; - } - setData((byte) dat); - } - - @Override - public WoodenStep clone() { - return (WoodenStep) super.clone(); - } - - @Override - public String toString() { - return super.toString() + " " + getSpecies() + (isInverted()?" inverted":""); - } -} diff --git a/LiveWeather/src/org/bukkit/material/Wool.java b/LiveWeather/src/org/bukkit/material/Wool.java deleted file mode 100755 index 8115bdc..0000000 --- a/LiveWeather/src/org/bukkit/material/Wool.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bukkit.material; - -import org.bukkit.DyeColor; -import org.bukkit.Material; - -/** - * Represents a Wool/Cloth block - */ -public class Wool extends MaterialData implements Colorable { - public Wool() { - super(Material.WOOL); - } - - public Wool(DyeColor color) { - this(); - setColor(color); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Wool(final int type) { - super(type); - } - - public Wool(final Material type) { - super(type); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Wool(final int type, final byte data) { - super(type, data); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public Wool(final Material type, final byte data) { - super(type, data); - } - - /** - * Gets the current color of this dye - * - * @return DyeColor of this dye - */ - public DyeColor getColor() { - return DyeColor.getByWoolData(getData()); - } - - /** - * Sets the color of this dye - * - * @param color New color of this dye - */ - public void setColor(DyeColor color) { - setData(color.getWoolData()); - } - - @Override - public String toString() { - return getColor() + " " + super.toString(); - } - - @Override - public Wool clone() { - return (Wool) super.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/metadata/FixedMetadataValue.java b/LiveWeather/src/org/bukkit/metadata/FixedMetadataValue.java deleted file mode 100755 index bce6f00..0000000 --- a/LiveWeather/src/org/bukkit/metadata/FixedMetadataValue.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bukkit.metadata; - -import org.bukkit.plugin.Plugin; - -import java.util.concurrent.Callable; - -/** - * A FixedMetadataValue is a special case metadata item that contains the same - * value forever after initialization. Invalidating a FixedMetadataValue has - * no effect. - *

          - * This class extends LazyMetadataValue for historical reasons, even though it - * overrides all the implementation methods. it is possible that in the future - * that the inheritance hierarchy may change. - */ -public class FixedMetadataValue extends LazyMetadataValue { - - /** - * Store the internal value that is represented by this fixed value. - */ - private final Object internalValue; - - /** - * Initializes a FixedMetadataValue with an Object - * - * @param owningPlugin the {@link Plugin} that created this metadata value - * @param value the value assigned to this metadata value - */ - public FixedMetadataValue(Plugin owningPlugin, final Object value) { - super(owningPlugin); - this.internalValue = value; - } - - @Override - public void invalidate() { - - } - - @Override - public Object value() { - return internalValue; - } -} diff --git a/LiveWeather/src/org/bukkit/metadata/LazyMetadataValue.java b/LiveWeather/src/org/bukkit/metadata/LazyMetadataValue.java deleted file mode 100755 index a9546e5..0000000 --- a/LiveWeather/src/org/bukkit/metadata/LazyMetadataValue.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.bukkit.metadata; - -import java.lang.ref.SoftReference; -import java.util.concurrent.Callable; - -import org.apache.commons.lang.Validate; -import org.bukkit.plugin.Plugin; - -/** - * The LazyMetadataValue class implements a type of metadata that is not - * computed until another plugin asks for it. - *

          - * By making metadata values lazy, no computation is done by the providing - * plugin until absolutely necessary (if ever). Additionally, - * LazyMetadataValue objects cache their values internally unless overridden - * by a {@link CacheStrategy} or invalidated at the individual or plugin - * level. Once invalidated, the LazyMetadataValue will recompute its value - * when asked. - */ -public class LazyMetadataValue extends MetadataValueAdapter implements MetadataValue { - private Callable lazyValue; - private CacheStrategy cacheStrategy; - private SoftReference internalValue; - private static final Object ACTUALLY_NULL = new Object(); - - /** - * Initialized a LazyMetadataValue object with the default - * CACHE_AFTER_FIRST_EVAL cache strategy. - * - * @param owningPlugin the {@link Plugin} that created this metadata - * value. - * @param lazyValue the lazy value assigned to this metadata value. - */ - public LazyMetadataValue(Plugin owningPlugin, Callable lazyValue) { - this(owningPlugin, CacheStrategy.CACHE_AFTER_FIRST_EVAL, lazyValue); - } - - /** - * Initializes a LazyMetadataValue object with a specific cache strategy. - * - * @param owningPlugin the {@link Plugin} that created this metadata - * value. - * @param cacheStrategy determines the rules for caching this metadata - * value. - * @param lazyValue the lazy value assigned to this metadata value. - */ - public LazyMetadataValue(Plugin owningPlugin, CacheStrategy cacheStrategy, Callable lazyValue) { - super(owningPlugin); - Validate.notNull(cacheStrategy, "cacheStrategy cannot be null"); - Validate.notNull(lazyValue, "lazyValue cannot be null"); - this.internalValue = new SoftReference(null); - this.lazyValue = lazyValue; - this.cacheStrategy = cacheStrategy; - } - - /** - * Protected special constructor used by FixedMetadataValue to bypass - * standard setup. - */ - protected LazyMetadataValue(Plugin owningPlugin) { - super(owningPlugin); - } - - public Object value() { - eval(); - Object value = internalValue.get(); - if (value == ACTUALLY_NULL) { - return null; - } - return value; - } - - /** - * Lazily evaluates the value of this metadata item. - * - * @throws MetadataEvaluationException if computing the metadata value - * fails. - */ - private synchronized void eval() throws MetadataEvaluationException { - if (cacheStrategy == CacheStrategy.NEVER_CACHE || internalValue.get() == null) { - try { - Object value = lazyValue.call(); - if (value == null) { - value = ACTUALLY_NULL; - } - internalValue = new SoftReference(value); - } catch (Exception e) { - throw new MetadataEvaluationException(e); - } - } - } - - public synchronized void invalidate() { - if (cacheStrategy != CacheStrategy.CACHE_ETERNALLY) { - internalValue.clear(); - } - } - - /** - * Describes possible caching strategies for metadata. - */ - public enum CacheStrategy { - /** - * Once the metadata value has been evaluated, do not re-evaluate the - * value until it is manually invalidated. - */ - CACHE_AFTER_FIRST_EVAL, - - /** - * Re-evaluate the metadata item every time it is requested - */ - NEVER_CACHE, - - /** - * Once the metadata value has been evaluated, do not re-evaluate the - * value in spite of manual invalidation. - */ - CACHE_ETERNALLY - } -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataConversionException.java b/LiveWeather/src/org/bukkit/metadata/MetadataConversionException.java deleted file mode 100755 index a3def46..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataConversionException.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.metadata; - -/** - * A MetadataConversionException is thrown any time a {@link - * LazyMetadataValue} attempts to convert a metadata value to an inappropriate - * data type. - */ -@SuppressWarnings("serial") -public class MetadataConversionException extends RuntimeException { - MetadataConversionException(String message) { - super(message); - } -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataEvaluationException.java b/LiveWeather/src/org/bukkit/metadata/MetadataEvaluationException.java deleted file mode 100755 index 918e7c8..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataEvaluationException.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.metadata; - -/** - * A MetadataEvaluationException is thrown any time a {@link - * LazyMetadataValue} fails to evaluate its value due to an exception. The - * originating exception will be included as this exception's cause. - */ -@SuppressWarnings("serial") -public class MetadataEvaluationException extends RuntimeException { - MetadataEvaluationException(Throwable cause) { - super(cause); - } -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataStore.java b/LiveWeather/src/org/bukkit/metadata/MetadataStore.java deleted file mode 100755 index 700d0bf..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataStore.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.bukkit.metadata; - -import org.bukkit.plugin.Plugin; - -import java.util.List; - -public interface MetadataStore { - /** - * Adds a metadata value to an object. - * - * @param subject The object receiving the metadata. - * @param metadataKey A unique key to identify this metadata. - * @param newMetadataValue The metadata value to apply. - * @throws IllegalArgumentException If value is null, or the owning plugin - * is null - */ - public void setMetadata(T subject, String metadataKey, MetadataValue newMetadataValue); - - /** - * Returns all metadata values attached to an object. If multiple plugins - * have attached metadata, each will value will be included. - * - * @param subject the object being interrogated. - * @param metadataKey the unique metadata key being sought. - * @return A list of values, one for each plugin that has set the - * requested value. - */ - public List getMetadata(T subject, String metadataKey); - - /** - * Tests to see if a metadata attribute has been set on an object. - * - * @param subject the object upon which the has-metadata test is - * performed. - * @param metadataKey the unique metadata key being queried. - * @return the existence of the metadataKey within subject. - */ - public boolean hasMetadata(T subject, String metadataKey); - - /** - * Removes a metadata item owned by a plugin from a subject. - * - * @param subject the object to remove the metadata from. - * @param metadataKey the unique metadata key identifying the metadata to - * remove. - * @param owningPlugin the plugin attempting to remove a metadata item. - * @throws IllegalArgumentException If plugin is null - */ - public void removeMetadata(T subject, String metadataKey, Plugin owningPlugin); - - /** - * Invalidates all metadata in the metadata store that originates from the - * given plugin. Doing this will force each invalidated metadata item to - * be recalculated the next time it is accessed. - * - * @param owningPlugin the plugin requesting the invalidation. - * @throws IllegalArgumentException If plugin is null - */ - public void invalidateAll(Plugin owningPlugin); -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataStoreBase.java b/LiveWeather/src/org/bukkit/metadata/MetadataStoreBase.java deleted file mode 100755 index 093c144..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataStoreBase.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bukkit.metadata; - -import org.apache.commons.lang.Validate; -import org.bukkit.plugin.Plugin; - -import java.util.*; - -public abstract class MetadataStoreBase { - private Map> metadataMap = new HashMap>(); - - /** - * Adds a metadata value to an object. Each metadata value is owned by a - * specific {@link Plugin}. If a plugin has already added a metadata value - * to an object, that value will be replaced with the value of {@code - * newMetadataValue}. Multiple plugins can set independent values for the - * same {@code metadataKey} without conflict. - *

          - * Implementation note: I considered using a {@link - * java.util.concurrent.locks.ReadWriteLock} for controlling access to - * {@code metadataMap}, but decided that the added overhead wasn't worth - * the finer grained access control. - *

          - * Bukkit is almost entirely single threaded so locking overhead shouldn't - * pose a problem. - * - * @param subject The object receiving the metadata. - * @param metadataKey A unique key to identify this metadata. - * @param newMetadataValue The metadata value to apply. - * @see MetadataStore#setMetadata(Object, String, MetadataValue) - * @throws IllegalArgumentException If value is null, or the owning plugin - * is null - */ - public synchronized void setMetadata(T subject, String metadataKey, MetadataValue newMetadataValue) { - Validate.notNull(newMetadataValue, "Value cannot be null"); - Plugin owningPlugin = newMetadataValue.getOwningPlugin(); - Validate.notNull(owningPlugin, "Plugin cannot be null"); - String key = disambiguate(subject, metadataKey); - Map entry = metadataMap.get(key); - if (entry == null) { - entry = new WeakHashMap(1); - metadataMap.put(key, entry); - } - entry.put(owningPlugin, newMetadataValue); - } - - /** - * Returns all metadata values attached to an object. If multiple - * have attached metadata, each will value will be included. - * - * @param subject the object being interrogated. - * @param metadataKey the unique metadata key being sought. - * @return A list of values, one for each plugin that has set the - * requested value. - * @see MetadataStore#getMetadata(Object, String) - */ - public synchronized List getMetadata(T subject, String metadataKey) { - String key = disambiguate(subject, metadataKey); - if (metadataMap.containsKey(key)) { - Collection values = metadataMap.get(key).values(); - return Collections.unmodifiableList(new ArrayList(values)); - } else { - return Collections.emptyList(); - } - } - - /** - * Tests to see if a metadata attribute has been set on an object. - * - * @param subject the object upon which the has-metadata test is - * performed. - * @param metadataKey the unique metadata key being queried. - * @return the existence of the metadataKey within subject. - */ - public synchronized boolean hasMetadata(T subject, String metadataKey) { - String key = disambiguate(subject, metadataKey); - return metadataMap.containsKey(key); - } - - /** - * Removes a metadata item owned by a plugin from a subject. - * - * @param subject the object to remove the metadata from. - * @param metadataKey the unique metadata key identifying the metadata to - * remove. - * @param owningPlugin the plugin attempting to remove a metadata item. - * @see MetadataStore#removeMetadata(Object, String, - * org.bukkit.plugin.Plugin) - * @throws IllegalArgumentException If plugin is null - */ - public synchronized void removeMetadata(T subject, String metadataKey, Plugin owningPlugin) { - Validate.notNull(owningPlugin, "Plugin cannot be null"); - String key = disambiguate(subject, metadataKey); - Map entry = metadataMap.get(key); - if (entry == null) { - return; - } - - entry.remove(owningPlugin); - if (entry.isEmpty()) { - metadataMap.remove(key); - } - } - - /** - * Invalidates all metadata in the metadata store that originates from the - * given plugin. Doing this will force each invalidated metadata item to - * be recalculated the next time it is accessed. - * - * @param owningPlugin the plugin requesting the invalidation. - * @see MetadataStore#invalidateAll(org.bukkit.plugin.Plugin) - * @throws IllegalArgumentException If plugin is null - */ - public synchronized void invalidateAll(Plugin owningPlugin) { - Validate.notNull(owningPlugin, "Plugin cannot be null"); - for (Map values : metadataMap.values()) { - if (values.containsKey(owningPlugin)) { - values.get(owningPlugin).invalidate(); - } - } - } - - /** - * Creates a unique name for the object receiving metadata by combining - * unique data from the subject with a metadataKey. - *

          - * The name created must be globally unique for the given object and any - * two equivalent objects must generate the same unique name. For example, - * two Player objects must generate the same string if they represent the - * same player, even if the objects would fail a reference equality test. - * - * @param subject The object for which this key is being generated. - * @param metadataKey The name identifying the metadata value. - * @return a unique metadata key for the given subject. - */ - protected abstract String disambiguate(T subject, String metadataKey); -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataValue.java b/LiveWeather/src/org/bukkit/metadata/MetadataValue.java deleted file mode 100755 index eded8c0..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataValue.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.bukkit.metadata; - -import org.bukkit.plugin.Plugin; - -public interface MetadataValue { - - /** - * Fetches the value of this metadata item. - * - * @return the metadata value. - */ - public Object value(); - - /** - * Attempts to convert the value of this metadata item into an int. - * - * @return the value as an int. - */ - public int asInt(); - - /** - * Attempts to convert the value of this metadata item into a float. - * - * @return the value as a float. - */ - public float asFloat(); - - /** - * Attempts to convert the value of this metadata item into a double. - * - * @return the value as a double. - */ - public double asDouble(); - - /** - * Attempts to convert the value of this metadata item into a long. - * - * @return the value as a long. - */ - public long asLong(); - - /** - * Attempts to convert the value of this metadata item into a short. - * - * @return the value as a short. - */ - public short asShort(); - - /** - * Attempts to convert the value of this metadata item into a byte. - * - * @return the value as a byte. - */ - public byte asByte(); - - /** - * Attempts to convert the value of this metadata item into a boolean. - * - * @return the value as a boolean. - */ - public boolean asBoolean(); - - /** - * Attempts to convert the value of this metadata item into a string. - * - * @return the value as a string. - */ - public String asString(); - - /** - * Returns the {@link Plugin} that created this metadata item. - * - * @return the plugin that owns this metadata value. This should never be - * null. - */ - public Plugin getOwningPlugin(); - - /** - * Invalidates this metadata item, forcing it to recompute when next - * accessed. - */ - public void invalidate(); -} diff --git a/LiveWeather/src/org/bukkit/metadata/MetadataValueAdapter.java b/LiveWeather/src/org/bukkit/metadata/MetadataValueAdapter.java deleted file mode 100755 index bbc3da8..0000000 --- a/LiveWeather/src/org/bukkit/metadata/MetadataValueAdapter.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bukkit.metadata; - -import java.lang.ref.WeakReference; - -import org.apache.commons.lang.Validate; -import org.bukkit.plugin.Plugin; -import org.bukkit.util.NumberConversions; - -/** - * Optional base class for facilitating MetadataValue implementations. - *

          - * This provides all the conversion functions for MetadataValue so that - * writing an implementation of MetadataValue is as simple as implementing - * value() and invalidate(). - */ -public abstract class MetadataValueAdapter implements MetadataValue { - protected final WeakReference owningPlugin; - - protected MetadataValueAdapter(Plugin owningPlugin) { - Validate.notNull(owningPlugin, "owningPlugin cannot be null"); - this.owningPlugin = new WeakReference(owningPlugin); - } - - public Plugin getOwningPlugin() { - return owningPlugin.get(); - } - - public int asInt() { - return NumberConversions.toInt(value()); - } - - public float asFloat() { - return NumberConversions.toFloat(value()); - } - - public double asDouble() { - return NumberConversions.toDouble(value()); - } - - public long asLong() { - return NumberConversions.toLong(value()); - } - - public short asShort() { - return NumberConversions.toShort(value()); - } - - public byte asByte() { - return NumberConversions.toByte(value()); - } - - public boolean asBoolean() { - Object value = value(); - if (value instanceof Boolean) { - return (Boolean) value; - } - - if (value instanceof Number) { - return ((Number) value).intValue() != 0; - } - - if (value instanceof String) { - return Boolean.parseBoolean((String) value); - } - - return value != null; - } - - public String asString() { - Object value = value(); - - if (value == null) { - return ""; - } - return value.toString(); - } - -} diff --git a/LiveWeather/src/org/bukkit/metadata/Metadatable.java b/LiveWeather/src/org/bukkit/metadata/Metadatable.java deleted file mode 100755 index b47cf2b..0000000 --- a/LiveWeather/src/org/bukkit/metadata/Metadatable.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bukkit.metadata; - -import org.bukkit.plugin.Plugin; - -import java.util.List; - -/** - * This interface is implemented by all objects that can provide metadata - * about themselves. - */ -public interface Metadatable { - /** - * Sets a metadata value in the implementing object's metadata store. - * - * @param metadataKey A unique key to identify this metadata. - * @param newMetadataValue The metadata value to apply. - * @throws IllegalArgumentException If value is null, or the owning plugin - * is null - */ - public void setMetadata(String metadataKey, MetadataValue newMetadataValue); - - /** - * Returns a list of previously set metadata values from the implementing - * object's metadata store. - * - * @param metadataKey the unique metadata key being sought. - * @return A list of values, one for each plugin that has set the - * requested value. - */ - public List getMetadata(String metadataKey); - - /** - * Tests to see whether the implementing object contains the given - * metadata value in its metadata store. - * - * @param metadataKey the unique metadata key being queried. - * @return the existence of the metadataKey within subject. - */ - public boolean hasMetadata(String metadataKey); - - /** - * Removes the given metadata value from the implementing object's - * metadata store. - * - * @param metadataKey the unique metadata key identifying the metadata to - * remove. - * @param owningPlugin This plugin's metadata value will be removed. All - * other values will be left untouched. - * @throws IllegalArgumentException If plugin is null - */ - public void removeMetadata(String metadataKey, Plugin owningPlugin); -} diff --git a/LiveWeather/src/org/bukkit/permissions/Permissible.java b/LiveWeather/src/org/bukkit/permissions/Permissible.java deleted file mode 100755 index 5cd3cff..0000000 --- a/LiveWeather/src/org/bukkit/permissions/Permissible.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.bukkit.permissions; - -import java.util.Set; -import org.bukkit.plugin.Plugin; - -/** - * Represents an object that may be assigned permissions - */ -public interface Permissible extends ServerOperator { - - /** - * Checks if this object contains an override for the specified - * permission, by fully qualified name - * - * @param name Name of the permission - * @return true if the permission is set, otherwise false - */ - public boolean isPermissionSet(String name); - - /** - * Checks if this object contains an override for the specified {@link - * Permission} - * - * @param perm Permission to check - * @return true if the permission is set, otherwise false - */ - public boolean isPermissionSet(Permission perm); - - /** - * Gets the value of the specified permission, if set. - *

          - * If a permission override is not set on this object, the default value - * of the permission will be returned. - * - * @param name Name of the permission - * @return Value of the permission - */ - public boolean hasPermission(String name); - - /** - * Gets the value of the specified permission, if set. - *

          - * If a permission override is not set on this object, the default value - * of the permission will be returned - * - * @param perm Permission to get - * @return Value of the permission - */ - public boolean hasPermission(Permission perm); - - /** - * Adds a new {@link PermissionAttachment} with a single permission by - * name and value - * - * @param plugin Plugin responsible for this attachment, may not be null - * or disabled - * @param name Name of the permission to attach - * @param value Value of the permission - * @return The PermissionAttachment that was just created - */ - public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value); - - /** - * Adds a new empty {@link PermissionAttachment} to this object - * - * @param plugin Plugin responsible for this attachment, may not be null - * or disabled - * @return The PermissionAttachment that was just created - */ - public PermissionAttachment addAttachment(Plugin plugin); - - /** - * Temporarily adds a new {@link PermissionAttachment} with a single - * permission by name and value - * - * @param plugin Plugin responsible for this attachment, may not be null - * or disabled - * @param name Name of the permission to attach - * @param value Value of the permission - * @param ticks Amount of ticks to automatically remove this attachment - * after - * @return The PermissionAttachment that was just created - */ - public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks); - - /** - * Temporarily adds a new empty {@link PermissionAttachment} to this - * object - * - * @param plugin Plugin responsible for this attachment, may not be null - * or disabled - * @param ticks Amount of ticks to automatically remove this attachment - * after - * @return The PermissionAttachment that was just created - */ - public PermissionAttachment addAttachment(Plugin plugin, int ticks); - - /** - * Removes the given {@link PermissionAttachment} from this object - * - * @param attachment Attachment to remove - * @throws IllegalArgumentException Thrown when the specified attachment - * isn't part of this object - */ - public void removeAttachment(PermissionAttachment attachment); - - /** - * Recalculates the permissions for this object, if the attachments have - * changed values. - *

          - * This should very rarely need to be called from a plugin. - */ - public void recalculatePermissions(); - - /** - * Gets a set containing all of the permissions currently in effect by - * this object - * - * @return Set of currently effective permissions - */ - public Set getEffectivePermissions(); -} diff --git a/LiveWeather/src/org/bukkit/permissions/PermissibleBase.java b/LiveWeather/src/org/bukkit/permissions/PermissibleBase.java deleted file mode 100755 index 3b95061..0000000 --- a/LiveWeather/src/org/bukkit/permissions/PermissibleBase.java +++ /dev/null @@ -1,246 +0,0 @@ -package org.bukkit.permissions; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -/** - * Base Permissible for use in any Permissible object via proxy or extension - */ -public class PermissibleBase implements Permissible { - private ServerOperator opable = null; - private Permissible parent = this; - private final List attachments = new LinkedList(); - private final Map permissions = new HashMap(); - - public PermissibleBase(ServerOperator opable) { - this.opable = opable; - - if (opable instanceof Permissible) { - this.parent = (Permissible) opable; - } - - recalculatePermissions(); - } - - public boolean isOp() { - if (opable == null) { - return false; - } else { - return opable.isOp(); - } - } - - public void setOp(boolean value) { - if (opable == null) { - throw new UnsupportedOperationException("Cannot change op value as no ServerOperator is set"); - } else { - opable.setOp(value); - } - } - - public boolean isPermissionSet(String name) { - if (name == null) { - throw new IllegalArgumentException("Permission name cannot be null"); - } - - return permissions.containsKey(name.toLowerCase()); - } - - public boolean isPermissionSet(Permission perm) { - if (perm == null) { - throw new IllegalArgumentException("Permission cannot be null"); - } - - return isPermissionSet(perm.getName()); - } - - public boolean hasPermission(String inName) { - if (inName == null) { - throw new IllegalArgumentException("Permission name cannot be null"); - } - - String name = inName.toLowerCase(); - - if (isPermissionSet(name)) { - return permissions.get(name).getValue(); - } else { - Permission perm = Bukkit.getServer().getPluginManager().getPermission(name); - - if (perm != null) { - return perm.getDefault().getValue(isOp()); - } else { - return Permission.DEFAULT_PERMISSION.getValue(isOp()); - } - } - } - - public boolean hasPermission(Permission perm) { - if (perm == null) { - throw new IllegalArgumentException("Permission cannot be null"); - } - - String name = perm.getName().toLowerCase(); - - if (isPermissionSet(name)) { - return permissions.get(name).getValue(); - } - return perm.getDefault().getValue(isOp()); - } - - public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value) { - if (name == null) { - throw new IllegalArgumentException("Permission name cannot be null"); - } else if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } else if (!plugin.isEnabled()) { - throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled"); - } - - PermissionAttachment result = addAttachment(plugin); - result.setPermission(name, value); - - recalculatePermissions(); - - return result; - } - - public PermissionAttachment addAttachment(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } else if (!plugin.isEnabled()) { - throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled"); - } - - PermissionAttachment result = new PermissionAttachment(plugin, parent); - - attachments.add(result); - recalculatePermissions(); - - return result; - } - - public void removeAttachment(PermissionAttachment attachment) { - if (attachment == null) { - throw new IllegalArgumentException("Attachment cannot be null"); - } - - if (attachments.contains(attachment)) { - attachments.remove(attachment); - PermissionRemovedExecutor ex = attachment.getRemovalCallback(); - - if (ex != null) { - ex.attachmentRemoved(attachment); - } - - recalculatePermissions(); - } else { - throw new IllegalArgumentException("Given attachment is not part of Permissible object " + parent); - } - } - - public void recalculatePermissions() { - clearPermissions(); - Set defaults = Bukkit.getServer().getPluginManager().getDefaultPermissions(isOp()); - Bukkit.getServer().getPluginManager().subscribeToDefaultPerms(isOp(), parent); - - for (Permission perm : defaults) { - String name = perm.getName().toLowerCase(); - permissions.put(name, new PermissionAttachmentInfo(parent, name, null, true)); - Bukkit.getServer().getPluginManager().subscribeToPermission(name, parent); - calculateChildPermissions(perm.getChildren(), false, null); - } - - for (PermissionAttachment attachment : attachments) { - calculateChildPermissions(attachment.getPermissions(), false, attachment); - } - } - - public synchronized void clearPermissions() { - Set perms = permissions.keySet(); - - for (String name : perms) { - Bukkit.getServer().getPluginManager().unsubscribeFromPermission(name, parent); - } - - Bukkit.getServer().getPluginManager().unsubscribeFromDefaultPerms(false, parent); - Bukkit.getServer().getPluginManager().unsubscribeFromDefaultPerms(true, parent); - - permissions.clear(); - } - - private void calculateChildPermissions(Map children, boolean invert, PermissionAttachment attachment) { - Set keys = children.keySet(); - - for (String name : keys) { - Permission perm = Bukkit.getServer().getPluginManager().getPermission(name); - boolean value = children.get(name) ^ invert; - String lname = name.toLowerCase(); - - permissions.put(lname, new PermissionAttachmentInfo(parent, lname, attachment, value)); - Bukkit.getServer().getPluginManager().subscribeToPermission(name, parent); - - if (perm != null) { - calculateChildPermissions(perm.getChildren(), !value, attachment); - } - } - } - - public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks) { - if (name == null) { - throw new IllegalArgumentException("Permission name cannot be null"); - } else if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } else if (!plugin.isEnabled()) { - throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled"); - } - - PermissionAttachment result = addAttachment(plugin, ticks); - - if (result != null) { - result.setPermission(name, value); - } - - return result; - } - - public PermissionAttachment addAttachment(Plugin plugin, int ticks) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } else if (!plugin.isEnabled()) { - throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled"); - } - - PermissionAttachment result = addAttachment(plugin); - - if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new RemoveAttachmentRunnable(result), ticks) == -1) { - Bukkit.getServer().getLogger().log(Level.WARNING, "Could not add PermissionAttachment to " + parent + " for plugin " + plugin.getDescription().getFullName() + ": Scheduler returned -1"); - result.remove(); - return null; - } else { - return result; - } - } - - public Set getEffectivePermissions() { - return new HashSet(permissions.values()); - } - - private class RemoveAttachmentRunnable implements Runnable { - private PermissionAttachment attachment; - - public RemoveAttachmentRunnable(PermissionAttachment attachment) { - this.attachment = attachment; - } - - public void run() { - attachment.remove(); - } - } -} diff --git a/LiveWeather/src/org/bukkit/permissions/Permission.java b/LiveWeather/src/org/bukkit/permissions/Permission.java deleted file mode 100755 index 26f6f2b..0000000 --- a/LiveWeather/src/org/bukkit/permissions/Permission.java +++ /dev/null @@ -1,343 +0,0 @@ -package org.bukkit.permissions; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; - -import org.apache.commons.lang.Validate; -import org.bukkit.Bukkit; -import org.bukkit.plugin.PluginManager; - -/** - * Represents a unique permission that may be attached to a {@link - * Permissible} - */ -public class Permission { - public static final PermissionDefault DEFAULT_PERMISSION = PermissionDefault.OP; - - private final String name; - private final Map children = new LinkedHashMap(); - private PermissionDefault defaultValue = DEFAULT_PERMISSION; - private String description; - - public Permission(String name) { - this(name, null, null, null); - } - - public Permission(String name, String description) { - this(name, description, null, null); - } - - public Permission(String name, PermissionDefault defaultValue) { - this(name, null, defaultValue, null); - } - - public Permission(String name, String description, PermissionDefault defaultValue) { - this(name, description, defaultValue, null); - } - - public Permission(String name, Map children) { - this(name, null, null, children); - } - - public Permission(String name, String description, Map children) { - this(name, description, null, children); - } - - public Permission(String name, PermissionDefault defaultValue, Map children) { - this(name, null, defaultValue, children); - } - - public Permission(String name, String description, PermissionDefault defaultValue, Map children) { - this.name = name; - this.description = (description == null) ? "" : description; - - if (defaultValue != null) { - this.defaultValue = defaultValue; - } - - if (children != null) { - this.children.putAll(children); - } - - recalculatePermissibles(); - } - - /** - * Returns the unique fully qualified name of this Permission - * - * @return Fully qualified name - */ - public String getName() { - return name; - } - - /** - * Gets the children of this permission. - *

          - * If you change this map in any form, you must call {@link - * #recalculatePermissibles()} to recalculate all {@link Permissible}s - * - * @return Permission children - */ - public Map getChildren() { - return children; - } - - /** - * Gets the default value of this permission. - * - * @return Default value of this permission. - */ - public PermissionDefault getDefault() { - return defaultValue; - } - - /** - * Sets the default value of this permission. - *

          - * This will not be saved to disk, and is a temporary operation until the - * server reloads permissions. Changing this default will cause all {@link - * Permissible}s that contain this permission to recalculate their - * permissions - * - * @param value The new default to set - */ - public void setDefault(PermissionDefault value) { - if (defaultValue == null) { - throw new IllegalArgumentException("Default value cannot be null"); - } - - defaultValue = value; - recalculatePermissibles(); - } - - /** - * Gets a brief description of this permission, if set - * - * @return Brief description of this permission - */ - public String getDescription() { - return description; - } - - /** - * Sets the description of this permission. - *

          - * This will not be saved to disk, and is a temporary operation until the - * server reloads permissions. - * - * @param value The new description to set - */ - public void setDescription(String value) { - if (value == null) { - description = ""; - } else { - description = value; - } - } - - /** - * Gets a set containing every {@link Permissible} that has this - * permission. - *

          - * This set cannot be modified. - * - * @return Set containing permissibles with this permission - */ - public Set getPermissibles() { - return Bukkit.getServer().getPluginManager().getPermissionSubscriptions(name); - } - - /** - * Recalculates all {@link Permissible}s that contain this permission. - *

          - * This should be called after modifying the children, and is - * automatically called after modifying the default value - */ - public void recalculatePermissibles() { - Set perms = getPermissibles(); - - Bukkit.getServer().getPluginManager().recalculatePermissionDefaults(this); - - for (Permissible p : perms) { - p.recalculatePermissions(); - } - } - - /** - * Adds this permission to the specified parent permission. - *

          - * If the parent permission does not exist, it will be created and - * registered. - * - * @param name Name of the parent permission - * @param value The value to set this permission to - * @return Parent permission it created or loaded - */ - public Permission addParent(String name, boolean value) { - PluginManager pm = Bukkit.getServer().getPluginManager(); - String lname = name.toLowerCase(); - - Permission perm = pm.getPermission(lname); - - if (perm == null) { - perm = new Permission(lname); - pm.addPermission(perm); - } - - addParent(perm, value); - - return perm; - } - - /** - * Adds this permission to the specified parent permission. - * - * @param perm Parent permission to register with - * @param value The value to set this permission to - */ - public void addParent(Permission perm, boolean value) { - perm.getChildren().put(getName(), value); - perm.recalculatePermissibles(); - } - - /** - * Loads a list of Permissions from a map of data, usually used from - * retrieval from a yaml file. - *

          - * The data may contain a list of name:data, where the data contains the - * following keys: - *

            - *
          • default: Boolean true or false. If not specified, false. - *
          • children: Map of child permissions. If not - * specified, empty list. - *
          • description: Short string containing a very small description of - * this description. If not specified, empty string. - *
          - * - * @param data Map of permissions - * @param error An error message to show if a permission is invalid. - * @param def Default permission value to use if missing - * @return Permission object - */ - public static List loadPermissions(Map data, String error, PermissionDefault def) { - List result = new ArrayList(); - - for (Map.Entry entry : data.entrySet()) { - try { - result.add(Permission.loadPermission(entry.getKey().toString(), (Map) entry.getValue(), def, result)); - } catch (Throwable ex) { - Bukkit.getServer().getLogger().log(Level.SEVERE, String.format(error, entry.getKey()), ex); - } - } - - return result; - } - - /** - * Loads a Permission from a map of data, usually used from retrieval from - * a yaml file. - *

          - * The data may contain the following keys: - *

            - *
          • default: Boolean true or false. If not specified, false. - *
          • children: Map of child permissions. If not - * specified, empty list. - *
          • description: Short string containing a very small description of - * this description. If not specified, empty string. - * - * @param name Name of the permission - * @param data Map of keys - * @return Permission object - */ - public static Permission loadPermission(String name, Map data) { - return loadPermission(name, data, DEFAULT_PERMISSION, null); - } - - /** - * Loads a Permission from a map of data, usually used from retrieval from - * a yaml file. - *

            - * The data may contain the following keys: - *

              - *
            • default: Boolean true or false. If not specified, false. - *
            • children: Map of child permissions. If not - * specified, empty list. - *
            • description: Short string containing a very small description of - * this description. If not specified, empty string. - *
            - * - * @param name Name of the permission - * @param data Map of keys - * @param def Default permission value to use if not set - * @param output A list to append any created child-Permissions to, may be null - * @return Permission object - */ - public static Permission loadPermission(String name, Map data, PermissionDefault def, List output) { - Validate.notNull(name, "Name cannot be null"); - Validate.notNull(data, "Data cannot be null"); - - String desc = null; - Map children = null; - - if (data.get("default") != null) { - PermissionDefault value = PermissionDefault.getByName(data.get("default").toString()); - if (value != null) { - def = value; - } else { - throw new IllegalArgumentException("'default' key contained unknown value"); - } - } - - if (data.get("children") != null) { - Object childrenNode = data.get("children"); - if (childrenNode instanceof Iterable) { - children = new LinkedHashMap(); - for (Object child : (Iterable) childrenNode) { - if (child != null) { - children.put(child.toString(), Boolean.TRUE); - } - } - } else if (childrenNode instanceof Map) { - children = extractChildren((Map) childrenNode, name, def, output); - } else { - throw new IllegalArgumentException("'children' key is of wrong type"); - } - } - - if (data.get("description") != null) { - desc = data.get("description").toString(); - } - - return new Permission(name, desc, def, children); - } - - private static Map extractChildren(Map input, String name, PermissionDefault def, List output) { - Map children = new LinkedHashMap(); - - for (Map.Entry entry : input.entrySet()) { - if ((entry.getValue() instanceof Boolean)) { - children.put(entry.getKey().toString(), (Boolean) entry.getValue()); - } else if ((entry.getValue() instanceof Map)) { - try { - Permission perm = loadPermission(entry.getKey().toString(), (Map) entry.getValue(), def, output); - children.put(perm.getName(), Boolean.TRUE); - - if (output != null) { - output.add(perm); - } - } catch (Throwable ex) { - throw new IllegalArgumentException("Permission node '" + entry.getKey().toString() + "' in child of " + name + " is invalid", ex); - } - } else { - throw new IllegalArgumentException("Child '" + entry.getKey().toString() + "' contains invalid value"); - } - } - - return children; - } -} diff --git a/LiveWeather/src/org/bukkit/permissions/PermissionAttachment.java b/LiveWeather/src/org/bukkit/permissions/PermissionAttachment.java deleted file mode 100755 index b2a44d5..0000000 --- a/LiveWeather/src/org/bukkit/permissions/PermissionAttachment.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.bukkit.permissions; - -import java.util.LinkedHashMap; -import java.util.Map; -import org.bukkit.plugin.Plugin; - -/** - * Holds information about a permission attachment on a {@link Permissible} - * object - */ -public class PermissionAttachment { - private PermissionRemovedExecutor removed; - private final Map permissions = new LinkedHashMap(); - private final Permissible permissible; - private final Plugin plugin; - - public PermissionAttachment(Plugin plugin, Permissible Permissible) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } else if (!plugin.isEnabled()) { - throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled"); - } - - this.permissible = Permissible; - this.plugin = plugin; - } - - /** - * Gets the plugin responsible for this attachment - * - * @return Plugin responsible for this permission attachment - */ - public Plugin getPlugin() { - return plugin; - } - - /** - * Sets an object to be called for when this attachment is removed from a - * {@link Permissible}. May be null. - * - * @param ex Object to be called when this is removed - */ - public void setRemovalCallback(PermissionRemovedExecutor ex) { - removed = ex; - } - - /** - * Gets the class that was previously set to be called when this - * attachment was removed from a {@link Permissible}. May be null. - * - * @return Object to be called when this is removed - */ - public PermissionRemovedExecutor getRemovalCallback() { - return removed; - } - - /** - * Gets the Permissible that this is attached to - * - * @return Permissible containing this attachment - */ - public Permissible getPermissible() { - return permissible; - } - - /** - * Gets a copy of all set permissions and values contained within this - * attachment. - *

            - * This map may be modified but will not affect the attachment, as it is a - * copy. - * - * @return Copy of all permissions and values expressed by this attachment - */ - public Map getPermissions() { - return new LinkedHashMap(permissions); - } - - /** - * Sets a permission to the given value, by its fully qualified name - * - * @param name Name of the permission - * @param value New value of the permission - */ - public void setPermission(String name, boolean value) { - permissions.put(name.toLowerCase(), value); - permissible.recalculatePermissions(); - } - - /** - * Sets a permission to the given value - * - * @param perm Permission to set - * @param value New value of the permission - */ - public void setPermission(Permission perm, boolean value) { - setPermission(perm.getName(), value); - } - - /** - * Removes the specified permission from this attachment. - *

            - * If the permission does not exist in this attachment, nothing will - * happen. - * - * @param name Name of the permission to remove - */ - public void unsetPermission(String name) { - permissions.remove(name.toLowerCase()); - permissible.recalculatePermissions(); - } - - /** - * Removes the specified permission from this attachment. - *

            - * If the permission does not exist in this attachment, nothing will - * happen. - * - * @param perm Permission to remove - */ - public void unsetPermission(Permission perm) { - unsetPermission(perm.getName()); - } - - /** - * Removes this attachment from its registered {@link Permissible} - * - * @return true if the permissible was removed successfully, false if it - * did not exist - */ - public boolean remove() { - try { - permissible.removeAttachment(this); - return true; - } catch (IllegalArgumentException ex) { - return false; - } - } -} diff --git a/LiveWeather/src/org/bukkit/permissions/PermissionAttachmentInfo.java b/LiveWeather/src/org/bukkit/permissions/PermissionAttachmentInfo.java deleted file mode 100755 index 8e8e335..0000000 --- a/LiveWeather/src/org/bukkit/permissions/PermissionAttachmentInfo.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bukkit.permissions; - -/** - * Holds information on a permission and which {@link PermissionAttachment} - * provides it - */ -public class PermissionAttachmentInfo { - private final Permissible permissible; - private final String permission; - private final PermissionAttachment attachment; - private final boolean value; - - public PermissionAttachmentInfo(Permissible permissible, String permission, PermissionAttachment attachment, boolean value) { - if (permissible == null) { - throw new IllegalArgumentException("Permissible may not be null"); - } else if (permission == null) { - throw new IllegalArgumentException("Permissions may not be null"); - } - - this.permissible = permissible; - this.permission = permission; - this.attachment = attachment; - this.value = value; - } - - /** - * Gets the permissible this is attached to - * - * @return Permissible this permission is for - */ - public Permissible getPermissible() { - return permissible; - } - - /** - * Gets the permission being set - * - * @return Name of the permission - */ - public String getPermission() { - return permission; - } - - /** - * Gets the attachment providing this permission. This may be null for - * default permissions (usually parent permissions). - * - * @return Attachment - */ - public PermissionAttachment getAttachment() { - return attachment; - } - - /** - * Gets the value of this permission - * - * @return Value of the permission - */ - public boolean getValue() { - return value; - } -} diff --git a/LiveWeather/src/org/bukkit/permissions/PermissionDefault.java b/LiveWeather/src/org/bukkit/permissions/PermissionDefault.java deleted file mode 100755 index 045e733..0000000 --- a/LiveWeather/src/org/bukkit/permissions/PermissionDefault.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bukkit.permissions; - -import java.util.HashMap; -import java.util.Map; - -/** - * Represents the possible default values for permissions - */ -public enum PermissionDefault { - TRUE("true"), - FALSE("false"), - OP("op", "isop", "operator", "isoperator", "admin", "isadmin"), - NOT_OP("!op", "notop", "!operator", "notoperator", "!admin", "notadmin"); - - private final String[] names; - private final static Map lookup = new HashMap(); - - private PermissionDefault(String... names) { - this.names = names; - } - - /** - * Calculates the value of this PermissionDefault for the given operator - * value - * - * @param op If the target is op - * @return True if the default should be true, or false - */ - public boolean getValue(boolean op) { - switch (this) { - case TRUE: - return true; - case FALSE: - return false; - case OP: - return op; - case NOT_OP: - return !op; - default: - return false; - } - } - - /** - * Looks up a PermissionDefault by name - * - * @param name Name of the default - * @return Specified value, or null if not found - */ - public static PermissionDefault getByName(String name) { - return lookup.get(name.toLowerCase().replaceAll("[^a-z!]", "")); - } - - @Override - public String toString() { - return names[0]; - } - - static { - for (PermissionDefault value : values()) { - for (String name : value.names) { - lookup.put(name, value); - } - } - } -} diff --git a/LiveWeather/src/org/bukkit/permissions/PermissionRemovedExecutor.java b/LiveWeather/src/org/bukkit/permissions/PermissionRemovedExecutor.java deleted file mode 100755 index b13d008..0000000 --- a/LiveWeather/src/org/bukkit/permissions/PermissionRemovedExecutor.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bukkit.permissions; - -/** - * Represents a class which is to be notified when a {@link - * PermissionAttachment} is removed from a {@link Permissible} - */ -public interface PermissionRemovedExecutor { - - /** - * Called when a {@link PermissionAttachment} is removed from a {@link - * Permissible} - * - * @param attachment Attachment which was removed - */ - public void attachmentRemoved(PermissionAttachment attachment); -} diff --git a/LiveWeather/src/org/bukkit/permissions/ServerOperator.java b/LiveWeather/src/org/bukkit/permissions/ServerOperator.java deleted file mode 100755 index 26ed243..0000000 --- a/LiveWeather/src/org/bukkit/permissions/ServerOperator.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bukkit.permissions; - -import org.bukkit.entity.Player; - -/** - * Represents an object that may become a server operator, such as a {@link - * Player} - */ -public interface ServerOperator { - - /** - * Checks if this object is a server operator - * - * @return true if this is an operator, otherwise false - */ - public boolean isOp(); - - /** - * Sets the operator status of this object - * - * @param value New operator value - */ - public void setOp(boolean value); -} diff --git a/LiveWeather/src/org/bukkit/plugin/AuthorNagException.java b/LiveWeather/src/org/bukkit/plugin/AuthorNagException.java deleted file mode 100755 index 6565a44..0000000 --- a/LiveWeather/src/org/bukkit/plugin/AuthorNagException.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.plugin; - -@SuppressWarnings("serial") -public class AuthorNagException extends RuntimeException { - private final String message; - - /** - * Constructs a new AuthorNagException based on the given Exception - * - * @param message Brief message explaining the cause of the exception - */ - public AuthorNagException(final String message) { - this.message = message; - } - - @Override - public String getMessage() { - return message; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/EventExecutor.java b/LiveWeather/src/org/bukkit/plugin/EventExecutor.java deleted file mode 100755 index 3b2c99e..0000000 --- a/LiveWeather/src/org/bukkit/plugin/EventExecutor.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bukkit.plugin; - -import org.bukkit.event.Event; -import org.bukkit.event.EventException; -import org.bukkit.event.Listener; - -/** - * Interface which defines the class for event call backs to plugins - */ -public interface EventExecutor { - public void execute(Listener listener, Event event) throws EventException; -} diff --git a/LiveWeather/src/org/bukkit/plugin/IllegalPluginAccessException.java b/LiveWeather/src/org/bukkit/plugin/IllegalPluginAccessException.java deleted file mode 100755 index b25447d..0000000 --- a/LiveWeather/src/org/bukkit/plugin/IllegalPluginAccessException.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bukkit.plugin; - -/** - * Thrown when a plugin attempts to interact with the server when it is not - * enabled - */ -@SuppressWarnings("serial") -public class IllegalPluginAccessException extends RuntimeException { - - /** - * Creates a new instance of IllegalPluginAccessException - * without detail message. - */ - public IllegalPluginAccessException() {} - - /** - * Constructs an instance of IllegalPluginAccessException - * with the specified detail message. - * - * @param msg the detail message. - */ - public IllegalPluginAccessException(String msg) { - super(msg); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/InvalidDescriptionException.java b/LiveWeather/src/org/bukkit/plugin/InvalidDescriptionException.java deleted file mode 100755 index 0a77c2e..0000000 --- a/LiveWeather/src/org/bukkit/plugin/InvalidDescriptionException.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bukkit.plugin; - -/** - * Thrown when attempting to load an invalid PluginDescriptionFile - */ -public class InvalidDescriptionException extends Exception { - private static final long serialVersionUID = 5721389122281775896L; - - /** - * Constructs a new InvalidDescriptionException based on the given - * Exception - * - * @param message Brief message explaining the cause of the exception - * @param cause Exception that triggered this Exception - */ - public InvalidDescriptionException(final Throwable cause, final String message) { - super(message, cause); - } - - /** - * Constructs a new InvalidDescriptionException based on the given - * Exception - * - * @param cause Exception that triggered this Exception - */ - public InvalidDescriptionException(final Throwable cause) { - super("Invalid plugin.yml", cause); - } - - /** - * Constructs a new InvalidDescriptionException with the given message - * - * @param message Brief message explaining the cause of the exception - */ - public InvalidDescriptionException(final String message) { - super(message); - } - - /** - * Constructs a new InvalidDescriptionException - */ - public InvalidDescriptionException() { - super("Invalid plugin.yml"); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/InvalidPluginException.java b/LiveWeather/src/org/bukkit/plugin/InvalidPluginException.java deleted file mode 100755 index 7ddf7b6..0000000 --- a/LiveWeather/src/org/bukkit/plugin/InvalidPluginException.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.bukkit.plugin; - -/** - * Thrown when attempting to load an invalid Plugin file - */ -public class InvalidPluginException extends Exception { - private static final long serialVersionUID = -8242141640709409544L; - - /** - * Constructs a new InvalidPluginException based on the given Exception - * - * @param cause Exception that triggered this Exception - */ - public InvalidPluginException(final Throwable cause) { - super(cause); - } - - /** - * Constructs a new InvalidPluginException - */ - public InvalidPluginException() { - - } - - /** - * Constructs a new InvalidPluginException with the specified detail - * message and cause. - * - * @param message the detail message (which is saved for later retrieval - * by the getMessage() method). - * @param cause the cause (which is saved for later retrieval by the - * getCause() method). (A null value is permitted, and indicates that - * the cause is nonexistent or unknown.) - */ - public InvalidPluginException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new InvalidPluginException with the specified detail - * message - * - * @param message TThe detail message is saved for later retrieval by the - * getMessage() method. - */ - public InvalidPluginException(final String message) { - super(message); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/Plugin.java b/LiveWeather/src/org/bukkit/plugin/Plugin.java deleted file mode 100755 index 7bdc809..0000000 --- a/LiveWeather/src/org/bukkit/plugin/Plugin.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.bukkit.plugin; - -import java.io.File; -import java.io.InputStream; -import java.util.logging.Logger; - -import org.bukkit.Server; -import org.bukkit.command.TabExecutor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.generator.ChunkGenerator; - -import com.avaje.ebean.EbeanServer; - -/** - * Represents a Plugin - *

            - * The use of {@link PluginBase} is recommended for actual Implementation - */ -public interface Plugin extends TabExecutor { - /** - * Returns the folder that the plugin data's files are located in. The - * folder may not yet exist. - * - * @return The folder - */ - public File getDataFolder(); - - /** - * Returns the plugin.yaml file containing the details for this plugin - * - * @return Contents of the plugin.yaml file - */ - public PluginDescriptionFile getDescription(); - - /** - * Gets a {@link FileConfiguration} for this plugin, read through - * "config.yml" - *

            - * If there is a default config.yml embedded in this plugin, it will be - * provided as a default for this Configuration. - * - * @return Plugin configuration - */ - public FileConfiguration getConfig(); - - /** - * Gets an embedded resource in this plugin - * - * @param filename Filename of the resource - * @return File if found, otherwise null - */ - public InputStream getResource(String filename); - - /** - * Saves the {@link FileConfiguration} retrievable by {@link #getConfig()}. - */ - public void saveConfig(); - - /** - * Saves the raw contents of the default config.yml file to the location - * retrievable by {@link #getConfig()}. If there is no default config.yml - * embedded in the plugin, an empty config.yml file is saved. This should - * fail silently if the config.yml already exists. - */ - public void saveDefaultConfig(); - - /** - * Saves the raw contents of any resource embedded with a plugin's .jar - * file assuming it can be found using {@link #getResource(String)}. - *

            - * The resource is saved into the plugin's data folder using the same - * hierarchy as the .jar file (subdirectories are preserved). - * - * @param resourcePath the embedded resource path to look for within the - * plugin's .jar file. (No preceding slash). - * @param replace if true, the embedded resource will overwrite the - * contents of an existing file. - * @throws IllegalArgumentException if the resource path is null, empty, - * or points to a nonexistent resource. - */ - public void saveResource(String resourcePath, boolean replace); - - /** - * Discards any data in {@link #getConfig()} and reloads from disk. - */ - public void reloadConfig(); - - /** - * Gets the associated PluginLoader responsible for this plugin - * - * @return PluginLoader that controls this plugin - */ - public PluginLoader getPluginLoader(); - - /** - * Returns the Server instance currently running this plugin - * - * @return Server running this plugin - */ - public Server getServer(); - - /** - * Returns a value indicating whether or not this plugin is currently - * enabled - * - * @return true if this plugin is enabled, otherwise false - */ - public boolean isEnabled(); - - /** - * Called when this plugin is disabled - */ - public void onDisable(); - - /** - * Called after a plugin is loaded but before it has been enabled. - *

            - * When mulitple plugins are loaded, the onLoad() for all plugins is - * called before any onEnable() is called. - */ - public void onLoad(); - - /** - * Called when this plugin is enabled - */ - public void onEnable(); - - /** - * Simple boolean if we can still nag to the logs about things - * - * @return boolean whether we can nag - */ - public boolean isNaggable(); - - /** - * Set naggable state - * - * @param canNag is this plugin still naggable? - */ - public void setNaggable(boolean canNag); - - /** - * Gets the {@link EbeanServer} tied to this plugin. This will only be - * available if enabled in the {@link - * PluginDescriptionFile#isDatabaseEnabled()} - *

            - * For more information on the use of - * Avaje Ebeans ORM, see Avaje Ebeans - * Documentation - *

            - * For an example using Ebeans ORM, see Bukkit's Homebukkit Plugin - * - * - * @return ebean server instance or null if not enabled - */ - public EbeanServer getDatabase(); - - /** - * Gets a {@link ChunkGenerator} for use in a default world, as specified - * in the server configuration - * - * @param worldName Name of the world that this will be applied to - * @param id Unique ID, if any, that was specified to indicate which - * generator was requested - * @return ChunkGenerator for use in the default world generation - */ - public ChunkGenerator getDefaultWorldGenerator(String worldName, String id); - - /** - * Returns the plugin logger associated with this server's logger. The - * returned logger automatically tags all log messages with the plugin's - * name. - * - * @return Logger associated with this plugin - */ - public Logger getLogger(); - - /** - * Returns the name of the plugin. - *

            - * This should return the bare name of the plugin and should be used for - * comparison. - * - * @return name of the plugin - */ - public String getName(); -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginAwareness.java b/LiveWeather/src/org/bukkit/plugin/PluginAwareness.java deleted file mode 100755 index ddb47b7..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginAwareness.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.plugin; - -import java.util.Set; - -import org.bukkit.plugin.java.JavaPlugin; - -/** - * Represents a concept that a plugin is aware of. - *

            - * The internal representation may be singleton, or be a parameterized - * instance, but must be immutable. - */ -public interface PluginAwareness { - /** - * Each entry here represents a particular plugin's awareness. These can - * be checked by using {@link PluginDescriptionFile#getAwareness()}.{@link - * Set#contains(Object) contains(flag)}. - */ - public enum Flags implements PluginAwareness { - /** - * This specifies that all (text) resources stored in a plugin's jar - * use UTF-8 encoding. - * - * @see JavaPlugin#getTextResource(String) - */ - UTF8, - ; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginBase.java b/LiveWeather/src/org/bukkit/plugin/PluginBase.java deleted file mode 100755 index 6031af1..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginBase.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.bukkit.plugin; - -/** - * Represents a base {@link Plugin} - *

            - * Extend this class if your plugin is not a {@link - * org.bukkit.plugin.java.JavaPlugin} - */ -public abstract class PluginBase implements Plugin { - @Override - public final int hashCode() { - return getName().hashCode(); - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Plugin)) { - return false; - } - return getName().equals(((Plugin) obj).getName()); - } - - public final String getName() { - return getDescription().getName(); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginDescriptionFile.java b/LiveWeather/src/org/bukkit/plugin/PluginDescriptionFile.java deleted file mode 100755 index 0fd966c..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginDescriptionFile.java +++ /dev/null @@ -1,1110 +0,0 @@ -package org.bukkit.plugin; - -import java.io.InputStream; -import java.io.Reader; -import java.io.Writer; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.PluginCommand; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.permissions.Permissible; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.AbstractConstruct; -import org.yaml.snakeyaml.constructor.SafeConstructor; -import org.yaml.snakeyaml.nodes.Node; -import org.yaml.snakeyaml.nodes.Tag; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; - -/** - * This type is the runtime-container for the information in the plugin.yml. - * All plugins must have a respective plugin.yml. For plugins written in java - * using the standard plugin loader, this file must be in the root of the jar - * file. - *

            - * When Bukkit loads a plugin, it needs to know some basic information about - * it. It reads this information from a YAML file, 'plugin.yml'. This file - * consists of a set of attributes, each defined on a new line and with no - * indentation. - *

            - * Every (almost* every) method corresponds with a specific entry in the - * plugin.yml. These are the required entries for every plugin.yml: - *

              - *
            • {@link #getName()} - name - *
            • {@link #getVersion()} - version - *
            • {@link #getMain()} - main - *
            - *

            - * Failing to include any of these items will throw an exception and cause the - * server to ignore your plugin. - *

            - * This is a list of the possible yaml keys, with specific details included in - * the respective method documentations: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
            NodeMethodSummary
            name{@link #getName()}The unique name of plugin
            version{@link #getVersion()}A plugin revision identifier
            main{@link #getMain()}The plugin's initial class file
            author
            authors
            {@link #getAuthors()}The plugin contributors
            description{@link #getDescription()}Human readable plugin summary
            website{@link #getWebsite()}The URL to the plugin's site
            prefix{@link #getPrefix()}The token to prefix plugin log entries
            database{@link #isDatabaseEnabled()}Indicator to enable database support
            load{@link #getLoad()}The phase of server-startup this plugin will load during
            depend{@link #getDepend()}Other required plugins
            softdepend{@link #getSoftDepend()}Other plugins that add functionality
            loadbefore{@link #getLoadBefore()}The inverse softdepend
            commands{@link #getCommands()}The commands the plugin will register
            permissions{@link #getPermissions()}The permissions the plugin will register
            default-permission{@link #getPermissionDefault()}The default {@link Permission#getDefault() default} permission - * state for defined {@link #getPermissions() permissions} the plugin - * will register
            awareness{@link #getAwareness()}The concepts that the plugin acknowledges
            - *

            - * A plugin.yml example:

            - *name: Inferno
            - *version: 1.4.1
            - *description: This plugin is so 31337. You can set yourself on fire.
            - *# We could place every author in the authors list, but chose not to for illustrative purposes
            - *# Also, having an author distinguishes that person as the project lead, and ensures their
            - *# name is displayed first
            - *author: CaptainInflamo
            - *authors: [Cogito, verrier, EvilSeph]
            - *website: http://www.curse.com/server-mods/minecraft/myplugin
            - *
            - *main: com.captaininflamo.bukkit.inferno.Inferno
            - *database: false
            - *depend: [NewFire, FlameWire]
            - *
            - *commands:
            - *  flagrate:
            - *    description: Set yourself on fire.
            - *    aliases: [combust_me, combustMe]
            - *    permission: inferno.flagrate
            - *    usage: Syntax error! Simply type /<command> to ignite yourself.
            - *  burningdeaths:
            - *    description: List how many times you have died by fire.
            - *    aliases: [burning_deaths, burningDeaths]
            - *    permission: inferno.burningdeaths
            - *    usage: |
            - *      /<command> [player]
            - *      Example: /<command> - see how many times you have burned to death
            - *      Example: /<command> CaptainIce - see how many times CaptainIce has burned to death
            - *
            - *permissions:
            - *  inferno.*:
            - *    description: Gives access to all Inferno commands
            - *    children:
            - *      inferno.flagrate: true
            - *      inferno.burningdeaths: true
            - *      inferno.burningdeaths.others: true
            - *  inferno.flagrate:
            - *    description: Allows you to ignite yourself
            - *    default: true
            - *  inferno.burningdeaths:
            - *    description: Allows you to see how many times you have burned to death
            - *    default: true
            - *  inferno.burningdeaths.others:
            - *    description: Allows you to see how many times others have burned to death
            - *    default: op
            - *    children:
            - *      inferno.burningdeaths: true
            - *
            - */ -public final class PluginDescriptionFile { - private static final ThreadLocal YAML = new ThreadLocal() { - @Override - protected Yaml initialValue() { - return new Yaml(new SafeConstructor() { - { - yamlConstructors.put(null, new AbstractConstruct() { - @Override - public Object construct(final Node node) { - if (!node.getTag().startsWith("!@")) { - // Unknown tag - will fail - return SafeConstructor.undefinedConstructor.construct(node); - } - // Unknown awareness - provide a graceful substitution - return new PluginAwareness() { - @Override - public String toString() { - return node.toString(); - } - }; - } - }); - for (final PluginAwareness.Flags flag : PluginAwareness.Flags.values()) { - yamlConstructors.put(new Tag("!@" + flag.name()), new AbstractConstruct() { - @Override - public PluginAwareness.Flags construct(final Node node) { - return flag; - } - }); - } - } - }); - } - }; - String rawName = null; - private String name = null; - private String main = null; - private String classLoaderOf = null; - private List depend = ImmutableList.of(); - private List softDepend = ImmutableList.of(); - private List loadBefore = ImmutableList.of(); - private String version = null; - private Map> commands = null; - private String description = null; - private List authors = null; - private String website = null; - private String prefix = null; - private boolean database = false; - private PluginLoadOrder order = PluginLoadOrder.POSTWORLD; - private List permissions = null; - private Map lazyPermissions = null; - private PermissionDefault defaultPerm = PermissionDefault.OP; - private Set awareness = ImmutableSet.of(); - - public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException { - loadMap(asMap(YAML.get().load(stream))); - } - - /** - * Loads a PluginDescriptionFile from the specified reader - * - * @param reader The reader - * @throws InvalidDescriptionException If the PluginDescriptionFile is - * invalid - */ - public PluginDescriptionFile(final Reader reader) throws InvalidDescriptionException { - loadMap(asMap(YAML.get().load(reader))); - } - - /** - * Creates a new PluginDescriptionFile with the given detailed - * - * @param pluginName Name of this plugin - * @param pluginVersion Version of this plugin - * @param mainClass Full location of the main class of this plugin - */ - public PluginDescriptionFile(final String pluginName, final String pluginVersion, final String mainClass) { - name = pluginName.replace(' ', '_'); - version = pluginVersion; - main = mainClass; - } - - /** - * Gives the name of the plugin. This name is a unique identifier for - * plugins. - *
              - *
            • Must consist of all alphanumeric characters, underscores, hyphon, - * and period (a-z,A-Z,0-9, _.-). Any other character will cause the - * plugin.yml to fail loading. - *
            • Used to determine the name of the plugin's data folder. Data - * folders are placed in the ./plugins/ directory by default, but this - * behavior should not be relied on. {@link Plugin#getDataFolder()} - * should be used to reference the data folder. - *
            • It is good practice to name your jar the same as this, for example - * 'MyPlugin.jar'. - *
            • Case sensitive. - *
            • The is the token referenced in {@link #getDepend()}, {@link - * #getSoftDepend()}, and {@link #getLoadBefore()}. - *
            • Using spaces in the plugin's name is deprecated. - *
            - *

            - * In the plugin.yml, this entry is named name. - *

            - * Example:

            name: MyPlugin
            - * - * @return the name of the plugin - */ - public String getName() { - return name; - } - - /** - * Gives the version of the plugin. - *
              - *
            • Version is an arbitrary string, however the most common format is - * MajorRelease.MinorRelease.Build (eg: 1.4.1). - *
            • Typically you will increment this every time you release a new - * feature or bug fix. - *
            • Displayed when a user types /version PluginName - *
            - *

            - * In the plugin.yml, this entry is named version. - *

            - * Example:

            version: 1.4.1
            - * - * @return the version of the plugin - */ - public String getVersion() { - return version; - } - - /** - * Gives the fully qualified name of the main class for a plugin. The - * format should follow the {@link ClassLoader#loadClass(String)} syntax - * to successfully be resolved at runtime. For most plugins, this is the - * class that extends {@link JavaPlugin}. - *
              - *
            • This must contain the full namespace including the class file - * itself. - *
            • If your namespace is org.bukkit.plugin, and your class - * file is called MyPlugin then this must be - * org.bukkit.plugin.MyPlugin - *
            • No plugin can use org.bukkit. as a base package for - * any class, including the main class. - *
            - *

            - * In the plugin.yml, this entry is named main. - *

            - * Example: - *

            main: org.bukkit.plugin.MyPlugin
            - * - * @return the fully qualified main class for the plugin - */ - public String getMain() { - return main; - } - - /** - * Gives a human-friendly description of the functionality the plugin - * provides. - *
              - *
            • The description can have multiple lines. - *
            • Displayed when a user types /version PluginName - *
            - *

            - * In the plugin.yml, this entry is named description. - *

            - * Example: - *

            description: This plugin is so 31337. You can set yourself on fire.
            - * - * @return description of this plugin, or null if not specified - */ - public String getDescription() { - return description; - } - - /** - * Gives the phase of server startup that the plugin should be loaded. - *
              - *
            • Possible values are in {@link PluginLoadOrder}. - *
            • Defaults to {@link PluginLoadOrder#POSTWORLD}. - *
            • Certain caveats apply to each phase. - *
            • When different, {@link #getDepend()}, {@link #getSoftDepend()}, and - * {@link #getLoadBefore()} become relative in order loaded per-phase. - * If a plugin loads at STARTUP, but a dependency loads - * at POSTWORLD, the dependency will not be loaded before - * the plugin is loaded. - *
            - *

            - * In the plugin.yml, this entry is named load. - *

            - * Example:

            load: STARTUP
            - * - * @return the phase when the plugin should be loaded - */ - public PluginLoadOrder getLoad() { - return order; - } - - /** - * Gives the list of authors for the plugin. - *
              - *
            • Gives credit to the developer. - *
            • Used in some server error messages to provide helpful feedback on - * who to contact when an error occurs. - *
            • A bukkit.org forum handle or email address is recommended. - *
            • Is displayed when a user types /version PluginName - *
            • authors must be in YAML list - * format. - *
            - *

            - * In the plugin.yml, this has two entries, author and - * authors. - *

            - * Single author example: - *

            author: CaptainInflamo
            - * Multiple author example: - *
            authors: [Cogito, verrier, EvilSeph]
            - * When both are specified, author will be the first entry in the list, so - * this example: - *
            author: Grum
            -     *authors:
            -     *- feildmaster
            -     *- amaranth
            - * Is equivilant to this example: - *
            authors: [Grum, feildmaster, aramanth]
            - * - * @return an immutable list of the plugin's authors - */ - public List getAuthors() { - return authors; - } - - /** - * Gives the plugin's or plugin's author's website. - *
              - *
            • A link to the Curse page that includes documentation and downloads - * is highly recommended. - *
            • Displayed when a user types /version PluginName - *
            - *

            - * In the plugin.yml, this entry is named website. - *

            - * Example: - *

            website: http://www.curse.com/server-mods/minecraft/myplugin
            - * - * @return description of this plugin, or null if not specified - */ - public String getWebsite() { - return website; - } - - /** - * Gives if the plugin uses a database. - *
              - *
            • Using a database is non-trivial. - *
            • Valid values include true and false - *
            - *

            - * In the plugin.yml, this entry is named database. - *

            - * Example: - *

            database: false
            - * - * @return if this plugin requires a database - * @see Plugin#getDatabase() - */ - public boolean isDatabaseEnabled() { - return database; - } - - /** - * Gives a list of other plugins that the plugin requires. - *
              - *
            • Use the value in the {@link #getName()} of the target plugin to - * specify the dependency. - *
            • If any plugin listed here is not found, your plugin will fail to - * load at startup. - *
            • If multiple plugins list each other in depend, - * creating a network with no individual plugin does not list another - * plugin in the network, - * all plugins in that network will fail. - *
            • depend must be in must be in YAML list - * format. - *
            - *

            - * In the plugin.yml, this entry is named depend. - *

            - * Example: - *

            depend:
            -     *- OnePlugin
            -     *- AnotherPlugin
            - * - * @return immutable list of the plugin's dependencies - */ - public List getDepend() { - return depend; - } - - /** - * Gives a list of other plugins that the plugin requires for full - * functionality. The {@link PluginManager} will make best effort to treat - * all entries here as if they were a {@link #getDepend() dependency}, but - * will never fail because of one of these entries. - *
              - *
            • Use the value in the {@link #getName()} of the target plugin to - * specify the dependency. - *
            • When an unresolvable plugin is listed, it will be ignored and does - * not affect load order. - *
            • When a circular dependency occurs (a network of plugins depending - * or soft-dependending each other), it will arbitrarily choose a - * plugin that can be resolved when ignoring soft-dependencies. - *
            • softdepend must be in YAML list - * format. - *
            - *

            - * In the plugin.yml, this entry is named softdepend. - *

            - * Example: - *

            softdepend: [OnePlugin, AnotherPlugin]
            - * - * @return immutable list of the plugin's preferred dependencies - */ - public List getSoftDepend() { - return softDepend; - } - - /** - * Gets the list of plugins that should consider this plugin a - * soft-dependency. - *
              - *
            • Use the value in the {@link #getName()} of the target plugin to - * specify the dependency. - *
            • The plugin should load before any other plugins listed here. - *
            • Specifying another plugin here is strictly equivalent to having the - * specified plugin's {@link #getSoftDepend()} include {@link - * #getName() this plugin}. - *
            • loadbefore must be in YAML list - * format. - *
            - *

            - * In the plugin.yml, this entry is named loadbefore. - *

            - * Example: - *

            loadbefore:
            -     *- OnePlugin
            -     *- AnotherPlugin
            - * - * @return immutable list of plugins that should consider this plugin a - * soft-dependency - */ - public List getLoadBefore() { - return loadBefore; - } - - /** - * Gives the token to prefix plugin-specific logging messages with. - *
              - *
            • This includes all messages using {@link Plugin#getLogger()}. - *
            • If not specified, the server uses the plugin's {@link #getName() - * name}. - *
            • This should clearly indicate what plugin is being logged. - *
            - *

            - * In the plugin.yml, this entry is named prefix. - *

            - * Example:

            prefix: ex-why-zee
            - * - * @return the prefixed logging token, or null if not specified - */ - public String getPrefix() { - return prefix; - } - - /** - * Gives the map of command-name to command-properties. Each entry in this - * map corresponds to a single command and the respective values are the - * properties of the command. Each property, with the exception of - * aliases, can be defined at runtime using methods in {@link - * PluginCommand} and are defined here only as a convenience. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
            NodeMethodTypeDescriptionExample
            description{@link PluginCommand#setDescription(String)}StringA user-friendly description for a command. It is useful for - * documentation purposes as well as in-game help.
            description: Set yourself on fire
            aliases{@link PluginCommand#setAliases(List)}String or List of - * stringsAlternative command names, with special usefulness for commands - * that are already registered. Aliases are not effective when - * defined at runtime, so the plugin description file is the - * only way to have them properly defined. - *

            - * Note: Command aliases may not have a colon in them.

            Single alias format: - *
            aliases: combust_me
            or - * multiple alias format: - *
            aliases: [combust_me, combustMe]
            permission{@link PluginCommand#setPermission(String)}StringThe name of the {@link Permission} required to use the command. - * A user without the permission will receive the specified - * message (see {@linkplain - * PluginCommand#setPermissionMessage(String) below}), or a - * standard one if no specific message is defined. Without the - * permission node, no {@link - * PluginCommand#setExecutor(CommandExecutor) CommandExecutor} or - * {@link PluginCommand#setTabCompleter(TabCompleter) - * TabCompleter} will be called.
            permission: inferno.flagrate
            permission-message{@link PluginCommand#setPermissionMessage(String)}String
              - *
            • Displayed to a player that attempts to use a command, but - * does not have the required permission. See {@link - * PluginCommand#getPermission() above}. - *
            • <permission> is a macro that is replaced with the - * permission node required to use the command. - *
            • Using empty quotes is a valid way to indicate nothing - * should be displayed to a player. - *
            permission-message: You do not have /<permission>
            usage{@link PluginCommand#setUsage(String)}StringThis message is displayed to a player when the {@link - * PluginCommand#setExecutor(CommandExecutor)} {@linkplain - * CommandExecutor#onCommand(CommandSender,Command,String,String[]) - * returns false}. <command> is a macro that is replaced - * the command issued.
            usage: Syntax error! Perhaps you meant /<command> PlayerName?
            - * It is worth noting that to use a colon in a yaml, like - * `usage: Usage: /god [player]', you need to - * surround - * the message with double-quote: - *
            usage: "Usage: /god [player]"
            - * The commands are structured as a hiearchy of nested mappings. - * The primary (top-level, no intendentation) node is - * `commands', while each individual command name is - * indented, indicating it maps to some value (in our case, the - * properties of the table above). - *

            - * Here is an example bringing together the piecemeal examples above, as - * well as few more definitions:

            -     *commands:
            -     *  flagrate:
            -     *    description: Set yourself on fire.
            -     *    aliases: [combust_me, combustMe]
            -     *    permission: inferno.flagrate
            -     *    permission-message: You do not have /<permission>
            -     *    usage: Syntax error! Perhaps you meant /<command> PlayerName?
            -     *  burningdeaths:
            -     *    description: List how many times you have died by fire.
            -     *    aliases:
            -     *    - burning_deaths
            -     *    - burningDeaths
            -     *    permission: inferno.burningdeaths
            -     *    usage: |
            -     *      /<command> [player]
            -     *      Example: /<command> - see how many times you have burned to death
            -     *      Example: /<command> CaptainIce - see how many times CaptainIce has burned to death
            -     *  # The next command has no description, aliases, etc. defined, but is still valid
            -     *  # Having an empty declaration is useful for defining the description, permission, and messages from a configuration dynamically
            -     *  apocalypse:
            -     *
            - * Note: Command names may not have a colon in their name. - * - * @return the commands this plugin will register - */ - public Map> getCommands() { - return commands; - } - - /** - * Gives the list of permissions the plugin will register at runtime, - * immediately proceding enabling. The format for defining permissions is - * a map from permission name to properties. To represent a map without - * any specific property, empty curly-braces ( - * {} ) may be used (as a null value is not - * accepted, unlike the {@link #getCommands() commands} above). - *

            - * A list of optional properties for permissions: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
            NodeDescriptionExample
            descriptionPlaintext (user-friendly) description of what the permission - * is for.
            description: Allows you to set yourself on fire
            defaultThe default state for the permission, as defined by {@link - * Permission#getDefault()}. If not defined, it will be set to - * the value of {@link PluginDescriptionFile#getPermissionDefault()}. - *

            - * For reference:

              - *
            • true - Represents a positive assignment to - * {@link Permissible permissibles}. - *
            • false - Represents no assignment to {@link - * Permissible permissibles}. - *
            • op - Represents a positive assignment to - * {@link Permissible#isOp() operator permissibles}. - *
            • notop - Represents a positive assignment to - * {@link Permissible#isOp() non-operator permissibiles}. - *
            default: true
            childrenAllows other permissions to be set as a {@linkplain - * Permission#getChildren() relation} to the parent permission. - * When a parent permissions is assigned, child permissions are - * respectively assigned as well. - *
              - *
            • When a parent permission is assigned negatively, child - * permissions are assigned based on an inversion of their - * association. - *
            • When a parent permission is assigned positively, child - * permissions are assigned based on their association. - *
            - *

            - * Child permissions may be defined in a number of ways:

              - *
            • Children may be defined as a list of - * names. Using a list will treat all children associated - * positively to their parent. - *
            • Children may be defined as a map. Each permission name maps - * to either a boolean (representing the association), or a - * nested permission definition (just as another permission). - * Using a nested definition treats the child as a positive - * association. - *
            • A nested permission definition must be a map of these same - * properties. To define a valid nested permission without - * defining any specific property, empty curly-braces ( - * {} ) must be used. - *
            • A nested permission may carry it's own nested permissions - * as children, as they may also have nested permissions, and - * so forth. There is no direct limit to how deep the - * permission tree is defined. - *
            As a list: - *
            children: [inferno.flagrate, inferno.burningdeaths]
            - * Or as a mapping: - *
            children:
            -     *  inferno.flagrate: true
            -     *  inferno.burningdeaths: true
            - * An additional example showing basic nested values can be seen - * here. - *
            - * The permissions are structured as a hiearchy of nested mappings. - * The primary (top-level, no intendentation) node is - * `permissions', while each individual permission name is - * indented, indicating it maps to some value (in our case, the - * properties of the table above). - *

            - * Here is an example using some of the properties:

            -     *permissions:
            -     *  inferno.*:
            -     *    description: Gives access to all Inferno commands
            -     *    children:
            -     *      inferno.flagrate: true
            -     *      inferno.burningdeaths: true
            -     *  inferno.flagate:
            -     *    description: Allows you to ignite yourself
            -     *    default: true
            -     *  inferno.burningdeaths:
            -     *    description: Allows you to see how many times you have burned to death
            -     *    default: true
            -     *
            - * Another example, with nested definitions, can be found here. - */ - public List getPermissions() { - if (permissions == null) { - if (lazyPermissions == null) { - permissions = ImmutableList.of(); - } else { - permissions = ImmutableList.copyOf(Permission.loadPermissions(lazyPermissions, "Permission node '%s' in plugin description file for " + getFullName() + " is invalid", defaultPerm)); - lazyPermissions = null; - } - } - return permissions; - } - - /** - * Gives the default {@link Permission#getDefault() default} state of - * {@link #getPermissions() permissions} registered for the plugin. - *
              - *
            • If not specified, it will be {@link PermissionDefault#OP}. - *
            • It is matched using {@link PermissionDefault#getByName(String)} - *
            • It only affects permissions that do not define the - * default node. - *
            • It may be any value in {@link PermissionDefault}. - *
            - *

            - * In the plugin.yml, this entry is named default-permission. - *

            - * Example:

            default-permission: NOT_OP
            - * - * @return the default value for the plugin's permissions - */ - public PermissionDefault getPermissionDefault() { - return defaultPerm; - } - - /** - * Gives a set of every {@link PluginAwareness} for a plugin. An awareness - * dictates something that a plugin developer acknowledges when the plugin - * is compiled. Some implementions may define extra awarenesses that are - * not included in the API. Any unrecognized - * awareness (one unsupported or in a future version) will cause a dummy - * object to be created instead of failing. - *

            - *

              - *
            • Currently only supports the enumerated values in {@link - * PluginAwareness.Flags}. - *
            • Each awareness starts the identifier with bang-at - * (!@). - *
            • Unrecognized (future / unimplemented) entries are quietly replaced - * by a generic object that implements PluginAwareness. - *
            • A type of awareness must be defined by the runtime and acknowledged - * by the API, effectively discluding any derived type from any - * plugin's classpath. - *
            • awareness must be in YAML list - * format. - *
            - *

            - * In the plugin.yml, this entry is named awareness. - *

            - * Example:

            awareness:
            -     *- !@UTF8
            - *

            - * Note: Although unknown versions of some future awareness are - * gracefully substituted, previous versions of Bukkit (ones prior to the - * first implementation of awareness) will fail to load a plugin that - * defines any awareness. - * - * @return a set containing every awareness for the plugin - */ - public Set getAwareness() { - return awareness; - } - - /** - * Returns the name of a plugin, including the version. This method is - * provided for convenience; it uses the {@link #getName()} and {@link - * #getVersion()} entries. - * - * @return a descriptive name of the plugin and respective version - */ - public String getFullName() { - return name + " v" + version; - } - - /** - * @deprecated unused - */ - @Deprecated - public String getClassLoaderOf() { - return classLoaderOf; - } - - public void setDatabaseEnabled(boolean database) { - this.database = database; - } - - /** - * Saves this PluginDescriptionFile to the given writer - * - * @param writer Writer to output this file to - */ - public void save(Writer writer) { - YAML.get().dump(saveMap(), writer); - } - - private void loadMap(Map map) throws InvalidDescriptionException { - try { - name = rawName = map.get("name").toString(); - - if (!name.matches("^[A-Za-z0-9 _.-]+$")) { - throw new InvalidDescriptionException("name '" + name + "' contains invalid characters."); - } - name = name.replace(' ', '_'); - } catch (NullPointerException ex) { - throw new InvalidDescriptionException(ex, "name is not defined"); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "name is of wrong type"); - } - - try { - version = map.get("version").toString(); - } catch (NullPointerException ex) { - throw new InvalidDescriptionException(ex, "version is not defined"); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "version is of wrong type"); - } - - try { - main = map.get("main").toString(); - if (main.startsWith("org.bukkit.")) { - throw new InvalidDescriptionException("main may not be within the org.bukkit namespace"); - } - } catch (NullPointerException ex) { - throw new InvalidDescriptionException(ex, "main is not defined"); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "main is of wrong type"); - } - - if (map.get("commands") != null) { - ImmutableMap.Builder> commandsBuilder = ImmutableMap.>builder(); - try { - for (Map.Entry command : ((Map) map.get("commands")).entrySet()) { - ImmutableMap.Builder commandBuilder = ImmutableMap.builder(); - if (command.getValue() != null) { - for (Map.Entry commandEntry : ((Map) command.getValue()).entrySet()) { - if (commandEntry.getValue() instanceof Iterable) { - // This prevents internal alias list changes - ImmutableList.Builder commandSubList = ImmutableList.builder(); - for (Object commandSubListItem : (Iterable) commandEntry.getValue()) { - if (commandSubListItem != null) { - commandSubList.add(commandSubListItem); - } - } - commandBuilder.put(commandEntry.getKey().toString(), commandSubList.build()); - } else if (commandEntry.getValue() != null) { - commandBuilder.put(commandEntry.getKey().toString(), commandEntry.getValue()); - } - } - } - commandsBuilder.put(command.getKey().toString(), commandBuilder.build()); - } - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "commands are of wrong type"); - } - commands = commandsBuilder.build(); - } - - if (map.get("class-loader-of") != null) { - classLoaderOf = map.get("class-loader-of").toString(); - } - - depend = makePluginNameList(map, "depend"); - softDepend = makePluginNameList(map, "softdepend"); - loadBefore = makePluginNameList(map, "loadbefore"); - - if (map.get("database") != null) { - try { - database = (Boolean) map.get("database"); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "database is of wrong type"); - } - } - - if (map.get("website") != null) { - website = map.get("website").toString(); - } - - if (map.get("description") != null) { - description = map.get("description").toString(); - } - - if (map.get("load") != null) { - try { - order = PluginLoadOrder.valueOf(((String) map.get("load")).toUpperCase().replaceAll("\\W", "")); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "load is of wrong type"); - } catch (IllegalArgumentException ex) { - throw new InvalidDescriptionException(ex, "load is not a valid choice"); - } - } - - if (map.get("authors") != null) { - ImmutableList.Builder authorsBuilder = ImmutableList.builder(); - if (map.get("author") != null) { - authorsBuilder.add(map.get("author").toString()); - } - try { - for (Object o : (Iterable) map.get("authors")) { - authorsBuilder.add(o.toString()); - } - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "authors are of wrong type"); - } catch (NullPointerException ex) { - throw new InvalidDescriptionException(ex, "authors are improperly defined"); - } - authors = authorsBuilder.build(); - } else if (map.get("author") != null) { - authors = ImmutableList.of(map.get("author").toString()); - } else { - authors = ImmutableList.of(); - } - - if (map.get("default-permission") != null) { - try { - defaultPerm = PermissionDefault.getByName(map.get("default-permission").toString()); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "default-permission is of wrong type"); - } catch (IllegalArgumentException ex) { - throw new InvalidDescriptionException(ex, "default-permission is not a valid choice"); - } - } - - if (map.get("awareness") instanceof Iterable) { - Set awareness = new HashSet(); - try { - for (Object o : (Iterable) map.get("awareness")) { - awareness.add((PluginAwareness) o); - } - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "awareness has wrong type"); - } - this.awareness = ImmutableSet.copyOf(awareness); - } - - try { - lazyPermissions = (Map) map.get("permissions"); - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, "permissions are of the wrong type"); - } - - if (map.get("prefix") != null) { - prefix = map.get("prefix").toString(); - } - } - - private static List makePluginNameList(final Map map, final String key) throws InvalidDescriptionException { - final Object value = map.get(key); - if (value == null) { - return ImmutableList.of(); - } - - final ImmutableList.Builder builder = ImmutableList.builder(); - try { - for (final Object entry : (Iterable) value) { - builder.add(entry.toString().replace(' ', '_')); - } - } catch (ClassCastException ex) { - throw new InvalidDescriptionException(ex, key + " is of wrong type"); - } catch (NullPointerException ex) { - throw new InvalidDescriptionException(ex, "invalid " + key + " format"); - } - return builder.build(); - } - - private Map saveMap() { - Map map = new HashMap(); - - map.put("name", name); - map.put("main", main); - map.put("version", version); - map.put("database", database); - map.put("order", order.toString()); - map.put("default-permission", defaultPerm.toString()); - - if (commands != null) { - map.put("command", commands); - } - if (depend != null) { - map.put("depend", depend); - } - if (softDepend != null) { - map.put("softdepend", softDepend); - } - if (website != null) { - map.put("website", website); - } - if (description != null) { - map.put("description", description); - } - - if (authors.size() == 1) { - map.put("author", authors.get(0)); - } else if (authors.size() > 1) { - map.put("authors", authors); - } - - if (classLoaderOf != null) { - map.put("class-loader-of", classLoaderOf); - } - - if (prefix != null) { - map.put("prefix", prefix); - } - - return map; - } - - private Map asMap(Object object) throws InvalidDescriptionException { - if (object instanceof Map) { - return (Map) object; - } - throw new InvalidDescriptionException(object + " is not properly structured."); - } - - /** - * @deprecated Internal use - */ - @Deprecated - public String getRawName() { - return rawName; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginLoadOrder.java b/LiveWeather/src/org/bukkit/plugin/PluginLoadOrder.java deleted file mode 100755 index b77436f..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginLoadOrder.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit.plugin; - -/** - * Represents the order in which a plugin should be initialized and enabled - */ -public enum PluginLoadOrder { - - /** - * Indicates that the plugin will be loaded at startup - */ - STARTUP, - /** - * Indicates that the plugin will be loaded after the first/default world - * was created - */ - POSTWORLD -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginLoader.java b/LiveWeather/src/org/bukkit/plugin/PluginLoader.java deleted file mode 100755 index e7981a1..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginLoader.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bukkit.plugin; - -import java.io.File; -import java.util.Map; -import java.util.Set; -import java.util.regex.Pattern; - -import org.bukkit.event.Event; -import org.bukkit.event.Listener; - -/** - * Represents a plugin loader, which handles direct access to specific types - * of plugins - */ -public interface PluginLoader { - - /** - * Loads the plugin contained in the specified file - * - * @param file File to attempt to load - * @return Plugin that was contained in the specified file, or null if - * unsuccessful - * @throws InvalidPluginException Thrown when the specified file is not a - * plugin - * @throws UnknownDependencyException If a required dependency could not - * be found - */ - public Plugin loadPlugin(File file) throws InvalidPluginException, UnknownDependencyException; - - /** - * Loads a PluginDescriptionFile from the specified file - * - * @param file File to attempt to load from - * @return A new PluginDescriptionFile loaded from the plugin.yml in the - * specified file - * @throws InvalidDescriptionException If the plugin description file - * could not be created - */ - public PluginDescriptionFile getPluginDescription(File file) throws InvalidDescriptionException; - - /** - * Returns a list of all filename filters expected by this PluginLoader - * - * @return The filters - */ - public Pattern[] getPluginFileFilters(); - - /** - * Creates and returns registered listeners for the event classes used in - * this listener - * - * @param listener The object that will handle the eventual call back - * @param plugin The plugin to use when creating registered listeners - * @return The registered listeners. - */ - public Map, Set> createRegisteredListeners(Listener listener, Plugin plugin); - - /** - * Enables the specified plugin - *

            - * Attempting to enable a plugin that is already enabled will have no - * effect - * - * @param plugin Plugin to enable - */ - public void enablePlugin(Plugin plugin); - - /** - * Disables the specified plugin - *

            - * Attempting to disable a plugin that is not enabled will have no effect - * - * @param plugin Plugin to disable - */ - public void disablePlugin(Plugin plugin); -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginLogger.java b/LiveWeather/src/org/bukkit/plugin/PluginLogger.java deleted file mode 100755 index f43c10b..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginLogger.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bukkit.plugin; - -import java.util.logging.Level; -import java.util.logging.LogRecord; -import java.util.logging.Logger; - -/** - * The PluginLogger class is a modified {@link Logger} that prepends all - * logging calls with the name of the plugin doing the logging. The API for - * PluginLogger is exactly the same as {@link Logger}. - * - * @see Logger - */ -public class PluginLogger extends Logger { - private String pluginName; - - /** - * Creates a new PluginLogger that extracts the name from a plugin. - * - * @param context A reference to the plugin - */ - public PluginLogger(Plugin context) { - super(context.getClass().getCanonicalName(), null); - String prefix = context.getDescription().getPrefix(); - pluginName = prefix != null ? new StringBuilder().append("[").append(prefix).append("] ").toString() : "[" + context.getDescription().getName() + "] "; - setParent(context.getServer().getLogger()); - setLevel(Level.ALL); - } - - @Override - public void log(LogRecord logRecord) { - logRecord.setMessage(pluginName + logRecord.getMessage()); - super.log(logRecord); - } - -} diff --git a/LiveWeather/src/org/bukkit/plugin/PluginManager.java b/LiveWeather/src/org/bukkit/plugin/PluginManager.java deleted file mode 100755 index e5638d5..0000000 --- a/LiveWeather/src/org/bukkit/plugin/PluginManager.java +++ /dev/null @@ -1,294 +0,0 @@ -package org.bukkit.plugin; - -import java.io.File; -import java.util.Set; - -import org.bukkit.event.Event; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.permissions.Permissible; -import org.bukkit.permissions.Permission; - -/** - * Handles all plugin management from the Server - */ -public interface PluginManager { - - /** - * Registers the specified plugin loader - * - * @param loader Class name of the PluginLoader to register - * @throws IllegalArgumentException Thrown when the given Class is not a - * valid PluginLoader - */ - public void registerInterface(Class loader) throws IllegalArgumentException; - - /** - * Checks if the given plugin is loaded and returns it when applicable - *

            - * Please note that the name of the plugin is case-sensitive - * - * @param name Name of the plugin to check - * @return Plugin if it exists, otherwise null - */ - public Plugin getPlugin(String name); - - /** - * Gets a list of all currently loaded plugins - * - * @return Array of Plugins - */ - public Plugin[] getPlugins(); - - /** - * Checks if the given plugin is enabled or not - *

            - * Please note that the name of the plugin is case-sensitive. - * - * @param name Name of the plugin to check - * @return true if the plugin is enabled, otherwise false - */ - public boolean isPluginEnabled(String name); - - /** - * Checks if the given plugin is enabled or not - * - * @param plugin Plugin to check - * @return true if the plugin is enabled, otherwise false - */ - public boolean isPluginEnabled(Plugin plugin); - - /** - * Loads the plugin in the specified file - *

            - * File must be valid according to the current enabled Plugin interfaces - * - * @param file File containing the plugin to load - * @return The Plugin loaded, or null if it was invalid - * @throws InvalidPluginException Thrown when the specified file is not a - * valid plugin - * @throws InvalidDescriptionException Thrown when the specified file - * contains an invalid description - * @throws UnknownDependencyException If a required dependency could not - * be resolved - */ - public Plugin loadPlugin(File file) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException; - - /** - * Loads the plugins contained within the specified directory - * - * @param directory Directory to check for plugins - * @return A list of all plugins loaded - */ - public Plugin[] loadPlugins(File directory); - - /** - * Disables all the loaded plugins - */ - public void disablePlugins(); - - /** - * Disables and removes all plugins - */ - public void clearPlugins(); - - /** - * Calls an event with the given details - * - * @param event Event details - * @throws IllegalStateException Thrown when an asynchronous event is - * fired from synchronous code. - *

            - * Note: This is best-effort basis, and should not be used to test - * synchronized state. This is an indicator for flawed flow logic. - */ - public void callEvent(Event event) throws IllegalStateException; - - /** - * Registers all the events in the given listener class - * - * @param listener Listener to register - * @param plugin Plugin to register - */ - public void registerEvents(Listener listener, Plugin plugin); - - /** - * Registers the specified executor to the given event class - * - * @param event Event type to register - * @param listener Listener to register - * @param priority Priority to register this event at - * @param executor EventExecutor to register - * @param plugin Plugin to register - */ - public void registerEvent(Class event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin); - - /** - * Registers the specified executor to the given event class - * - * @param event Event type to register - * @param listener Listener to register - * @param priority Priority to register this event at - * @param executor EventExecutor to register - * @param plugin Plugin to register - * @param ignoreCancelled Whether to pass cancelled events or not - */ - public void registerEvent(Class event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin, boolean ignoreCancelled); - - /** - * Enables the specified plugin - *

            - * Attempting to enable a plugin that is already enabled will have no - * effect - * - * @param plugin Plugin to enable - */ - public void enablePlugin(Plugin plugin); - - /** - * Disables the specified plugin - *

            - * Attempting to disable a plugin that is not enabled will have no effect - * - * @param plugin Plugin to disable - */ - public void disablePlugin(Plugin plugin); - - /** - * Gets a {@link Permission} from its fully qualified name - * - * @param name Name of the permission - * @return Permission, or null if none - */ - public Permission getPermission(String name); - - /** - * Adds a {@link Permission} to this plugin manager. - *

            - * If a permission is already defined with the given name of the new - * permission, an exception will be thrown. - * - * @param perm Permission to add - * @throws IllegalArgumentException Thrown when a permission with the same - * name already exists - */ - public void addPermission(Permission perm); - - /** - * Removes a {@link Permission} registration from this plugin manager. - *

            - * If the specified permission does not exist in this plugin manager, - * nothing will happen. - *

            - * Removing a permission registration will not remove the - * permission from any {@link Permissible}s that have it. - * - * @param perm Permission to remove - */ - public void removePermission(Permission perm); - - /** - * Removes a {@link Permission} registration from this plugin manager. - *

            - * If the specified permission does not exist in this plugin manager, - * nothing will happen. - *

            - * Removing a permission registration will not remove the - * permission from any {@link Permissible}s that have it. - * - * @param name Permission to remove - */ - public void removePermission(String name); - - /** - * Gets the default permissions for the given op status - * - * @param op Which set of default permissions to get - * @return The default permissions - */ - public Set getDefaultPermissions(boolean op); - - /** - * Recalculates the defaults for the given {@link Permission}. - *

            - * This will have no effect if the specified permission is not registered - * here. - * - * @param perm Permission to recalculate - */ - public void recalculatePermissionDefaults(Permission perm); - - /** - * Subscribes the given Permissible for information about the requested - * Permission, by name. - *

            - * If the specified Permission changes in any form, the Permissible will - * be asked to recalculate. - * - * @param permission Permission to subscribe to - * @param permissible Permissible subscribing - */ - public void subscribeToPermission(String permission, Permissible permissible); - - /** - * Unsubscribes the given Permissible for information about the requested - * Permission, by name. - * - * @param permission Permission to unsubscribe from - * @param permissible Permissible subscribing - */ - public void unsubscribeFromPermission(String permission, Permissible permissible); - - /** - * Gets a set containing all subscribed {@link Permissible}s to the given - * permission, by name - * - * @param permission Permission to query for - * @return Set containing all subscribed permissions - */ - public Set getPermissionSubscriptions(String permission); - - /** - * Subscribes to the given Default permissions by operator status - *

            - * If the specified defaults change in any form, the Permissible will be - * asked to recalculate. - * - * @param op Default list to subscribe to - * @param permissible Permissible subscribing - */ - public void subscribeToDefaultPerms(boolean op, Permissible permissible); - - /** - * Unsubscribes from the given Default permissions by operator status - * - * @param op Default list to unsubscribe from - * @param permissible Permissible subscribing - */ - public void unsubscribeFromDefaultPerms(boolean op, Permissible permissible); - - /** - * Gets a set containing all subscribed {@link Permissible}s to the given - * default list, by op status - * - * @param op Default list to query for - * @return Set containing all subscribed permissions - */ - public Set getDefaultPermSubscriptions(boolean op); - - /** - * Gets a set of all registered permissions. - *

            - * This set is a copy and will not be modified live. - * - * @return Set containing all current registered permissions - */ - public Set getPermissions(); - - /** - * Returns whether or not timing code should be used for event calls - * - * @return True if event timings are to be used - */ - public boolean useTimings(); -} diff --git a/LiveWeather/src/org/bukkit/plugin/RegisteredListener.java b/LiveWeather/src/org/bukkit/plugin/RegisteredListener.java deleted file mode 100755 index 9dd0b7a..0000000 --- a/LiveWeather/src/org/bukkit/plugin/RegisteredListener.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bukkit.plugin; - -import org.bukkit.event.*; - -/** - * Stores relevant information for plugin listeners - */ -public class RegisteredListener { - private final Listener listener; - private final EventPriority priority; - private final Plugin plugin; - private final EventExecutor executor; - private final boolean ignoreCancelled; - - public RegisteredListener(final Listener listener, final EventExecutor executor, final EventPriority priority, final Plugin plugin, final boolean ignoreCancelled) { - this.listener = listener; - this.priority = priority; - this.plugin = plugin; - this.executor = executor; - this.ignoreCancelled = ignoreCancelled; - } - - /** - * Gets the listener for this registration - * - * @return Registered Listener - */ - public Listener getListener() { - return listener; - } - - /** - * Gets the plugin for this registration - * - * @return Registered Plugin - */ - public Plugin getPlugin() { - return plugin; - } - - /** - * Gets the priority for this registration - * - * @return Registered Priority - */ - public EventPriority getPriority() { - return priority; - } - - /** - * Calls the event executor - * - * @param event The event - * @throws EventException If an event handler throws an exception. - */ - public void callEvent(final Event event) throws EventException { - if (event instanceof Cancellable){ - if (((Cancellable) event).isCancelled() && isIgnoringCancelled()){ - return; - } - } - executor.execute(listener, event); - } - - /** - * Whether this listener accepts cancelled events - * - * @return True when ignoring cancelled events - */ - public boolean isIgnoringCancelled() { - return ignoreCancelled; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/RegisteredServiceProvider.java b/LiveWeather/src/org/bukkit/plugin/RegisteredServiceProvider.java deleted file mode 100755 index ba3ff15..0000000 --- a/LiveWeather/src/org/bukkit/plugin/RegisteredServiceProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.plugin; - -/** - * A registered service provider. - * - * @param Service - */ -public class RegisteredServiceProvider implements Comparable> { - - private Class service; - private Plugin plugin; - private T provider; - private ServicePriority priority; - - public RegisteredServiceProvider(Class service, T provider, ServicePriority priority, Plugin plugin) { - - this.service = service; - this.plugin = plugin; - this.provider = provider; - this.priority = priority; - } - - public Class getService() { - return service; - } - - public Plugin getPlugin() { - return plugin; - } - - public T getProvider() { - return provider; - } - - public ServicePriority getPriority() { - return priority; - } - - public int compareTo(RegisteredServiceProvider other) { - if (priority.ordinal() == other.getPriority().ordinal()) { - return 0; - } else { - return priority.ordinal() < other.getPriority().ordinal() ? 1 : -1; - } - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/ServicePriority.java b/LiveWeather/src/org/bukkit/plugin/ServicePriority.java deleted file mode 100755 index 4afe0fb..0000000 --- a/LiveWeather/src/org/bukkit/plugin/ServicePriority.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bukkit.plugin; - -/** - * Represents various priorities of a provider. - */ -public enum ServicePriority { - Lowest, - Low, - Normal, - High, - Highest -} diff --git a/LiveWeather/src/org/bukkit/plugin/ServicesManager.java b/LiveWeather/src/org/bukkit/plugin/ServicesManager.java deleted file mode 100755 index 5d45ffb..0000000 --- a/LiveWeather/src/org/bukkit/plugin/ServicesManager.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bukkit.plugin; - -import java.util.Collection; -import java.util.List; - -/** - * Manages services and service providers. Services are an interface - * specifying a list of methods that a provider must implement. Providers are - * implementations of these services. A provider can be queried from the - * services manager in order to use a service (if one is available). If - * multiple plugins register a service, then the service with the highest - * priority takes precedence. - */ -public interface ServicesManager { - - /** - * Register a provider of a service. - * - * @param Provider - * @param service service class - * @param provider provider to register - * @param plugin plugin with the provider - * @param priority priority of the provider - */ - public void register(Class service, T provider, Plugin plugin, ServicePriority priority); - - /** - * Unregister all the providers registered by a particular plugin. - * - * @param plugin The plugin - */ - public void unregisterAll(Plugin plugin); - - /** - * Unregister a particular provider for a particular service. - * - * @param service The service interface - * @param provider The service provider implementation - */ - public void unregister(Class service, Object provider); - - /** - * Unregister a particular provider. - * - * @param provider The service provider implementation - */ - public void unregister(Object provider); - - /** - * Queries for a provider. This may return if no provider has been - * registered for a service. The highest priority provider is returned. - * - * @param The service interface - * @param service The service interface - * @return provider or null - */ - public T load(Class service); - - /** - * Queries for a provider registration. This may return if no provider - * has been registered for a service. - * - * @param The service interface - * @param service The service interface - * @return provider registration or null - */ - public RegisteredServiceProvider getRegistration(Class service); - - /** - * Get registrations of providers for a plugin. - * - * @param plugin The plugin - * @return provider registration or null - */ - public List> getRegistrations(Plugin plugin); - - /** - * Get registrations of providers for a service. The returned list is - * unmodifiable. - * - * @param The service interface - * @param service The service interface - * @return list of registrations - */ - public Collection> getRegistrations(Class service); - - /** - * Get a list of known services. A service is known if it has registered - * providers for it. - * - * @return list of known services - */ - public Collection> getKnownServices(); - - /** - * Returns whether a provider has been registered for a service. Do not - * check this first only to call load(service) later, as that - * would be a non-thread safe situation. - * - * @param service - * @param service service to check - * @return whether there has been a registered provider - */ - public boolean isProvidedFor(Class service); - -} diff --git a/LiveWeather/src/org/bukkit/plugin/SimplePluginManager.java b/LiveWeather/src/org/bukkit/plugin/SimplePluginManager.java deleted file mode 100755 index d2fe422..0000000 --- a/LiveWeather/src/org/bukkit/plugin/SimplePluginManager.java +++ /dev/null @@ -1,730 +0,0 @@ -package org.bukkit.plugin; - -import java.io.File; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.logging.Level; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.lang.Validate; -import org.bukkit.Server; -import org.bukkit.command.Command; -import org.bukkit.command.PluginCommandYamlParser; -import org.bukkit.command.SimpleCommandMap; -import org.bukkit.event.Event; -import org.bukkit.event.EventPriority; -import org.bukkit.event.HandlerList; -import org.bukkit.event.Listener; -import org.bukkit.permissions.Permissible; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; -import org.bukkit.util.FileUtil; - -import com.google.common.collect.ImmutableSet; - -/** - * Handles all plugin management from the Server - */ -public final class SimplePluginManager implements PluginManager { - private final Server server; - private final Map fileAssociations = new HashMap(); - private final List plugins = new ArrayList(); - private final Map lookupNames = new HashMap(); - private static File updateDirectory = null; - private final SimpleCommandMap commandMap; - private final Map permissions = new HashMap(); - private final Map> defaultPerms = new LinkedHashMap>(); - private final Map> permSubs = new HashMap>(); - private final Map> defSubs = new HashMap>(); - private boolean useTimings = false; - - public SimplePluginManager(Server instance, SimpleCommandMap commandMap) { - server = instance; - this.commandMap = commandMap; - - defaultPerms.put(true, new HashSet()); - defaultPerms.put(false, new HashSet()); - } - - /** - * Registers the specified plugin loader - * - * @param loader Class name of the PluginLoader to register - * @throws IllegalArgumentException Thrown when the given Class is not a - * valid PluginLoader - */ - public void registerInterface(Class loader) throws IllegalArgumentException { - PluginLoader instance; - - if (PluginLoader.class.isAssignableFrom(loader)) { - Constructor constructor; - - try { - constructor = loader.getConstructor(Server.class); - instance = constructor.newInstance(server); - } catch (NoSuchMethodException ex) { - String className = loader.getName(); - - throw new IllegalArgumentException(String.format("Class %s does not have a public %s(Server) constructor", className, className), ex); - } catch (Exception ex) { - throw new IllegalArgumentException(String.format("Unexpected exception %s while attempting to construct a new instance of %s", ex.getClass().getName(), loader.getName()), ex); - } - } else { - throw new IllegalArgumentException(String.format("Class %s does not implement interface PluginLoader", loader.getName())); - } - - Pattern[] patterns = instance.getPluginFileFilters(); - - synchronized (this) { - for (Pattern pattern : patterns) { - fileAssociations.put(pattern, instance); - } - } - } - - /** - * Loads the plugins contained within the specified directory - * - * @param directory Directory to check for plugins - * @return A list of all plugins loaded - */ - public Plugin[] loadPlugins(File directory) { - Validate.notNull(directory, "Directory cannot be null"); - Validate.isTrue(directory.isDirectory(), "Directory must be a directory"); - - List result = new ArrayList(); - Set filters = fileAssociations.keySet(); - - if (!(server.getUpdateFolder().equals(""))) { - updateDirectory = new File(directory, server.getUpdateFolder()); - } - - Map plugins = new HashMap(); - Set loadedPlugins = new HashSet(); - Map> dependencies = new HashMap>(); - Map> softDependencies = new HashMap>(); - - // This is where it figures out all possible plugins - for (File file : directory.listFiles()) { - PluginLoader loader = null; - for (Pattern filter : filters) { - Matcher match = filter.matcher(file.getName()); - if (match.find()) { - loader = fileAssociations.get(filter); - } - } - - if (loader == null) continue; - - PluginDescriptionFile description = null; - try { - description = loader.getPluginDescription(file); - String name = description.getName(); - if (name.equalsIgnoreCase("bukkit") || name.equalsIgnoreCase("minecraft") || name.equalsIgnoreCase("mojang")) { - server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "': Restricted Name"); - continue; - } else if (description.rawName.indexOf(' ') != -1) { - server.getLogger().warning(String.format( - "Plugin `%s' uses the space-character (0x20) in its name `%s' - this is discouraged", - description.getFullName(), - description.rawName - )); - } - } catch (InvalidDescriptionException ex) { - server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "'", ex); - continue; - } - - File replacedFile = plugins.put(description.getName(), file); - if (replacedFile != null) { - server.getLogger().severe(String.format( - "Ambiguous plugin name `%s' for files `%s' and `%s' in `%s'", - description.getName(), - file.getPath(), - replacedFile.getPath(), - directory.getPath() - )); - } - - Collection softDependencySet = description.getSoftDepend(); - if (softDependencySet != null && !softDependencySet.isEmpty()) { - if (softDependencies.containsKey(description.getName())) { - // Duplicates do not matter, they will be removed together if applicable - softDependencies.get(description.getName()).addAll(softDependencySet); - } else { - softDependencies.put(description.getName(), new LinkedList(softDependencySet)); - } - } - - Collection dependencySet = description.getDepend(); - if (dependencySet != null && !dependencySet.isEmpty()) { - dependencies.put(description.getName(), new LinkedList(dependencySet)); - } - - Collection loadBeforeSet = description.getLoadBefore(); - if (loadBeforeSet != null && !loadBeforeSet.isEmpty()) { - for (String loadBeforeTarget : loadBeforeSet) { - if (softDependencies.containsKey(loadBeforeTarget)) { - softDependencies.get(loadBeforeTarget).add(description.getName()); - } else { - // softDependencies is never iterated, so 'ghost' plugins aren't an issue - Collection shortSoftDependency = new LinkedList(); - shortSoftDependency.add(description.getName()); - softDependencies.put(loadBeforeTarget, shortSoftDependency); - } - } - } - } - - while (!plugins.isEmpty()) { - boolean missingDependency = true; - Iterator pluginIterator = plugins.keySet().iterator(); - - while (pluginIterator.hasNext()) { - String plugin = pluginIterator.next(); - - if (dependencies.containsKey(plugin)) { - Iterator dependencyIterator = dependencies.get(plugin).iterator(); - - while (dependencyIterator.hasNext()) { - String dependency = dependencyIterator.next(); - - // Dependency loaded - if (loadedPlugins.contains(dependency)) { - dependencyIterator.remove(); - - // We have a dependency not found - } else if (!plugins.containsKey(dependency)) { - missingDependency = false; - File file = plugins.get(plugin); - pluginIterator.remove(); - softDependencies.remove(plugin); - dependencies.remove(plugin); - - server.getLogger().log( - Level.SEVERE, - "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "'", - new UnknownDependencyException(dependency)); - break; - } - } - - if (dependencies.containsKey(plugin) && dependencies.get(plugin).isEmpty()) { - dependencies.remove(plugin); - } - } - if (softDependencies.containsKey(plugin)) { - Iterator softDependencyIterator = softDependencies.get(plugin).iterator(); - - while (softDependencyIterator.hasNext()) { - String softDependency = softDependencyIterator.next(); - - // Soft depend is no longer around - if (!plugins.containsKey(softDependency)) { - softDependencyIterator.remove(); - } - } - - if (softDependencies.get(plugin).isEmpty()) { - softDependencies.remove(plugin); - } - } - if (!(dependencies.containsKey(plugin) || softDependencies.containsKey(plugin)) && plugins.containsKey(plugin)) { - // We're clear to load, no more soft or hard dependencies left - File file = plugins.get(plugin); - pluginIterator.remove(); - missingDependency = false; - - try { - result.add(loadPlugin(file)); - loadedPlugins.add(plugin); - continue; - } catch (InvalidPluginException ex) { - server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "'", ex); - } - } - } - - if (missingDependency) { - // We now iterate over plugins until something loads - // This loop will ignore soft dependencies - pluginIterator = plugins.keySet().iterator(); - - while (pluginIterator.hasNext()) { - String plugin = pluginIterator.next(); - - if (!dependencies.containsKey(plugin)) { - softDependencies.remove(plugin); - missingDependency = false; - File file = plugins.get(plugin); - pluginIterator.remove(); - - try { - result.add(loadPlugin(file)); - loadedPlugins.add(plugin); - break; - } catch (InvalidPluginException ex) { - server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "'", ex); - } - } - } - // We have no plugins left without a depend - if (missingDependency) { - softDependencies.clear(); - dependencies.clear(); - Iterator failedPluginIterator = plugins.values().iterator(); - - while (failedPluginIterator.hasNext()) { - File file = failedPluginIterator.next(); - failedPluginIterator.remove(); - server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "': circular dependency detected"); - } - } - } - } - - return result.toArray(new Plugin[result.size()]); - } - - /** - * Loads the plugin in the specified file - *

            - * File must be valid according to the current enabled Plugin interfaces - * - * @param file File containing the plugin to load - * @return The Plugin loaded, or null if it was invalid - * @throws InvalidPluginException Thrown when the specified file is not a - * valid plugin - * @throws UnknownDependencyException If a required dependency could not - * be found - */ - public synchronized Plugin loadPlugin(File file) throws InvalidPluginException, UnknownDependencyException { - Validate.notNull(file, "File cannot be null"); - - checkUpdate(file); - - Set filters = fileAssociations.keySet(); - Plugin result = null; - - for (Pattern filter : filters) { - String name = file.getName(); - Matcher match = filter.matcher(name); - - if (match.find()) { - PluginLoader loader = fileAssociations.get(filter); - - result = loader.loadPlugin(file); - } - } - - if (result != null) { - plugins.add(result); - lookupNames.put(result.getDescription().getName(), result); - } - - return result; - } - - private void checkUpdate(File file) { - if (updateDirectory == null || !updateDirectory.isDirectory()) { - return; - } - - File updateFile = new File(updateDirectory, file.getName()); - if (updateFile.isFile() && FileUtil.copy(updateFile, file)) { - updateFile.delete(); - } - } - - /** - * Checks if the given plugin is loaded and returns it when applicable - *

            - * Please note that the name of the plugin is case-sensitive - * - * @param name Name of the plugin to check - * @return Plugin if it exists, otherwise null - */ - public synchronized Plugin getPlugin(String name) { - return lookupNames.get(name.replace(' ', '_')); - } - - public synchronized Plugin[] getPlugins() { - return plugins.toArray(new Plugin[0]); - } - - /** - * Checks if the given plugin is enabled or not - *

            - * Please note that the name of the plugin is case-sensitive. - * - * @param name Name of the plugin to check - * @return true if the plugin is enabled, otherwise false - */ - public boolean isPluginEnabled(String name) { - Plugin plugin = getPlugin(name); - - return isPluginEnabled(plugin); - } - - /** - * Checks if the given plugin is enabled or not - * - * @param plugin Plugin to check - * @return true if the plugin is enabled, otherwise false - */ - public boolean isPluginEnabled(Plugin plugin) { - if ((plugin != null) && (plugins.contains(plugin))) { - return plugin.isEnabled(); - } else { - return false; - } - } - - public void enablePlugin(final Plugin plugin) { - if (!plugin.isEnabled()) { - List pluginCommands = PluginCommandYamlParser.parse(plugin); - - if (!pluginCommands.isEmpty()) { - commandMap.registerAll(plugin.getDescription().getName(), pluginCommands); - } - - try { - plugin.getPluginLoader().enablePlugin(plugin); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - HandlerList.bakeAll(); - } - } - - public void disablePlugins() { - Plugin[] plugins = getPlugins(); - for (int i = plugins.length - 1; i >= 0; i--) { - disablePlugin(plugins[i]); - } - } - - public void disablePlugin(final Plugin plugin) { - if (plugin.isEnabled()) { - try { - plugin.getPluginLoader().disablePlugin(plugin); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - try { - server.getScheduler().cancelTasks(plugin); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while cancelling tasks for " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - try { - server.getServicesManager().unregisterAll(plugin); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while unregistering services for " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - try { - HandlerList.unregisterAll(plugin); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while unregistering events for " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - try { - server.getMessenger().unregisterIncomingPluginChannel(plugin); - server.getMessenger().unregisterOutgoingPluginChannel(plugin); - } catch(Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred (in the plugin loader) while unregistering plugin channels for " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - } - } - - public void clearPlugins() { - synchronized (this) { - disablePlugins(); - plugins.clear(); - lookupNames.clear(); - HandlerList.unregisterAll(); - fileAssociations.clear(); - permissions.clear(); - defaultPerms.get(true).clear(); - defaultPerms.get(false).clear(); - } - } - - /** - * Calls an event with the given details. - *

            - * This method only synchronizes when the event is not asynchronous. - * - * @param event Event details - */ - public void callEvent(Event event) { - if (event.isAsynchronous()) { - if (Thread.holdsLock(this)) { - throw new IllegalStateException(event.getEventName() + " cannot be triggered asynchronously from inside synchronized code."); - } - if (server.isPrimaryThread()) { - throw new IllegalStateException(event.getEventName() + " cannot be triggered asynchronously from primary server thread."); - } - fireEvent(event); - } else { - synchronized (this) { - fireEvent(event); - } - } - } - - private void fireEvent(Event event) { - HandlerList handlers = event.getHandlers(); - RegisteredListener[] listeners = handlers.getRegisteredListeners(); - - for (RegisteredListener registration : listeners) { - if (!registration.getPlugin().isEnabled()) { - continue; - } - - try { - registration.callEvent(event); - } catch (AuthorNagException ex) { - Plugin plugin = registration.getPlugin(); - - if (plugin.isNaggable()) { - plugin.setNaggable(false); - - server.getLogger().log(Level.SEVERE, String.format( - "Nag author(s): '%s' of '%s' about the following: %s", - plugin.getDescription().getAuthors(), - plugin.getDescription().getFullName(), - ex.getMessage() - )); - } - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Could not pass event " + event.getEventName() + " to " + registration.getPlugin().getDescription().getFullName(), ex); - } - } - } - - public void registerEvents(Listener listener, Plugin plugin) { - if (!plugin.isEnabled()) { - throw new IllegalPluginAccessException("Plugin attempted to register " + listener + " while not enabled"); - } - - for (Map.Entry, Set> entry : plugin.getPluginLoader().createRegisteredListeners(listener, plugin).entrySet()) { - getEventListeners(getRegistrationClass(entry.getKey())).registerAll(entry.getValue()); - } - - } - - public void registerEvent(Class event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin) { - registerEvent(event, listener, priority, executor, plugin, false); - } - - /** - * Registers the given event to the specified listener using a directly - * passed EventExecutor - * - * @param event Event class to register - * @param listener PlayerListener to register - * @param priority Priority of this event - * @param executor EventExecutor to register - * @param plugin Plugin to register - * @param ignoreCancelled Do not call executor if event was already - * cancelled - */ - public void registerEvent(Class event, Listener listener, EventPriority priority, EventExecutor executor, Plugin plugin, boolean ignoreCancelled) { - Validate.notNull(listener, "Listener cannot be null"); - Validate.notNull(priority, "Priority cannot be null"); - Validate.notNull(executor, "Executor cannot be null"); - Validate.notNull(plugin, "Plugin cannot be null"); - - if (!plugin.isEnabled()) { - throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled"); - } - - if (useTimings) { - getEventListeners(event).register(new TimedRegisteredListener(listener, executor, priority, plugin, ignoreCancelled)); - } else { - getEventListeners(event).register(new RegisteredListener(listener, executor, priority, plugin, ignoreCancelled)); - } - } - - private HandlerList getEventListeners(Class type) { - try { - Method method = getRegistrationClass(type).getDeclaredMethod("getHandlerList"); - method.setAccessible(true); - return (HandlerList) method.invoke(null); - } catch (Exception e) { - throw new IllegalPluginAccessException(e.toString()); - } - } - - private Class getRegistrationClass(Class clazz) { - try { - clazz.getDeclaredMethod("getHandlerList"); - return clazz; - } catch (NoSuchMethodException e) { - if (clazz.getSuperclass() != null - && !clazz.getSuperclass().equals(Event.class) - && Event.class.isAssignableFrom(clazz.getSuperclass())) { - return getRegistrationClass(clazz.getSuperclass().asSubclass(Event.class)); - } else { - throw new IllegalPluginAccessException("Unable to find handler list for event " + clazz.getName()); - } - } - } - - public Permission getPermission(String name) { - return permissions.get(name.toLowerCase()); - } - - public void addPermission(Permission perm) { - String name = perm.getName().toLowerCase(); - - if (permissions.containsKey(name)) { - throw new IllegalArgumentException("The permission " + name + " is already defined!"); - } - - permissions.put(name, perm); - calculatePermissionDefault(perm); - } - - public Set getDefaultPermissions(boolean op) { - return ImmutableSet.copyOf(defaultPerms.get(op)); - } - - public void removePermission(Permission perm) { - removePermission(perm.getName()); - } - - public void removePermission(String name) { - permissions.remove(name.toLowerCase()); - } - - public void recalculatePermissionDefaults(Permission perm) { - if (permissions.containsValue(perm)) { - defaultPerms.get(true).remove(perm); - defaultPerms.get(false).remove(perm); - - calculatePermissionDefault(perm); - } - } - - private void calculatePermissionDefault(Permission perm) { - if ((perm.getDefault() == PermissionDefault.OP) || (perm.getDefault() == PermissionDefault.TRUE)) { - defaultPerms.get(true).add(perm); - dirtyPermissibles(true); - } - if ((perm.getDefault() == PermissionDefault.NOT_OP) || (perm.getDefault() == PermissionDefault.TRUE)) { - defaultPerms.get(false).add(perm); - dirtyPermissibles(false); - } - } - - private void dirtyPermissibles(boolean op) { - Set permissibles = getDefaultPermSubscriptions(op); - - for (Permissible p : permissibles) { - p.recalculatePermissions(); - } - } - - public void subscribeToPermission(String permission, Permissible permissible) { - String name = permission.toLowerCase(); - Map map = permSubs.get(name); - - if (map == null) { - map = new WeakHashMap(); - permSubs.put(name, map); - } - - map.put(permissible, true); - } - - public void unsubscribeFromPermission(String permission, Permissible permissible) { - String name = permission.toLowerCase(); - Map map = permSubs.get(name); - - if (map != null) { - map.remove(permissible); - - if (map.isEmpty()) { - permSubs.remove(name); - } - } - } - - public Set getPermissionSubscriptions(String permission) { - String name = permission.toLowerCase(); - Map map = permSubs.get(name); - - if (map == null) { - return ImmutableSet.of(); - } else { - return ImmutableSet.copyOf(map.keySet()); - } - } - - public void subscribeToDefaultPerms(boolean op, Permissible permissible) { - Map map = defSubs.get(op); - - if (map == null) { - map = new WeakHashMap(); - defSubs.put(op, map); - } - - map.put(permissible, true); - } - - public void unsubscribeFromDefaultPerms(boolean op, Permissible permissible) { - Map map = defSubs.get(op); - - if (map != null) { - map.remove(permissible); - - if (map.isEmpty()) { - defSubs.remove(op); - } - } - } - - public Set getDefaultPermSubscriptions(boolean op) { - Map map = defSubs.get(op); - - if (map == null) { - return ImmutableSet.of(); - } else { - return ImmutableSet.copyOf(map.keySet()); - } - } - - public Set getPermissions() { - return new HashSet(permissions.values()); - } - - public boolean useTimings() { - return useTimings; - } - - /** - * Sets whether or not per event timing code should be used - * - * @param use True if per event timing code should be used - */ - public void useTimings(boolean use) { - useTimings = use; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/SimpleServicesManager.java b/LiveWeather/src/org/bukkit/plugin/SimpleServicesManager.java deleted file mode 100755 index 4e17711..0000000 --- a/LiveWeather/src/org/bukkit/plugin/SimpleServicesManager.java +++ /dev/null @@ -1,306 +0,0 @@ -package org.bukkit.plugin; - -import org.bukkit.Bukkit; -import org.bukkit.event.server.ServiceRegisterEvent; -import org.bukkit.event.server.ServiceUnregisterEvent; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Set; - -/** - * A simple services manager. - */ -public class SimpleServicesManager implements ServicesManager { - - /** - * Map of providers. - */ - private final Map, List>> providers = new HashMap, List>>(); - - /** - * Register a provider of a service. - * - * @param Provider - * @param service service class - * @param provider provider to register - * @param plugin plugin with the provider - * @param priority priority of the provider - */ - public void register(Class service, T provider, Plugin plugin, ServicePriority priority) { - RegisteredServiceProvider registeredProvider = null; - synchronized (providers) { - List> registered = providers.get(service); - if (registered == null) { - registered = new ArrayList>(); - providers.put(service, registered); - } - - registeredProvider = new RegisteredServiceProvider(service, provider, priority, plugin); - - // Insert the provider into the collection, much more efficient big O than sort - int position = Collections.binarySearch(registered, registeredProvider); - if (position < 0) { - registered.add(-(position + 1), registeredProvider); - } else { - registered.add(position, registeredProvider); - } - - } - Bukkit.getServer().getPluginManager().callEvent(new ServiceRegisterEvent(registeredProvider)); - } - - /** - * Unregister all the providers registered by a particular plugin. - * - * @param plugin The plugin - */ - public void unregisterAll(Plugin plugin) { - ArrayList unregisteredEvents = new ArrayList(); - synchronized (providers) { - Iterator, List>>> it = providers.entrySet().iterator(); - - try { - while (it.hasNext()) { - Map.Entry, List>> entry = it.next(); - Iterator> it2 = entry.getValue().iterator(); - - try { - // Removed entries that are from this plugin - - while (it2.hasNext()) { - RegisteredServiceProvider registered = it2.next(); - - if (registered.getPlugin().equals(plugin)) { - it2.remove(); - unregisteredEvents.add(new ServiceUnregisterEvent(registered)); - } - } - } catch (NoSuchElementException e) { // Why does Java suck - } - - // Get rid of the empty list - if (entry.getValue().size() == 0) { - it.remove(); - } - } - } catch (NoSuchElementException e) {} - } - for (ServiceUnregisterEvent event : unregisteredEvents) { - Bukkit.getServer().getPluginManager().callEvent(event); - } - } - - /** - * Unregister a particular provider for a particular service. - * - * @param service The service interface - * @param provider The service provider implementation - */ - public void unregister(Class service, Object provider) { - ArrayList unregisteredEvents = new ArrayList(); - synchronized (providers) { - Iterator, List>>> it = providers.entrySet().iterator(); - - try { - while (it.hasNext()) { - Map.Entry, List>> entry = it.next(); - - // We want a particular service - if (entry.getKey() != service) { - continue; - } - - Iterator> it2 = entry.getValue().iterator(); - - try { - // Removed entries that are from this plugin - - while (it2.hasNext()) { - RegisteredServiceProvider registered = it2.next(); - - if (registered.getProvider() == provider) { - it2.remove(); - unregisteredEvents.add(new ServiceUnregisterEvent(registered)); - } - } - } catch (NoSuchElementException e) { // Why does Java suck - } - - // Get rid of the empty list - if (entry.getValue().size() == 0) { - it.remove(); - } - } - } catch (NoSuchElementException e) {} - } - for (ServiceUnregisterEvent event : unregisteredEvents) { - Bukkit.getServer().getPluginManager().callEvent(event); - } - } - - /** - * Unregister a particular provider. - * - * @param provider The service provider implementation - */ - public void unregister(Object provider) { - ArrayList unregisteredEvents = new ArrayList(); - synchronized (providers) { - Iterator, List>>> it = providers.entrySet().iterator(); - - try { - while (it.hasNext()) { - Map.Entry, List>> entry = it.next(); - Iterator> it2 = entry.getValue().iterator(); - - try { - // Removed entries that are from this plugin - - while (it2.hasNext()) { - RegisteredServiceProvider registered = it2.next(); - - if (registered.getProvider().equals(provider)) { - it2.remove(); - unregisteredEvents.add(new ServiceUnregisterEvent(registered)); - } - } - } catch (NoSuchElementException e) { // Why does Java suck - } - - // Get rid of the empty list - if (entry.getValue().size() == 0) { - it.remove(); - } - } - } catch (NoSuchElementException e) {} - } - for (ServiceUnregisterEvent event : unregisteredEvents) { - Bukkit.getServer().getPluginManager().callEvent(event); - } - } - - /** - * Queries for a provider. This may return if no provider has been - * registered for a service. The highest priority provider is returned. - * - * @param The service interface - * @param service The service interface - * @return provider or null - */ - public T load(Class service) { - synchronized (providers) { - List> registered = providers.get(service); - - if (registered == null) { - return null; - } - - // This should not be null! - return service.cast(registered.get(0).getProvider()); - } - } - - /** - * Queries for a provider registration. This may return if no provider - * has been registered for a service. - * - * @param The service interface - * @param service The service interface - * @return provider registration or null - */ - @SuppressWarnings("unchecked") - public RegisteredServiceProvider getRegistration(Class service) { - synchronized (providers) { - List> registered = providers.get(service); - - if (registered == null) { - return null; - } - - // This should not be null! - return (RegisteredServiceProvider) registered.get(0); - } - } - - /** - * Get registrations of providers for a plugin. - * - * @param plugin The plugin - * @return provider registration or null - */ - public List> getRegistrations(Plugin plugin) { - ImmutableList.Builder> ret = ImmutableList.>builder(); - synchronized (providers) { - for (List> registered : providers.values()) { - for (RegisteredServiceProvider provider : registered) { - if (provider.getPlugin().equals(plugin)) { - ret.add(provider); - } - } - } - } - return ret.build(); - } - - /** - * Get registrations of providers for a service. The returned list is - * an unmodifiable copy. - * - * @param The service interface - * @param service The service interface - * @return a copy of the list of registrations - */ - @SuppressWarnings("unchecked") - public List> getRegistrations(Class service) { - ImmutableList.Builder> ret; - synchronized (providers) { - List> registered = providers.get(service); - - if (registered == null) { - return ImmutableList.>of(); - } - - ret = ImmutableList.>builder(); - - for (RegisteredServiceProvider provider : registered) { - ret.add((RegisteredServiceProvider) provider); - } - - } - return ret.build(); - } - - /** - * Get a list of known services. A service is known if it has registered - * providers for it. - * - * @return a copy of the set of known services - */ - public Set> getKnownServices() { - synchronized (providers) { - return ImmutableSet.>copyOf(providers.keySet()); - } - } - - /** - * Returns whether a provider has been registered for a service. - * - * @param service - * @param service service to check - * @return true if and only if there are registered providers - */ - public boolean isProvidedFor(Class service) { - synchronized (providers) { - return providers.containsKey(service); - } - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/TimedRegisteredListener.java b/LiveWeather/src/org/bukkit/plugin/TimedRegisteredListener.java deleted file mode 100755 index e09234c..0000000 --- a/LiveWeather/src/org/bukkit/plugin/TimedRegisteredListener.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.bukkit.plugin; - -import org.bukkit.event.Event; -import org.bukkit.event.EventException; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -/** - * Extends RegisteredListener to include timing information - */ -public class TimedRegisteredListener extends RegisteredListener { - private int count; - private long totalTime; - private Class eventClass; - private boolean multiple = false; - - public TimedRegisteredListener(final Listener pluginListener, final EventExecutor eventExecutor, final EventPriority eventPriority, final Plugin registeredPlugin, final boolean listenCancelled) { - super(pluginListener, eventExecutor, eventPriority, registeredPlugin, listenCancelled); - } - - @Override - public void callEvent(Event event) throws EventException { - if (event.isAsynchronous()) { - super.callEvent(event); - return; - } - count++; - Class newEventClass = event.getClass(); - if (this.eventClass == null) { - this.eventClass = newEventClass; - } else if (!this.eventClass.equals(newEventClass)) { - multiple = true; - this.eventClass = getCommonSuperclass(newEventClass, this.eventClass).asSubclass(Event.class); - } - long start = System.nanoTime(); - super.callEvent(event); - totalTime += System.nanoTime() - start; - } - - private static Class getCommonSuperclass(Class class1, Class class2) { - while (!class1.isAssignableFrom(class2)) { - class1 = class1.getSuperclass(); - } - return class1; - } - - /** - * Resets the call count and total time for this listener - */ - public void reset() { - count = 0; - totalTime = 0; - } - - /** - * Gets the total times this listener has been called - * - * @return Times this listener has been called - */ - public int getCount() { - return count; - } - - /** - * Gets the total time calls to this listener have taken - * - * @return Total time for all calls of this listener - */ - public long getTotalTime() { - return totalTime; - } - - /** - * Gets the class of the events this listener handled. If it handled - * multiple classes of event, the closest shared superclass will be - * returned, such that for any event this listener has handled, - * this.getEventClass().isAssignableFrom(event.getClass()) - * and no class this.getEventClass().isAssignableFrom(clazz) - * && this.getEventClass() != clazz && - * event.getClass().isAssignableFrom(clazz) for all handled events. - * - * @return the event class handled by this RegisteredListener - */ - public Class getEventClass() { - return eventClass; - } - - /** - * Gets whether this listener has handled multiple events, such that for - * some two events, eventA.getClass() != eventB.getClass(). - * - * @return true if this listener has handled multiple events - */ - public boolean hasMultiple() { - return multiple; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/UnknownDependencyException.java b/LiveWeather/src/org/bukkit/plugin/UnknownDependencyException.java deleted file mode 100755 index a80251e..0000000 --- a/LiveWeather/src/org/bukkit/plugin/UnknownDependencyException.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bukkit.plugin; - -/** - * Thrown when attempting to load an invalid Plugin file - */ -public class UnknownDependencyException extends RuntimeException { - - private static final long serialVersionUID = 5721389371901775895L; - - /** - * Constructs a new UnknownDependencyException based on the given - * Exception - * - * @param throwable Exception that triggered this Exception - */ - public UnknownDependencyException(final Throwable throwable) { - super(throwable); - } - - /** - * Constructs a new UnknownDependencyException with the given message - * - * @param message Brief message explaining the cause of the exception - */ - public UnknownDependencyException(final String message) { - super(message); - } - - /** - * Constructs a new UnknownDependencyException based on the given - * Exception - * - * @param message Brief message explaining the cause of the exception - * @param throwable Exception that triggered this Exception - */ - public UnknownDependencyException(final Throwable throwable, final String message) { - super(message, throwable); - } - - /** - * Constructs a new UnknownDependencyException - */ - public UnknownDependencyException() { - - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/java/JavaPlugin.java b/LiveWeather/src/org/bukkit/plugin/java/JavaPlugin.java deleted file mode 100755 index 82e3c30..0000000 --- a/LiveWeather/src/org/bukkit/plugin/java/JavaPlugin.java +++ /dev/null @@ -1,547 +0,0 @@ -package org.bukkit.plugin.java; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.Reader; -import java.net.URL; -import java.net.URLConnection; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.lang.Validate; -import org.bukkit.Server; -import org.bukkit.Warning.WarningState; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.plugin.AuthorNagException; -import org.bukkit.plugin.PluginAwareness; -import org.bukkit.plugin.PluginBase; -import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.plugin.PluginLoader; -import org.bukkit.plugin.PluginLogger; - -import com.avaje.ebean.EbeanServer; -import com.avaje.ebean.EbeanServerFactory; -import com.avaje.ebean.config.DataSourceConfig; -import com.avaje.ebean.config.ServerConfig; -import com.avaje.ebeaninternal.api.SpiEbeanServer; -import com.avaje.ebeaninternal.server.ddl.DdlGenerator; -import com.google.common.base.Charsets; -import com.google.common.io.ByteStreams; - -/** - * Represents a Java plugin - */ -public abstract class JavaPlugin extends PluginBase { - private boolean isEnabled = false; - private PluginLoader loader = null; - private Server server = null; - private File file = null; - private PluginDescriptionFile description = null; - private File dataFolder = null; - private ClassLoader classLoader = null; - private boolean naggable = true; - private EbeanServer ebean = null; - private FileConfiguration newConfig = null; - private File configFile = null; - private PluginLogger logger = null; - - public JavaPlugin() { - final ClassLoader classLoader = this.getClass().getClassLoader(); - if (!(classLoader instanceof PluginClassLoader)) { - throw new IllegalStateException("JavaPlugin requires " + PluginClassLoader.class.getName()); - } - ((PluginClassLoader) classLoader).initialize(this); - } - - /** - * @deprecated This method is intended for unit testing purposes when the - * other {@linkplain #JavaPlugin(JavaPluginLoader, - * PluginDescriptionFile, File, File) constructor} cannot be used. - *

            - * Its existence may be temporary. - */ - @Deprecated - protected JavaPlugin(final PluginLoader loader, final Server server, final PluginDescriptionFile description, final File dataFolder, final File file) { - final ClassLoader classLoader = this.getClass().getClassLoader(); - if (classLoader instanceof PluginClassLoader) { - throw new IllegalStateException("Cannot use initialization constructor at runtime"); - } - init(loader, server, description, dataFolder, file, classLoader); - } - - protected JavaPlugin(final JavaPluginLoader loader, final PluginDescriptionFile description, final File dataFolder, final File file) { - final ClassLoader classLoader = this.getClass().getClassLoader(); - if (classLoader instanceof PluginClassLoader) { - throw new IllegalStateException("Cannot use initialization constructor at runtime"); - } - init(loader, loader.server, description, dataFolder, file, classLoader); - } - - /** - * Returns the folder that the plugin data's files are located in. The - * folder may not yet exist. - * - * @return The folder. - */ - @Override - public final File getDataFolder() { - return dataFolder; - } - - /** - * Gets the associated PluginLoader responsible for this plugin - * - * @return PluginLoader that controls this plugin - */ - @Override - public final PluginLoader getPluginLoader() { - return loader; - } - - /** - * Returns the Server instance currently running this plugin - * - * @return Server running this plugin - */ - @Override - public final Server getServer() { - return server; - } - - /** - * Returns a value indicating whether or not this plugin is currently - * enabled - * - * @return true if this plugin is enabled, otherwise false - */ - @Override - public final boolean isEnabled() { - return isEnabled; - } - - /** - * Returns the file which contains this plugin - * - * @return File containing this plugin - */ - protected File getFile() { - return file; - } - - /** - * Returns the plugin.yaml file containing the details for this plugin - * - * @return Contents of the plugin.yaml file - */ - @Override - public final PluginDescriptionFile getDescription() { - return description; - } - - @Override - public FileConfiguration getConfig() { - if (newConfig == null) { - reloadConfig(); - } - return newConfig; - } - - /** - * Provides a reader for a text file located inside the jar. The behavior - * of this method adheres to {@link - * org.bukkit.plugin.PluginAwareness.Flags#UTF8}, or if not defined, uses - * UTF8 if {@link FileConfiguration#UTF8_OVERRIDE} is specified, or system - * default otherwise. - * - * @param file the filename of the resource to load - * @return null if {@link #getResource(String)} returns null - * @throws IllegalArgumentException if file is null - * @see ClassLoader#getResourceAsStream(String) - */ - @SuppressWarnings("deprecation") - protected final Reader getTextResource(String file) { - final InputStream in = getResource(file); - - return in == null ? null : new InputStreamReader(in, isStrictlyUTF8() || FileConfiguration.UTF8_OVERRIDE ? Charsets.UTF_8 : Charset.defaultCharset()); - } - - @SuppressWarnings("deprecation") - @Override - public void reloadConfig() { - newConfig = YamlConfiguration.loadConfiguration(configFile); - - final InputStream defConfigStream = getResource("config.yml"); - if (defConfigStream == null) { - return; - } - - final YamlConfiguration defConfig; - if (isStrictlyUTF8() || FileConfiguration.UTF8_OVERRIDE) { - defConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, Charsets.UTF_8)); - } else { - final byte[] contents; - defConfig = new YamlConfiguration(); - try { - contents = ByteStreams.toByteArray(defConfigStream); - } catch (final IOException e) { - getLogger().log(Level.SEVERE, "Unexpected failure reading config.yml", e); - return; - } - - final String text = new String(contents, Charset.defaultCharset()); - if (!text.equals(new String(contents, Charsets.UTF_8))) { - getLogger().warning("Default system encoding may have misread config.yml from plugin jar"); - } - - try { - defConfig.loadFromString(text); - } catch (final InvalidConfigurationException e) { - getLogger().log(Level.SEVERE, "Cannot load configuration from jar", e); - } - } - - newConfig.setDefaults(defConfig); - } - - private boolean isStrictlyUTF8() { - return getDescription().getAwareness().contains(PluginAwareness.Flags.UTF8); - } - - @Override - public void saveConfig() { - try { - getConfig().save(configFile); - } catch (IOException ex) { - logger.log(Level.SEVERE, "Could not save config to " + configFile, ex); - } - } - - @Override - public void saveDefaultConfig() { - if (!configFile.exists()) { - saveResource("config.yml", false); - } - } - - @Override - public void saveResource(String resourcePath, boolean replace) { - if (resourcePath == null || resourcePath.equals("")) { - throw new IllegalArgumentException("ResourcePath cannot be null or empty"); - } - - resourcePath = resourcePath.replace('\\', '/'); - InputStream in = getResource(resourcePath); - if (in == null) { - throw new IllegalArgumentException("The embedded resource '" + resourcePath + "' cannot be found in " + file); - } - - File outFile = new File(dataFolder, resourcePath); - int lastIndex = resourcePath.lastIndexOf('/'); - File outDir = new File(dataFolder, resourcePath.substring(0, lastIndex >= 0 ? lastIndex : 0)); - - if (!outDir.exists()) { - outDir.mkdirs(); - } - - try { - if (!outFile.exists() || replace) { - OutputStream out = new FileOutputStream(outFile); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - out.close(); - in.close(); - } else { - logger.log(Level.WARNING, "Could not save " + outFile.getName() + " to " + outFile + " because " + outFile.getName() + " already exists."); - } - } catch (IOException ex) { - logger.log(Level.SEVERE, "Could not save " + outFile.getName() + " to " + outFile, ex); - } - } - - @Override - public InputStream getResource(String filename) { - if (filename == null) { - throw new IllegalArgumentException("Filename cannot be null"); - } - - try { - URL url = getClassLoader().getResource(filename); - - if (url == null) { - return null; - } - - URLConnection connection = url.openConnection(); - connection.setUseCaches(false); - return connection.getInputStream(); - } catch (IOException ex) { - return null; - } - } - - /** - * Returns the ClassLoader which holds this plugin - * - * @return ClassLoader holding this plugin - */ - protected final ClassLoader getClassLoader() { - return classLoader; - } - - /** - * Sets the enabled state of this plugin - * - * @param enabled true if enabled, otherwise false - */ - protected final void setEnabled(final boolean enabled) { - if (isEnabled != enabled) { - isEnabled = enabled; - - if (isEnabled) { - onEnable(); - } else { - onDisable(); - } - } - } - - /** - * @deprecated This method is legacy and will be removed - it must be - * replaced by the specially provided constructor(s). - */ - @Deprecated - protected final void initialize(PluginLoader loader, Server server, PluginDescriptionFile description, File dataFolder, File file, ClassLoader classLoader) { - if (server.getWarningState() == WarningState.OFF) { - return; - } - getLogger().log(Level.WARNING, getClass().getName() + " is already initialized", server.getWarningState() == WarningState.DEFAULT ? null : new AuthorNagException("Explicit initialization")); - } - - final void init(PluginLoader loader, Server server, PluginDescriptionFile description, File dataFolder, File file, ClassLoader classLoader) { - this.loader = loader; - this.server = server; - this.file = file; - this.description = description; - this.dataFolder = dataFolder; - this.classLoader = classLoader; - this.configFile = new File(dataFolder, "config.yml"); - this.logger = new PluginLogger(this); - - if (description.isDatabaseEnabled()) { - ServerConfig db = new ServerConfig(); - - db.setDefaultServer(false); - db.setRegister(false); - db.setClasses(getDatabaseClasses()); - db.setName(description.getName()); - server.configureDbConfig(db); - - DataSourceConfig ds = db.getDataSourceConfig(); - - ds.setUrl(replaceDatabaseString(ds.getUrl())); - dataFolder.mkdirs(); - - ClassLoader previous = Thread.currentThread().getContextClassLoader(); - - Thread.currentThread().setContextClassLoader(classLoader); - ebean = EbeanServerFactory.create(db); - Thread.currentThread().setContextClassLoader(previous); - } - } - - /** - * Provides a list of all classes that should be persisted in the database - * - * @return List of Classes that are Ebeans - */ - public List> getDatabaseClasses() { - return new ArrayList>(); - } - - private String replaceDatabaseString(String input) { - input = input.replaceAll("\\{DIR\\}", dataFolder.getPath().replaceAll("\\\\", "/") + "/"); - input = input.replaceAll("\\{NAME\\}", description.getName().replaceAll("[^\\w_-]", "")); - return input; - } - - /** - * Gets the initialization status of this plugin - * - * @return true if this plugin is initialized, otherwise false - * @deprecated This method cannot return false, as {@link - * JavaPlugin} is now initialized in the constructor. - */ - @Deprecated - public final boolean isInitialized() { - return true; - } - - /** - * {@inheritDoc} - */ - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - return false; - } - - /** - * {@inheritDoc} - */ - @Override - public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { - return null; - } - - /** - * Gets the command with the given name, specific to this plugin. Commands - * need to be registered in the {@link PluginDescriptionFile#getCommands() - * PluginDescriptionFile} to exist at runtime. - * - * @param name name or alias of the command - * @return the plugin command if found, otherwise null - */ - public PluginCommand getCommand(String name) { - String alias = name.toLowerCase(); - PluginCommand command = getServer().getPluginCommand(alias); - - if (command == null || command.getPlugin() != this) { - command = getServer().getPluginCommand(description.getName().toLowerCase() + ":" + alias); - } - - if (command != null && command.getPlugin() == this) { - return command; - } else { - return null; - } - } - - @Override - public void onLoad() {} - - @Override - public void onDisable() {} - - @Override - public void onEnable() {} - - @Override - public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { - return null; - } - - @Override - public final boolean isNaggable() { - return naggable; - } - - @Override - public final void setNaggable(boolean canNag) { - this.naggable = canNag; - } - - @Override - public EbeanServer getDatabase() { - return ebean; - } - - protected void installDDL() { - SpiEbeanServer serv = (SpiEbeanServer) getDatabase(); - DdlGenerator gen = serv.getDdlGenerator(); - - gen.runScript(false, gen.generateCreateDdl()); - } - - protected void removeDDL() { - SpiEbeanServer serv = (SpiEbeanServer) getDatabase(); - DdlGenerator gen = serv.getDdlGenerator(); - - gen.runScript(true, gen.generateDropDdl()); - } - - @Override - public final Logger getLogger() { - return logger; - } - - @Override - public String toString() { - return description.getFullName(); - } - - /** - * This method provides fast access to the plugin that has {@link - * #getProvidingPlugin(Class) provided} the given plugin class, which is - * usually the plugin that implemented it. - *

            - * An exception to this would be if plugin's jar that contained the class - * does not extend the class, where the intended plugin would have - * resided in a different jar / classloader. - * - * @param clazz the class desired - * @return the plugin that provides and implements said class - * @throws IllegalArgumentException if clazz is null - * @throws IllegalArgumentException if clazz does not extend {@link - * JavaPlugin} - * @throws IllegalStateException if clazz was not provided by a plugin, - * for example, if called with - * JavaPlugin.getPlugin(JavaPlugin.class) - * @throws IllegalStateException if called from the static initializer for - * given JavaPlugin - * @throws ClassCastException if plugin that provided the class does not - * extend the class - */ - public static T getPlugin(Class clazz) { - Validate.notNull(clazz, "Null class cannot have a plugin"); - if (!JavaPlugin.class.isAssignableFrom(clazz)) { - throw new IllegalArgumentException(clazz + " does not extend " + JavaPlugin.class); - } - final ClassLoader cl = clazz.getClassLoader(); - if (!(cl instanceof PluginClassLoader)) { - throw new IllegalArgumentException(clazz + " is not initialized by " + PluginClassLoader.class); - } - JavaPlugin plugin = ((PluginClassLoader) cl).plugin; - if (plugin == null) { - throw new IllegalStateException("Cannot get plugin for " + clazz + " from a static initializer"); - } - return clazz.cast(plugin); - } - - /** - * This method provides fast access to the plugin that has provided the - * given class. - * - * @throws IllegalArgumentException if the class is not provided by a - * JavaPlugin - * @throws IllegalArgumentException if class is null - * @throws IllegalStateException if called from the static initializer for - * given JavaPlugin - */ - public static JavaPlugin getProvidingPlugin(Class clazz) { - Validate.notNull(clazz, "Null class cannot have a plugin"); - final ClassLoader cl = clazz.getClassLoader(); - if (!(cl instanceof PluginClassLoader)) { - throw new IllegalArgumentException(clazz + " is not provided by " + PluginClassLoader.class); - } - JavaPlugin plugin = ((PluginClassLoader) cl).plugin; - if (plugin == null) { - throw new IllegalStateException("Cannot get plugin for " + clazz + " from a static initializer"); - } - return plugin; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/java/JavaPluginLoader.java b/LiveWeather/src/org/bukkit/plugin/java/JavaPluginLoader.java deleted file mode 100755 index b178c0d..0000000 --- a/LiveWeather/src/org/bukkit/plugin/java/JavaPluginLoader.java +++ /dev/null @@ -1,365 +0,0 @@ -package org.bukkit.plugin.java; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.logging.Level; -import java.util.regex.Pattern; - -import org.apache.commons.lang.Validate; -import org.bukkit.Server; -import org.bukkit.Warning; -import org.bukkit.Warning.WarningState; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; -import org.bukkit.event.Event; -import org.bukkit.event.EventException; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.PluginDisableEvent; -import org.bukkit.event.server.PluginEnableEvent; -import org.bukkit.plugin.AuthorNagException; -import org.bukkit.plugin.EventExecutor; -import org.bukkit.plugin.InvalidDescriptionException; -import org.bukkit.plugin.InvalidPluginException; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.plugin.PluginLoader; -import org.bukkit.plugin.RegisteredListener; -import org.bukkit.plugin.TimedRegisteredListener; -import org.bukkit.plugin.UnknownDependencyException; -import org.yaml.snakeyaml.error.YAMLException; - -/** - * Represents a Java plugin loader, allowing plugins in the form of .jar - */ -public final class JavaPluginLoader implements PluginLoader { - final Server server; - private final Pattern[] fileFilters = new Pattern[] { Pattern.compile("\\.jar$"), }; - private final Map> classes = new HashMap>(); - private final Map loaders = new LinkedHashMap(); - - /** - * This class was not meant to be constructed explicitly - */ - @Deprecated - public JavaPluginLoader(Server instance) { - Validate.notNull(instance, "Server cannot be null"); - server = instance; - } - - public Plugin loadPlugin(final File file) throws InvalidPluginException { - Validate.notNull(file, "File cannot be null"); - - if (!file.exists()) { - throw new InvalidPluginException(new FileNotFoundException(file.getPath() + " does not exist")); - } - - final PluginDescriptionFile description; - try { - description = getPluginDescription(file); - } catch (InvalidDescriptionException ex) { - throw new InvalidPluginException(ex); - } - - final File parentFile = file.getParentFile(); - final File dataFolder = new File(parentFile, description.getName()); - @SuppressWarnings("deprecation") - final File oldDataFolder = new File(parentFile, description.getRawName()); - - // Found old data folder - if (dataFolder.equals(oldDataFolder)) { - // They are equal -- nothing needs to be done! - } else if (dataFolder.isDirectory() && oldDataFolder.isDirectory()) { - server.getLogger().warning(String.format( - "While loading %s (%s) found old-data folder: `%s' next to the new one `%s'", - description.getFullName(), - file, - oldDataFolder, - dataFolder - )); - } else if (oldDataFolder.isDirectory() && !dataFolder.exists()) { - if (!oldDataFolder.renameTo(dataFolder)) { - throw new InvalidPluginException("Unable to rename old data folder: `" + oldDataFolder + "' to: `" + dataFolder + "'"); - } - server.getLogger().log(Level.INFO, String.format( - "While loading %s (%s) renamed data folder: `%s' to `%s'", - description.getFullName(), - file, - oldDataFolder, - dataFolder - )); - } - - if (dataFolder.exists() && !dataFolder.isDirectory()) { - throw new InvalidPluginException(String.format( - "Projected datafolder: `%s' for %s (%s) exists and is not a directory", - dataFolder, - description.getFullName(), - file - )); - } - - for (final String pluginName : description.getDepend()) { - if (loaders == null) { - throw new UnknownDependencyException(pluginName); - } - PluginClassLoader current = loaders.get(pluginName); - - if (current == null) { - throw new UnknownDependencyException(pluginName); - } - } - - final PluginClassLoader loader; - try { - loader = new PluginClassLoader(this, getClass().getClassLoader(), description, dataFolder, file); - } catch (InvalidPluginException ex) { - throw ex; - } catch (Throwable ex) { - throw new InvalidPluginException(ex); - } - - loaders.put(description.getName(), loader); - - return loader.plugin; - } - - public PluginDescriptionFile getPluginDescription(File file) throws InvalidDescriptionException { - Validate.notNull(file, "File cannot be null"); - - JarFile jar = null; - InputStream stream = null; - - try { - jar = new JarFile(file); - JarEntry entry = jar.getJarEntry("plugin.yml"); - - if (entry == null) { - throw new InvalidDescriptionException(new FileNotFoundException("Jar does not contain plugin.yml")); - } - - stream = jar.getInputStream(entry); - - return new PluginDescriptionFile(stream); - - } catch (IOException ex) { - throw new InvalidDescriptionException(ex); - } catch (YAMLException ex) { - throw new InvalidDescriptionException(ex); - } finally { - if (jar != null) { - try { - jar.close(); - } catch (IOException e) { - } - } - if (stream != null) { - try { - stream.close(); - } catch (IOException e) { - } - } - } - } - - public Pattern[] getPluginFileFilters() { - return fileFilters.clone(); - } - - Class getClassByName(final String name) { - Class cachedClass = classes.get(name); - - if (cachedClass != null) { - return cachedClass; - } else { - for (String current : loaders.keySet()) { - PluginClassLoader loader = loaders.get(current); - - try { - cachedClass = loader.findClass(name, false); - } catch (ClassNotFoundException cnfe) {} - if (cachedClass != null) { - return cachedClass; - } - } - } - return null; - } - - void setClass(final String name, final Class clazz) { - if (!classes.containsKey(name)) { - classes.put(name, clazz); - - if (ConfigurationSerializable.class.isAssignableFrom(clazz)) { - Class serializable = clazz.asSubclass(ConfigurationSerializable.class); - ConfigurationSerialization.registerClass(serializable); - } - } - } - - private void removeClass(String name) { - Class clazz = classes.remove(name); - - try { - if ((clazz != null) && (ConfigurationSerializable.class.isAssignableFrom(clazz))) { - Class serializable = clazz.asSubclass(ConfigurationSerializable.class); - ConfigurationSerialization.unregisterClass(serializable); - } - } catch (NullPointerException ex) { - // Boggle! - // (Native methods throwing NPEs is not fun when you can't stop it before-hand) - } - } - - public Map, Set> createRegisteredListeners(Listener listener, final Plugin plugin) { - Validate.notNull(plugin, "Plugin can not be null"); - Validate.notNull(listener, "Listener can not be null"); - - boolean useTimings = server.getPluginManager().useTimings(); - Map, Set> ret = new HashMap, Set>(); - Set methods; - try { - Method[] publicMethods = listener.getClass().getMethods(); - methods = new HashSet(publicMethods.length, Float.MAX_VALUE); - for (Method method : publicMethods) { - methods.add(method); - } - for (Method method : listener.getClass().getDeclaredMethods()) { - methods.add(method); - } - } catch (NoClassDefFoundError e) { - plugin.getLogger().severe("Plugin " + plugin.getDescription().getFullName() + " has failed to register events for " + listener.getClass() + " because " + e.getMessage() + " does not exist."); - return ret; - } - - for (final Method method : methods) { - final EventHandler eh = method.getAnnotation(EventHandler.class); - if (eh == null) continue; - final Class checkClass; - if (method.getParameterTypes().length != 1 || !Event.class.isAssignableFrom(checkClass = method.getParameterTypes()[0])) { - plugin.getLogger().severe(plugin.getDescription().getFullName() + " attempted to register an invalid EventHandler method signature \"" + method.toGenericString() + "\" in " + listener.getClass()); - continue; - } - final Class eventClass = checkClass.asSubclass(Event.class); - method.setAccessible(true); - Set eventSet = ret.get(eventClass); - if (eventSet == null) { - eventSet = new HashSet(); - ret.put(eventClass, eventSet); - } - - for (Class clazz = eventClass; Event.class.isAssignableFrom(clazz); clazz = clazz.getSuperclass()) { - // This loop checks for extending deprecated events - if (clazz.getAnnotation(Deprecated.class) != null) { - Warning warning = clazz.getAnnotation(Warning.class); - WarningState warningState = server.getWarningState(); - if (!warningState.printFor(warning)) { - break; - } - plugin.getLogger().log( - Level.WARNING, - String.format( - "\"%s\" has registered a listener for %s on method \"%s\", but the event is Deprecated." + - " \"%s\"; please notify the authors %s.", - plugin.getDescription().getFullName(), - clazz.getName(), - method.toGenericString(), - (warning != null && warning.reason().length() != 0) ? warning.reason() : "Server performance will be affected", - Arrays.toString(plugin.getDescription().getAuthors().toArray())), - warningState == WarningState.ON ? new AuthorNagException(null) : null); - break; - } - } - - EventExecutor executor = new EventExecutor() { - public void execute(Listener listener, Event event) throws EventException { - try { - if (!eventClass.isAssignableFrom(event.getClass())) { - return; - } - method.invoke(listener, event); - } catch (InvocationTargetException ex) { - throw new EventException(ex.getCause()); - } catch (Throwable t) { - throw new EventException(t); - } - } - }; - if (useTimings) { - eventSet.add(new TimedRegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled())); - } else { - eventSet.add(new RegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled())); - } - } - return ret; - } - - public void enablePlugin(final Plugin plugin) { - Validate.isTrue(plugin instanceof JavaPlugin, "Plugin is not associated with this PluginLoader"); - - if (!plugin.isEnabled()) { - plugin.getLogger().info("Enabling " + plugin.getDescription().getFullName()); - - JavaPlugin jPlugin = (JavaPlugin) plugin; - - String pluginName = jPlugin.getDescription().getName(); - - if (!loaders.containsKey(pluginName)) { - loaders.put(pluginName, (PluginClassLoader) jPlugin.getClassLoader()); - } - - try { - jPlugin.setEnabled(true); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred while enabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - // Perhaps abort here, rather than continue going, but as it stands, - // an abort is not possible the way it's currently written - server.getPluginManager().callEvent(new PluginEnableEvent(plugin)); - } - } - - public void disablePlugin(Plugin plugin) { - Validate.isTrue(plugin instanceof JavaPlugin, "Plugin is not associated with this PluginLoader"); - - if (plugin.isEnabled()) { - String message = String.format("Disabling %s", plugin.getDescription().getFullName()); - plugin.getLogger().info(message); - - server.getPluginManager().callEvent(new PluginDisableEvent(plugin)); - - JavaPlugin jPlugin = (JavaPlugin) plugin; - ClassLoader cloader = jPlugin.getClassLoader(); - - try { - jPlugin.setEnabled(false); - } catch (Throwable ex) { - server.getLogger().log(Level.SEVERE, "Error occurred while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); - } - - loaders.remove(jPlugin.getDescription().getName()); - - if (cloader instanceof PluginClassLoader) { - PluginClassLoader loader = (PluginClassLoader) cloader; - Set names = loader.getClasses(); - - for (String name : names) { - removeClass(name); - } - } - } - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/java/PluginClassLoader.java b/LiveWeather/src/org/bukkit/plugin/java/PluginClassLoader.java deleted file mode 100755 index 13f8633..0000000 --- a/LiveWeather/src/org/bukkit/plugin/java/PluginClassLoader.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bukkit.plugin.java; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang.Validate; -import org.bukkit.plugin.InvalidPluginException; -import org.bukkit.plugin.PluginDescriptionFile; - -/** - * A ClassLoader for plugins, to allow shared classes across multiple plugins - */ -final class PluginClassLoader extends URLClassLoader { - private final JavaPluginLoader loader; - private final Map> classes = new HashMap>(); - private final PluginDescriptionFile description; - private final File dataFolder; - private final File file; - final JavaPlugin plugin; - private JavaPlugin pluginInit; - private IllegalStateException pluginState; - - PluginClassLoader(final JavaPluginLoader loader, final ClassLoader parent, final PluginDescriptionFile description, final File dataFolder, final File file) throws InvalidPluginException, MalformedURLException { - super(new URL[] {file.toURI().toURL()}, parent); - Validate.notNull(loader, "Loader cannot be null"); - - this.loader = loader; - this.description = description; - this.dataFolder = dataFolder; - this.file = file; - - try { - Class jarClass; - try { - jarClass = Class.forName(description.getMain(), true, this); - } catch (ClassNotFoundException ex) { - throw new InvalidPluginException("Cannot find main class `" + description.getMain() + "'", ex); - } - - Class pluginClass; - try { - pluginClass = jarClass.asSubclass(JavaPlugin.class); - } catch (ClassCastException ex) { - throw new InvalidPluginException("main class `" + description.getMain() + "' does not extend JavaPlugin", ex); - } - - plugin = pluginClass.newInstance(); - } catch (IllegalAccessException ex) { - throw new InvalidPluginException("No public constructor", ex); - } catch (InstantiationException ex) { - throw new InvalidPluginException("Abnormal plugin type", ex); - } - } - - @Override - protected Class findClass(String name) throws ClassNotFoundException { - return findClass(name, true); - } - - Class findClass(String name, boolean checkGlobal) throws ClassNotFoundException { - if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) { - throw new ClassNotFoundException(name); - } - Class result = classes.get(name); - - if (result == null) { - if (checkGlobal) { - result = loader.getClassByName(name); - } - - if (result == null) { - result = super.findClass(name); - - if (result != null) { - loader.setClass(name, result); - } - } - - classes.put(name, result); - } - - return result; - } - - Set getClasses() { - return classes.keySet(); - } - - synchronized void initialize(JavaPlugin javaPlugin) { - Validate.notNull(javaPlugin, "Initializing plugin cannot be null"); - Validate.isTrue(javaPlugin.getClass().getClassLoader() == this, "Cannot initialize plugin outside of this class loader"); - if (this.plugin != null || this.pluginInit != null) { - throw new IllegalArgumentException("Plugin already initialized!", pluginState); - } - - pluginState = new IllegalStateException("Initial initialization"); - this.pluginInit = javaPlugin; - - javaPlugin.init(loader, loader.server, description, dataFolder, file, this); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNameTooLongException.java b/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNameTooLongException.java deleted file mode 100755 index 80ef8a2..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNameTooLongException.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.plugin.messaging; - -/** - * Thrown if a Plugin Channel is too long. - */ -@SuppressWarnings("serial") -public class ChannelNameTooLongException extends RuntimeException { - public ChannelNameTooLongException() { - super("Attempted to send a Plugin Message to a channel that was too large. The maximum length a channel may be is " + Messenger.MAX_CHANNEL_SIZE + " chars."); - } - - public ChannelNameTooLongException(String channel) { - super("Attempted to send a Plugin Message to a channel that was too large. The maximum length a channel may be is " + Messenger.MAX_CHANNEL_SIZE + " chars (attempted " + channel.length() + " - '" + channel + "."); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java b/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java deleted file mode 100755 index 2266f17..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.plugin.messaging; - -/** - * Thrown if a Plugin attempts to send a message on an unregistered channel. - */ -@SuppressWarnings("serial") -public class ChannelNotRegisteredException extends RuntimeException { - public ChannelNotRegisteredException() { - this("Attempted to send a plugin message through an unregistered channel."); - } - - public ChannelNotRegisteredException(String channel) { - super("Attempted to send a plugin message through the unregistered channel `" + channel + "'."); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/MessageTooLargeException.java b/LiveWeather/src/org/bukkit/plugin/messaging/MessageTooLargeException.java deleted file mode 100755 index 61af8c4..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/MessageTooLargeException.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.plugin.messaging; - -/** - * Thrown if a Plugin Message is sent that is too large to be sent. - */ -@SuppressWarnings("serial") -public class MessageTooLargeException extends RuntimeException { - public MessageTooLargeException() { - this("Attempted to send a plugin message that was too large. The maximum length a plugin message may be is " + Messenger.MAX_MESSAGE_SIZE + " bytes."); - } - - public MessageTooLargeException(byte[] message) { - this(message.length); - } - - public MessageTooLargeException(int length) { - this("Attempted to send a plugin message that was too large. The maximum length a plugin message may be is " + Messenger.MAX_MESSAGE_SIZE + " bytes (tried to send one that is " + length + " bytes long)."); - } - - public MessageTooLargeException(String msg) { - super(msg); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/Messenger.java b/LiveWeather/src/org/bukkit/plugin/messaging/Messenger.java deleted file mode 100755 index aa009fe..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/Messenger.java +++ /dev/null @@ -1,216 +0,0 @@ -package org.bukkit.plugin.messaging; - -import java.util.Set; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -/** - * A class responsible for managing the registrations of plugin channels and - * their listeners. - */ -public interface Messenger { - - /** - * Represents the largest size that an individual Plugin Message may be. - */ - public static final int MAX_MESSAGE_SIZE = 32766; - - /** - * Represents the largest size that a Plugin Channel may be. - */ - public static final int MAX_CHANNEL_SIZE = 16; - - /** - * Checks if the specified channel is a reserved name. - * - * @param channel Channel name to check. - * @return True if the channel is reserved, otherwise false. - * @throws IllegalArgumentException Thrown if channel is null. - */ - public boolean isReservedChannel(String channel); - - /** - * Registers the specific plugin to the requested outgoing plugin channel, - * allowing it to send messages through that channel to any clients. - * - * @param plugin Plugin that wishes to send messages through the channel. - * @param channel Channel to register. - * @throws IllegalArgumentException Thrown if plugin or channel is null. - */ - public void registerOutgoingPluginChannel(Plugin plugin, String channel); - - /** - * Unregisters the specific plugin from the requested outgoing plugin - * channel, no longer allowing it to send messages through that channel to - * any clients. - * - * @param plugin Plugin that no longer wishes to send messages through the - * channel. - * @param channel Channel to unregister. - * @throws IllegalArgumentException Thrown if plugin or channel is null. - */ - public void unregisterOutgoingPluginChannel(Plugin plugin, String channel); - - /** - * Unregisters the specific plugin from all outgoing plugin channels, no - * longer allowing it to send any plugin messages. - * - * @param plugin Plugin that no longer wishes to send plugin messages. - * @throws IllegalArgumentException Thrown if plugin is null. - */ - public void unregisterOutgoingPluginChannel(Plugin plugin); - - /** - * Registers the specific plugin for listening on the requested incoming - * plugin channel, allowing it to act upon any plugin messages. - * - * @param plugin Plugin that wishes to register to this channel. - * @param channel Channel to register. - * @param listener Listener to receive messages on. - * @return The resulting registration that was made as a result of this - * method. - * @throws IllegalArgumentException Thrown if plugin, channel or listener - * is null, or the listener is already registered for this channel. - */ - public PluginMessageListenerRegistration registerIncomingPluginChannel(Plugin plugin, String channel, PluginMessageListener listener); - - /** - * Unregisters the specific plugin's listener from listening on the - * requested incoming plugin channel, no longer allowing it to act upon - * any plugin messages. - * - * @param plugin Plugin that wishes to unregister from this channel. - * @param channel Channel to unregister. - * @param listener Listener to stop receiving messages on. - * @throws IllegalArgumentException Thrown if plugin, channel or listener - * is null. - */ - public void unregisterIncomingPluginChannel(Plugin plugin, String channel, PluginMessageListener listener); - - /** - * Unregisters the specific plugin from listening on the requested - * incoming plugin channel, no longer allowing it to act upon any plugin - * messages. - * - * @param plugin Plugin that wishes to unregister from this channel. - * @param channel Channel to unregister. - * @throws IllegalArgumentException Thrown if plugin or channel is null. - */ - public void unregisterIncomingPluginChannel(Plugin plugin, String channel); - - /** - * Unregisters the specific plugin from listening on all plugin channels - * through all listeners. - * - * @param plugin Plugin that wishes to unregister from this channel. - * @throws IllegalArgumentException Thrown if plugin is null. - */ - public void unregisterIncomingPluginChannel(Plugin plugin); - - /** - * Gets a set containing all the outgoing plugin channels. - * - * @return List of all registered outgoing plugin channels. - */ - public Set getOutgoingChannels(); - - /** - * Gets a set containing all the outgoing plugin channels that the - * specified plugin is registered to. - * - * @param plugin Plugin to retrieve channels for. - * @return List of all registered outgoing plugin channels that a plugin - * is registered to. - * @throws IllegalArgumentException Thrown if plugin is null. - */ - public Set getOutgoingChannels(Plugin plugin); - - /** - * Gets a set containing all the incoming plugin channels. - * - * @return List of all registered incoming plugin channels. - */ - public Set getIncomingChannels(); - - /** - * Gets a set containing all the incoming plugin channels that the - * specified plugin is registered for. - * - * @param plugin Plugin to retrieve channels for. - * @return List of all registered incoming plugin channels that the plugin - * is registered for. - * @throws IllegalArgumentException Thrown if plugin is null. - */ - public Set getIncomingChannels(Plugin plugin); - - /** - * Gets a set containing all the incoming plugin channel registrations - * that the specified plugin has. - * - * @param plugin Plugin to retrieve registrations for. - * @return List of all registrations that the plugin has. - * @throws IllegalArgumentException Thrown if plugin is null. - */ - public Set getIncomingChannelRegistrations(Plugin plugin); - - /** - * Gets a set containing all the incoming plugin channel registrations - * that are on the requested channel. - * - * @param channel Channel to retrieve registrations for. - * @return List of all registrations that are on the channel. - * @throws IllegalArgumentException Thrown if channel is null. - */ - public Set getIncomingChannelRegistrations(String channel); - - /** - * Gets a set containing all the incoming plugin channel registrations - * that the specified plugin has on the requested channel. - * - * @param plugin Plugin to retrieve registrations for. - * @param channel Channel to filter registrations by. - * @return List of all registrations that the plugin has. - * @throws IllegalArgumentException Thrown if plugin or channel is null. - */ - public Set getIncomingChannelRegistrations(Plugin plugin, String channel); - - /** - * Checks if the specified plugin message listener registration is valid. - *

            - * A registration is considered valid if it has not be unregistered and - * that the plugin is still enabled. - * - * @param registration Registration to check. - * @return True if the registration is valid, otherwise false. - */ - public boolean isRegistrationValid(PluginMessageListenerRegistration registration); - - /** - * Checks if the specified plugin has registered to receive incoming - * messages through the requested channel. - * - * @param plugin Plugin to check registration for. - * @param channel Channel to test for. - * @return True if the channel is registered, else false. - */ - public boolean isIncomingChannelRegistered(Plugin plugin, String channel); - - /** - * Checks if the specified plugin has registered to send outgoing messages - * through the requested channel. - * - * @param plugin Plugin to check registration for. - * @param channel Channel to test for. - * @return True if the channel is registered, else false. - */ - public boolean isOutgoingChannelRegistered(Plugin plugin, String channel); - - /** - * Dispatches the specified incoming message to any registered listeners. - * - * @param source Source of the message. - * @param channel Channel that the message was sent by. - * @param message Raw payload of the message. - */ - public void dispatchIncomingMessage(Player source, String channel, byte[] message); -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/PluginChannelDirection.java b/LiveWeather/src/org/bukkit/plugin/messaging/PluginChannelDirection.java deleted file mode 100755 index 3d7ec2e..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/PluginChannelDirection.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bukkit.plugin.messaging; - -/** - * Represents the different directions a plugin channel may go. - */ -public enum PluginChannelDirection { - - /** - * The plugin channel is being sent to the server from a client. - */ - INCOMING, - - /** - * The plugin channel is being sent to a client from the server. - */ - OUTGOING -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListener.java b/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListener.java deleted file mode 100755 index f1aa080..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.plugin.messaging; - -import org.bukkit.entity.Player; - -/** - * A listener for a specific Plugin Channel, which will receive notifications - * of messages sent from a client. - */ -public interface PluginMessageListener { - - /** - * A method that will be thrown when a PluginMessageSource sends a plugin - * message on a registered channel. - * - * @param channel Channel that the message was sent through. - * @param player Source of the message. - * @param message The raw message that was sent. - */ - public void onPluginMessageReceived(String channel, Player player, byte[] message); -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java b/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java deleted file mode 100755 index 29929bf..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.bukkit.plugin.messaging; - -import org.bukkit.plugin.Plugin; - -/** - * Contains information about a {@link Plugin}s registration to a plugin - * channel. - */ -public final class PluginMessageListenerRegistration { - private final Messenger messenger; - private final Plugin plugin; - private final String channel; - private final PluginMessageListener listener; - - public PluginMessageListenerRegistration(Messenger messenger, Plugin plugin, String channel, PluginMessageListener listener) { - if (messenger == null) { - throw new IllegalArgumentException("Messenger cannot be null!"); - } - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null!"); - } - if (channel == null) { - throw new IllegalArgumentException("Channel cannot be null!"); - } - if (listener == null) { - throw new IllegalArgumentException("Listener cannot be null!"); - } - - this.messenger = messenger; - this.plugin = plugin; - this.channel = channel; - this.listener = listener; - } - - /** - * Gets the plugin channel that this registration is about. - * - * @return Plugin channel. - */ - public String getChannel() { - return channel; - } - - /** - * Gets the registered listener described by this registration. - * - * @return Registered listener. - */ - public PluginMessageListener getListener() { - return listener; - } - - /** - * Gets the plugin that this registration is for. - * - * @return Registered plugin. - */ - public Plugin getPlugin() { - return plugin; - } - - /** - * Checks if this registration is still valid. - * - * @return True if this registration is still valid, otherwise false. - */ - public boolean isValid() { - return messenger.isRegistrationValid(this); - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final PluginMessageListenerRegistration other = (PluginMessageListenerRegistration) obj; - if (this.messenger != other.messenger && (this.messenger == null || !this.messenger.equals(other.messenger))) { - return false; - } - if (this.plugin != other.plugin && (this.plugin == null || !this.plugin.equals(other.plugin))) { - return false; - } - if ((this.channel == null) ? (other.channel != null) : !this.channel.equals(other.channel)) { - return false; - } - if (this.listener != other.listener && (this.listener == null || !this.listener.equals(other.listener))) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 53 * hash + (this.messenger != null ? this.messenger.hashCode() : 0); - hash = 53 * hash + (this.plugin != null ? this.plugin.hashCode() : 0); - hash = 53 * hash + (this.channel != null ? this.channel.hashCode() : 0); - hash = 53 * hash + (this.listener != null ? this.listener.hashCode() : 0); - return hash; - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageRecipient.java b/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageRecipient.java deleted file mode 100755 index e5c5916..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/PluginMessageRecipient.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bukkit.plugin.messaging; - -import java.util.Set; -import org.bukkit.plugin.Plugin; - -/** - * Represents a possible recipient for a Plugin Message. - */ -public interface PluginMessageRecipient { - /** - * Sends this recipient a Plugin Message on the specified outgoing - * channel. - *

            - * The message may not be larger than {@link Messenger#MAX_MESSAGE_SIZE} - * bytes, and the plugin must be registered to send messages on the - * specified channel. - * - * @param source The plugin that sent this message. - * @param channel The channel to send this message on. - * @param message The raw message to send. - * @throws IllegalArgumentException Thrown if the source plugin is - * disabled. - * @throws IllegalArgumentException Thrown if source, channel or message - * is null. - * @throws MessageTooLargeException Thrown if the message is too big. - * @throws ChannelNotRegisteredException Thrown if the channel is not - * registered for this plugin. - */ - public void sendPluginMessage(Plugin source, String channel, byte[] message); - - /** - * Gets a set containing all the Plugin Channels that this client is - * listening on. - * - * @return Set containing all the channels that this client may accept. - */ - public Set getListeningPluginChannels(); -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/ReservedChannelException.java b/LiveWeather/src/org/bukkit/plugin/messaging/ReservedChannelException.java deleted file mode 100755 index 0221f04..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/ReservedChannelException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bukkit.plugin.messaging; - -/** - * Thrown if a plugin attempts to register for a reserved channel (such as - * "REGISTER") - */ -@SuppressWarnings("serial") -public class ReservedChannelException extends RuntimeException { - public ReservedChannelException() { - this("Attempted to register for a reserved channel name."); - } - - public ReservedChannelException(String name) { - super("Attempted to register for a reserved channel name ('" + name + "')"); - } -} diff --git a/LiveWeather/src/org/bukkit/plugin/messaging/StandardMessenger.java b/LiveWeather/src/org/bukkit/plugin/messaging/StandardMessenger.java deleted file mode 100755 index a906f8d..0000000 --- a/LiveWeather/src/org/bukkit/plugin/messaging/StandardMessenger.java +++ /dev/null @@ -1,481 +0,0 @@ -package org.bukkit.plugin.messaging; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -/** - * Standard implementation to {@link Messenger} - */ -public class StandardMessenger implements Messenger { - private final Map> incomingByChannel = new HashMap>(); - private final Map> incomingByPlugin = new HashMap>(); - private final Map> outgoingByChannel = new HashMap>(); - private final Map> outgoingByPlugin = new HashMap>(); - private final Object incomingLock = new Object(); - private final Object outgoingLock = new Object(); - - private void addToOutgoing(Plugin plugin, String channel) { - synchronized (outgoingLock) { - Set plugins = outgoingByChannel.get(channel); - Set channels = outgoingByPlugin.get(plugin); - - if (plugins == null) { - plugins = new HashSet(); - outgoingByChannel.put(channel, plugins); - } - - if (channels == null) { - channels = new HashSet(); - outgoingByPlugin.put(plugin, channels); - } - - plugins.add(plugin); - channels.add(channel); - } - } - - private void removeFromOutgoing(Plugin plugin, String channel) { - synchronized (outgoingLock) { - Set plugins = outgoingByChannel.get(channel); - Set channels = outgoingByPlugin.get(plugin); - - if (plugins != null) { - plugins.remove(plugin); - - if (plugins.isEmpty()) { - outgoingByChannel.remove(channel); - } - } - - if (channels != null) { - channels.remove(channel); - - if (channels.isEmpty()) { - outgoingByChannel.remove(channel); - } - } - } - } - - private void removeFromOutgoing(Plugin plugin) { - synchronized (outgoingLock) { - Set channels = outgoingByPlugin.get(plugin); - - if (channels != null) { - String[] toRemove = channels.toArray(new String[0]); - - outgoingByPlugin.remove(plugin); - - for (String channel : toRemove) { - removeFromOutgoing(plugin, channel); - } - } - } - } - - private void addToIncoming(PluginMessageListenerRegistration registration) { - synchronized (incomingLock) { - Set registrations = incomingByChannel.get(registration.getChannel()); - - if (registrations == null) { - registrations = new HashSet(); - incomingByChannel.put(registration.getChannel(), registrations); - } else { - if (registrations.contains(registration)) { - throw new IllegalArgumentException("This registration already exists"); - } - } - - registrations.add(registration); - - registrations = incomingByPlugin.get(registration.getPlugin()); - - if (registrations == null) { - registrations = new HashSet(); - incomingByPlugin.put(registration.getPlugin(), registrations); - } else { - if (registrations.contains(registration)) { - throw new IllegalArgumentException("This registration already exists"); - } - } - - registrations.add(registration); - } - } - - private void removeFromIncoming(PluginMessageListenerRegistration registration) { - synchronized (incomingLock) { - Set registrations = incomingByChannel.get(registration.getChannel()); - - if (registrations != null) { - registrations.remove(registration); - - if (registrations.isEmpty()) { - incomingByChannel.remove(registration.getChannel()); - } - } - - registrations = incomingByPlugin.get(registration.getPlugin()); - - if (registrations != null) { - registrations.remove(registration); - - if (registrations.isEmpty()) { - incomingByPlugin.remove(registration.getPlugin()); - } - } - } - } - - private void removeFromIncoming(Plugin plugin, String channel) { - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - PluginMessageListenerRegistration[] toRemove = registrations.toArray(new PluginMessageListenerRegistration[0]); - - for (PluginMessageListenerRegistration registration : toRemove) { - if (registration.getChannel().equals(channel)) { - removeFromIncoming(registration); - } - } - } - } - } - - private void removeFromIncoming(Plugin plugin) { - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - PluginMessageListenerRegistration[] toRemove = registrations.toArray(new PluginMessageListenerRegistration[0]); - - incomingByPlugin.remove(plugin); - - for (PluginMessageListenerRegistration registration : toRemove) { - removeFromIncoming(registration); - } - } - } - } - - public boolean isReservedChannel(String channel) { - validateChannel(channel); - - return channel.equals("REGISTER") || channel.equals("UNREGISTER"); - } - - public void registerOutgoingPluginChannel(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - if (isReservedChannel(channel)) { - throw new ReservedChannelException(channel); - } - - addToOutgoing(plugin, channel); - } - - public void unregisterOutgoingPluginChannel(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - - removeFromOutgoing(plugin, channel); - } - - public void unregisterOutgoingPluginChannel(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - removeFromOutgoing(plugin); - } - - public PluginMessageListenerRegistration registerIncomingPluginChannel(Plugin plugin, String channel, PluginMessageListener listener) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - if (isReservedChannel(channel)) { - throw new ReservedChannelException(channel); - } - if (listener == null) { - throw new IllegalArgumentException("Listener cannot be null"); - } - - PluginMessageListenerRegistration result = new PluginMessageListenerRegistration(this, plugin, channel, listener); - - addToIncoming(result); - - return result; - } - - public void unregisterIncomingPluginChannel(Plugin plugin, String channel, PluginMessageListener listener) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - if (listener == null) { - throw new IllegalArgumentException("Listener cannot be null"); - } - validateChannel(channel); - - removeFromIncoming(new PluginMessageListenerRegistration(this, plugin, channel, listener)); - } - - public void unregisterIncomingPluginChannel(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - - removeFromIncoming(plugin, channel); - } - - public void unregisterIncomingPluginChannel(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - removeFromIncoming(plugin); - } - - public Set getOutgoingChannels() { - synchronized (outgoingLock) { - Set keys = outgoingByChannel.keySet(); - return ImmutableSet.copyOf(keys); - } - } - - public Set getOutgoingChannels(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - synchronized (outgoingLock) { - Set channels = outgoingByPlugin.get(plugin); - - if (channels != null) { - return ImmutableSet.copyOf(channels); - } else { - return ImmutableSet.of(); - } - } - } - - public Set getIncomingChannels() { - synchronized (incomingLock) { - Set keys = incomingByChannel.keySet(); - return ImmutableSet.copyOf(keys); - } - } - - public Set getIncomingChannels(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - Builder builder = ImmutableSet.builder(); - - for (PluginMessageListenerRegistration registration : registrations) { - builder.add(registration.getChannel()); - } - - return builder.build(); - } else { - return ImmutableSet.of(); - } - } - } - - public Set getIncomingChannelRegistrations(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - return ImmutableSet.copyOf(registrations); - } else { - return ImmutableSet.of(); - } - } - } - - public Set getIncomingChannelRegistrations(String channel) { - validateChannel(channel); - - synchronized (incomingLock) { - Set registrations = incomingByChannel.get(channel); - - if (registrations != null) { - return ImmutableSet.copyOf(registrations); - } else { - return ImmutableSet.of(); - } - } - } - - public Set getIncomingChannelRegistrations(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - Builder builder = ImmutableSet.builder(); - - for (PluginMessageListenerRegistration registration : registrations) { - if (registration.getChannel().equals(channel)) { - builder.add(registration); - } - } - - return builder.build(); - } else { - return ImmutableSet.of(); - } - } - } - - public boolean isRegistrationValid(PluginMessageListenerRegistration registration) { - if (registration == null) { - throw new IllegalArgumentException("Registration cannot be null"); - } - - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(registration.getPlugin()); - - if (registrations != null) { - return registrations.contains(registration); - } - - return false; - } - } - - public boolean isIncomingChannelRegistered(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - - synchronized (incomingLock) { - Set registrations = incomingByPlugin.get(plugin); - - if (registrations != null) { - for (PluginMessageListenerRegistration registration : registrations) { - if (registration.getChannel().equals(channel)) { - return true; - } - } - } - - return false; - } - } - - public boolean isOutgoingChannelRegistered(Plugin plugin, String channel) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null"); - } - validateChannel(channel); - - synchronized (outgoingLock) { - Set channels = outgoingByPlugin.get(plugin); - - if (channels != null) { - return channels.contains(channel); - } - - return false; - } - } - - public void dispatchIncomingMessage(Player source, String channel, byte[] message) { - if (source == null) { - throw new IllegalArgumentException("Player source cannot be null"); - } - if (message == null) { - throw new IllegalArgumentException("Message cannot be null"); - } - validateChannel(channel); - - Set registrations = getIncomingChannelRegistrations(channel); - - for (PluginMessageListenerRegistration registration : registrations) { - registration.getListener().onPluginMessageReceived(channel, source, message); - } - } - - /** - * Validates a Plugin Channel name. - * - * @param channel Channel name to validate. - */ - public static void validateChannel(String channel) { - if (channel == null) { - throw new IllegalArgumentException("Channel cannot be null"); - } - if (channel.length() > Messenger.MAX_CHANNEL_SIZE) { - throw new ChannelNameTooLongException(channel); - } - } - - /** - * Validates the input of a Plugin Message, ensuring the arguments are all - * valid. - * - * @param messenger Messenger to use for validation. - * @param source Source plugin of the Message. - * @param channel Plugin Channel to send the message by. - * @param message Raw message payload to send. - * @throws IllegalArgumentException Thrown if the source plugin is - * disabled. - * @throws IllegalArgumentException Thrown if source, channel or message - * is null. - * @throws MessageTooLargeException Thrown if the message is too big. - * @throws ChannelNameTooLongException Thrown if the channel name is too - * long. - * @throws ChannelNotRegisteredException Thrown if the channel is not - * registered for this plugin. - */ - public static void validatePluginMessage(Messenger messenger, Plugin source, String channel, byte[] message) { - if (messenger == null) { - throw new IllegalArgumentException("Messenger cannot be null"); - } - if (source == null) { - throw new IllegalArgumentException("Plugin source cannot be null"); - } - if (!source.isEnabled()) { - throw new IllegalArgumentException("Plugin must be enabled to send messages"); - } - if (message == null) { - throw new IllegalArgumentException("Message cannot be null"); - } - if (!messenger.isOutgoingChannelRegistered(source, channel)) { - throw new ChannelNotRegisteredException(channel); - } - if (message.length > Messenger.MAX_MESSAGE_SIZE) { - throw new MessageTooLargeException(message); - } - validateChannel(channel); - } -} diff --git a/LiveWeather/src/org/bukkit/potion/Potion.java b/LiveWeather/src/org/bukkit/potion/Potion.java deleted file mode 100755 index a358c29..0000000 --- a/LiveWeather/src/org/bukkit/potion/Potion.java +++ /dev/null @@ -1,442 +0,0 @@ -package org.bukkit.potion; - -import java.util.Collection; - -import org.apache.commons.lang.Validate; -import org.bukkit.Material; -import org.bukkit.entity.LivingEntity; -import org.bukkit.inventory.ItemStack; - -import com.google.common.collect.ImmutableList; - -/** - * Represents a minecraft potion - */ -public class Potion { - private boolean extended = false; - private boolean splash = false; - private int level = 1; - private int name = -1; - private PotionType type; - - /** - * Construct a new potion of the given type. Unless the type is {@link - * PotionType#WATER}, it will be level one, without extended duration. - * Don't use this constructor to create a no-effect potion other than - * water bottle. - * - * @param type The potion type - * @see #Potion(int) - */ - public Potion(PotionType type) { - this.type = type; - if (type != null) { - this.name = type.getDamageValue(); - } - if (type == null || type == PotionType.WATER) { - this.level = 0; - } - } - - /** - * @deprecated In favour of {@link #Potion(PotionType, int)} - */ - @SuppressWarnings("javadoc") - @Deprecated - public Potion(PotionType type, Tier tier) { - this(type, tier == Tier.TWO ? 2 : 1); - Validate.notNull(type, "Type cannot be null"); - } - - /** - * @deprecated In favour of {@link #Potion(PotionType, int, boolean)} - */ - @SuppressWarnings("javadoc") - @Deprecated - public Potion(PotionType type, Tier tier, boolean splash) { - this(type, tier == Tier.TWO ? 2 : 1, splash); - } - - /** - * @deprecated In favour of {@link #Potion(PotionType, int, boolean, - * boolean)} - */ - @SuppressWarnings("javadoc") - @Deprecated - public Potion(PotionType type, Tier tier, boolean splash, boolean extended) { - this(type, tier, splash); - this.extended = extended; - } - - /** - * Create a new potion of the given type and level. - * - * @param type The type of potion. - * @param level The potion's level. - */ - public Potion(PotionType type, int level) { - this(type); - Validate.notNull(type, "Type cannot be null"); - Validate.isTrue(type != PotionType.WATER, "Water bottles don't have a level!"); - Validate.isTrue(level > 0 && level < 3, "Level must be 1 or 2"); - this.level = level; - } - - /** - * Create a new potion of the given type and level. - * - * @param type The type of potion. - * @param level The potion's level. - * @param splash Whether it is a splash potion. - * @deprecated In favour of using {@link #Potion(PotionType)} with {@link - * #splash()}. - */ - @Deprecated - public Potion(PotionType type, int level, boolean splash) { - this(type, level); - this.splash = splash; - } - - /** - * Create a new potion of the given type and level. - * - * @param type The type of potion. - * @param level The potion's level. - * @param splash Whether it is a splash potion. - * @param extended Whether it has an extended duration. - * @deprecated In favour of using {@link #Potion(PotionType)} with {@link - * #extend()} and possibly {@link #splash()}. - */ - @Deprecated - public Potion(PotionType type, int level, boolean splash, boolean extended) { - this(type, level, splash); - this.extended = extended; - } - - /** - * Create a potion with a specific name. - * - * @param name The name index (0-63) - */ - public Potion(int name) { - this(PotionType.getByDamageValue(name & POTION_BIT)); - this.name = name & NAME_BIT; - if ((name & POTION_BIT) == 0) { - // If it's 0 it would've become PotionType.WATER, but it should actually be mundane potion - this.type = null; - } - } - - /** - * Chain this to the constructor to make the potion a splash potion. - * - * @return The potion. - */ - public Potion splash() { - setSplash(true); - return this; - } - - /** - * Chain this to the constructor to extend the potion's duration. - * - * @return The potion. - */ - public Potion extend() { - setHasExtendedDuration(true); - return this; - } - - /** - * Applies the effects of this potion to the given {@link ItemStack}. The - * ItemStack must be a potion. - * - * @param to The itemstack to apply to - */ - public void apply(ItemStack to) { - Validate.notNull(to, "itemstack cannot be null"); - Validate.isTrue(to.getType() == Material.POTION, "given itemstack is not a potion"); - to.setDurability(toDamageValue()); - } - - /** - * Applies the effects that would be applied by this potion to the given - * {@link LivingEntity}. - * - * @see LivingEntity#addPotionEffects(Collection) - * @param to The entity to apply the effects to - */ - public void apply(LivingEntity to) { - Validate.notNull(to, "entity cannot be null"); - to.addPotionEffects(getEffects()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - Potion other = (Potion) obj; - return extended == other.extended && splash == other.splash && level == other.level && type == other.type; - } - - /** - * Returns a collection of {@link PotionEffect}s that this {@link Potion} - * would confer upon a {@link LivingEntity}. - * - * @see PotionBrewer#getEffectsFromDamage(int) - * @see Potion#toDamageValue() - * @return The effects that this potion applies - */ - public Collection getEffects() { - if (type == null) return ImmutableList.of(); - return getBrewer().getEffectsFromDamage(toDamageValue()); - } - - /** - * Returns the level of this potion. - * - * @return The level of this potion - */ - public int getLevel() { - return level; - } - - /** - * Returns the {@link Tier} of this potion. - * - * @return The tier of this potion - */ - @Deprecated - public Tier getTier() { - return level == 2 ? Tier.TWO : Tier.ONE; - } - - /** - * Returns the {@link PotionType} of this potion. - * - * @return The type of this potion - */ - public PotionType getType() { - return type; - } - - /** - * Returns whether this potion has an extended duration. - * - * @return Whether this potion has extended duration - */ - public boolean hasExtendedDuration() { - return extended; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = prime + level; - result = prime * result + (extended ? 1231 : 1237); - result = prime * result + (splash ? 1231 : 1237); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - /** - * Returns whether this potion is a splash potion. - * - * @return Whether this is a splash potion - */ - public boolean isSplash() { - return splash; - } - - /** - * Set whether this potion has extended duration. This will cause the - * potion to have roughly 8/3 more duration than a regular potion. - * - * @param isExtended Whether the potion should have extended duration - */ - public void setHasExtendedDuration(boolean isExtended) { - Validate.isTrue(type == null || !type.isInstant(), "Instant potions cannot be extended"); - extended = isExtended; - } - - /** - * Sets whether this potion is a splash potion. Splash potions can be - * thrown for a radius effect. - * - * @param isSplash Whether this is a splash potion - */ - public void setSplash(boolean isSplash) { - splash = isSplash; - } - - /** - * Sets the {@link Tier} of this potion. - * - * @param tier The new tier of this potion - * @deprecated In favour of {@link #setLevel(int)} - */ - @Deprecated - public void setTier(Tier tier) { - Validate.notNull(tier, "tier cannot be null"); - this.level = (tier == Tier.TWO ? 2 : 1); - } - - /** - * Sets the {@link PotionType} of this potion. - * - * @param type The new type of this potion - */ - public void setType(PotionType type) { - this.type = type; - } - - /** - * Sets the level of this potion. - * - * @param level The new level of this potion - */ - public void setLevel(int level) { - Validate.notNull(this.type, "No-effect potions don't have a level."); - int max = type.getMaxLevel(); - Validate.isTrue(level > 0 && level <= max, "Level must be " + (max == 1 ? "" : "between 1 and ") + max + " for this potion"); - this.level = level; - } - - /** - * Converts this potion to a valid potion damage short, usable for potion - * item stacks. - * - * @return The damage value of this potion - * @deprecated Magic value - */ - @Deprecated - public short toDamageValue() { - short damage; - if (type == PotionType.WATER) { - return 0; - } else if (type == null) { - // Without this, mundanePotion.toDamageValue() would return 0 - damage = (short) (name == 0 ? 8192 : name); - } else { - damage = (short) (level - 1); - damage <<= TIER_SHIFT; - damage |= (short) type.getDamageValue(); - } - if (splash) { - damage |= SPLASH_BIT; - } - if (extended) { - damage |= EXTENDED_BIT; - } - return damage; - } - - /** - * Converts this potion to an {@link ItemStack} with the specified amount - * and a correct damage value. - * - * @param amount The amount of the ItemStack - * @return The created ItemStack - */ - public ItemStack toItemStack(int amount) { - return new ItemStack(Material.POTION, amount, toDamageValue()); - } - - @Deprecated - public enum Tier { - ONE(0), - TWO(0x20); - - private int damageBit; - - Tier(int bit) { - damageBit = bit; - } - - public int getDamageBit() { - return damageBit; - } - - public static Tier getByDamageBit(int damageBit) { - for (Tier tier : Tier.values()) { - if (tier.damageBit == damageBit) - return tier; - } - return null; - } - } - - private static PotionBrewer brewer; - - private static final int EXTENDED_BIT = 0x40; - private static final int POTION_BIT = 0xF; - private static final int SPLASH_BIT = 0x4000; - private static final int TIER_BIT = 0x20; - private static final int TIER_SHIFT = 5; - private static final int NAME_BIT = 0x3F; - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static Potion fromDamage(int damage) { - PotionType type = PotionType.getByDamageValue(damage & POTION_BIT); - Potion potion; - if (type == null || (type == PotionType.WATER && damage != 0)) { - potion = new Potion(damage & NAME_BIT); - } else { - int level = (damage & TIER_BIT) >> TIER_SHIFT; - level++; - potion = new Potion(type, level); - } - if ((damage & SPLASH_BIT) > 0) { - potion = potion.splash(); - } - if ((damage & EXTENDED_BIT) > 0) { - potion = potion.extend(); - } - return potion; - } - - public static Potion fromItemStack(ItemStack item) { - Validate.notNull(item, "item cannot be null"); - if (item.getType() != Material.POTION) - throw new IllegalArgumentException("item is not a potion"); - return fromDamage(item.getDurability()); - } - - /** - * Returns an instance of {@link PotionBrewer}. - * - * @return An instance of PotionBrewer - */ - public static PotionBrewer getBrewer() { - return brewer; - } - - /** - * Sets the current instance of {@link PotionBrewer}. Generally not to be - * used from within a plugin. - * - * @param other The new PotionBrewer - */ - public static void setPotionBrewer(PotionBrewer other) { - if (brewer != null) - throw new IllegalArgumentException("brewer can only be set internally"); - brewer = other; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public int getNameId() { - return name; - } -} \ No newline at end of file diff --git a/LiveWeather/src/org/bukkit/potion/PotionBrewer.java b/LiveWeather/src/org/bukkit/potion/PotionBrewer.java deleted file mode 100755 index 5275517..0000000 --- a/LiveWeather/src/org/bukkit/potion/PotionBrewer.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.potion; - -import java.util.Collection; - -/** - * Represents a brewer that can create {@link PotionEffect}s. - */ -public interface PotionBrewer { - - /** - * Creates a {@link PotionEffect} from the given {@link PotionEffectType}, - * applying duration modifiers and checks. - * - * @param potion The type of potion - * @param duration The duration in ticks - * @param amplifier The amplifier of the effect - * @return The resulting potion effect - */ - public PotionEffect createEffect(PotionEffectType potion, int duration, int amplifier); - - /** - * Returns a collection of {@link PotionEffect} that would be applied from - * a potion with the given data value. - * - * @param damage The data value of the potion - * @return The list of effects - * @deprecated Magic value - */ - @Deprecated - public Collection getEffectsFromDamage(int damage); -} diff --git a/LiveWeather/src/org/bukkit/potion/PotionEffect.java b/LiveWeather/src/org/bukkit/potion/PotionEffect.java deleted file mode 100755 index 24ee19d..0000000 --- a/LiveWeather/src/org/bukkit/potion/PotionEffect.java +++ /dev/null @@ -1,179 +0,0 @@ -package org.bukkit.potion; - -import java.util.Map; -import java.util.NoSuchElementException; - -import org.apache.commons.lang.Validate; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.SerializableAs; -import org.bukkit.entity.LivingEntity; - -import com.google.common.collect.ImmutableMap; - -/** - * Represents a potion effect, that can be added to a {@link LivingEntity}. A - * potion effect has a duration that it will last for, an amplifier that will - * enhance its effects, and a {@link PotionEffectType}, that represents its - * effect on an entity. - */ -@SerializableAs("PotionEffect") -public class PotionEffect implements ConfigurationSerializable { - private static final String AMPLIFIER = "amplifier"; - private static final String DURATION = "duration"; - private static final String TYPE = "effect"; - private static final String AMBIENT = "ambient"; - private final int amplifier; - private final int duration; - private final PotionEffectType type; - private final boolean ambient; - - /** - * Creates a potion effect. - * - * @param type effect type - * @param duration measured in ticks, see {@link - * PotionEffect#getDuration()} - * @param amplifier the amplifier, see {@link PotionEffect#getAmplifier()} - * @param ambient the ambient status, see {@link PotionEffect#isAmbient()} - */ - public PotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient) { - Validate.notNull(type, "effect type cannot be null"); - this.type = type; - this.duration = duration; - this.amplifier = amplifier; - this.ambient = ambient; - } - - /** - * Creates a potion effect. Assumes ambient is true. - * - * @param type Effect type - * @param duration measured in ticks - * @param amplifier the amplifier for the effect - * @see PotionEffect#PotionEffect(PotionEffectType, int, int, boolean) - */ - public PotionEffect(PotionEffectType type, int duration, int amplifier) { - this(type, duration, amplifier, true); - } - - /** - * Constructor for deserialization. - * - * @param map the map to deserialize from - */ - public PotionEffect(Map map) { - this(getEffectType(map), getInt(map, DURATION), getInt(map, AMPLIFIER), getBool(map, AMBIENT)); - } - - private static PotionEffectType getEffectType(Map map) { - int type = getInt(map, TYPE); - PotionEffectType effect = PotionEffectType.getById(type); - if (effect != null) { - return effect; - } - throw new NoSuchElementException(map + " does not contain " + TYPE); - } - - private static int getInt(Map map, Object key) { - Object num = map.get(key); - if (num instanceof Integer) { - return (Integer) num; - } - throw new NoSuchElementException(map + " does not contain " + key); - } - - private static boolean getBool(Map map, Object key) { - Object bool = map.get(key); - if (bool instanceof Boolean) { - return (Boolean) bool; - } - throw new NoSuchElementException(map + " does not contain " + key); - } - - public Map serialize() { - return ImmutableMap.of( - TYPE, type.getId(), - DURATION, duration, - AMPLIFIER, amplifier, - AMBIENT, ambient - ); - } - - /** - * Attempts to add the effect represented by this object to the given - * {@link LivingEntity}. - * - * @see LivingEntity#addPotionEffect(PotionEffect) - * @param entity The entity to add this effect to - * @return Whether the effect could be added - */ - public boolean apply(LivingEntity entity) { - return entity.addPotionEffect(this); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof PotionEffect)) { - return false; - } - PotionEffect that = (PotionEffect) obj; - return this.type.equals(that.type) && this.ambient == that.ambient && this.amplifier == that.amplifier && this.duration == that.duration; - } - - /** - * Returns the amplifier of this effect. A higher amplifier means the - * potion effect happens more often over its duration and in some cases - * has more effect on its target. - * - * @return The effect amplifier - */ - public int getAmplifier() { - return amplifier; - } - - /** - * Returns the duration (in ticks) that this effect will run for when - * applied to a {@link LivingEntity}. - * - * @return The duration of the effect - */ - public int getDuration() { - return duration; - } - - /** - * Returns the {@link PotionEffectType} of this effect. - * - * @return The potion type of this effect - */ - public PotionEffectType getType() { - return type; - } - - /** - * Makes potion effect produce more, translucent, particles. - * - * @return if this effect is ambient - */ - public boolean isAmbient() { - return ambient; - } - - @Override - public int hashCode() { - int hash = 1; - hash = hash * 31 + type.hashCode(); - hash = hash * 31 + amplifier; - hash = hash * 31 + duration; - hash ^= 0x22222222 >> (ambient ? 1 : -1); - return hash; - } - - @Override - public String toString() { - return type.getName() + (ambient ? ":(" : ":") + duration + "t-x" + amplifier + (ambient ? ")" : ""); - } -} diff --git a/LiveWeather/src/org/bukkit/potion/PotionEffectType.java b/LiveWeather/src/org/bukkit/potion/PotionEffectType.java deleted file mode 100755 index 4919d59..0000000 --- a/LiveWeather/src/org/bukkit/potion/PotionEffectType.java +++ /dev/null @@ -1,269 +0,0 @@ -package org.bukkit.potion; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang.Validate; - -/** - * Represents a type of potion and its effect on an entity. - */ -public abstract class PotionEffectType { - /** - * Increases movement speed. - */ - public static final PotionEffectType SPEED = new PotionEffectTypeWrapper(1); - - /** - * Decreases movement speed. - */ - public static final PotionEffectType SLOW = new PotionEffectTypeWrapper(2); - - /** - * Increases dig speed. - */ - public static final PotionEffectType FAST_DIGGING = new PotionEffectTypeWrapper(3); - - /** - * Decreases dig speed. - */ - public static final PotionEffectType SLOW_DIGGING = new PotionEffectTypeWrapper(4); - - /** - * Increases damage dealt. - */ - public static final PotionEffectType INCREASE_DAMAGE = new PotionEffectTypeWrapper(5); - - /** - * Heals an entity. - */ - public static final PotionEffectType HEAL = new PotionEffectTypeWrapper(6); - - /** - * Hurts an entity. - */ - public static final PotionEffectType HARM = new PotionEffectTypeWrapper(7); - - /** - * Increases jump height. - */ - public static final PotionEffectType JUMP = new PotionEffectTypeWrapper(8); - - /** - * Warps vision on the client. - */ - public static final PotionEffectType CONFUSION = new PotionEffectTypeWrapper(9); - - /** - * Regenerates health. - */ - public static final PotionEffectType REGENERATION = new PotionEffectTypeWrapper(10); - - /** - * Decreases damage dealt to an entity. - */ - public static final PotionEffectType DAMAGE_RESISTANCE = new PotionEffectTypeWrapper(11); - - /** - * Stops fire damage. - */ - public static final PotionEffectType FIRE_RESISTANCE = new PotionEffectTypeWrapper(12); - - /** - * Allows breathing underwater. - */ - public static final PotionEffectType WATER_BREATHING = new PotionEffectTypeWrapper(13); - - /** - * Grants invisibility. - */ - public static final PotionEffectType INVISIBILITY = new PotionEffectTypeWrapper(14); - - /** - * Blinds an entity. - */ - public static final PotionEffectType BLINDNESS = new PotionEffectTypeWrapper(15); - - /** - * Allows an entity to see in the dark. - */ - public static final PotionEffectType NIGHT_VISION = new PotionEffectTypeWrapper(16); - - /** - * Increases hunger. - */ - public static final PotionEffectType HUNGER = new PotionEffectTypeWrapper(17); - - /** - * Decreases damage dealt by an entity. - */ - public static final PotionEffectType WEAKNESS = new PotionEffectTypeWrapper(18); - - /** - * Deals damage to an entity over time. - */ - public static final PotionEffectType POISON = new PotionEffectTypeWrapper(19); - - /** - * Deals damage to an entity over time and gives the health to the - * shooter. - */ - public static final PotionEffectType WITHER = new PotionEffectTypeWrapper(20); - - /** - * Increases the maximum health of an entity. - */ - public static final PotionEffectType HEALTH_BOOST = new PotionEffectTypeWrapper(21); - - /** - * Increases the maximum health of an entity with health that cannot be - * regenerated, but is refilled every 30 seconds. - */ - public static final PotionEffectType ABSORPTION = new PotionEffectTypeWrapper(22); - - /** - * Increases the food level of an entity each tick. - */ - public static final PotionEffectType SATURATION = new PotionEffectTypeWrapper(23); - - private final int id; - - protected PotionEffectType(int id) { - this.id = id; - } - - /** - * Creates a PotionEffect from this PotionEffectType, applying duration - * modifiers and checks. - * - * @see PotionBrewer#createEffect(PotionEffectType, int, int) - * @param duration time in ticks - * @param amplifier the effect's amplifier - * @return a resulting potion effect - */ - public PotionEffect createEffect(int duration, int amplifier) { - return Potion.getBrewer().createEffect(this, duration, amplifier); - } - - /** - * Returns the duration modifier applied to effects of this type. - * - * @return duration modifier - */ - public abstract double getDurationModifier(); - - /** - * Returns the unique ID of this type. - * - * @return Unique ID - * @deprecated Magic value - */ - @Deprecated - public int getId() { - return id; - } - - /** - * Returns the name of this effect type. - * - * @return The name of this effect type - */ - public abstract String getName(); - - /** - * Returns whether the effect of this type happens once, immediately. - * - * @return whether this type is normally instant - */ - public abstract boolean isInstant(); - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (!(obj instanceof PotionEffectType)) { - return false; - } - final PotionEffectType other = (PotionEffectType) obj; - if (this.id != other.id) { - return false; - } - return true; - } - - @Override - public int hashCode() { - return id; - } - - @Override - public String toString() { - return "PotionEffectType[" + id + ", " + getName() + "]"; - } - - private static final PotionEffectType[] byId = new PotionEffectType[24]; - private static final Map byName = new HashMap(); - // will break on updates. - private static boolean acceptingNew = true; - - /** - * Gets the effect type specified by the unique id. - * - * @param id Unique ID to fetch - * @return Resulting type, or null if not found. - * @deprecated Magic value - */ - @Deprecated - public static PotionEffectType getById(int id) { - if (id >= byId.length || id < 0) - return null; - return byId[id]; - } - - /** - * Gets the effect type specified by the given name. - * - * @param name Name of PotionEffectType to fetch - * @return Resulting PotionEffectType, or null if not found. - */ - public static PotionEffectType getByName(String name) { - Validate.notNull(name, "name cannot be null"); - return byName.get(name.toLowerCase()); - } - - /** - * Registers an effect type with the given object. - *

            - * Generally not to be used from within a plugin. - * - * @param type PotionType to register - */ - public static void registerPotionEffectType(PotionEffectType type) { - if (byId[type.id] != null || byName.containsKey(type.getName().toLowerCase())) { - throw new IllegalArgumentException("Cannot set already-set type"); - } else if (!acceptingNew) { - throw new IllegalStateException( - "No longer accepting new potion effect types (can only be done by the server implementation)"); - } - - byId[type.id] = type; - byName.put(type.getName().toLowerCase(), type); - } - - /** - * Stops accepting any effect type registrations. - */ - public static void stopAcceptingRegistrations() { - acceptingNew = false; - } - - /** - * Returns an array of all the registered {@link PotionEffectType}s. - * - * @return Array of types. - */ - public static PotionEffectType[] values() { - return byId.clone(); - } -} diff --git a/LiveWeather/src/org/bukkit/potion/PotionEffectTypeWrapper.java b/LiveWeather/src/org/bukkit/potion/PotionEffectTypeWrapper.java deleted file mode 100755 index 5db1ce8..0000000 --- a/LiveWeather/src/org/bukkit/potion/PotionEffectTypeWrapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bukkit.potion; - -public class PotionEffectTypeWrapper extends PotionEffectType { - protected PotionEffectTypeWrapper(int id) { - super(id); - } - - @Override - public double getDurationModifier() { - return getType().getDurationModifier(); - } - - @Override - public String getName() { - return getType().getName(); - } - - /** - * Get the potion type bound to this wrapper. - * - * @return The potion effect type - */ - public PotionEffectType getType() { - return PotionEffectType.getById(getId()); - } - - @Override - public boolean isInstant() { - return getType().isInstant(); - } -} diff --git a/LiveWeather/src/org/bukkit/potion/PotionType.java b/LiveWeather/src/org/bukkit/potion/PotionType.java deleted file mode 100755 index a02b6a8..0000000 --- a/LiveWeather/src/org/bukkit/potion/PotionType.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bukkit.potion; - -public enum PotionType { - WATER(0, null, 0), - REGEN(1, PotionEffectType.REGENERATION, 2), - SPEED(2, PotionEffectType.SPEED, 2), - FIRE_RESISTANCE(3, PotionEffectType.FIRE_RESISTANCE, 1), - POISON(4, PotionEffectType.POISON, 2), - INSTANT_HEAL(5, PotionEffectType.HEAL, 2), - NIGHT_VISION(6, PotionEffectType.NIGHT_VISION, 1), - WEAKNESS(8, PotionEffectType.WEAKNESS, 1), - STRENGTH(9, PotionEffectType.INCREASE_DAMAGE, 2), - SLOWNESS(10, PotionEffectType.SLOW, 1), - INSTANT_DAMAGE(12, PotionEffectType.HARM, 2), - WATER_BREATHING(13, PotionEffectType.WATER_BREATHING, 1), - INVISIBILITY(14, PotionEffectType.INVISIBILITY, 1), - ; - - private final int damageValue, maxLevel; - private final PotionEffectType effect; - - PotionType(int damageValue, PotionEffectType effect, int maxLevel) { - this.damageValue = damageValue; - this.effect = effect; - this.maxLevel = maxLevel; - } - - public PotionEffectType getEffectType() { - return effect; - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public int getDamageValue() { - return damageValue; - } - - public int getMaxLevel() { - return maxLevel; - } - - public boolean isInstant() { - return effect == null ? true : effect.isInstant(); - } - - /** - * - * @deprecated Magic value - */ - @Deprecated - public static PotionType getByDamageValue(int damage) { - for (PotionType type : PotionType.values()) { - if (type.damageValue == damage) - return type; - } - return null; - } - - public static PotionType getByEffect(PotionEffectType effectType) { - if (effectType == null) - return WATER; - for (PotionType type : PotionType.values()) { - if (effectType.equals(type.effect)) - return type; - } - return null; - } -} diff --git a/LiveWeather/src/org/bukkit/projectiles/BlockProjectileSource.java b/LiveWeather/src/org/bukkit/projectiles/BlockProjectileSource.java deleted file mode 100755 index e713c0d..0000000 --- a/LiveWeather/src/org/bukkit/projectiles/BlockProjectileSource.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bukkit.projectiles; - -import org.bukkit.block.Block; - -public interface BlockProjectileSource extends ProjectileSource { - - /** - * Gets the block this projectile source belongs to. - * - * @return Block for the projectile source - */ - public Block getBlock(); -} diff --git a/LiveWeather/src/org/bukkit/projectiles/ProjectileSource.java b/LiveWeather/src/org/bukkit/projectiles/ProjectileSource.java deleted file mode 100755 index afad8d7..0000000 --- a/LiveWeather/src/org/bukkit/projectiles/ProjectileSource.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bukkit.projectiles; - -import org.bukkit.entity.Projectile; -import org.bukkit.util.Vector; - -/** - * Represents a valid source of a projectile. - */ -public interface ProjectileSource { - - /** - * Launches a {@link Projectile} from the ProjectileSource. - * - * @param projectile class of the projectile to launch - * @return the launched projectile - */ - public T launchProjectile(Class projectile); - - /** - * Launches a {@link Projectile} from the ProjectileSource with an - * initial velocity. - * - * @param projectile class of the projectile to launch - * @param velocity the velocity with which to launch - * @return the launched projectile - */ - public T launchProjectile(Class projectile, Vector velocity); -} diff --git a/LiveWeather/src/org/bukkit/scheduler/BukkitRunnable.java b/LiveWeather/src/org/bukkit/scheduler/BukkitRunnable.java deleted file mode 100755 index 0351944..0000000 --- a/LiveWeather/src/org/bukkit/scheduler/BukkitRunnable.java +++ /dev/null @@ -1,149 +0,0 @@ -package org.bukkit.scheduler; - -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -/** - * This class is provided as an easy way to handle scheduling tasks. - */ -public abstract class BukkitRunnable implements Runnable { - private int taskId = -1; - - /** - * Attempts to cancel this task. - * - * @throws IllegalStateException if task was not scheduled yet - */ - public synchronized void cancel() throws IllegalStateException { - Bukkit.getScheduler().cancelTask(getTaskId()); - } - - /** - * Schedules this in the Bukkit scheduler to run on next tick. - * - * @param plugin the reference to the plugin scheduling task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTask(Plugin, Runnable) - */ - public synchronized BukkitTask runTask(Plugin plugin) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTask(plugin, this)); - } - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules this in the Bukkit scheduler to run asynchronously. - * - * @param plugin the reference to the plugin scheduling task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTaskAsynchronously(Plugin, Runnable) - */ - public synchronized BukkitTask runTaskAsynchronously(Plugin plugin) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTaskAsynchronously(plugin, this)); - } - - /** - * Schedules this to run after the specified number of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param delay the ticks to wait before running the task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTaskLater(Plugin, Runnable, long) - */ - public synchronized BukkitTask runTaskLater(Plugin plugin, long delay) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTaskLater(plugin, this, delay)); - } - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules this to run asynchronously after the specified number of - * server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param delay the ticks to wait before running the task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTaskLaterAsynchronously(Plugin, Runnable, long) - */ - public synchronized BukkitTask runTaskLaterAsynchronously(Plugin plugin, long delay) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, this, delay)); - } - - /** - * Schedules this to repeatedly run until cancelled, starting after the - * specified number of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param delay the ticks to wait before running the task - * @param period the ticks to wait between runs - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTaskTimer(Plugin, Runnable, long, long) - */ - public synchronized BukkitTask runTaskTimer(Plugin plugin, long delay, long period) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTaskTimer(plugin, this, delay, period)); - } - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules this to repeatedly run asynchronously until cancelled, - * starting after the specified number of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param delay the ticks to wait before running the task for the first - * time - * @param period the ticks to wait between runs - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalStateException if this was already scheduled - * @see BukkitScheduler#runTaskTimerAsynchronously(Plugin, Runnable, long, - * long) - */ - public synchronized BukkitTask runTaskTimerAsynchronously(Plugin plugin, long delay, long period) throws IllegalArgumentException, IllegalStateException { - checkState(); - return setupId(Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, this, delay, period)); - } - - /** - * Gets the task id for this runnable. - * - * @return the task id that this runnable was scheduled as - * @throws IllegalStateException if task was not scheduled yet - */ - public synchronized int getTaskId() throws IllegalStateException { - final int id = taskId; - if (id == -1) { - throw new IllegalStateException("Not scheduled yet"); - } - return id; - } - - private void checkState() { - if (taskId != -1) { - throw new IllegalStateException("Already scheduled as " + taskId); - } - } - - private BukkitTask setupId(final BukkitTask task) { - this.taskId = task.getTaskId(); - return task; - } -} diff --git a/LiveWeather/src/org/bukkit/scheduler/BukkitScheduler.java b/LiveWeather/src/org/bukkit/scheduler/BukkitScheduler.java deleted file mode 100755 index 44d94f0..0000000 --- a/LiveWeather/src/org/bukkit/scheduler/BukkitScheduler.java +++ /dev/null @@ -1,265 +0,0 @@ -package org.bukkit.scheduler; - -import org.bukkit.plugin.Plugin; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.List; - -public interface BukkitScheduler { - - /** - * Schedules a once off task to occur after a delay. - *

            - * This task will be executed by the main server thread. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @param delay Delay in server ticks before executing task - * @return Task id number (-1 if scheduling failed) - */ - public int scheduleSyncDelayedTask(Plugin plugin, Runnable task, long delay); - - /** - * Schedules a once off task to occur as soon as possible. - *

            - * This task will be executed by the main server thread. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @return Task id number (-1 if scheduling failed) - */ - public int scheduleSyncDelayedTask(Plugin plugin, Runnable task); - - /** - * Schedules a repeating task. - *

            - * This task will be executed by the main server thread. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @param delay Delay in server ticks before executing first repeat - * @param period Period in server ticks of the task - * @return Task id number (-1 if scheduling failed) - */ - public int scheduleSyncRepeatingTask(Plugin plugin, Runnable task, long delay, long period); - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules a once off task to occur after a delay. This task will be - * executed by a thread managed by the scheduler. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @param delay Delay in server ticks before executing task - * @return Task id number (-1 if scheduling failed) - * @deprecated This name is misleading, as it does not schedule "a sync" - * task, but rather, "an async" task - */ - @Deprecated - public int scheduleAsyncDelayedTask(Plugin plugin, Runnable task, long delay); - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules a once off task to occur as soon as possible. This task will - * be executed by a thread managed by the scheduler. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @return Task id number (-1 if scheduling failed) - * @deprecated This name is misleading, as it does not schedule "a sync" - * task, but rather, "an async" task - */ - @Deprecated - public int scheduleAsyncDelayedTask(Plugin plugin, Runnable task); - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Schedules a repeating task. This task will be executed by a thread - * managed by the scheduler. - * - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @param delay Delay in server ticks before executing first repeat - * @param period Period in server ticks of the task - * @return Task id number (-1 if scheduling failed) - * @deprecated This name is misleading, as it does not schedule "a sync" - * task, but rather, "an async" task - */ - @Deprecated - public int scheduleAsyncRepeatingTask(Plugin plugin, Runnable task, long delay, long period); - - /** - * Calls a method on the main thread and returns a Future object. This - * task will be executed by the main server thread. - *

              - *
            • Note: The Future.get() methods must NOT be called from the main - * thread. - *
            • Note2: There is at least an average of 10ms latency until the - * isDone() method returns true. - *
            - * @param The callable's return type - * @param plugin Plugin that owns the task - * @param task Task to be executed - * @return Future Future object related to the task - */ - public Future callSyncMethod(Plugin plugin, Callable task); - - /** - * Removes task from scheduler. - * - * @param taskId Id number of task to be removed - */ - public void cancelTask(int taskId); - - /** - * Removes all tasks associated with a particular plugin from the - * scheduler. - * - * @param plugin Owner of tasks to be removed - */ - public void cancelTasks(Plugin plugin); - - /** - * Removes all tasks from the scheduler. - */ - public void cancelAllTasks(); - - /** - * Check if the task currently running. - *

            - * A repeating task might not be running currently, but will be running in - * the future. A task that has finished, and does not repeat, will not be - * running ever again. - *

            - * Explicitly, a task is running if there exists a thread for it, and that - * thread is alive. - * - * @param taskId The task to check. - *

            - * @return If the task is currently running. - */ - public boolean isCurrentlyRunning(int taskId); - - /** - * Check if the task queued to be run later. - *

            - * If a repeating task is currently running, it might not be queued now - * but could be in the future. A task that is not queued, and not running, - * will not be queued again. - * - * @param taskId The task to check. - *

            - * @return If the task is queued to be run. - */ - public boolean isQueued(int taskId); - - /** - * Returns a list of all active workers. - *

            - * This list contains asynch tasks that are being executed by separate - * threads. - * - * @return Active workers - */ - public List getActiveWorkers(); - - /** - * Returns a list of all pending tasks. The ordering of the tasks is not - * related to their order of execution. - * - * @return Active workers - */ - public List getPendingTasks(); - - /** - * Returns a task that will run on the next server tick. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTask(Plugin plugin, Runnable task) throws IllegalArgumentException; - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Returns a task that will run asynchronously. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTaskAsynchronously(Plugin plugin, Runnable task) throws IllegalArgumentException; - - /** - * Returns a task that will run after the specified number of server - * ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @param delay the ticks to wait before running the task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTaskLater(Plugin plugin, Runnable task, long delay) throws IllegalArgumentException; - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Returns a task that will run asynchronously after the specified number - * of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @param delay the ticks to wait before running the task - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTaskLaterAsynchronously(Plugin plugin, Runnable task, long delay) throws IllegalArgumentException; - - /** - * Returns a task that will repeatedly run until cancelled, starting after - * the specified number of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @param delay the ticks to wait before running the task - * @param period the ticks to wait between runs - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTaskTimer(Plugin plugin, Runnable task, long delay, long period) throws IllegalArgumentException; - - /** - * Asynchronous tasks should never access any API in Bukkit. Great care - * should be taken to assure the thread-safety of asynchronous tasks. - *

            - * Returns a task that will repeatedly run asynchronously until cancelled, - * starting after the specified number of server ticks. - * - * @param plugin the reference to the plugin scheduling task - * @param task the task to be run - * @param delay the ticks to wait before running the task for the first - * time - * @param period the ticks to wait between runs - * @return a BukkitTask that contains the id number - * @throws IllegalArgumentException if plugin is null - * @throws IllegalArgumentException if task is null - */ - public BukkitTask runTaskTimerAsynchronously(Plugin plugin, Runnable task, long delay, long period) throws IllegalArgumentException; -} diff --git a/LiveWeather/src/org/bukkit/scheduler/BukkitTask.java b/LiveWeather/src/org/bukkit/scheduler/BukkitTask.java deleted file mode 100755 index e447e64..0000000 --- a/LiveWeather/src/org/bukkit/scheduler/BukkitTask.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bukkit.scheduler; - -import org.bukkit.plugin.Plugin; - -/** - * Represents a task being executed by the scheduler - */ -public interface BukkitTask { - - /** - * Returns the taskId for the task. - * - * @return Task id number - */ - public int getTaskId(); - - /** - * Returns the Plugin that owns this task. - * - * @return The Plugin that owns the task - */ - public Plugin getOwner(); - - /** - * Returns true if the Task is a sync task. - * - * @return true if the task is run by main thread - */ - public boolean isSync(); - - /** - * Will attempt to cancel this task. - */ - public void cancel(); -} diff --git a/LiveWeather/src/org/bukkit/scheduler/BukkitWorker.java b/LiveWeather/src/org/bukkit/scheduler/BukkitWorker.java deleted file mode 100755 index fe1afbd..0000000 --- a/LiveWeather/src/org/bukkit/scheduler/BukkitWorker.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bukkit.scheduler; - -import org.bukkit.plugin.Plugin; - -/** - * Represents a worker thread for the scheduler. This gives information about - * the Thread object for the task, owner of the task and the taskId. - *

            - * Workers are used to execute async tasks. - */ -public interface BukkitWorker { - - /** - * Returns the taskId for the task being executed by this worker. - * - * @return Task id number - */ - public int getTaskId(); - - /** - * Returns the Plugin that owns this task. - * - * @return The Plugin that owns the task - */ - public Plugin getOwner(); - - /** - * Returns the thread for the worker. - * - * @return The Thread object for the worker - */ - public Thread getThread(); - -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/Criterias.java b/LiveWeather/src/org/bukkit/scoreboard/Criterias.java deleted file mode 100755 index cd81c87..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/Criterias.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bukkit.scoreboard; - -/** - * Criteria names which trigger an objective to be modified by actions in-game - */ -public class Criterias { - public static final String HEALTH; - public static final String PLAYER_KILLS; - public static final String TOTAL_KILLS; - public static final String DEATHS; - - static { - HEALTH="health"; - PLAYER_KILLS="playerKillCount"; - TOTAL_KILLS="totalKillCount"; - DEATHS="deathCount"; - } - - private Criterias() {} -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/DisplaySlot.java b/LiveWeather/src/org/bukkit/scoreboard/DisplaySlot.java deleted file mode 100755 index 5d58a18..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/DisplaySlot.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bukkit.scoreboard; - -/** - * Locations for displaying objectives to the player - */ -public enum DisplaySlot { - BELOW_NAME, - PLAYER_LIST, - SIDEBAR; -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/Objective.java b/LiveWeather/src/org/bukkit/scoreboard/Objective.java deleted file mode 100755 index 321aac7..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/Objective.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.bukkit.scoreboard; - -import org.bukkit.OfflinePlayer; - -/** - * An objective on a scoreboard that can show scores specific to entries. This - * objective is only relevant to the display of the associated {@link - * #getScoreboard() scoreboard}. - */ -public interface Objective { - - /** - * Gets the name of this Objective - * - * @return this objective'ss name - * @throws IllegalStateException if this objective has been unregistered - */ - String getName() throws IllegalStateException; - - /** - * Gets the name displayed to players for this objective - * - * @return this objective's display name - * @throws IllegalStateException if this objective has been unregistered - */ - String getDisplayName() throws IllegalStateException; - - /** - * Sets the name displayed to players for this objective. - * - * @param displayName Display name to set - * @throws IllegalStateException if this objective has been unregistered - * @throws IllegalArgumentException if displayName is null - * @throws IllegalArgumentException if displayName is longer than 32 - * characters. - */ - void setDisplayName(String displayName) throws IllegalStateException, IllegalArgumentException; - - /** - * Gets the criteria this objective tracks. - * - * @return this objective's criteria - * @throws IllegalStateException if this objective has been unregistered - */ - String getCriteria() throws IllegalStateException; - - /** - * Gets if the objective's scores can be modified directly by a plugin. - * - * @return true if scores are modifiable - * @throws IllegalStateException if this objective has been unregistered - * @see Criterias#HEALTH - */ - boolean isModifiable() throws IllegalStateException; - - /** - * Gets the scoreboard to which this objective is attached. - * - * @return Owning scoreboard, or null if it has been {@link #unregister() - * unregistered} - */ - Scoreboard getScoreboard(); - - /** - * Unregisters this objective from the {@link Scoreboard scoreboard.} - * - * @throws IllegalStateException if this objective has been unregistered - */ - void unregister() throws IllegalStateException; - - /** - * Sets this objective to display on the specified slot for the - * scoreboard, removing it from any other display slot. - * - * @param slot display slot to change, or null to not display - * @throws IllegalStateException if this objective has been unregistered - */ - void setDisplaySlot(DisplaySlot slot) throws IllegalStateException; - - /** - * Gets the display slot this objective is displayed at. - * - * @return the display slot for this objective, or null if not displayed - * @throws IllegalStateException if this objective has been unregistered - */ - DisplaySlot getDisplaySlot() throws IllegalStateException; - - /** - * Gets a player's Score for an Objective on this Scoreboard - * - * @param player Player for the Score - * @return Score tracking the Objective and player specified - * @throws IllegalArgumentException if player is null - * @throws IllegalStateException if this objective has been unregistered - * @deprecated Scoreboards can contain entries that aren't players - * @see #getScore(String) - */ - @Deprecated - Score getScore(OfflinePlayer player) throws IllegalArgumentException, IllegalStateException; - - /** - * Gets an entry's Score for an Objective on this Scoreboard. - * - * @param entry Entry for the Score - * @return Score tracking the Objective and entry specified - * @throws IllegalArgumentException if entry is null - * @throws IllegalStateException if this objective has been unregistered - */ - Score getScore(String entry) throws IllegalArgumentException, IllegalStateException; -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/Score.java b/LiveWeather/src/org/bukkit/scoreboard/Score.java deleted file mode 100755 index 4c10346..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/Score.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.bukkit.scoreboard; - -import org.bukkit.OfflinePlayer; - -/** - * A score entry for an {@link #getEntry() entry} on an {@link - * #getObjective() objective}. Changing this will not affect any other - * objective or scoreboard. - */ -public interface Score { - - /** - * Gets the OfflinePlayer being tracked by this Score - * - * @return this Score's tracked player - * @deprecated Scoreboards can contain entries that aren't players - * @see #getEntry() - */ - @Deprecated - OfflinePlayer getPlayer(); - - /** - * Gets the entry being tracked by this Score - * - * @return this Score's tracked entry - */ - String getEntry(); - - /** - * Gets the Objective being tracked by this Score - * - * @return this Score's tracked objective - */ - Objective getObjective(); - - /** - * Gets the current score - * - * @return the current score - * @throws IllegalStateException if the associated objective has been - * unregistered - */ - int getScore() throws IllegalStateException; - - /** - * Sets the current score. - * - * @param score New score - * @throws IllegalStateException if the associated objective has been - * unregistered - */ - void setScore(int score) throws IllegalStateException; - - /** - * Gets the scoreboard for the associated objective. - * - * @return the owning objective's scoreboard, or null if it has been - * {@link Objective#unregister() unregistered} - */ - Scoreboard getScoreboard(); -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/Scoreboard.java b/LiveWeather/src/org/bukkit/scoreboard/Scoreboard.java deleted file mode 100755 index d244a7f..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/Scoreboard.java +++ /dev/null @@ -1,159 +0,0 @@ -package org.bukkit.scoreboard; - -import java.util.Set; - -import org.bukkit.OfflinePlayer; - -/** - * A scoreboard - */ -public interface Scoreboard { - - /** - * Registers an Objective on this Scoreboard - * - * @param name Name of the Objective - * @param criteria Criteria for the Objective - * @return The registered Objective - * @throws IllegalArgumentException if name is null - * @throws IllegalArgumentException if criteria is null - * @throws IllegalArgumentException if an objective by that name already - * exists - */ - Objective registerNewObjective(String name, String criteria) throws IllegalArgumentException; - - /** - * Gets an Objective on this Scoreboard by name - * - * @param name Name of the Objective - * @return the Objective or null if it does not exist - * @throws IllegalArgumentException if name is null - */ - Objective getObjective(String name) throws IllegalArgumentException; - - /** - * Gets all Objectives of a Criteria on the Scoreboard - * - * @param criteria Criteria to search by - * @return an immutable set of Objectives using the specified Criteria - */ - Set getObjectivesByCriteria(String criteria) throws IllegalArgumentException; - - /** - * Gets all Objectives on this Scoreboard - * - * @return An immutable set of all Objectives on this Scoreboard - */ - Set getObjectives(); - - /** - * Gets the Objective currently displayed in a DisplaySlot on this - * Scoreboard - * - * @param slot The DisplaySlot - * @return the Objective currently displayed or null if nothing is - * displayed in that DisplaySlot - * @throws IllegalArgumentException if slot is null - */ - Objective getObjective(DisplaySlot slot) throws IllegalArgumentException; - - /** - * Gets all scores for a player on this Scoreboard - * - * @param player the player whose scores are being retrieved - * @return immutable set of all scores tracked for the player - * @throws IllegalArgumentException if player is null - * @deprecated Scoreboards can contain entries that aren't players - * @see #getScores(String) - */ - @Deprecated - Set getScores(OfflinePlayer player) throws IllegalArgumentException; - - /** - * Gets all scores for an entry on this Scoreboard - * - * @param entry the entry whose scores are being retrieved - * @return immutable set of all scores tracked for the entry - * @throws IllegalArgumentException if entry is null - */ - Set getScores(String entry) throws IllegalArgumentException; - - /** - * Removes all scores for a player on this Scoreboard - * - * @param player the player to drop all current scores for - * @throws IllegalArgumentException if player is null - * @deprecated Scoreboards can contain entries that aren't players - * @see #resetScores(String) - */ - @Deprecated - void resetScores(OfflinePlayer player) throws IllegalArgumentException; - - /** - * Removes all scores for an entry on this Scoreboard - * - * @param entry the entry to drop all current scores for - * @throws IllegalArgumentException if entry is null - */ - void resetScores(String entry) throws IllegalArgumentException; - - /** - * Gets a player's Team on this Scoreboard - * - * @param player the player to search for - * @return the player's Team or null if the player is not on a team - * @throws IllegalArgumentException if player is null - */ - Team getPlayerTeam(OfflinePlayer player) throws IllegalArgumentException; - - /** - * Gets a Team by name on this Scoreboard - * - * @param teamName Team name - * @return the matching Team or null if no matches - * @throws IllegalArgumentException if teamName is null - */ - Team getTeam(String teamName) throws IllegalArgumentException; - - /** - * Gets all teams on this Scoreboard - * - * @return an immutable set of Teams - */ - Set getTeams(); - - /** - * Registers a Team on this Scoreboard - * - * @param name Team name - * @return registered Team - * @throws IllegalArgumentException if name is null - * @throws IllegalArgumentException if team by that name already exists - */ - Team registerNewTeam(String name) throws IllegalArgumentException; - - /** - * Gets all players tracked by this Scoreboard - * - * @return immutable set of all tracked players - * @deprecated Scoreboards can contain entries that aren't players - * @see #getEntries() - */ - @Deprecated - Set getPlayers(); - - /** - * Gets all entries tracked by this Scoreboard - * - * @return immutable set of all tracked entries - */ - Set getEntries(); - - /** - * Clears any objective in the specified slot. - * - * @param slot the slot to remove objectives - * @throws IllegalArgumentException if slot is null - */ - void clearSlot(DisplaySlot slot) throws IllegalArgumentException; -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/ScoreboardManager.java b/LiveWeather/src/org/bukkit/scoreboard/ScoreboardManager.java deleted file mode 100755 index 00b67a1..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/ScoreboardManager.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bukkit.scoreboard; - -import java.lang.ref.WeakReference; - -/** - * Manager of Scoreboards - */ -public interface ScoreboardManager { - - /** - * Gets the primary Scoreboard controlled by the server. - *

            - * This Scoreboard is saved by the server, is affected by the /scoreboard - * command, and is the scoreboard shown by default to players. - * - * @return the default sever scoreboard - */ - Scoreboard getMainScoreboard(); - - /** - * Gets a new Scoreboard to be tracked by the server. This scoreboard will - * be tracked as long as a reference is kept, either by a player or by a - * plugin. - * - * @return the registered Scoreboard - * @see WeakReference - */ - Scoreboard getNewScoreboard(); -} diff --git a/LiveWeather/src/org/bukkit/scoreboard/Team.java b/LiveWeather/src/org/bukkit/scoreboard/Team.java deleted file mode 100755 index 50c6f76..0000000 --- a/LiveWeather/src/org/bukkit/scoreboard/Team.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.bukkit.scoreboard; - -import java.util.Set; - -import org.bukkit.OfflinePlayer; -import org.bukkit.potion.PotionEffectType; - -/** - * A team on a scoreboard that has a common display theme and other - * properties. This team is only relevant to the display of the associated - * {@link #getScoreboard() scoreboard}. - */ -public interface Team { - - /** - * Gets the name of this Team - * - * @return Objective name - * @throws IllegalStateException if this team has been unregistered - */ - String getName() throws IllegalStateException; - - /** - * Gets the name displayed to players for this team - * - * @return Team display name - * @throws IllegalStateException if this team has been unregistered - */ - String getDisplayName() throws IllegalStateException; - - /** - * Sets the name displayed to players for this team - * - * @param displayName New display name - * @throws IllegalArgumentException if displayName is longer than 32 - * characters. - * @throws IllegalStateException if this team has been unregistered - */ - void setDisplayName(String displayName) throws IllegalStateException, IllegalArgumentException; - - /** - * Gets the prefix prepended to the display of players on this team. - * - * @return Team prefix - * @throws IllegalStateException if this team has been unregistered - */ - String getPrefix() throws IllegalStateException; - - /** - * Sets the prefix prepended to the display of players on this team. - * - * @param prefix New prefix - * @throws IllegalArgumentException if prefix is null - * @throws IllegalArgumentException if prefix is longer than 16 - * characters - * @throws IllegalStateException if this team has been unregistered - */ - void setPrefix(String prefix) throws IllegalStateException, IllegalArgumentException; - - /** - * Gets the suffix appended to the display of players on this team. - * - * @return the team's current suffix - * @throws IllegalStateException if this team has been unregistered - */ - String getSuffix() throws IllegalStateException; - - /** - * Sets the suffix appended to the display of players on this team. - * - * @param suffix the new suffix for this team. - * @throws IllegalArgumentException if suffix is null - * @throws IllegalArgumentException if suffix is longer than 16 - * characters - * @throws IllegalStateException if this team has been unregistered - */ - void setSuffix(String suffix) throws IllegalStateException, IllegalArgumentException; - - /** - * Gets the team friendly fire state - * - * @return true if friendly fire is enabled - * @throws IllegalStateException if this team has been unregistered - */ - boolean allowFriendlyFire() throws IllegalStateException; - - /** - * Sets the team friendly fire state - * - * @param enabled true if friendly fire is to be allowed - * @throws IllegalStateException if this team has been unregistered - */ - void setAllowFriendlyFire(boolean enabled) throws IllegalStateException; - - /** - * Gets the team's ability to see {@link PotionEffectType#INVISIBILITY - * invisible} teammates. - * - * @return true if team members can see invisible members - * @throws IllegalStateException if this team has been unregistered - */ - boolean canSeeFriendlyInvisibles() throws IllegalStateException; - - /** - * Sets the team's ability to see {@link PotionEffectType#INVISIBILITY - * invisible} teammates. - * - * @param enabled true if invisible teammates are to be visible - * @throws IllegalStateException if this team has been unregistered - */ - void setCanSeeFriendlyInvisibles(boolean enabled) throws IllegalStateException; - - /** - * Gets the Set of players on the team - * - * @return players on the team - * @throws IllegalStateException if this team has been unregistered - */ - Set getPlayers() throws IllegalStateException; - - /** - * Gets the size of the team - * - * @return number of players on the team - * @throws IllegalStateException if this team has been unregistered - */ - int getSize() throws IllegalStateException; - - /** - * Gets the Scoreboard to which this team is attached - * - * @return Owning scoreboard, or null if this team has been {@link - * #unregister() unregistered} - */ - Scoreboard getScoreboard(); - - /** - * This puts the specified player onto this team for the scoreboard. - *

            - * This will remove the player from any other team on the scoreboard. - * - * @param player the player to add - * @throws IllegalArgumentException if player is null - * @throws IllegalStateException if this team has been unregistered - */ - void addPlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException; - - /** - * Removes the player from this team. - * - * @param player the player to remove - * @return if the player was on this team - * @throws IllegalArgumentException if player is null - * @throws IllegalStateException if this team has been unregistered - */ - boolean removePlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException; - - /** - * Unregisters this team from the Scoreboard - * - * @throws IllegalStateException if this team has been unregistered - */ - void unregister() throws IllegalStateException; - - /** - * Checks to see if the specified player is a member of this team. - * - * @param player the player to search for - * @return true if the player is a member of this team - * @throws IllegalArgumentException if player is null - * @throws IllegalStateException if this team has been unregistered - */ - boolean hasPlayer(OfflinePlayer player) throws IllegalArgumentException, IllegalStateException; -} diff --git a/LiveWeather/src/org/bukkit/util/BlockIterator.java b/LiveWeather/src/org/bukkit/util/BlockIterator.java deleted file mode 100755 index 5c85778..0000000 --- a/LiveWeather/src/org/bukkit/util/BlockIterator.java +++ /dev/null @@ -1,357 +0,0 @@ -package org.bukkit.util; - -import static org.bukkit.util.NumberConversions.*; - -import org.bukkit.World; -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.LivingEntity; - -import java.util.Iterator; -import java.util.NoSuchElementException; - -/** - * This class performs ray tracing and iterates along blocks on a line - */ -public class BlockIterator implements Iterator { - - private final World world; - private final int maxDistance; - - private static final int gridSize = 1 << 24; - - private boolean end = false; - - private Block[] blockQueue = new Block[3]; - private int currentBlock = 0; - private int currentDistance = 0; - private int maxDistanceInt; - - private int secondError; - private int thirdError; - - private int secondStep; - private int thirdStep; - - private BlockFace mainFace; - private BlockFace secondFace; - private BlockFace thirdFace; - - /** - * Constructs the BlockIterator - * - * @param world The world to use for tracing - * @param start A Vector giving the initial location for the trace - * @param direction A Vector pointing in the direction for the trace - * @param yOffset The trace begins vertically offset from the start vector - * by this value - * @param maxDistance This is the maximum distance in blocks for the - * trace. Setting this value above 140 may lead to problems with - * unloaded chunks. A value of 0 indicates no limit - * - */ - public BlockIterator(World world, Vector start, Vector direction, double yOffset, int maxDistance) { - this.world = world; - this.maxDistance = maxDistance; - - Vector startClone = start.clone(); - - startClone.setY(startClone.getY() + yOffset); - - currentDistance = 0; - - double mainDirection = 0; - double secondDirection = 0; - double thirdDirection = 0; - - double mainPosition = 0; - double secondPosition = 0; - double thirdPosition = 0; - - Block startBlock = this.world.getBlockAt(floor(startClone.getX()), floor(startClone.getY()), floor(startClone.getZ())); - - if (getXLength(direction) > mainDirection) { - mainFace = getXFace(direction); - mainDirection = getXLength(direction); - mainPosition = getXPosition(direction, startClone, startBlock); - - secondFace = getYFace(direction); - secondDirection = getYLength(direction); - secondPosition = getYPosition(direction, startClone, startBlock); - - thirdFace = getZFace(direction); - thirdDirection = getZLength(direction); - thirdPosition = getZPosition(direction, startClone, startBlock); - } - if (getYLength(direction) > mainDirection) { - mainFace = getYFace(direction); - mainDirection = getYLength(direction); - mainPosition = getYPosition(direction, startClone, startBlock); - - secondFace = getZFace(direction); - secondDirection = getZLength(direction); - secondPosition = getZPosition(direction, startClone, startBlock); - - thirdFace = getXFace(direction); - thirdDirection = getXLength(direction); - thirdPosition = getXPosition(direction, startClone, startBlock); - } - if (getZLength(direction) > mainDirection) { - mainFace = getZFace(direction); - mainDirection = getZLength(direction); - mainPosition = getZPosition(direction, startClone, startBlock); - - secondFace = getXFace(direction); - secondDirection = getXLength(direction); - secondPosition = getXPosition(direction, startClone, startBlock); - - thirdFace = getYFace(direction); - thirdDirection = getYLength(direction); - thirdPosition = getYPosition(direction, startClone, startBlock); - } - - // trace line backwards to find intercept with plane perpendicular to the main axis - - double d = mainPosition / mainDirection; // how far to hit face behind - double secondd = secondPosition - secondDirection * d; - double thirdd = thirdPosition - thirdDirection * d; - - // Guarantee that the ray will pass though the start block. - // It is possible that it would miss due to rounding - // This should only move the ray by 1 grid position - secondError = floor(secondd * gridSize); - secondStep = round(secondDirection / mainDirection * gridSize); - thirdError = floor(thirdd * gridSize); - thirdStep = round(thirdDirection / mainDirection * gridSize); - - if (secondError + secondStep <= 0) { - secondError = -secondStep + 1; - } - - if (thirdError + thirdStep <= 0) { - thirdError = -thirdStep + 1; - } - - Block lastBlock; - - lastBlock = startBlock.getRelative(mainFace.getOppositeFace()); - - if (secondError < 0) { - secondError += gridSize; - lastBlock = lastBlock.getRelative(secondFace.getOppositeFace()); - } - - if (thirdError < 0) { - thirdError += gridSize; - lastBlock = lastBlock.getRelative(thirdFace.getOppositeFace()); - } - - // This means that when the variables are positive, it means that the coord=1 boundary has been crossed - secondError -= gridSize; - thirdError -= gridSize; - - blockQueue[0] = lastBlock; - currentBlock = -1; - - scan(); - - boolean startBlockFound = false; - - for (int cnt = currentBlock; cnt >= 0; cnt--) { - if (blockEquals(blockQueue[cnt], startBlock)) { - currentBlock = cnt; - startBlockFound = true; - break; - } - } - - if (!startBlockFound) { - throw new IllegalStateException("Start block missed in BlockIterator"); - } - - // Calculate the number of planes passed to give max distance - maxDistanceInt = round(maxDistance / (Math.sqrt(mainDirection * mainDirection + secondDirection * secondDirection + thirdDirection * thirdDirection) / mainDirection)); - - } - - private boolean blockEquals(Block a, Block b) { - return a.getX() == b.getX() && a.getY() == b.getY() && a.getZ() == b.getZ(); - } - - private BlockFace getXFace(Vector direction) { - return ((direction.getX() > 0) ? BlockFace.EAST : BlockFace.WEST); - } - - private BlockFace getYFace(Vector direction) { - return ((direction.getY() > 0) ? BlockFace.UP : BlockFace.DOWN); - } - - private BlockFace getZFace(Vector direction) { - return ((direction.getZ() > 0) ? BlockFace.SOUTH : BlockFace.NORTH); - } - - private double getXLength(Vector direction) { - return Math.abs(direction.getX()); - } - - private double getYLength(Vector direction) { - return Math.abs(direction.getY()); - } - - private double getZLength(Vector direction) { - return Math.abs(direction.getZ()); - } - - private double getPosition(double direction, double position, int blockPosition) { - return direction > 0 ? (position - blockPosition) : (blockPosition + 1 - position); - } - - private double getXPosition(Vector direction, Vector position, Block block) { - return getPosition(direction.getX(), position.getX(), block.getX()); - } - - private double getYPosition(Vector direction, Vector position, Block block) { - return getPosition(direction.getY(), position.getY(), block.getY()); - } - - private double getZPosition(Vector direction, Vector position, Block block) { - return getPosition(direction.getZ(), position.getZ(), block.getZ()); - } - - /** - * Constructs the BlockIterator - * - * @param loc The location for the start of the ray trace - * @param yOffset The trace begins vertically offset from the start vector - * by this value - * @param maxDistance This is the maximum distance in blocks for the - * trace. Setting this value above 140 may lead to problems with - * unloaded chunks. A value of 0 indicates no limit - */ - public BlockIterator(Location loc, double yOffset, int maxDistance) { - this(loc.getWorld(), loc.toVector(), loc.getDirection(), yOffset, maxDistance); - } - - /** - * Constructs the BlockIterator. - * - * @param loc The location for the start of the ray trace - * @param yOffset The trace begins vertically offset from the start vector - * by this value - */ - - public BlockIterator(Location loc, double yOffset) { - this(loc.getWorld(), loc.toVector(), loc.getDirection(), yOffset, 0); - } - - /** - * Constructs the BlockIterator. - * - * @param loc The location for the start of the ray trace - */ - - public BlockIterator(Location loc) { - this(loc, 0D); - } - - /** - * Constructs the BlockIterator. - * - * @param entity Information from the entity is used to set up the trace - * @param maxDistance This is the maximum distance in blocks for the - * trace. Setting this value above 140 may lead to problems with - * unloaded chunks. A value of 0 indicates no limit - */ - - public BlockIterator(LivingEntity entity, int maxDistance) { - this(entity.getLocation(), entity.getEyeHeight(), maxDistance); - } - - /** - * Constructs the BlockIterator. - * - * @param entity Information from the entity is used to set up the trace - */ - - public BlockIterator(LivingEntity entity) { - this(entity, 0); - } - - /** - * Returns true if the iteration has more elements - */ - - public boolean hasNext() { - scan(); - return currentBlock != -1; - } - - /** - * Returns the next Block in the trace - * - * @return the next Block in the trace - */ - - public Block next() { - scan(); - if (currentBlock <= -1) { - throw new NoSuchElementException(); - } else { - return blockQueue[currentBlock--]; - } - } - - public void remove() { - throw new UnsupportedOperationException("[BlockIterator] doesn't support block removal"); - } - - private void scan() { - if (currentBlock >= 0) { - return; - } - if (maxDistance != 0 && currentDistance > maxDistanceInt) { - end = true; - return; - } - if (end) { - return; - } - - currentDistance++; - - secondError += secondStep; - thirdError += thirdStep; - - if (secondError > 0 && thirdError > 0) { - blockQueue[2] = blockQueue[0].getRelative(mainFace); - if (((long) secondStep) * ((long) thirdError) < ((long) thirdStep) * ((long) secondError)) { - blockQueue[1] = blockQueue[2].getRelative(secondFace); - blockQueue[0] = blockQueue[1].getRelative(thirdFace); - } else { - blockQueue[1] = blockQueue[2].getRelative(thirdFace); - blockQueue[0] = blockQueue[1].getRelative(secondFace); - } - thirdError -= gridSize; - secondError -= gridSize; - currentBlock = 2; - return; - } else if (secondError > 0) { - blockQueue[1] = blockQueue[0].getRelative(mainFace); - blockQueue[0] = blockQueue[1].getRelative(secondFace); - secondError -= gridSize; - currentBlock = 1; - return; - } else if (thirdError > 0) { - blockQueue[1] = blockQueue[0].getRelative(mainFace); - blockQueue[0] = blockQueue[1].getRelative(thirdFace); - thirdError -= gridSize; - currentBlock = 1; - return; - } else { - blockQueue[0] = blockQueue[0].getRelative(mainFace); - currentBlock = 0; - return; - } - } -} diff --git a/LiveWeather/src/org/bukkit/util/BlockVector.java b/LiveWeather/src/org/bukkit/util/BlockVector.java deleted file mode 100755 index 412ddf8..0000000 --- a/LiveWeather/src/org/bukkit/util/BlockVector.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit.util; - -import java.util.Map; -import org.bukkit.configuration.serialization.SerializableAs; - -/** - * A vector with a hash function that floors the X, Y, Z components, such that - * each component is always equal to a the integer coordinate of the - * respective block at that location. BlockVectors can be used in hash sets - * and hash maps. Be aware that BlockVectors are mutable, but it is important - * that BlockVectors are never changed once put into a hash set or hash map. - */ -@SerializableAs("BlockVector") -public class BlockVector extends Vector { - - /** - * Construct the vector with all components as 0. - */ - public BlockVector() { - this.x = 0; - this.y = 0; - this.z = 0; - } - - /** - * Construct the vector with another vector. - * - * @param vec The other vector. - */ - public BlockVector(Vector vec) { - this.x = vec.getX(); - this.y = vec.getY(); - this.z = vec.getZ(); - } - - /** - * Construct the vector with provided integer components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public BlockVector(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Construct the vector with provided double components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public BlockVector(double x, double y, double z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Construct the vector with provided float components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public BlockVector(float x, float y, float z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Checks if another object is equivalent. - * - * @param obj The other object - * @return whether the other object is equivalent - */ - @Override - public boolean equals(Object obj) { - if (!(obj instanceof BlockVector)) { - return false; - } - BlockVector other = (BlockVector) obj; - - return (int) other.getX() == (int) this.x && (int) other.getY() == (int) this.y && (int) other.getZ() == (int) this.z; - - } - - /** - * Returns a hash code for this vector. - * - * @return hash code - */ - @Override - public int hashCode() { - return (Integer.valueOf((int) x).hashCode() >> 13) ^ (Integer.valueOf((int) y).hashCode() >> 7) ^ Integer.valueOf((int) z).hashCode(); - } - - /** - * Get a new block vector. - * - * @return vector - */ - @Override - public BlockVector clone() { - return (BlockVector) super.clone(); - } - - public static BlockVector deserialize(Map args) { - double x = 0; - double y = 0; - double z = 0; - - if (args.containsKey("x")) { - x = (Double) args.get("x"); - } - if (args.containsKey("y")) { - y = (Double) args.get("y"); - } - if (args.containsKey("z")) { - z = (Double) args.get("z"); - } - - return new BlockVector(x, y, z); - } -} diff --git a/LiveWeather/src/org/bukkit/util/CachedServerIcon.java b/LiveWeather/src/org/bukkit/util/CachedServerIcon.java deleted file mode 100755 index 5ca863b..0000000 --- a/LiveWeather/src/org/bukkit/util/CachedServerIcon.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bukkit.util; - -import org.bukkit.Server; -import org.bukkit.event.server.ServerListPingEvent; - -/** - * This is a cached version of a server-icon. It's internal representation - * and implementation is undefined. - * - * @see Server#getServerIcon() - * @see Server#loadServerIcon(java.awt.image.BufferedImage) - * @see Server#loadServerIcon(java.io.File) - * @see ServerListPingEvent#setServerIcon(CachedServerIcon) - */ -public interface CachedServerIcon {} diff --git a/LiveWeather/src/org/bukkit/util/ChatPaginator.java b/LiveWeather/src/org/bukkit/util/ChatPaginator.java deleted file mode 100755 index 24802d1..0000000 --- a/LiveWeather/src/org/bukkit/util/ChatPaginator.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.bukkit.util; - -import org.bukkit.ChatColor; - -import java.util.LinkedList; -import java.util.List; - -/** - * The ChatPaginator takes a raw string of arbitrary length and breaks it down - * into an array of strings appropriate for displaying on the Minecraft player - * console. - */ -public class ChatPaginator { - public static final int GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH = 55; // Will never wrap, even with the largest characters - public static final int AVERAGE_CHAT_PAGE_WIDTH = 65; // Will typically not wrap using an average character distribution - public static final int UNBOUNDED_PAGE_WIDTH = Integer.MAX_VALUE; - public static final int OPEN_CHAT_PAGE_HEIGHT = 20; // The height of an expanded chat window - public static final int CLOSED_CHAT_PAGE_HEIGHT = 10; // The height of the default chat window - public static final int UNBOUNDED_PAGE_HEIGHT = Integer.MAX_VALUE; - - /** - * Breaks a raw string up into pages using the default width and height. - * - * @param unpaginatedString The raw string to break. - * @param pageNumber The page number to fetch. - * @return A single chat page. - */ - public static ChatPage paginate(String unpaginatedString, int pageNumber) { - return paginate(unpaginatedString, pageNumber, GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH, CLOSED_CHAT_PAGE_HEIGHT); - } - - /** - * Breaks a raw string up into pages using a provided width and height. - * - * @param unpaginatedString The raw string to break. - * @param pageNumber The page number to fetch. - * @param lineLength The desired width of a chat line. - * @param pageHeight The desired number of lines in a page. - * @return A single chat page. - */ - public static ChatPage paginate(String unpaginatedString, int pageNumber, int lineLength, int pageHeight) { - String[] lines = wordWrap(unpaginatedString, lineLength); - - int totalPages = lines.length / pageHeight + (lines.length % pageHeight == 0 ? 0 : 1); - int actualPageNumber = pageNumber <= totalPages ? pageNumber : totalPages; - - int from = (actualPageNumber - 1) * pageHeight; - int to = from + pageHeight <= lines.length ? from + pageHeight : lines.length; - String[] selectedLines = Java15Compat.Arrays_copyOfRange(lines, from, to); - - return new ChatPage(selectedLines, actualPageNumber, totalPages); - } - - /** - * Breaks a raw string up into a series of lines. Words are wrapped using - * spaces as decimeters and the newline character is respected. - * - * @param rawString The raw string to break. - * @param lineLength The length of a line of text. - * @return An array of word-wrapped lines. - */ - public static String[] wordWrap(String rawString, int lineLength) { - // A null string is a single line - if (rawString == null) { - return new String[] {""}; - } - - // A string shorter than the lineWidth is a single line - if (rawString.length() <= lineLength && !rawString.contains("\n")) { - return new String[] {rawString}; - } - - char[] rawChars = (rawString + ' ').toCharArray(); // add a trailing space to trigger pagination - StringBuilder word = new StringBuilder(); - StringBuilder line = new StringBuilder(); - List lines = new LinkedList(); - int lineColorChars = 0; - - for (int i = 0; i < rawChars.length; i++) { - char c = rawChars[i]; - - // skip chat color modifiers - if (c == ChatColor.COLOR_CHAR) { - word.append(ChatColor.getByChar(rawChars[i + 1])); - lineColorChars += 2; - i++; // Eat the next character as we have already processed it - continue; - } - - if (c == ' ' || c == '\n') { - if (line.length() == 0 && word.length() > lineLength) { // special case: extremely long word begins a line - for (String partialWord : word.toString().split("(?<=\\G.{" + lineLength + "})")) { - lines.add(partialWord); - } - } else if (line.length() + word.length() - lineColorChars == lineLength) { // Line exactly the correct length...newline - line.append(word); - lines.add(line.toString()); - line = new StringBuilder(); - lineColorChars = 0; - } else if (line.length() + 1 + word.length() - lineColorChars > lineLength) { // Line too long...break the line - for (String partialWord : word.toString().split("(?<=\\G.{" + lineLength + "})")) { - lines.add(line.toString()); - line = new StringBuilder(partialWord); - } - lineColorChars = 0; - } else { - if (line.length() > 0) { - line.append(' '); - } - line.append(word); - } - word = new StringBuilder(); - - if (c == '\n') { // Newline forces the line to flush - lines.add(line.toString()); - line = new StringBuilder(); - } - } else { - word.append(c); - } - } - - if(line.length() > 0) { // Only add the last line if there is anything to add - lines.add(line.toString()); - } - - // Iterate over the wrapped lines, applying the last color from one line to the beginning of the next - if (lines.get(0).length() == 0 || lines.get(0).charAt(0) != ChatColor.COLOR_CHAR) { - lines.set(0, ChatColor.WHITE + lines.get(0)); - } - for (int i = 1; i < lines.size(); i++) { - final String pLine = lines.get(i-1); - final String subLine = lines.get(i); - - char color = pLine.charAt(pLine.lastIndexOf(ChatColor.COLOR_CHAR) + 1); - if (subLine.length() == 0 || subLine.charAt(0) != ChatColor.COLOR_CHAR) { - lines.set(i, ChatColor.getByChar(color) + subLine); - } - } - - return lines.toArray(new String[lines.size()]); - } - - public static class ChatPage { - - private String[] lines; - private int pageNumber; - private int totalPages; - - public ChatPage(String[] lines, int pageNumber, int totalPages) { - this.lines = lines; - this.pageNumber = pageNumber; - this.totalPages = totalPages; - } - - public int getPageNumber() { - return pageNumber; - } - - public int getTotalPages() { - return totalPages; - } - - public String[] getLines() { - - return lines; - } - } -} diff --git a/LiveWeather/src/org/bukkit/util/FileUtil.java b/LiveWeather/src/org/bukkit/util/FileUtil.java deleted file mode 100755 index 7cabf4c..0000000 --- a/LiveWeather/src/org/bukkit/util/FileUtil.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bukkit.util; - -import java.nio.channels.FileChannel; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -/** - * Class containing file utilities - */ -public class FileUtil { - - /** - * This method copies one file to another location - * - * @param inFile the source filename - * @param outFile the target filename - * @return true on success - */ - public static boolean copy(File inFile, File outFile) { - if (!inFile.exists()) { - return false; - } - - FileChannel in = null; - FileChannel out = null; - - try { - in = new FileInputStream(inFile).getChannel(); - out = new FileOutputStream(outFile).getChannel(); - - long pos = 0; - long size = in.size(); - - while (pos < size) { - pos += in.transferTo(pos, 10 * 1024 * 1024, out); - } - } catch (IOException ioe) { - return false; - } finally { - try { - if (in != null) { - in.close(); - } - if (out != null) { - out.close(); - } - } catch (IOException ioe) { - return false; - } - } - - return true; - - } -} diff --git a/LiveWeather/src/org/bukkit/util/Java15Compat.java b/LiveWeather/src/org/bukkit/util/Java15Compat.java deleted file mode 100755 index c119742..0000000 --- a/LiveWeather/src/org/bukkit/util/Java15Compat.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bukkit.util; - -import java.lang.reflect.Array; - -public class Java15Compat { - @SuppressWarnings("unchecked") - public static T[] Arrays_copyOfRange(T[] original, int start, int end) { - if (original.length >= start && 0 <= start) { - if (start <= end) { - int length = end - start; - int copyLength = Math.min(length, original.length - start); - T[] copy = (T[]) Array.newInstance(original.getClass().getComponentType(), length); - - System.arraycopy(original, start, copy, 0, copyLength); - return copy; - } - throw new IllegalArgumentException(); - } - throw new ArrayIndexOutOfBoundsException(); - } -} diff --git a/LiveWeather/src/org/bukkit/util/NumberConversions.java b/LiveWeather/src/org/bukkit/util/NumberConversions.java deleted file mode 100755 index 29f81d0..0000000 --- a/LiveWeather/src/org/bukkit/util/NumberConversions.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.bukkit.util; - -/** - * Utils for casting number types to other number types - */ -public final class NumberConversions { - private NumberConversions() {} - - public static int floor(double num) { - final int floor = (int) num; - return floor == num ? floor : floor - (int) (Double.doubleToRawLongBits(num) >>> 63); - } - - public static int ceil(final double num) { - final int floor = (int) num; - return floor == num ? floor : floor + (int) (~Double.doubleToRawLongBits(num) >>> 63); - } - - public static int round(double num) { - return floor(num + 0.5d); - } - - public static double square(double num) { - return num * num; - } - - public static int toInt(Object object) { - if (object instanceof Number) { - return ((Number) object).intValue(); - } - - try { - return Integer.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } - - public static float toFloat(Object object) { - if (object instanceof Number) { - return ((Number) object).floatValue(); - } - - try { - return Float.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } - - public static double toDouble(Object object) { - if (object instanceof Number) { - return ((Number) object).doubleValue(); - } - - try { - return Double.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } - - public static long toLong(Object object) { - if (object instanceof Number) { - return ((Number) object).longValue(); - } - - try { - return Long.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } - - public static short toShort(Object object) { - if (object instanceof Number) { - return ((Number) object).shortValue(); - } - - try { - return Short.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } - - public static byte toByte(Object object) { - if (object instanceof Number) { - return ((Number) object).byteValue(); - } - - try { - return Byte.valueOf(object.toString()); - } catch (NumberFormatException e) { - } catch (NullPointerException e) { - } - return 0; - } -} diff --git a/LiveWeather/src/org/bukkit/util/StringUtil.java b/LiveWeather/src/org/bukkit/util/StringUtil.java deleted file mode 100755 index 4a8753f..0000000 --- a/LiveWeather/src/org/bukkit/util/StringUtil.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bukkit.util; - -import java.util.Collection; -import org.apache.commons.lang.Validate; - -public class StringUtil { - - /** - * Copies all elements from the iterable collection of originals to the - * collection provided. - * - * @param token String to search for - * @param originals An iterable collection of strings to filter. - * @param collection The collection to add matches to - * @return the collection provided that would have the elements copied - * into - * @throws UnsupportedOperationException if the collection is immutable - * and originals contains a string which starts with the specified - * search string. - * @throws IllegalArgumentException if any parameter is is null - * @throws IllegalArgumentException if originals contains a null element. - * Note: the collection may be modified before this is thrown - */ - public static > T copyPartialMatches(final String token, final Iterable originals, final T collection) throws UnsupportedOperationException, IllegalArgumentException { - Validate.notNull(token, "Search token cannot be null"); - Validate.notNull(collection, "Collection cannot be null"); - Validate.notNull(originals, "Originals cannot be null"); - - for (String string : originals) { - if (startsWithIgnoreCase(string, token)) { - collection.add(string); - } - } - - return collection; - } - - /** - * This method uses a region to check case-insensitive equality. This - * means the internal array does not need to be copied like a - * toLowerCase() call would. - * - * @param string String to check - * @param prefix Prefix of string to compare - * @return true if provided string starts with, ignoring case, the prefix - * provided - * @throws NullPointerException if prefix is null - * @throws IllegalArgumentException if string is null - */ - public static boolean startsWithIgnoreCase(final String string, final String prefix) throws IllegalArgumentException, NullPointerException { - Validate.notNull(string, "Cannot check a null string for a match"); - if (string.length() < prefix.length()) { - return false; - } - return string.regionMatches(true, 0, prefix, 0, prefix.length()); - } -} diff --git a/LiveWeather/src/org/bukkit/util/Vector.java b/LiveWeather/src/org/bukkit/util/Vector.java deleted file mode 100755 index 61116ea..0000000 --- a/LiveWeather/src/org/bukkit/util/Vector.java +++ /dev/null @@ -1,667 +0,0 @@ -package org.bukkit.util; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Random; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.SerializableAs; - -/** - * Represents a mutable vector. Because the components of Vectors are mutable, - * storing Vectors long term may be dangerous if passing code modifies the - * Vector later. If you want to keep around a Vector, it may be wise to call - * clone() in order to get a copy. - */ -@SerializableAs("Vector") -public class Vector implements Cloneable, ConfigurationSerializable { - private static final long serialVersionUID = -2657651106777219169L; - - private static Random random = new Random(); - - /** - * Threshold for fuzzy equals(). - */ - private static final double epsilon = 0.000001; - - protected double x; - protected double y; - protected double z; - - /** - * Construct the vector with all components as 0. - */ - public Vector() { - this.x = 0; - this.y = 0; - this.z = 0; - } - - /** - * Construct the vector with provided integer components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public Vector(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Construct the vector with provided double components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public Vector(double x, double y, double z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Construct the vector with provided float components. - * - * @param x X component - * @param y Y component - * @param z Z component - */ - public Vector(float x, float y, float z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Adds a vector to this one - * - * @param vec The other vector - * @return the same vector - */ - public Vector add(Vector vec) { - x += vec.x; - y += vec.y; - z += vec.z; - return this; - } - - /** - * Subtracts a vector from this one. - * - * @param vec The other vector - * @return the same vector - */ - public Vector subtract(Vector vec) { - x -= vec.x; - y -= vec.y; - z -= vec.z; - return this; - } - - /** - * Multiplies the vector by another. - * - * @param vec The other vector - * @return the same vector - */ - public Vector multiply(Vector vec) { - x *= vec.x; - y *= vec.y; - z *= vec.z; - return this; - } - - /** - * Divides the vector by another. - * - * @param vec The other vector - * @return the same vector - */ - public Vector divide(Vector vec) { - x /= vec.x; - y /= vec.y; - z /= vec.z; - return this; - } - - /** - * Copies another vector - * - * @param vec The other vector - * @return the same vector - */ - public Vector copy(Vector vec) { - x = vec.x; - y = vec.y; - z = vec.z; - return this; - } - - /** - * Gets the magnitude of the vector, defined as sqrt(x^2+y^2+z^2). The - * value of this method is not cached and uses a costly square-root - * function, so do not repeatedly call this method to get the vector's - * magnitude. NaN will be returned if the inner result of the sqrt() - * function overflows, which will be caused if the length is too long. - * - * @return the magnitude - */ - public double length() { - return Math.sqrt(NumberConversions.square(x) + NumberConversions.square(y) + NumberConversions.square(z)); - } - - /** - * Gets the magnitude of the vector squared. - * - * @return the magnitude - */ - public double lengthSquared() { - return NumberConversions.square(x) + NumberConversions.square(y) + NumberConversions.square(z); - } - - /** - * Get the distance between this vector and another. The value of this - * method is not cached and uses a costly square-root function, so do not - * repeatedly call this method to get the vector's magnitude. NaN will be - * returned if the inner result of the sqrt() function overflows, which - * will be caused if the distance is too long. - * - * @param o The other vector - * @return the distance - */ - public double distance(Vector o) { - return Math.sqrt(NumberConversions.square(x - o.x) + NumberConversions.square(y - o.y) + NumberConversions.square(z - o.z)); - } - - /** - * Get the squared distance between this vector and another. - * - * @param o The other vector - * @return the distance - */ - public double distanceSquared(Vector o) { - return NumberConversions.square(x - o.x) + NumberConversions.square(y - o.y) + NumberConversions.square(z - o.z); - } - - /** - * Gets the angle between this vector and another in radians. - * - * @param other The other vector - * @return angle in radians - */ - public float angle(Vector other) { - double dot = dot(other) / (length() * other.length()); - - return (float) Math.acos(dot); - } - - /** - * Sets this vector to the midpoint between this vector and another. - * - * @param other The other vector - * @return this same vector (now a midpoint) - */ - public Vector midpoint(Vector other) { - x = (x + other.x) / 2; - y = (y + other.y) / 2; - z = (z + other.z) / 2; - return this; - } - - /** - * Gets a new midpoint vector between this vector and another. - * - * @param other The other vector - * @return a new midpoint vector - */ - public Vector getMidpoint(Vector other) { - double x = (this.x + other.x) / 2; - double y = (this.y + other.y) / 2; - double z = (this.z + other.z) / 2; - return new Vector(x, y, z); - } - - /** - * Performs scalar multiplication, multiplying all components with a - * scalar. - * - * @param m The factor - * @return the same vector - */ - public Vector multiply(int m) { - x *= m; - y *= m; - z *= m; - return this; - } - - /** - * Performs scalar multiplication, multiplying all components with a - * scalar. - * - * @param m The factor - * @return the same vector - */ - public Vector multiply(double m) { - x *= m; - y *= m; - z *= m; - return this; - } - - /** - * Performs scalar multiplication, multiplying all components with a - * scalar. - * - * @param m The factor - * @return the same vector - */ - public Vector multiply(float m) { - x *= m; - y *= m; - z *= m; - return this; - } - - /** - * Calculates the dot product of this vector with another. The dot product - * is defined as x1*x2+y1*y2+z1*z2. The returned value is a scalar. - * - * @param other The other vector - * @return dot product - */ - public double dot(Vector other) { - return x * other.x + y * other.y + z * other.z; - } - - /** - * Calculates the cross product of this vector with another. The cross - * product is defined as: - *

              - *
            • x = y1 * z2 - y2 * z1 - *
            • y = z1 * x2 - z2 * x1 - *
            • z = x1 * y2 - x2 * y1 - *
            - * - * @param o The other vector - * @return the same vector - */ - public Vector crossProduct(Vector o) { - double newX = y * o.z - o.y * z; - double newY = z * o.x - o.z * x; - double newZ = x * o.y - o.x * y; - - x = newX; - y = newY; - z = newZ; - return this; - } - - /** - * Converts this vector to a unit vector (a vector with length of 1). - * - * @return the same vector - */ - public Vector normalize() { - double length = length(); - - x /= length; - y /= length; - z /= length; - - return this; - } - - /** - * Zero this vector's components. - * - * @return the same vector - */ - public Vector zero() { - x = 0; - y = 0; - z = 0; - return this; - } - - /** - * Returns whether this vector is in an axis-aligned bounding box. - *

            - * The minimum and maximum vectors given must be truly the minimum and - * maximum X, Y and Z components. - * - * @param min Minimum vector - * @param max Maximum vector - * @return whether this vector is in the AABB - */ - public boolean isInAABB(Vector min, Vector max) { - return x >= min.x && x <= max.x && y >= min.y && y <= max.y && z >= min.z && z <= max.z; - } - - /** - * Returns whether this vector is within a sphere. - * - * @param origin Sphere origin. - * @param radius Sphere radius - * @return whether this vector is in the sphere - */ - public boolean isInSphere(Vector origin, double radius) { - return (NumberConversions.square(origin.x - x) + NumberConversions.square(origin.y - y) + NumberConversions.square(origin.z - z)) <= NumberConversions.square(radius); - } - - /** - * Gets the X component. - * - * @return The X component. - */ - public double getX() { - return x; - } - - /** - * Gets the floored value of the X component, indicating the block that - * this vector is contained with. - * - * @return block X - */ - public int getBlockX() { - return NumberConversions.floor(x); - } - - /** - * Gets the Y component. - * - * @return The Y component. - */ - public double getY() { - return y; - } - - /** - * Gets the floored value of the Y component, indicating the block that - * this vector is contained with. - * - * @return block y - */ - public int getBlockY() { - return NumberConversions.floor(y); - } - - /** - * Gets the Z component. - * - * @return The Z component. - */ - public double getZ() { - return z; - } - - /** - * Gets the floored value of the Z component, indicating the block that - * this vector is contained with. - * - * @return block z - */ - public int getBlockZ() { - return NumberConversions.floor(z); - } - - /** - * Set the X component. - * - * @param x The new X component. - * @return This vector. - */ - public Vector setX(int x) { - this.x = x; - return this; - } - - /** - * Set the X component. - * - * @param x The new X component. - * @return This vector. - */ - public Vector setX(double x) { - this.x = x; - return this; - } - - /** - * Set the X component. - * - * @param x The new X component. - * @return This vector. - */ - public Vector setX(float x) { - this.x = x; - return this; - } - - /** - * Set the Y component. - * - * @param y The new Y component. - * @return This vector. - */ - public Vector setY(int y) { - this.y = y; - return this; - } - - /** - * Set the Y component. - * - * @param y The new Y component. - * @return This vector. - */ - public Vector setY(double y) { - this.y = y; - return this; - } - - /** - * Set the Y component. - * - * @param y The new Y component. - * @return This vector. - */ - public Vector setY(float y) { - this.y = y; - return this; - } - - /** - * Set the Z component. - * - * @param z The new Z component. - * @return This vector. - */ - public Vector setZ(int z) { - this.z = z; - return this; - } - - /** - * Set the Z component. - * - * @param z The new Z component. - * @return This vector. - */ - public Vector setZ(double z) { - this.z = z; - return this; - } - - /** - * Set the Z component. - * - * @param z The new Z component. - * @return This vector. - */ - public Vector setZ(float z) { - this.z = z; - return this; - } - - /** - * Checks to see if two objects are equal. - *

            - * Only two Vectors can ever return true. This method uses a fuzzy match - * to account for floating point errors. The epsilon can be retrieved - * with epsilon. - */ - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Vector)) { - return false; - } - - Vector other = (Vector) obj; - - return Math.abs(x - other.x) < epsilon && Math.abs(y - other.y) < epsilon && Math.abs(z - other.z) < epsilon && (this.getClass().equals(obj.getClass())); - } - - /** - * Returns a hash code for this vector - * - * @return hash code - */ - @Override - public int hashCode() { - int hash = 7; - - hash = 79 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32)); - hash = 79 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32)); - hash = 79 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32)); - return hash; - } - - /** - * Get a new vector. - * - * @return vector - */ - @Override - public Vector clone() { - try { - return (Vector) super.clone(); - } catch (CloneNotSupportedException e) { - throw new Error(e); - } - } - - /** - * Returns this vector's components as x,y,z. - */ - @Override - public String toString() { - return x + "," + y + "," + z; - } - - /** - * Gets a Location version of this vector with yaw and pitch being 0. - * - * @param world The world to link the location to. - * @return the location - */ - public Location toLocation(World world) { - return new Location(world, x, y, z); - } - - /** - * Gets a Location version of this vector. - * - * @param world The world to link the location to. - * @param yaw The desired yaw. - * @param pitch The desired pitch. - * @return the location - */ - public Location toLocation(World world, float yaw, float pitch) { - return new Location(world, x, y, z, yaw, pitch); - } - - /** - * Get the block vector of this vector. - * - * @return A block vector. - */ - public BlockVector toBlockVector() { - return new BlockVector(x, y, z); - } - - /** - * Get the threshold used for equals(). - * - * @return The epsilon. - */ - public static double getEpsilon() { - return epsilon; - } - - /** - * Gets the minimum components of two vectors. - * - * @param v1 The first vector. - * @param v2 The second vector. - * @return minimum - */ - public static Vector getMinimum(Vector v1, Vector v2) { - return new Vector(Math.min(v1.x, v2.x), Math.min(v1.y, v2.y), Math.min(v1.z, v2.z)); - } - - /** - * Gets the maximum components of two vectors. - * - * @param v1 The first vector. - * @param v2 The second vector. - * @return maximum - */ - public static Vector getMaximum(Vector v1, Vector v2) { - return new Vector(Math.max(v1.x, v2.x), Math.max(v1.y, v2.y), Math.max(v1.z, v2.z)); - } - - /** - * Gets a random vector with components having a random value between 0 - * and 1. - * - * @return A random vector. - */ - public static Vector getRandom() { - return new Vector(random.nextDouble(), random.nextDouble(), random.nextDouble()); - } - - public Map serialize() { - Map result = new LinkedHashMap(); - - result.put("x", getX()); - result.put("y", getY()); - result.put("z", getZ()); - - return result; - } - - public static Vector deserialize(Map args) { - double x = 0; - double y = 0; - double z = 0; - - if (args.containsKey("x")) { - x = (Double) args.get("x"); - } - if (args.containsKey("y")) { - y = (Double) args.get("y"); - } - if (args.containsKey("z")) { - z = (Double) args.get("z"); - } - - return new Vector(x, y, z); - } -} diff --git a/LiveWeather/src/org/bukkit/util/io/BukkitObjectInputStream.java b/LiveWeather/src/org/bukkit/util/io/BukkitObjectInputStream.java deleted file mode 100755 index d4b2825..0000000 --- a/LiveWeather/src/org/bukkit/util/io/BukkitObjectInputStream.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.bukkit.util.io; - -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; - -/** - * This class is designed to be used in conjunction with the {@link - * ConfigurationSerializable} API. It translates objects back to their - * original implementation after being serialized by {@link - * BukkitObjectInputStream}. - *

            - * Behavior of implementations extending this class is not guaranteed across - * future versions. - */ -public class BukkitObjectInputStream extends ObjectInputStream { - - /** - * Constructor provided to mirror super functionality. - * - * @throws IOException - * @throws SecurityException - * @see ObjectInputStream#ObjectInputStream() - */ - protected BukkitObjectInputStream() throws IOException, SecurityException { - super(); - super.enableResolveObject(true); - } - - /** - * Object input stream decoration constructor. - * - * @param in - * @throws IOException - * @see ObjectInputStream#ObjectInputStream(InputStream) - */ - public BukkitObjectInputStream(InputStream in) throws IOException { - super(in); - super.enableResolveObject(true); - } - - @Override - protected Object resolveObject(Object obj) throws IOException { - if (obj instanceof Wrapper) { - try { - (obj = ConfigurationSerialization.deserializeObject(((Wrapper) obj).map)).getClass(); // NPE - } catch (Throwable ex) { - throw newIOException("Failed to deserialize object", ex); - } - } - - return super.resolveObject(obj); - } - - private static IOException newIOException(String string, Throwable cause) { - IOException exception = new IOException(string); - exception.initCause(cause); - return exception; - } -} diff --git a/LiveWeather/src/org/bukkit/util/io/BukkitObjectOutputStream.java b/LiveWeather/src/org/bukkit/util/io/BukkitObjectOutputStream.java deleted file mode 100755 index c11e202..0000000 --- a/LiveWeather/src/org/bukkit/util/io/BukkitObjectOutputStream.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bukkit.util.io; - -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.io.OutputStream; -import java.io.Serializable; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; - -/** - * This class is designed to be used in conjunction with the {@link - * ConfigurationSerializable} API. It translates objects to an internal - * implementation for later deserialization using {@link - * BukkitObjectInputStream}. - *

            - * Behavior of implementations extending this class is not guaranteed across - * future versions. - */ -public class BukkitObjectOutputStream extends ObjectOutputStream { - - /** - * Constructor provided to mirror super functionality. - * - * @throws IOException - * @throws SecurityException - * @see ObjectOutputStream#ObjectOutputStream() - */ - protected BukkitObjectOutputStream() throws IOException, SecurityException { - super(); - super.enableReplaceObject(true); - } - - /** - * Object output stream decoration constructor. - * - * @param out - * @throws IOException - * @see ObjectOutputStream#ObjectOutputStream(OutputStream) - */ - public BukkitObjectOutputStream(OutputStream out) throws IOException { - super(out); - super.enableReplaceObject(true); - } - - @Override - protected Object replaceObject(Object obj) throws IOException { - if (!(obj instanceof Serializable) && (obj instanceof ConfigurationSerializable)) { - obj = Wrapper.newWrapper((ConfigurationSerializable) obj); - } - - return super.replaceObject(obj); - } -} diff --git a/LiveWeather/src/org/bukkit/util/io/Wrapper.java b/LiveWeather/src/org/bukkit/util/io/Wrapper.java deleted file mode 100755 index e45605b..0000000 --- a/LiveWeather/src/org/bukkit/util/io/Wrapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bukkit.util.io; - -import java.io.Serializable; -import java.util.Map; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; - -import com.google.common.collect.ImmutableMap; - -class Wrapper & Serializable> implements Serializable { - private static final long serialVersionUID = -986209235411767547L; - - final T map; - - static Wrapper> newWrapper(ConfigurationSerializable obj) { - return new Wrapper>(ImmutableMap.builder().put(ConfigurationSerialization.SERIALIZED_TYPE_KEY, ConfigurationSerialization.getAlias(obj.getClass())).putAll(obj.serialize()).build()); - } - - private Wrapper(T map) { - this.map = map; - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/NoiseGenerator.java b/LiveWeather/src/org/bukkit/util/noise/NoiseGenerator.java deleted file mode 100755 index 72c92f3..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/NoiseGenerator.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.bukkit.util.noise; - -/** - * Base class for all noise generators - */ -public abstract class NoiseGenerator { - protected final int perm[] = new int[512]; - protected double offsetX; - protected double offsetY; - protected double offsetZ; - - /** - * Speedy floor, faster than (int)Math.floor(x) - * - * @param x Value to floor - * @return Floored value - */ - public static int floor(double x) { - return x >= 0 ? (int) x : (int) x - 1; - } - - protected static double fade(double x) { - return x * x * x * (x * (x * 6 - 15) + 10); - } - - protected static double lerp(double x, double y, double z) { - return y + x * (z - y); - } - - protected static double grad(int hash, double x, double y, double z) { - hash &= 15; - double u = hash < 8 ? x : y; - double v = hash < 4 ? y : hash == 12 || hash == 14 ? x : z; - return ((hash & 1) == 0 ? u : -u) + ((hash & 2) == 0 ? v : -v); - } - - /** - * Computes and returns the 1D noise for the given coordinate in 1D space - * - * @param x X coordinate - * @return Noise at given location, from range -1 to 1 - */ - public double noise(double x) { - return noise(x, 0, 0); - } - - /** - * Computes and returns the 2D noise for the given coordinates in 2D space - * - * @param x X coordinate - * @param y Y coordinate - * @return Noise at given location, from range -1 to 1 - */ - public double noise(double x, double y) { - return noise(x, y, 0); - } - - /** - * Computes and returns the 3D noise for the given coordinates in 3D space - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @return Noise at given location, from range -1 to 1 - */ - public abstract double noise(double x, double y, double z); - - /** - * Generates noise for the 1D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, int octaves, double frequency, double amplitude) { - return noise(x, 0, 0, octaves, frequency, amplitude); - } - - /** - * Generates noise for the 1D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, int octaves, double frequency, double amplitude, boolean normalized) { - return noise(x, 0, 0, octaves, frequency, amplitude, normalized); - } - - /** - * Generates noise for the 2D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double y, int octaves, double frequency, double amplitude) { - return noise(x, y, 0, octaves, frequency, amplitude); - } - - /** - * Generates noise for the 2D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double y, int octaves, double frequency, double amplitude, boolean normalized) { - return noise(x, y, 0, octaves, frequency, amplitude, normalized); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double y, double z, int octaves, double frequency, double amplitude) { - return noise(x, y, z, octaves, frequency, amplitude, false); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double y, double z, int octaves, double frequency, double amplitude, boolean normalized) { - double result = 0; - double amp = 1; - double freq = 1; - double max = 0; - - for (int i = 0; i < octaves; i++) { - result += noise(x * freq, y * freq, z * freq) * amp; - max += amp; - freq *= frequency; - amp *= amplitude; - } - - if (normalized) { - result /= max; - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/OctaveGenerator.java b/LiveWeather/src/org/bukkit/util/noise/OctaveGenerator.java deleted file mode 100755 index a87304b..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/OctaveGenerator.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.bukkit.util.noise; - -/** - * Creates noise using unbiased octaves - */ -public abstract class OctaveGenerator { - protected final NoiseGenerator[] octaves; - protected double xScale = 1; - protected double yScale = 1; - protected double zScale = 1; - - protected OctaveGenerator(NoiseGenerator[] octaves) { - this.octaves = octaves; - } - - /** - * Sets the scale used for all coordinates passed to this generator. - *

            - * This is the equivalent to setting each coordinate to the specified - * value. - * - * @param scale New value to scale each coordinate by - */ - public void setScale(double scale) { - setXScale(scale); - setYScale(scale); - setZScale(scale); - } - - /** - * Gets the scale used for each X-coordinates passed - * - * @return X scale - */ - public double getXScale() { - return xScale; - } - - /** - * Sets the scale used for each X-coordinates passed - * - * @param scale New X scale - */ - public void setXScale(double scale) { - xScale = scale; - } - - /** - * Gets the scale used for each Y-coordinates passed - * - * @return Y scale - */ - public double getYScale() { - return yScale; - } - - /** - * Sets the scale used for each Y-coordinates passed - * - * @param scale New Y scale - */ - public void setYScale(double scale) { - yScale = scale; - } - - /** - * Gets the scale used for each Z-coordinates passed - * - * @return Z scale - */ - public double getZScale() { - return zScale; - } - - /** - * Sets the scale used for each Z-coordinates passed - * - * @param scale New Z scale - */ - public void setZScale(double scale) { - zScale = scale; - } - - /** - * Gets a clone of the individual octaves used within this generator - * - * @return Clone of the individual octaves - */ - public NoiseGenerator[] getOctaves() { - return octaves.clone(); - } - - /** - * Generates noise for the 1D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double frequency, double amplitude) { - return noise(x, 0, 0, frequency, amplitude); - } - - /** - * Generates noise for the 1D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double frequency, double amplitude, boolean normalized) { - return noise(x, 0, 0, frequency, amplitude, normalized); - } - - /** - * Generates noise for the 2D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double y, double frequency, double amplitude) { - return noise(x, y, 0, frequency, amplitude); - } - - /** - * Generates noise for the 2D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double y, double frequency, double amplitude, boolean normalized) { - return noise(x, y, 0, frequency, amplitude, normalized); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double y, double z, double frequency, double amplitude) { - return noise(x, y, z, frequency, amplitude, false); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double y, double z, double frequency, double amplitude, boolean normalized) { - double result = 0; - double amp = 1; - double freq = 1; - double max = 0; - - x *= xScale; - y *= yScale; - z *= zScale; - - for (NoiseGenerator octave : octaves) { - result += octave.noise(x * freq, y * freq, z * freq) * amp; - max += amp; - freq *= frequency; - amp *= amplitude; - } - - if (normalized) { - result /= max; - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/PerlinNoiseGenerator.java b/LiveWeather/src/org/bukkit/util/noise/PerlinNoiseGenerator.java deleted file mode 100755 index 5e034c1..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/PerlinNoiseGenerator.java +++ /dev/null @@ -1,217 +0,0 @@ -package org.bukkit.util.noise; - -import java.util.Random; -import org.bukkit.World; - -/** - * Generates noise using the "classic" perlin generator - * - * @see SimplexNoiseGenerator "Improved" and faster version with slighly - * different results - */ -public class PerlinNoiseGenerator extends NoiseGenerator { - protected static final int grad3[][] = {{1, 1, 0}, {-1, 1, 0}, {1, -1, 0}, {-1, -1, 0}, - {1, 0, 1}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, - {0, 1, 1}, {0, -1, 1}, {0, 1, -1}, {0, -1, -1}}; - private static final PerlinNoiseGenerator instance = new PerlinNoiseGenerator(); - - protected PerlinNoiseGenerator() { - int p[] = {151, 160, 137, 91, 90, 15, 131, 13, 201, - 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, - 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, - 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, - 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, - 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, - 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, - 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, - 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, - 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, - 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, - 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, - 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, - 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, - 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, - 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, - 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, - 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180}; - - for (int i = 0; i < 512; i++) { - perm[i] = p[i & 255]; - } - } - - /** - * Creates a seeded perlin noise generator for the given world - * - * @param world World to construct this generator for - */ - public PerlinNoiseGenerator(World world) { - this(new Random(world.getSeed())); - } - - /** - * Creates a seeded perlin noise generator for the given seed - * - * @param seed Seed to construct this generator for - */ - public PerlinNoiseGenerator(long seed) { - this(new Random(seed)); - } - - /** - * Creates a seeded perlin noise generator with the given Random - * - * @param rand Random to construct with - */ - public PerlinNoiseGenerator(Random rand) { - offsetX = rand.nextDouble() * 256; - offsetY = rand.nextDouble() * 256; - offsetZ = rand.nextDouble() * 256; - - for (int i = 0; i < 256; i++) { - perm[i] = rand.nextInt(256); - } - - for (int i = 0; i < 256; i++) { - int pos = rand.nextInt(256 - i) + i; - int old = perm[i]; - - perm[i] = perm[pos]; - perm[pos] = old; - perm[i + 256] = perm[i]; - } - } - - /** - * Computes and returns the 1D unseeded perlin noise for the given - * coordinates in 1D space - * - * @param x X coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double x) { - return instance.noise(x); - } - - /** - * Computes and returns the 2D unseeded perlin noise for the given - * coordinates in 2D space - * - * @param x X coordinate - * @param y Y coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double x, double y) { - return instance.noise(x, y); - } - - /** - * Computes and returns the 3D unseeded perlin noise for the given - * coordinates in 3D space - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double x, double y, double z) { - return instance.noise(x, y, z); - } - - /** - * Gets the singleton unseeded instance of this generator - * - * @return Singleton - */ - public static PerlinNoiseGenerator getInstance() { - return instance; - } - - @Override - public double noise(double x, double y, double z) { - x += offsetX; - y += offsetY; - z += offsetZ; - - int floorX = floor(x); - int floorY = floor(y); - int floorZ = floor(z); - - // Find unit cube containing the point - int X = floorX & 255; - int Y = floorY & 255; - int Z = floorZ & 255; - - // Get relative xyz coordinates of the point within the cube - x -= floorX; - y -= floorY; - z -= floorZ; - - // Compute fade curves for xyz - double fX = fade(x); - double fY = fade(y); - double fZ = fade(z); - - // Hash coordinates of the cube corners - int A = perm[X] + Y; - int AA = perm[A] + Z; - int AB = perm[A + 1] + Z; - int B = perm[X + 1] + Y; - int BA = perm[B] + Z; - int BB = perm[B + 1] + Z; - - return lerp(fZ, lerp(fY, lerp(fX, grad(perm[AA], x, y, z), - grad(perm[BA], x - 1, y, z)), - lerp(fX, grad(perm[AB], x, y - 1, z), - grad(perm[BB], x - 1, y - 1, z))), - lerp(fY, lerp(fX, grad(perm[AA + 1], x, y, z - 1), - grad(perm[BA + 1], x - 1, y, z - 1)), - lerp(fX, grad(perm[AB + 1], x, y - 1, z - 1), - grad(perm[BB + 1], x - 1, y - 1, z - 1)))); - } - - /** - * Generates noise for the 1D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public static double getNoise(double x, int octaves, double frequency, double amplitude) { - return instance.noise(x, octaves, frequency, amplitude); - } - - /** - * Generates noise for the 2D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public static double getNoise(double x, double y, int octaves, double frequency, double amplitude) { - return instance.noise(x, y, octaves, frequency, amplitude); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param octaves Number of octaves to use - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public static double getNoise(double x, double y, double z, int octaves, double frequency, double amplitude) { - return instance.noise(x, y, z, octaves, frequency, amplitude); - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/PerlinOctaveGenerator.java b/LiveWeather/src/org/bukkit/util/noise/PerlinOctaveGenerator.java deleted file mode 100755 index 55b7ad7..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/PerlinOctaveGenerator.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bukkit.util.noise; - -import java.util.Random; -import org.bukkit.World; - -/** - * Creates perlin noise through unbiased octaves - */ -public class PerlinOctaveGenerator extends OctaveGenerator { - - /** - * Creates a perlin octave generator for the given world - * - * @param world World to construct this generator for - * @param octaves Amount of octaves to create - */ - public PerlinOctaveGenerator(World world, int octaves) { - this(new Random(world.getSeed()), octaves); - } - - /** - * Creates a perlin octave generator for the given world - * - * @param seed Seed to construct this generator for - * @param octaves Amount of octaves to create - */ - public PerlinOctaveGenerator(long seed, int octaves) { - this(new Random(seed), octaves); - } - - /** - * Creates a perlin octave generator for the given {@link Random} - * - * @param rand Random object to construct this generator for - * @param octaves Amount of octaves to create - */ - public PerlinOctaveGenerator(Random rand, int octaves) { - super(createOctaves(rand, octaves)); - } - - private static NoiseGenerator[] createOctaves(Random rand, int octaves) { - NoiseGenerator[] result = new NoiseGenerator[octaves]; - - for (int i = 0; i < octaves; i++) { - result[i] = new PerlinNoiseGenerator(rand); - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/SimplexNoiseGenerator.java b/LiveWeather/src/org/bukkit/util/noise/SimplexNoiseGenerator.java deleted file mode 100755 index b052f3c..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/SimplexNoiseGenerator.java +++ /dev/null @@ -1,520 +0,0 @@ -package org.bukkit.util.noise; - -import java.util.Random; -import org.bukkit.World; - -/** - * Generates simplex-based noise. - *

            - * This is a modified version of the freely published version in the paper by - * Stefan Gustavson at - * - * http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - */ -public class SimplexNoiseGenerator extends PerlinNoiseGenerator { - protected static final double SQRT_3 = Math.sqrt(3); - protected static final double SQRT_5 = Math.sqrt(5); - protected static final double F2 = 0.5 * (SQRT_3 - 1); - protected static final double G2 = (3 - SQRT_3) / 6; - protected static final double G22 = G2 * 2.0 - 1; - protected static final double F3 = 1.0 / 3.0; - protected static final double G3 = 1.0 / 6.0; - protected static final double F4 = (SQRT_5 - 1.0) / 4.0; - protected static final double G4 = (5.0 - SQRT_5) / 20.0; - protected static final double G42 = G4 * 2.0; - protected static final double G43 = G4 * 3.0; - protected static final double G44 = G4 * 4.0 - 1.0; - protected static final int grad4[][] = {{0, 1, 1, 1}, {0, 1, 1, -1}, {0, 1, -1, 1}, {0, 1, -1, -1}, - {0, -1, 1, 1}, {0, -1, 1, -1}, {0, -1, -1, 1}, {0, -1, -1, -1}, - {1, 0, 1, 1}, {1, 0, 1, -1}, {1, 0, -1, 1}, {1, 0, -1, -1}, - {-1, 0, 1, 1}, {-1, 0, 1, -1}, {-1, 0, -1, 1}, {-1, 0, -1, -1}, - {1, 1, 0, 1}, {1, 1, 0, -1}, {1, -1, 0, 1}, {1, -1, 0, -1}, - {-1, 1, 0, 1}, {-1, 1, 0, -1}, {-1, -1, 0, 1}, {-1, -1, 0, -1}, - {1, 1, 1, 0}, {1, 1, -1, 0}, {1, -1, 1, 0}, {1, -1, -1, 0}, - {-1, 1, 1, 0}, {-1, 1, -1, 0}, {-1, -1, 1, 0}, {-1, -1, -1, 0}}; - protected static final int simplex[][] = { - {0, 1, 2, 3}, {0, 1, 3, 2}, {0, 0, 0, 0}, {0, 2, 3, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {1, 2, 3, 0}, - {0, 2, 1, 3}, {0, 0, 0, 0}, {0, 3, 1, 2}, {0, 3, 2, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {1, 3, 2, 0}, - {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, - {1, 2, 0, 3}, {0, 0, 0, 0}, {1, 3, 0, 2}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {2, 3, 0, 1}, {2, 3, 1, 0}, - {1, 0, 2, 3}, {1, 0, 3, 2}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {2, 0, 3, 1}, {0, 0, 0, 0}, {2, 1, 3, 0}, - {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, - {2, 0, 1, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {3, 0, 1, 2}, {3, 0, 2, 1}, {0, 0, 0, 0}, {3, 1, 2, 0}, - {2, 1, 0, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {3, 1, 0, 2}, {0, 0, 0, 0}, {3, 2, 0, 1}, {3, 2, 1, 0}}; - protected static double offsetW; - private static final SimplexNoiseGenerator instance = new SimplexNoiseGenerator(); - - protected SimplexNoiseGenerator() { - super(); - } - - /** - * Creates a seeded simplex noise generator for the given world - * - * @param world World to construct this generator for - */ - public SimplexNoiseGenerator(World world) { - this(new Random(world.getSeed())); - } - - /** - * Creates a seeded simplex noise generator for the given seed - * - * @param seed Seed to construct this generator for - */ - public SimplexNoiseGenerator(long seed) { - this(new Random(seed)); - } - - /** - * Creates a seeded simplex noise generator with the given Random - * - * @param rand Random to construct with - */ - public SimplexNoiseGenerator(Random rand) { - super(rand); - offsetW = rand.nextDouble() * 256; - } - - protected static double dot(int g[], double x, double y) { - return g[0] * x + g[1] * y; - } - - protected static double dot(int g[], double x, double y, double z) { - return g[0] * x + g[1] * y + g[2] * z; - } - - protected static double dot(int g[], double x, double y, double z, double w) { - return g[0] * x + g[1] * y + g[2] * z + g[3] * w; - } - - /** - * Computes and returns the 1D unseeded simplex noise for the given - * coordinates in 1D space - * - * @param xin X coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double xin) { - return instance.noise(xin); - } - - /** - * Computes and returns the 2D unseeded simplex noise for the given - * coordinates in 2D space - * - * @param xin X coordinate - * @param yin Y coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double xin, double yin) { - return instance.noise(xin, yin); - } - - /** - * Computes and returns the 3D unseeded simplex noise for the given - * coordinates in 3D space - * - * @param xin X coordinate - * @param yin Y coordinate - * @param zin Z coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double xin, double yin, double zin) { - return instance.noise(xin, yin, zin); - } - - /** - * Computes and returns the 4D simplex noise for the given coordinates in - * 4D space - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param w W coordinate - * @return Noise at given location, from range -1 to 1 - */ - public static double getNoise(double x, double y, double z, double w) { - return instance.noise(x, y, z, w); - } - - @Override - public double noise(double xin, double yin, double zin) { - xin += offsetX; - yin += offsetY; - zin += offsetZ; - - double n0, n1, n2, n3; // Noise contributions from the four corners - - // Skew the input space to determine which simplex cell we're in - double s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D - int i = floor(xin + s); - int j = floor(yin + s); - int k = floor(zin + s); - double t = (i + j + k) * G3; - double X0 = i - t; // Unskew the cell origin back to (x,y,z) space - double Y0 = j - t; - double Z0 = k - t; - double x0 = xin - X0; // The x,y,z distances from the cell origin - double y0 = yin - Y0; - double z0 = zin - Z0; - - // For the 3D case, the simplex shape is a slightly irregular tetrahedron. - - // Determine which simplex we are in. - int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords - int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords - if (x0 >= y0) { - if (y0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } // X Y Z order - else if (x0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 0; - k2 = 1; - } // X Z Y order - else { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 1; - j2 = 0; - k2 = 1; - } // Z X Y order - } else { // x0 y0) { - i1 = 1; - j1 = 0; - } // lower triangle, XY order: (0,0)->(1,0)->(1,1) - else { - i1 = 0; - j1 = 1; - } // upper triangle, YX order: (0,0)->(0,1)->(1,1) - - // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and - // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where - // c = (3-sqrt(3))/6 - - double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords - double y1 = y0 - j1 + G2; - double x2 = x0 + G22; // Offsets for last corner in (x,y) unskewed coords - double y2 = y0 + G22; - - // Work out the hashed gradient indices of the three simplex corners - int ii = i & 255; - int jj = j & 255; - int gi0 = perm[ii + perm[jj]] % 12; - int gi1 = perm[ii + i1 + perm[jj + j1]] % 12; - int gi2 = perm[ii + 1 + perm[jj + 1]] % 12; - - // Calculate the contribution from the three corners - double t0 = 0.5 - x0 * x0 - y0 * y0; - if (t0 < 0) { - n0 = 0.0; - } else { - t0 *= t0; - n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient - } - - double t1 = 0.5 - x1 * x1 - y1 * y1; - if (t1 < 0) { - n1 = 0.0; - } else { - t1 *= t1; - n1 = t1 * t1 * dot(grad3[gi1], x1, y1); - } - - double t2 = 0.5 - x2 * x2 - y2 * y2; - if (t2 < 0) { - n2 = 0.0; - } else { - t2 *= t2; - n2 = t2 * t2 * dot(grad3[gi2], x2, y2); - } - - // Add contributions from each corner to get the final noise value. - // The result is scaled to return values in the interval [-1,1]. - return 70.0 * (n0 + n1 + n2); - } - - /** - * Computes and returns the 4D simplex noise for the given coordinates in - * 4D space - * - * @param x X coordinate - * @param y Y coordinate - * @param z Z coordinate - * @param w W coordinate - * @return Noise at given location, from range -1 to 1 - */ - public double noise(double x, double y, double z, double w) { - x += offsetX; - y += offsetY; - z += offsetZ; - w += offsetW; - - double n0, n1, n2, n3, n4; // Noise contributions from the five corners - - // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in - double s = (x + y + z + w) * F4; // Factor for 4D skewing - int i = floor(x + s); - int j = floor(y + s); - int k = floor(z + s); - int l = floor(w + s); - - double t = (i + j + k + l) * G4; // Factor for 4D unskewing - double X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space - double Y0 = j - t; - double Z0 = k - t; - double W0 = l - t; - double x0 = x - X0; // The x,y,z,w distances from the cell origin - double y0 = y - Y0; - double z0 = z - Z0; - double w0 = w - W0; - - // For the 4D case, the simplex is a 4D shape I won't even try to describe. - // To find out which of the 24 possible simplices we're in, we need to - // determine the magnitude ordering of x0, y0, z0 and w0. - // The method below is a good way of finding the ordering of x,y,z,w and - // then find the correct traversal order for the simplex we’re in. - // First, six pair-wise comparisons are performed between each possible pair - // of the four coordinates, and the results are used to add up binary bits - // for an integer index. - int c1 = (x0 > y0) ? 32 : 0; - int c2 = (x0 > z0) ? 16 : 0; - int c3 = (y0 > z0) ? 8 : 0; - int c4 = (x0 > w0) ? 4 : 0; - int c5 = (y0 > w0) ? 2 : 0; - int c6 = (z0 > w0) ? 1 : 0; - int c = c1 + c2 + c3 + c4 + c5 + c6; - int i1, j1, k1, l1; // The integer offsets for the second simplex corner - int i2, j2, k2, l2; // The integer offsets for the third simplex corner - int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner - - // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. - // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; - j1 = simplex[c][1] >= 3 ? 1 : 0; - k1 = simplex[c][2] >= 3 ? 1 : 0; - l1 = simplex[c][3] >= 3 ? 1 : 0; - - // The number 2 in the "simplex" array is at the second largest coordinate. - i2 = simplex[c][0] >= 2 ? 1 : 0; - j2 = simplex[c][1] >= 2 ? 1 : 0; - k2 = simplex[c][2] >= 2 ? 1 : 0; - l2 = simplex[c][3] >= 2 ? 1 : 0; - - // The number 1 in the "simplex" array is at the second smallest coordinate. - i3 = simplex[c][0] >= 1 ? 1 : 0; - j3 = simplex[c][1] >= 1 ? 1 : 0; - k3 = simplex[c][2] >= 1 ? 1 : 0; - l3 = simplex[c][3] >= 1 ? 1 : 0; - - // The fifth corner has all coordinate offsets = 1, so no need to look that up. - - double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords - double y1 = y0 - j1 + G4; - double z1 = z0 - k1 + G4; - double w1 = w0 - l1 + G4; - - double x2 = x0 - i2 + G42; // Offsets for third corner in (x,y,z,w) coords - double y2 = y0 - j2 + G42; - double z2 = z0 - k2 + G42; - double w2 = w0 - l2 + G42; - - double x3 = x0 - i3 + G43; // Offsets for fourth corner in (x,y,z,w) coords - double y3 = y0 - j3 + G43; - double z3 = z0 - k3 + G43; - double w3 = w0 - l3 + G43; - - double x4 = x0 + G44; // Offsets for last corner in (x,y,z,w) coords - double y4 = y0 + G44; - double z4 = z0 + G44; - double w4 = w0 + G44; - - // Work out the hashed gradient indices of the five simplex corners - int ii = i & 255; - int jj = j & 255; - int kk = k & 255; - int ll = l & 255; - - int gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32; - int gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32; - int gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32; - int gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32; - int gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32; - - // Calculate the contribution from the five corners - double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; - if (t0 < 0) { - n0 = 0.0; - } else { - t0 *= t0; - n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0); - } - - double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; - if (t1 < 0) { - n1 = 0.0; - } else { - t1 *= t1; - n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1); - } - - double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; - if (t2 < 0) { - n2 = 0.0; - } else { - t2 *= t2; - n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2); - } - - double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; - if (t3 < 0) { - n3 = 0.0; - } else { - t3 *= t3; - n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3); - } - - double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; - if (t4 < 0) { - n4 = 0.0; - } else { - t4 *= t4; - n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4); - } - - // Sum up and scale the result to cover the range [-1,1] - return 27.0 * (n0 + n1 + n2 + n3 + n4); - } - - /** - * Gets the singleton unseeded instance of this generator - * - * @return Singleton - */ - public static SimplexNoiseGenerator getInstance() { - return instance; - } -} diff --git a/LiveWeather/src/org/bukkit/util/noise/SimplexOctaveGenerator.java b/LiveWeather/src/org/bukkit/util/noise/SimplexOctaveGenerator.java deleted file mode 100755 index 61e66aa..0000000 --- a/LiveWeather/src/org/bukkit/util/noise/SimplexOctaveGenerator.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bukkit.util.noise; - -import java.util.Random; -import org.bukkit.World; - -/** - * Creates simplex noise through unbiased octaves - */ -public class SimplexOctaveGenerator extends OctaveGenerator { - private double wScale = 1; - - /** - * Creates a simplex octave generator for the given world - * - * @param world World to construct this generator for - * @param octaves Amount of octaves to create - */ - public SimplexOctaveGenerator(World world, int octaves) { - this(new Random(world.getSeed()), octaves); - } - - /** - * Creates a simplex octave generator for the given world - * - * @param seed Seed to construct this generator for - * @param octaves Amount of octaves to create - */ - public SimplexOctaveGenerator(long seed, int octaves) { - this(new Random(seed), octaves); - } - - /** - * Creates a simplex octave generator for the given {@link Random} - * - * @param rand Random object to construct this generator for - * @param octaves Amount of octaves to create - */ - public SimplexOctaveGenerator(Random rand, int octaves) { - super(createOctaves(rand, octaves)); - } - - @Override - public void setScale(double scale) { - super.setScale(scale); - setWScale(scale); - } - - /** - * Gets the scale used for each W-coordinates passed - * - * @return W scale - */ - public double getWScale() { - return wScale; - } - - /** - * Sets the scale used for each W-coordinates passed - * - * @param scale New W scale - */ - public void setWScale(double scale) { - wScale = scale; - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param w W-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @return Resulting noise - */ - public double noise(double x, double y, double z, double w, double frequency, double amplitude) { - return noise(x, y, z, w, frequency, amplitude, false); - } - - /** - * Generates noise for the 3D coordinates using the specified number of - * octaves and parameters - * - * @param x X-coordinate - * @param y Y-coordinate - * @param z Z-coordinate - * @param w W-coordinate - * @param frequency How much to alter the frequency by each octave - * @param amplitude How much to alter the amplitude by each octave - * @param normalized If true, normalize the value to [-1, 1] - * @return Resulting noise - */ - public double noise(double x, double y, double z, double w, double frequency, double amplitude, boolean normalized) { - double result = 0; - double amp = 1; - double freq = 1; - double max = 0; - - x *= xScale; - y *= yScale; - z *= zScale; - w *= wScale; - - for (NoiseGenerator octave : octaves) { - result += ((SimplexNoiseGenerator) octave).noise(x * freq, y * freq, z * freq, w * freq) * amp; - max += amp; - freq *= frequency; - amp *= amplitude; - } - - if (normalized) { - result /= max; - } - - return result; - } - - private static NoiseGenerator[] createOctaves(Random rand, int octaves) { - NoiseGenerator[] result = new NoiseGenerator[octaves]; - - for (int i = 0; i < octaves; i++) { - result[i] = new SimplexNoiseGenerator(rand); - } - - return result; - } -} diff --git a/LiveWeather/src/org/bukkit/util/permissions/BroadcastPermissions.java b/LiveWeather/src/org/bukkit/util/permissions/BroadcastPermissions.java deleted file mode 100755 index 092370e..0000000 --- a/LiveWeather/src/org/bukkit/util/permissions/BroadcastPermissions.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bukkit.util.permissions; - -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public final class BroadcastPermissions { - private static final String ROOT = "bukkit.broadcast"; - private static final String PREFIX = ROOT + "."; - - private BroadcastPermissions() {} - - public static Permission registerPermissions(Permission parent) { - Permission broadcasts = DefaultPermissions.registerPermission(ROOT, "Allows the user to receive all broadcast messages", parent); - - DefaultPermissions.registerPermission(PREFIX + "admin", "Allows the user to receive administrative broadcasts", PermissionDefault.OP, broadcasts); - DefaultPermissions.registerPermission(PREFIX + "user", "Allows the user to receive user broadcasts", PermissionDefault.TRUE, broadcasts); - - broadcasts.recalculatePermissibles(); - - return broadcasts; - } -} diff --git a/LiveWeather/src/org/bukkit/util/permissions/CommandPermissions.java b/LiveWeather/src/org/bukkit/util/permissions/CommandPermissions.java deleted file mode 100755 index 4638c91..0000000 --- a/LiveWeather/src/org/bukkit/util/permissions/CommandPermissions.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.bukkit.util.permissions; - -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public final class CommandPermissions { - private static final String ROOT = "bukkit.command"; - private static final String PREFIX = ROOT + "."; - - private CommandPermissions() {} - - private static Permission registerWhitelist(Permission parent) { - Permission whitelist = DefaultPermissions.registerPermission(PREFIX + "whitelist", "Allows the user to modify the server whitelist", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "whitelist.add", "Allows the user to add a player to the server whitelist", whitelist); - DefaultPermissions.registerPermission(PREFIX + "whitelist.remove", "Allows the user to remove a player from the server whitelist", whitelist); - DefaultPermissions.registerPermission(PREFIX + "whitelist.reload", "Allows the user to reload the server whitelist", whitelist); - DefaultPermissions.registerPermission(PREFIX + "whitelist.enable", "Allows the user to enable the server whitelist", whitelist); - DefaultPermissions.registerPermission(PREFIX + "whitelist.disable", "Allows the user to disable the server whitelist", whitelist); - DefaultPermissions.registerPermission(PREFIX + "whitelist.list", "Allows the user to list all the users on the server whitelist", whitelist); - - whitelist.recalculatePermissibles(); - - return whitelist; - } - - private static Permission registerBan(Permission parent) { - Permission ban = DefaultPermissions.registerPermission(PREFIX + "ban", "Allows the user to ban people", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "ban.player", "Allows the user to ban players", ban); - DefaultPermissions.registerPermission(PREFIX + "ban.ip", "Allows the user to ban IP addresses", ban); - - ban.recalculatePermissibles(); - - return ban; - } - - private static Permission registerUnban(Permission parent) { - Permission unban = DefaultPermissions.registerPermission(PREFIX + "unban", "Allows the user to unban people", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "unban.player", "Allows the user to unban players", unban); - DefaultPermissions.registerPermission(PREFIX + "unban.ip", "Allows the user to unban IP addresses", unban); - - unban.recalculatePermissibles(); - - return unban; - } - - private static Permission registerOp(Permission parent) { - Permission op = DefaultPermissions.registerPermission(PREFIX + "op", "Allows the user to change operators", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "op.give", "Allows the user to give a player operator status", op); - DefaultPermissions.registerPermission(PREFIX + "op.take", "Allows the user to take a players operator status", op); - - op.recalculatePermissibles(); - - return op; - } - - private static Permission registerSave(Permission parent) { - Permission save = DefaultPermissions.registerPermission(PREFIX + "save", "Allows the user to save the worlds", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "save.enable", "Allows the user to enable automatic saving", save); - DefaultPermissions.registerPermission(PREFIX + "save.disable", "Allows the user to disable automatic saving", save); - DefaultPermissions.registerPermission(PREFIX + "save.perform", "Allows the user to perform a manual save", save); - - save.recalculatePermissibles(); - - return save; - } - - private static Permission registerTime(Permission parent) { - Permission time = DefaultPermissions.registerPermission(PREFIX + "time", "Allows the user to alter the time", PermissionDefault.OP, parent); - - DefaultPermissions.registerPermission(PREFIX + "time.add", "Allows the user to fast-forward time", time); - DefaultPermissions.registerPermission(PREFIX + "time.set", "Allows the user to change the time", time); - - time.recalculatePermissibles(); - - return time; - } - - public static Permission registerPermissions(Permission parent) { - Permission commands = DefaultPermissions.registerPermission(ROOT, "Gives the user the ability to use all CraftBukkit commands", parent); - - registerWhitelist(commands); - registerBan(commands); - registerUnban(commands); - registerOp(commands); - registerSave(commands); - registerTime(commands); - - DefaultPermissions.registerPermission(PREFIX + "kill", "Allows the user to commit suicide", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "me", "Allows the user to perform a chat action", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "tell", "Allows the user to privately message another player", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "say", "Allows the user to talk as the console", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "give", "Allows the user to give items to players", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "teleport", "Allows the user to teleport players", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "kick", "Allows the user to kick players", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "stop", "Allows the user to stop the server", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "list", "Allows the user to list all online players", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "help", "Allows the user to view the vanilla help menu", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "plugins", "Allows the user to view the list of plugins running on this server", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "reload", "Allows the user to reload the server settings", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "version", "Allows the user to view the version of the server", PermissionDefault.TRUE, commands); - DefaultPermissions.registerPermission(PREFIX + "gamemode", "Allows the user to change the gamemode of another player", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "xp", "Allows the user to give themselves or others arbitrary values of experience", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "toggledownfall", "Allows the user to toggle rain on/off for a given world", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); - DefaultPermissions.registerPermission(PREFIX + "effect", "Allows the user to add/remove effects on players", PermissionDefault.OP, commands); - - commands.recalculatePermissibles(); - - return commands; - } -} diff --git a/LiveWeather/src/org/bukkit/util/permissions/DefaultPermissions.java b/LiveWeather/src/org/bukkit/util/permissions/DefaultPermissions.java deleted file mode 100755 index 8c0df8e..0000000 --- a/LiveWeather/src/org/bukkit/util/permissions/DefaultPermissions.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.bukkit.util.permissions; - -import java.util.Map; -import org.bukkit.Bukkit; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public final class DefaultPermissions { - private static final String ROOT = "craftbukkit"; - private static final String LEGACY_PREFIX = "craft"; - - private DefaultPermissions() {} - - public static Permission registerPermission(Permission perm) { - return registerPermission(perm, true); - } - - public static Permission registerPermission(Permission perm, boolean withLegacy) { - Permission result = perm; - - try { - Bukkit.getPluginManager().addPermission(perm); - } catch (IllegalArgumentException ex) { - result = Bukkit.getPluginManager().getPermission(perm.getName()); - } - - if (withLegacy) { - Permission legacy = new Permission(LEGACY_PREFIX + result.getName(), result.getDescription(), PermissionDefault.FALSE); - legacy.getChildren().put(result.getName(), true); - registerPermission(perm, false); - } - - return result; - } - - public static Permission registerPermission(Permission perm, Permission parent) { - parent.getChildren().put(perm.getName(), true); - return registerPermission(perm); - } - - public static Permission registerPermission(String name, String desc) { - Permission perm = registerPermission(new Permission(name, desc)); - return perm; - } - - public static Permission registerPermission(String name, String desc, Permission parent) { - Permission perm = registerPermission(name, desc); - parent.getChildren().put(perm.getName(), true); - return perm; - } - - public static Permission registerPermission(String name, String desc, PermissionDefault def) { - Permission perm = registerPermission(new Permission(name, desc, def)); - return perm; - } - - public static Permission registerPermission(String name, String desc, PermissionDefault def, Permission parent) { - Permission perm = registerPermission(name, desc, def); - parent.getChildren().put(perm.getName(), true); - return perm; - } - - public static Permission registerPermission(String name, String desc, PermissionDefault def, Map children) { - Permission perm = registerPermission(new Permission(name, desc, def, children)); - return perm; - } - - public static Permission registerPermission(String name, String desc, PermissionDefault def, Map children, Permission parent) { - Permission perm = registerPermission(name, desc, def, children); - parent.getChildren().put(perm.getName(), true); - return perm; - } - - public static void registerCorePermissions() { - Permission parent = registerPermission(ROOT, "Gives the user the ability to use all CraftBukkit utilities and commands"); - - CommandPermissions.registerPermissions(parent); - BroadcastPermissions.registerPermissions(parent); - - parent.recalculatePermissibles(); - } -} diff --git a/LiveWeather/src/plugin.yml b/LiveWeather/src/plugin.yml deleted file mode 100755 index 335ab42..0000000 --- a/LiveWeather/src/plugin.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: LiveWeather -version: 2.6.4 -main: LiveWeather.Main -description: Allows player to experience live weather or live time in the location they are at - -commands: - liveweather: - usage: / [player] - description: Toggles live weather. - livetime: - usage: / [player] - description: Toggles live time on and off. - live: - usage: / [player] - description: Explore the world in as realistic state as possible \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ae8d61f --- /dev/null +++ b/pom.xml @@ -0,0 +1,96 @@ + + + 4.0.0 + + com.bteuk + liveearth + 1.0-SNAPSHOT + jar + + LiveEarth + + Allows player to experience live weather or live time in the location they are at + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + jitpack.io + https://jitpack.io + + + OpenCollab Snapshots + https://repo.opencollab.dev/snapshot/ + + + DaPorkchop_ + https://maven.daporkchop.net/ + + + Sponge + https://repo.spongepowered.org/maven + + + + + + org.spigotmc + spigot-api + 1.12.2-R0.1-SNAPSHOT + provided + + + com.github.SmylerMC + terraminusminus + 68f7fc9dba + + + diff --git a/src/main/java/com/bteuk/liveearth/LiveEarth.java b/src/main/java/com/bteuk/liveearth/LiveEarth.java new file mode 100644 index 0000000..a0ac085 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/LiveEarth.java @@ -0,0 +1,129 @@ +package com.bteuk.liveearth; + +import com.bteuk.liveearth.commands.LiveCommand; +import com.bteuk.liveearth.commands.LiveTimeCommand; +import com.bteuk.liveearth.commands.LiveWeatherCommand; +import com.bteuk.liveearth.listeners.JoinEvent; +import com.bteuk.liveearth.listeners.PlayerTimeEvent; +import com.bteuk.liveearth.listeners.TeleportEvent; +import com.bteuk.liveearth.storage.PreferencesStore; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.LocalTime; + +public class LiveEarth extends JavaPlugin { + public static String prefix = ChatColor.GREEN + "" + ChatColor.BOLD + "LiveEarth >> " + ChatColor.RESET; + private static PreferencesStore preferencesStore; + public FileConfiguration config; + + @Override + public void onEnable() { + //Config + this.config = this.getConfig(); + saveDefaultConfig(); + + preferencesStore = new PreferencesStore(this); + + //Listeners + PlayerTimeEvent playerTimeEvent = new PlayerTimeEvent(this); + Bukkit.getPluginManager().registerEvents(playerTimeEvent, this); + + JoinEvent joinEvent = new JoinEvent(this); + Bukkit.getPluginManager().registerEvents(joinEvent, this); + + TeleportEvent teleportEvent = new TeleportEvent(this); + Bukkit.getPluginManager().registerEvents(teleportEvent, this); + + this.getLogger().info("Event listeners Loaded!"); + + //Commands + getCommand("liveweather").setExecutor(new LiveWeatherCommand(this)); + getCommand("livetime").setExecutor(new LiveTimeCommand(this)); + getCommand("live").setExecutor(new LiveCommand(this)); + + this.getLogger().info("Commands Loaded!"); + + int minute = (int) 1200L; + + this.getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { + UpdateCall up = new UpdateCall(this); + up.run(); + }, 0L, (long) minute * config.getInt("timerInterval")); + } + + @Override + public void onDisable() { + try { + preferencesStore.savePreferences(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public PreferencesStore getPreferencesStore() { + return preferencesStore; + } + + + public long updateTimeSeasonal(Player player, LocalDateTime sunrise, LocalDateTime sunset) { + long lSeasonalTime; + long lSeasonalNightTime; + long militaryTime; + final float mcSunLight = 14076F; + final float mcSunRise = 22967F; + float fractionOfDaylightComplete; + float fractionOfNightlightComplete; + float fSunset = sunset.getHour() * 60 + sunset.getMinute(); + float fSunrise = sunrise.getHour() * 60 + sunrise.getMinute(); + + //Daylight in minutes + float fDaylight = 60 * (sunset.getHour() - sunrise.getHour()) + sunset.getMinute() - sunrise.getMinute(); + + float fMinutesAfterSunrise = ((LocalTime.now().getHour() - sunrise.getHour()) * 60 + (LocalTime.now().getMinute()) - sunrise.getMinute()); + + //Work out the minecraft ticks count + fractionOfDaylightComplete = fMinutesAfterSunrise / fDaylight; + lSeasonalTime = (long) (mcSunRise + fractionOfDaylightComplete * mcSunLight); + + if (fMinutesAfterSunrise < 0) //Sun not risen + { + if (lSeasonalTime < 22000) { + float fMinutesOfNightAlg = fSunrise - 937 * (fDaylight / mcSunLight); + fractionOfNightlightComplete = ((float) (LocalTime.now().getHour() * 60 + LocalTime.now().getMinute()) / (fMinutesOfNightAlg)); + + lSeasonalNightTime = (long) (18000 + fractionOfNightlightComplete * 4000); + lSeasonalTime = lSeasonalNightTime; + } + } else //Sun has set but is before midnight + { + lSeasonalTime = lSeasonalTime - 24000; + + //If the seasonal time goes over 14000, use night algorithm + if (!(lSeasonalTime < 14000)) { + //Minutes of the day that the night algorithm begins + float fMinutesOfNightAlg = fSunset + 957 * (fDaylight / mcSunLight); + + //Fration of night alg to midnight that is done + fractionOfNightlightComplete = ((float) (LocalTime.now().getHour() * 60 + LocalTime.now().getMinute()) - (fMinutesOfNightAlg)) / (1440 - (fMinutesOfNightAlg)); + + //Ticks + lSeasonalNightTime = (long) (14000 + fractionOfNightlightComplete * 4000); + lSeasonalTime = lSeasonalNightTime; + } + } + + lSeasonalTime = lSeasonalTime % 24000; + + player.setPlayerTime(lSeasonalTime, false); + + militaryTime = (LocalTime.now().getHour() + config.getLong("HourOffset")) * 100 + LocalTime.now().getMinute(); + return militaryTime; + } + +} diff --git a/src/main/java/com/bteuk/liveearth/UpdateCall.java b/src/main/java/com/bteuk/liveearth/UpdateCall.java new file mode 100644 index 0000000..3a1dceb --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/UpdateCall.java @@ -0,0 +1,171 @@ +package com.bteuk.liveearth; + +import com.bteuk.liveearth.storage.PreferencesStore; +import com.bteuk.liveearth.weather.WeatherUtils; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Collection; +import java.util.UUID; + +/** + * @author 14walkerg + * @date 4 Jan 2021 + * @time 18:20:43 + */ + +public class UpdateCall extends BukkitRunnable { + private final LiveEarth plugin; + private Player player; + + public UpdateCall(LiveEarth plugin, PlayerJoinEvent event) { + this.plugin = plugin; + this.player = event.getPlayer(); + } + + public UpdateCall(LiveEarth plugin) { + this.plugin = plugin; + } + + public UpdateCall(LiveEarth plugin, Player player) { + this.plugin = plugin; + this.player = player; + } + + public static void InitialLiveRun(Player p, LiveEarth plugin) throws OutOfProjectionBoundsException { + WeatherUtils LWU = new WeatherUtils(p, plugin); + LWU.call(true, true, false); + p.setGameMode(GameMode.ADVENTURE); + p.setAllowFlight(false); + p.setWalkSpeed((float) 0.14); + p.setResourcePack(plugin.getConfig().getString("resourcePack")); + } + + @Override + public void run() { + final Collection players = Bukkit.getOnlinePlayers(); + + plugin.getLogger().info("Updating live states!"); + + //Gets the list of players with live + PreferencesStore preferencesStore = plugin.getPreferencesStore(); + + for (Player player : players) { + //Checks whether they are in live first + if (preferencesStore.getLive(player.getUniqueId())) { + try { + LiveUpdateRun(player); + } catch (OutOfProjectionBoundsException ignored) { + } + } + + boolean bSeasonalTime = preferencesStore.getTime(player.getUniqueId()); + + //Avoids making sperate api request for weather and fog + //Runs seasonal time update + if (preferencesStore.getWeather(player.getUniqueId())) { + WeatherUtils LWU = new WeatherUtils(player, plugin); + try { + LWU.call(true, bSeasonalTime, false); + } catch (OutOfProjectionBoundsException ignored) { + } + } + //Checks whether time is on and makes the api request if it is not handled through the weather api request + else if (bSeasonalTime) { + WeatherUtils LWU = new WeatherUtils(player, plugin); + try { + LWU.call(false, true, false); + } catch (OutOfProjectionBoundsException ignored) { + } + } + } + } + + public void initialRun() throws OutOfProjectionBoundsException { + Player player = this.player; + + boolean bSeasonalTime = false; + boolean bWeather = false; + + long lCurrentTime; + + String szTime = ""; + + //Gets UUID of player joined + UUID uuid = player.getUniqueId(); + + PreferencesStore preferencesStore = plugin.getPreferencesStore(); + + + //Gets weather preferences + bSeasonalTime = preferencesStore.getTime(uuid); + + //Avoids making sperate api request for weather and fog + //Time handled through here as well + bWeather = preferencesStore.getWeather(uuid); + + + WeatherUtils LWU = new WeatherUtils(player, plugin); + LWU.call(bWeather, bSeasonalTime, true); + lCurrentTime = LWU.lTime; + szTime = String.format("%02d:%02d", lCurrentTime / 100, lCurrentTime % 100); + + if (bSeasonalTime) { + player.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Time set to " + ChatColor.RED + szTime); + } + } + + public void locationMoveRun(Location locationTo) throws OutOfProjectionBoundsException { + Player player = this.player; + + UUID uuid = player.getUniqueId(); + + PreferencesStore preferencesStore = plugin.getPreferencesStore(); + + //Checks whether they are in live first + if (preferencesStore.getLive(player.getUniqueId())) { + try { + LiveUpdateRun(player); + return; + } catch (OutOfProjectionBoundsException ignored) { + return; + } + } + + boolean bSeasonalTime = preferencesStore.getTime(uuid); + + //Avoids making sperate api request for weather and fog + //Time handled through here as well + boolean bWeather = preferencesStore.getWeather(uuid); + + //Avoids making sperate api request for weather and fog + //Also, if time is seasonal, it will be run through here, to avoid 2 api requests + if (bWeather) { + WeatherUtils LWU = new WeatherUtils(player, plugin, locationTo); + LWU.call(true, bSeasonalTime, true); + player.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Weather set to " + ChatColor.RED + LWU.szWeather + ChatColor.GOLD + " at " + ChatColor.RED + LWU.szLocation); + } + //Checks whether time was set on and makes the api request if it is not handled through a weather api request + else if (bSeasonalTime) { + WeatherUtils LWU = new WeatherUtils(player, plugin, locationTo); + LWU.call(false, bSeasonalTime, true); + } + } + + //Same as above for now but is here for future + private void LiveUpdateRun(Player p) throws OutOfProjectionBoundsException { + WeatherUtils LWU = new WeatherUtils(p, plugin); + LWU.call(true, true, false); + p.setGameMode(GameMode.ADVENTURE); + p.setAllowFlight(false); + p.setWalkSpeed((float) 0.14); + } + + +} diff --git a/src/main/java/com/bteuk/liveearth/commands/LiveCommand.java b/src/main/java/com/bteuk/liveearth/commands/LiveCommand.java new file mode 100644 index 0000000..56b72b8 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/commands/LiveCommand.java @@ -0,0 +1,57 @@ +package com.bteuk.liveearth.commands; + +import com.bteuk.liveearth.LiveEarth; +import com.bteuk.liveearth.UpdateCall; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LiveCommand implements CommandExecutor { + + private final LiveEarth plugin; + + public LiveCommand(LiveEarth plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender.hasPermission("liveearth.live.toggleSelf") || sender.hasPermission("liveearth.live.toggleOthers"))) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to use this command"); + } + //Check is command sender is a player + if (!(sender instanceof Player)) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "You cannot add a player to a region!"); + return true; + } + + //Convert sender to player + Player p = (Player) sender; + + //Gets the list of players with live + + if (plugin.getPreferencesStore().getLive(p.getUniqueId())) { + plugin.getPreferencesStore().setLive(p.getUniqueId(), false); + p.resetPlayerWeather(); + p.resetPlayerTime(); + p.setGameMode(GameMode.CREATIVE); + p.setWalkSpeed((float) 0.2); + p.kickPlayer(LiveEarth.prefix + ChatColor.RED + "" + ChatColor.BOLD + "Please rejoin to disable Live Mode!"); + return true; + } + + //Only reaches this if the player isn't in the /live list + //Adds player to the live list + plugin.getPreferencesStore().setLive(p.getUniqueId(), true); + try { + UpdateCall.InitialLiveRun(p, plugin); + } catch (OutOfProjectionBoundsException e) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "You are outside of a valid area! Please enter a valid area and live mode will enable!"); + } + return true; + } +} diff --git a/src/main/java/com/bteuk/liveearth/commands/LiveTimeCommand.java b/src/main/java/com/bteuk/liveearth/commands/LiveTimeCommand.java new file mode 100644 index 0000000..8289d54 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/commands/LiveTimeCommand.java @@ -0,0 +1,113 @@ +package com.bteuk.liveearth.commands; + +import com.bteuk.liveearth.LiveEarth; +import com.bteuk.liveearth.weather.WeatherUtils; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * @author 14walkerg + * @date 3 Jan 2021 + * @time 14:08:09 + */ + +public class LiveTimeCommand implements CommandExecutor { + + private final LiveEarth plugin; + + public LiveTimeCommand(LiveEarth plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + + if (!(sender.hasPermission("liveearth.time.toggleSelf") || sender.hasPermission("liveearth.time.toggleOthers"))) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to use this command"); + return true; + } + + if (!(sender instanceof Player)) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "Only players can execute this command!"); + return true; + } + + //Convert sender to player + Player p = (Player) sender; + + if (args.length == 0) { + if (!p.hasPermission("liveearth.time.toggleSelf")) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to toggle your live time"); + return true; + } + + } else { + if (!p.hasPermission("liveearth.time.toggleOthers")) { + if (!p.hasPermission("liveearth.time.toggleSelf")) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to toggle your live time"); + return true; + } + } else { + + Player user = Bukkit.getPlayer(args[0]); + + + if (user == null) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + args[0] + " is not online!"); + return true; + } + + boolean newState; + long lCurrentTime; + + newState = plugin.getPreferencesStore().toggleTime(user.getUniqueId()); + if (newState) { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time enabled for " + user.getName()); + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + p.getName() + " enabled your live time"); + WeatherUtils LWU = new WeatherUtils(p, plugin); + try { + LWU.call(false, true, false); + lCurrentTime = LWU.lTime; + String szTime = String.format("%02d:%02d", lCurrentTime / 100, lCurrentTime % 100); + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Time set to " + ChatColor.RED + szTime); + } catch (OutOfProjectionBoundsException e) { + user.sendMessage(LiveEarth.prefix + ChatColor.RED + "Time will not be updated currently, you are outside of valid geographical bounds"); + } + + } else { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time disabled for " + user.getName()); + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + p.getName() + " disabled your live time"); + user.resetPlayerTime(); + } + return true; + } + } + + boolean newState; + long lCurrentTime; + + newState = plugin.getPreferencesStore().toggleTime(p.getUniqueId()); + if (newState) { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time enabled"); + WeatherUtils LWU = new WeatherUtils(p, plugin); + try { + LWU.call(false, true, false); + lCurrentTime = LWU.lTime; + String szTime = String.format("%02d:%02d", lCurrentTime / 100, lCurrentTime % 100); + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Time set to " + ChatColor.RED + szTime); + } catch (OutOfProjectionBoundsException e) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "Time will not be updated currently, you are outside of valid geographical bounds"); + } + + } else { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time disabled"); + p.resetPlayerTime(); + } + return true; + } +} diff --git a/src/main/java/com/bteuk/liveearth/commands/LiveWeatherCommand.java b/src/main/java/com/bteuk/liveearth/commands/LiveWeatherCommand.java new file mode 100644 index 0000000..c4fe876 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/commands/LiveWeatherCommand.java @@ -0,0 +1,104 @@ +package com.bteuk.liveearth.commands; + +import com.bteuk.liveearth.LiveEarth; +import com.bteuk.liveearth.weather.WeatherUtils; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LiveWeatherCommand implements CommandExecutor { + private final LiveEarth plugin; + + public LiveWeatherCommand(LiveEarth plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + + if (!(sender.hasPermission("liveearth.weather.toggleSelf") || sender.hasPermission("liveearth.weather.toggleOthers"))) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to use this command"); + return true; + } + + if (!(sender instanceof Player)) { + sender.sendMessage(LiveEarth.prefix + ChatColor.RED + "Only players can execute this command!"); + return true; + } + + //Convert sender to player + Player p = (Player) sender; + + if (args.length == 0) { + if (!p.hasPermission("liveearth.weather.toggleSelf")) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to toggle your live weather"); + return true; + } + + } else { + if (!p.hasPermission("liveearth.weather.toggleOthers")) { + if (!p.hasPermission("liveearth.weather.toggleSelf")) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "You do not have permission to toggle your live weather"); + return true; + } + } else { + + Player user = Bukkit.getPlayer(args[0]); + + + if (user == null) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + args[0] + " is not online!"); + return true; + } + + boolean newState; + long lCurrentTime; + + newState = plugin.getPreferencesStore().toggleWeather(user.getUniqueId()); + if (newState) { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live weather enabled for " + user.getName()); + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + p.getName() + ", enabled your live weather"); + WeatherUtils LWU = new WeatherUtils(p, plugin); + try { + LWU.call(true, false, false); + String szWeather = LWU.szWeather; + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Weather set to " + ChatColor.RED + szWeather); + } catch (OutOfProjectionBoundsException e) { + user.sendMessage(LiveEarth.prefix + ChatColor.RED + "weather will not be updated currently, you are outside of valid geographical bounds"); + } + + } else { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live weather disabled for " + user.getName()); + user.sendMessage(LiveEarth.prefix + ChatColor.GOLD + p.getName() + " disabled your live weather"); + user.resetPlayerWeather(); + } + return true; + } + } + + boolean newState; + long lCurrentTime; + + newState = plugin.getPreferencesStore().toggleWeather(p.getUniqueId()); + if (newState) { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time enabled"); + WeatherUtils LWU = new WeatherUtils(p, plugin); + try { + LWU.call(true, false, false); + String szWeather = LWU.szWeather; + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Weather set to " + ChatColor.RED + szWeather); + } catch (OutOfProjectionBoundsException e) { + p.sendMessage(LiveEarth.prefix + ChatColor.RED + "Weather will not be updated currently, you are outside of valid geographical bounds"); + } + + } else { + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live weather disabled"); + p.resetPlayerWeather(); + } + return true; + } +} diff --git a/src/main/java/com/bteuk/liveearth/listeners/JoinEvent.java b/src/main/java/com/bteuk/liveearth/listeners/JoinEvent.java new file mode 100644 index 0000000..c817a36 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/listeners/JoinEvent.java @@ -0,0 +1,45 @@ +package com.bteuk.liveearth.listeners; + +import com.bteuk.liveearth.LiveEarth; +import com.bteuk.liveearth.UpdateCall; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +public class JoinEvent implements Listener { + private final LiveEarth plugin; + + public JoinEvent(LiveEarth plugin) { + this.plugin = plugin; + } + + @EventHandler + public void playerJoinEvent(PlayerJoinEvent event) { + plugin.getLogger().info("Running update call!"); + UpdateCall up = new UpdateCall(plugin, event); + Bukkit.getScheduler().runTask(plugin, () -> { + try { + up.initialRun(); + } catch (OutOfProjectionBoundsException e) { + event.getPlayer().sendMessage(LiveEarth.prefix + ChatColor.GREEN + "You are not in a geographical location, cancelling initial run!"); + } + }); + + } + + @EventHandler + public void playerLeave(PlayerQuitEvent event) { + Player p = event.getPlayer(); + + //Gets the list of players with live + if (plugin.getPreferencesStore().getLive(p.getUniqueId())) { + plugin.getPreferencesStore().setLive(p.getUniqueId(), false); + } + } +} + diff --git a/src/main/java/com/bteuk/liveearth/listeners/PlayerTimeEvent.java b/src/main/java/com/bteuk/liveearth/listeners/PlayerTimeEvent.java new file mode 100644 index 0000000..5cb2b20 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/listeners/PlayerTimeEvent.java @@ -0,0 +1,39 @@ +package com.bteuk.liveearth.listeners; + +import com.bteuk.liveearth.LiveEarth; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +public class PlayerTimeEvent implements Listener { + + private final LiveEarth plugin; + + public PlayerTimeEvent(LiveEarth plugin) { + this.plugin = plugin; + } + + @EventHandler + public void playerTimeCalled(PlayerCommandPreprocessEvent event) { + if (event.getMessage().toLowerCase().startsWith(("/ptime"))) { + //Convert sender to player + Player p = event.getPlayer(); + + if (plugin.getPreferencesStore().getTime(p.getUniqueId())) { + plugin.getPreferencesStore().setTime(p.getUniqueId(), false); + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time disabled"); + } + } else if (event.getMessage().toLowerCase().startsWith(("/pweather"))) { + //Convert sender to player + Player p = event.getPlayer(); + + if (plugin.getPreferencesStore().getWeather(p.getUniqueId())) { + plugin.getPreferencesStore().setWeather(p.getUniqueId(), false); + p.sendMessage(LiveEarth.prefix + ChatColor.GOLD + "Live time disabled"); + } + } + } + +} diff --git a/src/main/java/com/bteuk/liveearth/listeners/TeleportEvent.java b/src/main/java/com/bteuk/liveearth/listeners/TeleportEvent.java new file mode 100644 index 0000000..fb2ebed --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/listeners/TeleportEvent.java @@ -0,0 +1,40 @@ +package com.bteuk.liveearth.listeners; + +import com.bteuk.liveearth.LiveEarth; +import com.bteuk.liveearth.UpdateCall; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +public class TeleportEvent implements Listener { + private final LiveEarth plugin; + + public TeleportEvent(LiveEarth plugin) { + this.plugin = plugin; + } + + @EventHandler + public void teleportEvent(PlayerTeleportEvent event) { + //Convert sender to player + Player player = event.getPlayer(); + + if (event.getCause() == TeleportCause.COMMAND || event.getCause() == TeleportCause.PLUGIN) { + double FromX = event.getFrom().getX(); + double FromZ = event.getFrom().getZ(); + double ToX = event.getTo().getX(); + double ToZ = event.getTo().getZ(); + + //Checks whether it is outside a 2km radius + if (Math.sqrt((FromX - ToX) * (FromX - ToX) + (FromZ - ToZ) * (FromZ - ToZ)) > 2000) { + UpdateCall up = new UpdateCall(plugin, player); + try { + up.locationMoveRun(event.getTo()); + } catch (OutOfProjectionBoundsException ignored) { + } + } + } + } +} diff --git a/src/main/java/com/bteuk/liveearth/storage/PreferencesStore.java b/src/main/java/com/bteuk/liveearth/storage/PreferencesStore.java new file mode 100644 index 0000000..ff10715 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/storage/PreferencesStore.java @@ -0,0 +1,79 @@ +package com.bteuk.liveearth.storage; + +import com.bteuk.liveearth.LiveEarth; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +public class PreferencesStore { + private final File configFile; + private final YamlConfiguration config; + + public PreferencesStore(LiveEarth plugin) { + this.configFile = new File(plugin.getDataFolder(), "preferences.yml"); + if (!configFile.exists()) { + configFile.getParentFile().mkdirs(); + plugin.saveResource("preferences.yml", false); + } + + this.config = new YamlConfiguration(); + try { + this.config.load(configFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + + public boolean toggleWeather(UUID uuid) { + boolean currentVal = config.getBoolean(String.format("preferences.%s.weather", uuid.toString()), false); + config.set(String.format("preferences.%s.weather", uuid), !currentVal); + return !currentVal; + } + + public boolean toggleTime(UUID uuid) { + boolean currentVal = config.getBoolean(String.format("preferences.%s.time", uuid.toString()), false); + config.set(String.format("preferences.%s.time", uuid), !currentVal); + return !currentVal; + } + + public boolean getWeather(UUID uuid) { + return config.getBoolean(String.format("preferences.%s.weather", uuid.toString()), false); + } + + public boolean getTime(UUID uuid) { + return config.getBoolean(String.format("preferences.%s.time", uuid.toString()), false); + } + + public void setWeather(UUID uuid, boolean value) { + config.set(String.format("preferences.%s.weather", uuid.toString()), value); + } + + public void setTime(UUID uuid, boolean value) { + config.set(String.format("preferences.%s.time", uuid.toString()), value); + } + + public boolean toggleLive(UUID uuid) { + boolean currentVal = config.getBoolean(String.format("preferences.%s.live", uuid.toString()), false); + config.set(String.format("preferences.%s.live", uuid), !currentVal); + return !currentVal; + } + + public void setLive(UUID uuid, boolean value) { + config.set(String.format("preferences.%s.live", uuid.toString()), value); + } + + public boolean getLive(UUID uuid) { + return config.getBoolean(String.format("preferences.%s.live", uuid.toString()), false); + } + + public boolean getAnyLive(UUID uuid) { + return getLive(uuid) || getTime(uuid) || getWeather(uuid); + } + + public void savePreferences() throws IOException { + config.save(configFile); + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/City.java b/src/main/java/com/bteuk/liveearth/weather/City.java new file mode 100644 index 0000000..2fac950 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/City.java @@ -0,0 +1,57 @@ +package com.bteuk.liveearth.weather; + +import java.time.LocalDateTime; + +public class City { + private int id; + private String szName; + private int CoordLong; + private int CoordLat; + private String szCountry; + private int Timezone; + private LocalDateTime sunrise; + private LocalDateTime sunset; + + public City() { + reset(); + } + + public void reset() { + this.sunrise = LocalDateTime.parse("2021-01-01T06:00:00"); + this.sunset = LocalDateTime.parse("2021-01-01T18:00:00"); + } + + //Getters + public LocalDateTime getSunrise() { + return this.sunrise; + } + + //Setters + public void setSunrise(LocalDateTime dSunrise) { + this.sunrise = dSunrise; + } + + public LocalDateTime getSunset() { + return this.sunset; + } + + public void setSunset(LocalDateTime dSunset) { + this.sunset = dSunset; + } + + public String getName() { + return this.szName; + } + + public void setName(String szName) { + this.szName = szName; + } + + public String getCountry() { + return this.szCountry; + } + + public void setCountry(String szCountry) { + this.szCountry = szCountry; + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/Current.java b/src/main/java/com/bteuk/liveearth/weather/Current.java new file mode 100644 index 0000000..abd6868 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/Current.java @@ -0,0 +1,51 @@ +package com.bteuk.liveearth.weather; + +import java.time.LocalDateTime; + +public class Current { + public Precipitation prec; + private City city; + private Temperature temp; + private int Visibility; + private Weather weather; + private LocalDateTime lastUpdate; + + public Current() { + reset(); + } + + private void reset() { + this.city = new City(); + this.prec = new Precipitation(); + this.Visibility = -1; + this.weather = new Weather(); + } + + public Weather getWeather() { + return this.weather; + } + + public City getCity() { + return this.city; + } + + public void setNumber(int iNum) { + this.weather.setNumber(iNum); + } + + public void setSunrise(LocalDateTime dDateTime) { + this.city.setSunrise(dDateTime); + } + + public void setSunset(LocalDateTime dDateTime) { + this.city.setSunset(dDateTime); + } + + public void setCityName(String szName) { + this.city.setName(szName); + } + + public void setCountry(String szCountry) { + this.city.setCountry(szCountry); + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/Precipitation.java b/src/main/java/com/bteuk/liveearth/weather/Precipitation.java new file mode 100644 index 0000000..87b6fc6 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/Precipitation.java @@ -0,0 +1,34 @@ +package com.bteuk.liveearth.weather; + +public class Precipitation { + private float value; + private String mode; + + public Precipitation() { + reset(); + } + + //Getters + public float getValue() { + return this.value; + } + + //Setters + public void setValue(float value) { + this.value = value; + } + + public String getMode() { + return this.mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + private void reset() { + //Declare Variables + this.mode = ""; + this.value = -1; + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/Temperature.java b/src/main/java/com/bteuk/liveearth/weather/Temperature.java new file mode 100644 index 0000000..10ea4fd --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/Temperature.java @@ -0,0 +1,8 @@ +package com.bteuk.liveearth.weather; + +public class Temperature { + private int value; + private int min; + private int max; + private String unit; +} diff --git a/src/main/java/com/bteuk/liveearth/weather/Weather.java b/src/main/java/com/bteuk/liveearth/weather/Weather.java new file mode 100644 index 0000000..6cba936 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/Weather.java @@ -0,0 +1,41 @@ +package com.bteuk.liveearth.weather; + +public class Weather { + private int Number; + private String Value; + private String Icon; + + public Weather() { + reset(); + } + + public int getNumber() { + return Number; + } + + public void setNumber(int Number) { + this.Number = Number; + } + + public String getValue() { + return Value; + } + + public void setValue(String Value) { + this.Value = Value; + } + + public String getIcon() { + return Icon; + } + + public void setIcon(String Icon) { + this.Icon = Icon; + } + + private void reset() { + this.Icon = ""; + this.Number = 0; + this.Value = ""; + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/WeatherGetter.java b/src/main/java/com/bteuk/liveearth/weather/WeatherGetter.java new file mode 100644 index 0000000..99b02c8 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/WeatherGetter.java @@ -0,0 +1,133 @@ +package com.bteuk.liveearth.weather; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.xml.sax.*; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.IOException; +import java.io.PrintStream; +import java.time.LocalDateTime; + +public class WeatherGetter extends DefaultHandler { + private static Current current; + + Location pLocation; + long[] coord; + + String[] DataReturned; + + boolean testValueVaryWeather = true; + + public static Current entry(String URL) { + current = new Current(); + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setNamespaceAware(true); + SAXParser saxParser = spf.newSAXParser(); + XMLReader xmlReader = saxParser.getXMLReader(); + xmlReader.setErrorHandler(new WeatherErrorHandler(System.err)); + + xmlReader.setContentHandler(new WeatherGetter()); + xmlReader.parse(URL); + } catch (SAXException e) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - SAXException: Error reading in api xml weather file"); + e.printStackTrace(); + } catch (IOException e) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - IOException: Error reading in api xml weather file"); + e.printStackTrace(); + } catch (Exception e) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "LiveWeather.GetWeather - Exception: Error reading in api xml weather file"); + e.printStackTrace(); + } + return current; + } + + public void startDocument() throws SAXException { + current = new Current(); + } + + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { + int i; + int iAttributes = atts.getLength(); + //Checks the element name for precipitation + switch (localName) { + case "precipitation": + //Goes through the attributes of precipitation until it finds mode + for (i = 0; i < iAttributes; i++) { + if (atts.getLocalName(i).equals("mode")) { + current.prec.setMode(atts.getValue(i)); + } + } + break; + //Checks the element name for weather + case "weather": + //Goes through the attributes of weather until it finds number + for (i = 0; i < iAttributes; i++) { + if (atts.getLocalName(i).equals("number")) { + current.setNumber(Integer.parseInt(atts.getValue(i))); + } + } + break; + //Checks the element name for sun + case "sun": + //Goes through the attributes of sun until it finds rise and set + for (i = 0; i < iAttributes; i++) { + if (atts.getLocalName(i).equals("rise")) { + current.setSunrise((LocalDateTime.parse(atts.getValue(i)))); + } + if (atts.getLocalName(i).equals("set")) { + current.setSunset((LocalDateTime.parse(atts.getValue(i)))); + } + } + break; + //Checks the element name for city + case "city": + //Goes through the attributes of city until it finds name + for (i = 0; i < iAttributes; i++) { + if (atts.getLocalName(i).equals("name")) { + current.setCityName(atts.getValue(i)); + } + } + break; + } + } +} + +class WeatherErrorHandler implements ErrorHandler { + private final PrintStream out; + + WeatherErrorHandler(PrintStream out) { + this.out = out; + } + + private String getParseExceptionInfo(SAXParseException spe) { + String systemId = spe.getSystemId(); + + if (systemId == null) { + systemId = "null"; + } + + String info = "URI=" + systemId + " Line=" + + spe.getLineNumber() + ": " + spe.getMessage(); + + return info; + } + + public void warning(SAXParseException spe) throws SAXException { + out.println("Warning: " + getParseExceptionInfo(spe)); + } + + public void error(SAXParseException spe) throws SAXException { + String message = "Error: " + getParseExceptionInfo(spe); + throw new SAXException(message); + } + + public void fatalError(SAXParseException spe) throws SAXException { + String message = "Fatal Error: " + getParseExceptionInfo(spe); + throw new SAXException(message); + } +} diff --git a/src/main/java/com/bteuk/liveearth/weather/WeatherUtils.java b/src/main/java/com/bteuk/liveearth/weather/WeatherUtils.java new file mode 100644 index 0000000..d1debd0 --- /dev/null +++ b/src/main/java/com/bteuk/liveearth/weather/WeatherUtils.java @@ -0,0 +1,122 @@ +package com.bteuk.liveearth.weather; + +import com.bteuk.liveearth.LiveEarth; +import net.buildtheearth.terraminusminus.generator.EarthGeneratorSettings; +import net.buildtheearth.terraminusminus.projection.GeographicProjection; +import net.buildtheearth.terraminusminus.projection.OutOfProjectionBoundsException; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.WeatherType; +import org.bukkit.entity.Player; + +import java.time.LocalDateTime; + +public class WeatherUtils { + + static String szURL; + static double[] coords; + public String szLocation; + public long lTime; + public String szWeather; + LiveEarth plugin; + String apiKey; + Player p; + Location pLocation; + + public WeatherUtils(LiveEarth plugin) { + this.plugin = plugin; + } + + public WeatherUtils(Player player, LiveEarth plugin) { + reset(); + this.plugin = plugin; + this.p = player; + this.pLocation = player.getLocation(); + this.apiKey = plugin.getConfig().getString("apiKey"); + this.lTime = 0L; + } + + public WeatherUtils(Player player, LiveEarth plugin, Location loc) { + reset(); + this.plugin = plugin; + this.p = player; + this.pLocation = loc; + this.apiKey = plugin.getConfig().getString("apiKey"); + this.lTime = 0L; + } + + public static double[] getCoords(double x, double z) throws OutOfProjectionBoundsException { + EarthGeneratorSettings bteSettings = EarthGeneratorSettings.parse(EarthGeneratorSettings.BTE_DEFAULT_SETTINGS); + GeographicProjection projection = bteSettings.projection(); + return projection.toGeo(x, z); + + } + + public static void compileSourceURL(double[] coords, LiveEarth plugin) { + szURL = "http://api.openweathermap.org/data/2.5/weather?lat=" + coords[1] + "&lon=" + coords[0] + "&appid=" + plugin.getConfig().getString("apiKey") + "&mode=xml"; + } + + private void reset() { + szURL = ""; + pLocation = null; + coords = new double[2]; + szLocation = ""; + lTime = -1; + szWeather = ""; + } + + public void call(boolean weather, boolean seasonalTime, boolean bLocation) throws OutOfProjectionBoundsException { + int iWeatherCode; + LocalDateTime dSunrise; + LocalDateTime dSunset; + long currentTime; + + Current current; + + int x = pLocation.getBlockX(); + int z = pLocation.getBlockZ(); + coords = getCoords(x, z); + + if (Double.isNaN(coords[0])) { + return; + } + + //Compiles the request URL + compileSourceURL(coords, plugin); + + //Gets the weather + current = WeatherGetter.entry(szURL); + + iWeatherCode = current.getWeather().getNumber(); + + if (weather) { + //https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2 + if (iWeatherCode >= 800) { + p.setPlayerWeather(WeatherType.CLEAR); + szWeather = WeatherType.CLEAR.toString(); + } else if (iWeatherCode >= 701 && iWeatherCode <= 781) { + p.setPlayerWeather(WeatherType.CLEAR); + szWeather = WeatherType.CLEAR.toString(); + } else if (iWeatherCode >= 200 && iWeatherCode <= 622) { + p.setPlayerWeather(WeatherType.DOWNFALL); + szWeather = WeatherType.DOWNFALL.toString(); + } + if (iWeatherCode >= 200 && iWeatherCode <= 232) { + p.setPlayerWeather(WeatherType.DOWNFALL); + p.playSound(p.getLocation(), Sound.ENTITY_LIGHTNING_IMPACT, 100, 5); //just a nice lil scare + szWeather = WeatherType.DOWNFALL.toString(); + } + } + + if (seasonalTime) { + dSunrise = current.getCity().getSunrise(); + dSunset = current.getCity().getSunset(); + currentTime = plugin.updateTimeSeasonal(p, dSunrise, dSunset); + lTime = currentTime; + } + if (bLocation) { + szLocation = current.getCity().getName(); + } + + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..c008f88 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,3 @@ +timerInterval: 5 +apiKey: "" +resourcePack: "" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..b7a4401 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,15 @@ +name: LiveEarth +version: '${project.version}' +main: com.bteuk.liveearth.LiveEarth +authors: [ george112n, ELgamer, XboxBedrock ] +description: Allows player to experience live weather or live time in the location they are at +commands: + liveweather: + usage: / [player] + description: Toggles live weather. + livetime: + usage: / [player] + description: Toggles live time on and off. + live: + usage: / [player] + description: Explore the world in as realistic state as possible \ No newline at end of file diff --git a/src/main/resources/preferences.yml b/src/main/resources/preferences.yml new file mode 100644 index 0000000..886a95b --- /dev/null +++ b/src/main/resources/preferences.yml @@ -0,0 +1,4 @@ +#DO NOT EDIT THIS FILE +#DO NOT EDIT THIS FILE +#DO NOT EDIT THIS FILE +preferences: {} \ No newline at end of file