aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.js868
-rw-r--r--online/global.js746
-rw-r--r--online/server.json8
-rw-r--r--views/script/game_music.js16
-rw-r--r--views/script/menu_music.js10
-rw-r--r--views/splash.svg5662
6 files changed, 3655 insertions, 3655 deletions
diff --git a/app.js b/app.js
index dde2133..cba0dcd 100644
--- a/app.js
+++ b/app.js
@@ -1,434 +1,434 @@
-console.log(" _ __ _ _ _ \n| |/ /__ _ _ __| |_(_) | __\n| ' // _` | '__| __| | |/ /\n| . \\ (_| | | | |_| | < \n|_|\\_\\__,_|_| \\__|_|_|\\_\\\n ");
-switch (require('./package.json').channel) {
- case "stable":
- console.log(" Kartik " + require('./package.json').version + " (Official Release) [stable]\n");
- break;
- case "eap":
- console.log(" Kartik " + require('./package.json').version + " (Early Access Release) [eap]\n");
- break;
- case "nightly":
- console.log(" Kartik " + require('./package.json').version + " (Rawhide Release) [nightly]\n");
- break;
- case "beta":
- console.log(" Kartik " + require('./package.json').version + " (Branched Release) [beta]\n");
- break;
- case "git":
- console.log(" Kartik " + require('./package.json').version + " (Trunk Build) [git]\n");
- break;
-}
-
-global.start = new Date();
-global.KartikRoot = __dirname;
-global.shouldExitIfClosed = false;
-const { app, BrowserWindow } = require('electron');
-const fs = require("fs");
-
-(async () => {
- process.on('uncaughtException', (error) => {
- console.log(" * Starting recovery procedure: E_ERROR: " + error.message);
- id = new Date().toISOString().replaceAll(":", "-");
-
- require('fs').writeFileSync(require('os').userInfo().homedir + "/.kartik/crashes/" + id + ".txt", "Kartik Bootstraper Crash\n\n" + error.stack);
- if (require('os').platform() === "win32") {
- require('child_process').exec("runtime\\kartik-crash.bat " + id);
- } else if (require('os').platform() === "darwin") {
- require('child_process').exec("./runtime/kartik-crash-mac.sh " + id);
- } else {
- require('child_process').exec("./runtime/kartik-crash.sh " + id);
- }
- process.exit(2);
- })
-
- process.on('unhandledRejection', (reason) => {
- console.log(" * Starting recovery procedure: E_PROMISE: " + reason);
- id = new Date().toISOString();
-
- require('fs').writeFileSync(homedir + "/.kartik/crashes/" + id + ".txt", "Kartik Bootstraper Crash (in promise)\n\n" + reason);
- if (require('os').platform() === "win32") {
- require('child_process').exec("runtime\\kartik-crash.bat");
- } else if (require('os').platform() === "darwin") {
- require('child_process').exec("./runtime/kartik-crash-mac.sh");
- } else {
- require('child_process').exec("./runtime/kartik-crash.sh");
- }
- process.exit(2);
- })
-
- if (process.argv[2] === "m") {
- console.log(" * *******************************************");
- console.log(" * * DATA MITIGATION MODE *");
- console.log(" * * *");
- console.log(" * * Unless you ABSOLUTELY need this, please *");
- console.log(" * * consider starting Kartik normally. *");
- console.log(" * *******************************************");
- if (!require('fs').existsSync(__dirname + "/data")) {
- require('fs').mkdirSync(__dirname + "/data");
- }
- global.homedir = __dirname + "/data";
- } else {
- global.homedir = require('os').userInfo().homedir;
- }
-
- /* --------------------- */
-
- console.log(" * Preparing application paths");
- app.setAppLogsPath(homedir + "/.kartik/logs");
- app.setPath("crashDumps", homedir + "/.kartik/dumps");
- app.setPath('userData', homedir + "/.kartik/storage");
- app.whenReady().then(async () => {
- if (require('./package.json').channel !== "stable" && require('./package.json').channel !== "git" && !require('fs').existsSync(homedir + "/.kartik/current.kfn")) {
- console.log(" * Opening save data conversion dialog");
- global.converting = true;
- btn = require('electron').dialog.showMessageBoxSync(
- {
- type: "warning",
- title: "Migrating save data to Kartik Fox Nest required",
- message: "Your save data needs to be converted",
- buttons: [
- "Use a new game directory (recommended)",
- "Convert existing save data",
- "Quit without doing anything"
- ],
- cancelId: 2,
- detail: "Kartik Fox Nest (the new save data format) has been introduced in this version, and it requires converting from the old save data format. Because it is not possible to downgrade from Kartik Fox Nest to the old save data format, you have to choose what to do."
- }
- )
-
- switch (btn) {
- case 2:
- process.exit(2);
- break;
- case 1:
- break;
- case 0:
- if (process.argv[2] === "m") {
- console.log(" * *******************************************");
- console.log(" * * DATA MITIGATION MODE *");
- console.log(" * * *");
- console.log(" * * Unless you ABSOLUTELY need this, please *");
- console.log(" * * consider starting Kartik normally. *");
- console.log(" * *******************************************");
- if (!require('fs').existsSync(__dirname + "/data")) {
- require('fs').mkdirSync(__dirname + "/data");
- }
- global.homedir = __dirname + "/data/.KartikStaging$";
- } else {
- global.homedir = require('os').userInfo().homedir + "/.KartikStaging$";
- }
- app.setAppLogsPath(homedir + "/.kartik/logs");
- app.setPath("crashDumps", homedir + "/.kartik/dumps");
- app.setPath('userData', homedir + "/.kartik/storage");
- if (!require('fs').existsSync(homedir)) {
- require('fs').mkdirSync(homedir);
- }
- break;
- }
- }
-
- console.log(" * Gathering language");
- slpm = require('os-locale');
- slpw = await slpm();
- slpo = slpw.substr(0, 2);
- slng = require('./lang/languages.json');
- if (Object.keys(slng).includes(slpo)) {
- dlp = slpo;
- } else {
- dlp = "en";
- }
-
- console.log(" * Saving to " + homedir);
-
- if (!require('fs').existsSync(homedir + "/.kartik")) {
- require('fs').mkdirSync(homedir + "/.kartik")
- }
-
- if (!require('fs').existsSync(homedir + "/.kartik/crashes")) {
- require('fs').mkdirSync(homedir + "/.kartik/crashes")
- }
-
- if (!require('fs').existsSync(homedir + "/.kartik/mods")) {
- require('fs').mkdirSync(homedir + "/.kartik/mods")
- }
-
- if (require('fs').existsSync(homedir + "/.kartik/build")) {
- require('fs').rmSync(homedir + "/.kartik/build", { recursive: true })
- }
- require('fs').mkdirSync(homedir + "/.kartik/build")
-
- console.log(" * Creating configuration");
-
- const fs = require('fs');
- const Nest = require('./nest/abi');
-
- if (fs.existsSync(homedir + "/.kartik/config") && fs.existsSync(homedir + "/.kartik/config/voice.txt") && fs.existsSync(homedir + "/.kartik/config/online.txt") && fs.existsSync(homedir + "/.kartik/config/music.txt") && fs.existsSync(homedir + "/.kartik/config/lang.txt") && fs.existsSync(homedir + "/.kartik/stats.json")) {
- console.log(" * Found complete Config V1, migrating to Kartik Fox Nest...");
- Nest.convert(homedir + "/.kartik/current.kfn", homedir + "/.kartik");
- } else {
- if (!fs.existsSync(homedir + "/.kartik/current.kfn")) {
- console.log(" * No Kartik Fox Nest found, generating one...");
- Nest.generate(homedir + "/.kartik/current.kfn");
- } else {
- fs.copyFileSync(homedir + "/.kartik/current.kfn", homedir + "/.kartik/latest.kfn");
- }
- }
-
- global.currentNest = Nest.load(homedir + "/.kartik/current.kfn");
- console.log(" * Kartik Fox Nest loaded, " + fs.readFileSync(homedir + "/.kartik/current.kfn").toString().length + " bytes, last loaded in Kartik " + currentNest._version);
-
- currentNest._version = require('./package.json').version;
- Nest.export(homedir + "/.kartik/current.kfn", currentNest);
-
- /* --------------------- */
-
- require('@electron/remote/main').initialize();
-
- function createWindow () {
- console.log(" * Checking configuration");
-
- lp = currentNest.config.lang
-
- time = new Date() - start;
- console.log(" * Started successfully in " + Math.round(time/1000) + " seconds");
- console.log(" * Why are you EVEN reading this?");
- global.shouldExitIfClosed = true;
-
- console.log(" * Starting IPC engine");
- win.pwidth = 720;
- win.pheight = 540;
- win.log = console.log;
-
- win.debug = process.argv[2] === "d";
- win.channel = channel;
- win.cmdlineargs = process.argv;
- win.scale = 1.2;
- win.update = dimga;
- win.gamepads = [];
- win.controllerAttached = false;
- win.webview = null;
- win.dstate = "Kartik";
- win.ddetails = "Kartik";
- win.mods = mods;
-
- win.invalidfiles = invalidfiles;
- win.modsfiles = compiledTypeScriptFiles;
- win.homedir = homedir;
-
- win.lp = lp;
- win.music = currentNest.config.music;
- win.voice = currentNest.config.voice;
-
- win.online = currentNest.config.online;
- win.nest = currentNest;
-
- win.resources = resources;
- global.currentSongValue = null;
-
- console.log(" * Starting language preloader");
- require('./lang/preload.js');
- console.log(" * Starting Discord RPC");
- require('./discord/client.js');
-
- if (win.debug) {
- console.log(" * *******************************************");
- console.log(" * * KARTIK DEBUG MODE *");
- console.log(" * *******************************************");
- win.openDevTools();
- }
-
- setTimeout(() => {
- win.webContents.send('ready', true);
- }, 3000)
-
- win.webContents.on('dom-ready', () => {
- musicIpc = require('electron').ipcMain;
- musicIpc.on('newmusic', (event, value) => {
- if (music) {
- win.webContents.send('setmusic', value);
- }
- })
-
- musicIpc.on('reloadNest', (event) => {
- currentNest = Nest.load(homedir + "/.kartik/current.kfn");
- win.nest = currentNest;
- })
-
- const LevelsAPI = require('./views/script/global_levelsapi');
- const lvl = new LevelsAPI();
-
- stats = currentNest.stats;
- musicIpc.on('addstats', (event, value) => {
- currentNest.stats[value.catalog][value.key] = currentNest.stats[value.catalog][value.key] + value.add;
- Nest.export(homedir + "/.kartik/current.kfn", currentNest);
- currentNest = Nest.load(homedir + "/.kartik/current.kfn");
- win.nest = currentNest;
-
- if (value.key === "laps" && currentNest.auth) {
- auth = currentNest.auth;
- level = lvl.correspond(currentNest.stats["ingame"]["laps"], "256") - 1 + 1;
-
- if (level !== auth.level) {
- currentNest.auth.level = level;
- Nest.export(homedir + "/.kartik/current.kfn", currentNest);
- currentNest = Nest.load(homedir + "/.kartik/current.kfn");
- win.nest = currentNest;
- if (level < 200) {
- win.webContents.send("notification", {title: lang.polymer.levelup[0], message: lang.polymer.levelup[1] + " " + level + " " + lang.polymer.levelup[2]});
- } else {
- win.webContents.send("notification", {title: lang.polymer.finished[0], message: lang.polymer.finished[1]});
- }
- }
- }
- })
- musicIpc.on('addstatsandclose', (event, value) => {
- currentNest.stats[value.catalog][value.key] = currentNest.stats[value.catalog][value.key] + value.add;
- Nest.export(homedir + "/.kartik/current.kfn", currentNest);
- currentNest = Nest.load(homedir + "/.kartik/current.kfn");
- win.nest = currentNest;
- win.destroy();
- })
- })
- }
-
- console.log(" * Starting splash screen");
-
- console.log(" * Checking channel");
- if (require('./package.json').channel === "stable") {
- logo = "logo/logo.png";
- channel = " ";
- global.dimg = "official";
- global.dimga = "stable";
- global.dchan = "Kartik Stable";
- } else if (require('./package.json').channel === "beta") {
- logo = "logo/logo-beta.png";
- channel = " Beta ";
- global.dimg = "beta";
- global.dimga = "beta";
- global.dchan = "Kartik Beta";
- } else if (require('./package.json').channel === "nightly") {
- logo = "logo/logo-nightly.png";
- channel = " Nightly ";
- global.dimg = "nightly";
- global.dimga = "nightly";
- global.dchan = "Kartik Nightly";
- } else if (require('./package.json').channel === "eap") {
- logo = "logo/logo-eap.png";
- channel = " EAP ";
- global.dimg = "eap";
- global.dimga = "eap";
- global.dchan = "Kartik EAP";
- } else if (require('./package.json').channel === "git") {
- logo = "logo/logo-git.png";
- channel = " Trunk ";
- global.dimg = "git";
- global.dimga = "git";
- global.dchan = "Kartik Trunk";
- try {
- pk = require('./package.json');
- pk.version = require('fs').readFileSync("./.git/refs/heads/trunk").toString().substr(0, 7);
- fs.writeFileSync("./package.json", JSON.stringify(pk, 2))
- } catch (e) {}
- }
-
- global.win = new BrowserWindow({
- width: 1220,
- height: 720,
- minWidth: 720,
- minHeight: 540,
- resizeable: true,
- resizable: true,
- maximizable: true,
- show: false,
- enableLargerThanScreen: true,
- icon: logo,
- backgroundColor: "#000000",
- title: "Kartik",
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
- enableRemoteModule: true,
- webviewTag: true,
- disableBlinkFeatures: "MediaSessionService",
- }
- })
- console.log(" * Loading view");
- win.loadFile('./index.html')
- win.setMenu(null);
- win.webContents.once('dom-ready', () => {
- console.log(" * Showing splash screen");
- win.show();
- setTimeout(() => {
- console.log(" * Checking signatures");
-
- invalidfiles = [];
-
- sigdb = require("./bin/signatures.json");
- total = Object.keys(sigdb["v1"]).length * 3;
- processed = 0;
- for (file in sigdb["v1"]) {
- if (fs.existsSync(file) && !invalidfiles.includes(file)) {
- try {
- hash = require('crypto').createHash('sha512').update(fs.readFileSync(file)).digest('base64');
- if (hash !== sigdb["v1"][file]) {
- invalidfiles.push(file);
- }
- } catch (e) {
- console.warn(" ! Could not compute V1 hash for " + file);
- }
- }
-
- processed++;
- win.webContents.send('progress', (processed/total)*100);
- }
- for (file in sigdb["v2"]) {
- if (fs.existsSync(file) && !invalidfiles.includes(file)) {
- try {
- hash = require('crypto').createHash('sha1').update(fs.readFileSync(file)).digest('base64');
- if (hash !== sigdb["v2"][file]) {
- invalidfiles.push(file);
- }
- } catch (e) {
- console.warn(" ! Could not compute V2 hash for " + file);
- }
- }
-
- processed++;
- win.webContents.send('progress', (processed/total)*100);
- }
- for (file in sigdb["v3"]) {
- if (fs.existsSync(file) && !invalidfiles.includes(file)) {
- try {
- hash = require('crypto').createHash('md5').update(fs.readFileSync(file)).digest('base64');
- if (hash !== sigdb["v3"][file]) {
- invalidfiles.push(file);
- }
- } catch (e) {
- console.warn(" ! Could not compute V3 hash for " + file);
- }
- }
-
- processed++;
- win.webContents.send('progress', (processed/total)*100);
- }
-
- global.importedTypeScriptFiles = [];
- global.compiledTypeScriptFiles = [];
- console.log(" * Generating resources pack");
- require('./modding/resources');
- console.log(" * Starting Kartik Modding Platform");
- require('./modding/parser');
- console.log(" * Compiling KMP API TypeScript files");
- require('./modding/compiler');
- console.log(" * Loading KMP TypeScript mods");
- require('./typescript/preloader');
- createWindow();
- }, 5000)
- })
- })
-
- app.on('window-all-closed', () => {
- if (shouldExitIfClosed) {
- console.log(" * Bye!");
- app.quit()
- }
- })
-})();
+console.log(" _ __ _ _ _ \n| |/ /__ _ _ __| |_(_) | __\n| ' // _` | '__| __| | |/ /\n| . \\ (_| | | | |_| | < \n|_|\\_\\__,_|_| \\__|_|_|\\_\\\n ");
+switch (require('./package.json').channel) {
+ case "stable":
+ console.log(" Kartik " + require('./package.json').version + " (Official Release) [stable]\n");
+ break;
+ case "eap":
+ console.log(" Kartik " + require('./package.json').version + " (Early Access Release) [eap]\n");
+ break;
+ case "nightly":
+ console.log(" Kartik " + require('./package.json').version + " (Rawhide Release) [nightly]\n");
+ break;
+ case "beta":
+ console.log(" Kartik " + require('./package.json').version + " (Branched Release) [beta]\n");
+ break;
+ case "git":
+ console.log(" Kartik " + require('./package.json').version + " (Trunk Build) [git]\n");
+ break;
+}
+
+global.start = new Date();
+global.KartikRoot = __dirname;
+global.shouldExitIfClosed = false;
+const { app, BrowserWindow } = require('electron');
+const fs = require("fs");
+
+(async () => {
+ process.on('uncaughtException', (error) => {
+ console.log(" * Starting recovery procedure: E_ERROR: " + error.message);
+ id = new Date().toISOString().replaceAll(":", "-");
+
+ require('fs').writeFileSync(require('os').userInfo().homedir + "/.kartik/crashes/" + id + ".txt", "Kartik Bootstraper Crash\n\n" + error.stack);
+ if (require('os').platform() === "win32") {
+ require('child_process').exec("runtime\\kartik-crash.bat " + id);
+ } else if (require('os').platform() === "darwin") {
+ require('child_process').exec("./runtime/kartik-crash-mac.sh " + id);
+ } else {
+ require('child_process').exec("./runtime/kartik-crash.sh " + id);
+ }
+ process.exit(2);
+ })
+
+ process.on('unhandledRejection', (reason) => {
+ console.log(" * Starting recovery procedure: E_PROMISE: " + reason);
+ id = new Date().toISOString();
+
+ require('fs').writeFileSync(homedir + "/.kartik/crashes/" + id + ".txt", "Kartik Bootstraper Crash (in promise)\n\n" + reason);
+ if (require('os').platform() === "win32") {
+ require('child_process').exec("runtime\\kartik-crash.bat");
+ } else if (require('os').platform() === "darwin") {
+ require('child_process').exec("./runtime/kartik-crash-mac.sh");
+ } else {
+ require('child_process').exec("./runtime/kartik-crash.sh");
+ }
+ process.exit(2);
+ })
+
+ if (process.argv[2] === "m") {
+ console.log(" * *******************************************");
+ console.log(" * * DATA MITIGATION MODE *");
+ console.log(" * * *");
+ console.log(" * * Unless you ABSOLUTELY need this, please *");
+ console.log(" * * consider starting Kartik normally. *");
+ console.log(" * *******************************************");
+ if (!require('fs').existsSync(__dirname + "/data")) {
+ require('fs').mkdirSync(__dirname + "/data");
+ }
+ global.homedir = __dirname + "/data";
+ } else {
+ global.homedir = require('os').userInfo().homedir;
+ }
+
+ /* --------------------- */
+
+ console.log(" * Preparing application paths");
+ app.setAppLogsPath(homedir + "/.kartik/logs");
+ app.setPath("crashDumps", homedir + "/.kartik/dumps");
+ app.setPath('userData', homedir + "/.kartik/storage");
+ app.whenReady().then(async () => {
+ if (require('./package.json').channel !== "stable" && require('./package.json').channel !== "git" && !require('fs').existsSync(homedir + "/.kartik/current.kfn")) {
+ console.log(" * Opening save data conversion dialog");
+ global.converting = true;
+ btn = require('electron').dialog.showMessageBoxSync(
+ {
+ type: "warning",
+ title: "Migrating save data to Kartik Fox Nest required",
+ message: "Your save data needs to be converted",
+ buttons: [
+ "Use a new game directory (recommended)",
+ "Convert existing save data",
+ "Quit without doing anything"
+ ],
+ cancelId: 2,
+ detail: "Kartik Fox Nest (the new save data format) has been introduced in this version, and it requires converting from the old save data format. Because it is not possible to downgrade from Kartik Fox Nest to the old save data format, you have to choose what to do."
+ }
+ )
+
+ switch (btn) {
+ case 2:
+ process.exit(2);
+ break;
+ case 1:
+ break;
+ case 0:
+ if (process.argv[2] === "m") {
+ console.log(" * *******************************************");
+ console.log(" * * DATA MITIGATION MODE *");
+ console.log(" * * *");
+ console.log(" * * Unless you ABSOLUTELY need this, please *");
+ console.log(" * * consider starting Kartik normally. *");
+ console.log(" * *******************************************");
+ if (!require('fs').existsSync(__dirname + "/data")) {
+ require('fs').mkdirSync(__dirname + "/data");
+ }
+ global.homedir = __dirname + "/data/.KartikStaging$";
+ } else {
+ global.homedir = require('os').userInfo().homedir + "/.KartikStaging$";
+ }
+ app.setAppLogsPath(homedir + "/.kartik/logs");
+ app.setPath("crashDumps", homedir + "/.kartik/dumps");
+ app.setPath('userData', homedir + "/.kartik/storage");
+ if (!require('fs').existsSync(homedir)) {
+ require('fs').mkdirSync(homedir);
+ }
+ break;
+ }
+ }
+
+ console.log(" * Gathering language");
+ slpm = require('os-locale');
+ slpw = await slpm();
+ slpo = slpw.substr(0, 2);
+ slng = require('./lang/languages.json');
+ if (Object.keys(slng).includes(slpo)) {
+ dlp = slpo;
+ } else {
+ dlp = "en";
+ }
+
+ console.log(" * Saving to " + homedir);
+
+ if (!require('fs').existsSync(homedir + "/.kartik")) {
+ require('fs').mkdirSync(homedir + "/.kartik")
+ }
+
+ if (!require('fs').existsSync(homedir + "/.kartik/crashes")) {
+ require('fs').mkdirSync(homedir + "/.kartik/crashes")
+ }
+
+ if (!require('fs').existsSync(homedir + "/.kartik/mods")) {
+ require('fs').mkdirSync(homedir + "/.kartik/mods")
+ }
+
+ if (require('fs').existsSync(homedir + "/.kartik/build")) {
+ require('fs').rmSync(homedir + "/.kartik/build", { recursive: true })
+ }
+ require('fs').mkdirSync(homedir + "/.kartik/build")
+
+ console.log(" * Creating configuration");
+
+ const fs = require('fs');
+ const Nest = require('./nest/abi');
+
+ if (fs.existsSync(homedir + "/.kartik/config") && fs.existsSync(homedir + "/.kartik/config/voice.txt") && fs.existsSync(homedir + "/.kartik/config/online.txt") && fs.existsSync(homedir + "/.kartik/config/music.txt") && fs.existsSync(homedir + "/.kartik/config/lang.txt") && fs.existsSync(homedir + "/.kartik/stats.json")) {
+ console.log(" * Found complete Config V1, migrating to Kartik Fox Nest...");
+ Nest.convert(homedir + "/.kartik/current.kfn", homedir + "/.kartik");
+ } else {
+ if (!fs.existsSync(homedir + "/.kartik/current.kfn")) {
+ console.log(" * No Kartik Fox Nest found, generating one...");
+ Nest.generate(homedir + "/.kartik/current.kfn");
+ } else {
+ fs.copyFileSync(homedir + "/.kartik/current.kfn", homedir + "/.kartik/latest.kfn");
+ }
+ }
+
+ global.currentNest = Nest.load(homedir + "/.kartik/current.kfn");
+ console.log(" * Kartik Fox Nest loaded, " + fs.readFileSync(homedir + "/.kartik/current.kfn").toString().length + " bytes, last loaded in Kartik " + currentNest._version);
+
+ currentNest._version = require('./package.json').version;
+ Nest.export(homedir + "/.kartik/current.kfn", currentNest);
+
+ /* --------------------- */
+
+ require('@electron/remote/main').initialize();
+
+ function createWindow () {
+ console.log(" * Checking configuration");
+
+ lp = currentNest.config.lang
+
+ time = new Date() - start;
+ console.log(" * Started successfully in " + Math.round(time/1000) + " seconds");
+ console.log(" * Why are you EVEN reading this?");
+ global.shouldExitIfClosed = true;
+
+ console.log(" * Starting IPC engine");
+ win.pwidth = 720;
+ win.pheight = 540;
+ win.log = console.log;
+
+ win.debug = process.argv[2] === "d";
+ win.channel = channel;
+ win.cmdlineargs = process.argv;
+ win.scale = 1.2;
+ win.update = dimga;
+ win.gamepads = [];
+ win.controllerAttached = false;
+ win.webview = null;
+ win.dstate = "Kartik";
+ win.ddetails = "Kartik";
+ win.mods = mods;
+
+ win.invalidfiles = invalidfiles;
+ win.modsfiles = compiledTypeScriptFiles;
+ win.homedir = homedir;
+
+ win.lp = lp;
+ win.music = currentNest.config.music;
+ win.voice = currentNest.config.voice;
+
+ win.online = currentNest.config.online;
+ win.nest = currentNest;
+
+ win.resources = resources;
+ global.currentSongValue = null;
+
+ console.log(" * Starting language preloader");
+ require('./lang/preload.js');
+ console.log(" * Starting Discord RPC");
+ require('./discord/client.js');
+
+ if (win.debug) {
+ console.log(" * *******************************************");
+ console.log(" * * KARTIK DEBUG MODE *");
+ console.log(" * *******************************************");
+ win.openDevTools();
+ }
+
+ setTimeout(() => {
+ win.webContents.send('ready', true);
+ }, 3000)
+
+ win.webContents.on('dom-ready', () => {
+ musicIpc = require('electron').ipcMain;
+ musicIpc.on('newmusic', (event, value) => {
+ if (music) {
+ win.webContents.send('setmusic', value);
+ }
+ })
+
+ musicIpc.on('reloadNest', (event) => {
+ currentNest = Nest.load(homedir + "/.kartik/current.kfn");
+ win.nest = currentNest;
+ })
+
+ const LevelsAPI = require('./views/script/global_levelsapi');
+ const lvl = new LevelsAPI();
+
+ stats = currentNest.stats;
+ musicIpc.on('addstats', (event, value) => {
+ currentNest.stats[value.catalog][value.key] = currentNest.stats[value.catalog][value.key] + value.add;
+ Nest.export(homedir + "/.kartik/current.kfn", currentNest);
+ currentNest = Nest.load(homedir + "/.kartik/current.kfn");
+ win.nest = currentNest;
+
+ if (value.key === "laps" && currentNest.auth) {
+ auth = currentNest.auth;
+ level = lvl.correspond(currentNest.stats["ingame"]["laps"], "256") - 1 + 1;
+
+ if (level !== auth.level) {
+ currentNest.auth.level = level;
+ Nest.export(homedir + "/.kartik/current.kfn", currentNest);
+ currentNest = Nest.load(homedir + "/.kartik/current.kfn");
+ win.nest = currentNest;
+ if (level < 200) {
+ win.webContents.send("notification", {title: lang.polymer.levelup[0], message: lang.polymer.levelup[1] + " " + level + " " + lang.polymer.levelup[2]});
+ } else {
+ win.webContents.send("notification", {title: lang.polymer.finished[0], message: lang.polymer.finished[1]});
+ }
+ }
+ }
+ })
+ musicIpc.on('addstatsandclose', (event, value) => {
+ currentNest.stats[value.catalog][value.key] = currentNest.stats[value.catalog][value.key] + value.add;
+ Nest.export(homedir + "/.kartik/current.kfn", currentNest);
+ currentNest = Nest.load(homedir + "/.kartik/current.kfn");
+ win.nest = currentNest;
+ win.destroy();
+ })
+ })
+ }
+
+ console.log(" * Starting splash screen");
+
+ console.log(" * Checking channel");
+ if (require('./package.json').channel === "stable") {
+ logo = "logo/logo.png";
+ channel = " ";
+ global.dimg = "official";
+ global.dimga = "stable";
+ global.dchan = "Kartik Stable";
+ } else if (require('./package.json').channel === "beta") {
+ logo = "logo/logo-beta.png";
+ channel = " Beta ";
+ global.dimg = "beta";
+ global.dimga = "beta";
+ global.dchan = "Kartik Beta";
+ } else if (require('./package.json').channel === "nightly") {
+ logo = "logo/logo-nightly.png";
+ channel = " Nightly ";
+ global.dimg = "nightly";
+ global.dimga = "nightly";
+ global.dchan = "Kartik Nightly";
+ } else if (require('./package.json').channel === "eap") {
+ logo = "logo/logo-eap.png";
+ channel = " EAP ";
+ global.dimg = "eap";
+ global.dimga = "eap";
+ global.dchan = "Kartik EAP";
+ } else if (require('./package.json').channel === "git") {
+ logo = "logo/logo-git.png";
+ channel = " Trunk ";
+ global.dimg = "git";
+ global.dimga = "git";
+ global.dchan = "Kartik Trunk";
+ try {
+ pk = require('./package.json');
+ pk.version = require('fs').readFileSync("./.git/refs/heads/trunk").toString().substr(0, 7);
+ fs.writeFileSync("./package.json", JSON.stringify(pk, 2))
+ } catch (e) {}
+ }
+
+ global.win = new BrowserWindow({
+ width: 1220,
+ height: 720,
+ minWidth: 720,
+ minHeight: 540,
+ resizeable: true,
+ resizable: true,
+ maximizable: true,
+ show: false,
+ enableLargerThanScreen: true,
+ icon: logo,
+ backgroundColor: "#000000",
+ title: "Kartik",
+ webPreferences: {
+ nodeIntegration: true,
+ contextIsolation: false,
+ enableRemoteModule: true,
+ webviewTag: true,
+ disableBlinkFeatures: "MediaSessionService",
+ }
+ })
+ console.log(" * Loading view");
+ win.loadFile('./index.html')
+ win.setMenu(null);
+ win.webContents.once('dom-ready', () => {
+ console.log(" * Showing splash screen");
+ win.show();
+ setTimeout(() => {
+ console.log(" * Checking signatures");
+
+ invalidfiles = [];
+
+ sigdb = require("./bin/signatures.json");
+ total = Object.keys(sigdb["v1"]).length * 3;
+ processed = 0;
+ for (file in sigdb["v1"]) {
+ if (fs.existsSync(file) && !invalidfiles.includes(file)) {
+ try {
+ hash = require('crypto').createHash('sha512').update(fs.readFileSync(file)).digest('base64');
+ if (hash !== sigdb["v1"][file]) {
+ invalidfiles.push(file);
+ }
+ } catch (e) {
+ console.warn(" ! Could not compute V1 hash for " + file);
+ }
+ }
+
+ processed++;
+ win.webContents.send('progress', (processed/total)*100);
+ }
+ for (file in sigdb["v2"]) {
+ if (fs.existsSync(file) && !invalidfiles.includes(file)) {
+ try {
+ hash = require('crypto').createHash('sha1').update(fs.readFileSync(file)).digest('base64');
+ if (hash !== sigdb["v2"][file]) {
+ invalidfiles.push(file);
+ }
+ } catch (e) {
+ console.warn(" ! Could not compute V2 hash for " + file);
+ }
+ }
+
+ processed++;
+ win.webContents.send('progress', (processed/total)*100);
+ }
+ for (file in sigdb["v3"]) {
+ if (fs.existsSync(file) && !invalidfiles.includes(file)) {
+ try {
+ hash = require('crypto').createHash('md5').update(fs.readFileSync(file)).digest('base64');
+ if (hash !== sigdb["v3"][file]) {
+ invalidfiles.push(file);
+ }
+ } catch (e) {
+ console.warn(" ! Could not compute V3 hash for " + file);
+ }
+ }
+
+ processed++;
+ win.webContents.send('progress', (processed/total)*100);
+ }
+
+ global.importedTypeScriptFiles = [];
+ global.compiledTypeScriptFiles = [];
+ console.log(" * Generating resources pack");
+ require('./modding/resources');
+ console.log(" * Starting Kartik Modding Platform");
+ require('./modding/parser');
+ console.log(" * Compiling KMP API TypeScript files");
+ require('./modding/compiler');
+ console.log(" * Loading KMP TypeScript mods");
+ require('./typescript/preloader');
+ createWindow();
+ }, 5000)
+ })
+ })
+
+ app.on('window-all-closed', () => {
+ if (shouldExitIfClosed) {
+ console.log(" * Bye!");
+ app.quit()
+ }
+ })
+})();
diff --git a/online/global.js b/online/global.js
index 0cdb6f4..afe4562 100644
--- a/online/global.js
+++ b/online/global.js
@@ -1,374 +1,374 @@
-global.pingStart = null;
-global.connecting = false;
-global.role = null;
-global.online = true;
-global.guestInfo = {
- hostCar: null,
- guestCar: null,
- circuit: null,
- music: null
-};
-global.onlineInitDone = false;
-
-function max(input) {
- if (toString.call(input) !== "[object Array]")
- return false;
- return Math.max.apply(null, input);
-}
-
-pingHistory = [];
-function updatePing(ping) {
- if (ping < 100000) {
- document.getElementById('ping').innerText = ping + " ms";
-
- pingHistory.push(ping);
- while (pingHistory.length > 70) {
- pingHistory.shift();
- }
-
- dom = "";
- highest = max(pingHistory);
- pingHistory.forEach((p) => {
- high = 1
- perc = (p/highest)*100
- if (ping > 70 && ping < 150) {
- dom = dom + `<span style="display: inline-block;background: orange;width: ${high}px;height: ${perc}%;"></span>`;
- } else if (ping > 150) {
- dom = dom + `<span style="display: inline-block;background: red;width: ${high}px;height: ${perc}%;"></span>`;
- } else {
- dom = dom + `<span style="display: inline-block;background: limegreen;width: ${high}px;height: ${perc}%;"></span>`;
- }
- })
-
- document.getElementById('ping-chart').innerHTML = dom;
- }
-}
-
-window.addEventListener('load', () => {
- document.getElementById('credits').style.backgroundColor = "#000000";
- document.getElementById('cars-n1').innerText = lang.online.car0;
- document.getElementById('cars-n2').innerText = lang.online.car1;
-
- class MessageBuffer {
- constructor(delimiter) {
- this.delimiter = delimiter
- this.buffer = ""
- }
-
- isFinished() {
- if (
- this.buffer.length === 0 ||
- this.buffer.indexOf(this.delimiter) === -1
- ) {
- return true
- }
- return false
- }
-
- push(data) {
- this.buffer += data
- }
-
- getMessage() {
- const delimiterIndex = this.buffer.indexOf(this.delimiter)
- if (delimiterIndex !== -1) {
- const message = this.buffer.slice(0, delimiterIndex)
- this.buffer = this.buffer.replace(message + this.delimiter, "")
- return message
- }
- return null
- }
-
- handleData() {
- /**
- * Try to accumulate the buffer with messages
- *
- * If the server isnt sending delimiters for some reason
- * then nothing will ever come back for these requests
- */
- const message = this.getMessage()
- return message
- }
- }
-
- const sampleData = {
- _type: "init",
- name: "Kartik Core",
- version: require('../package.json').version,
- id: null,
- modded: false
- }
-
- global.clientWriter = (data) => {
- client.write(data + "\n");
- }
-
- function crash(e) {
- console.error(e);
- if (!quitting) {
- location.href = "online.html#" + btoa(lang.online.error.connection);
- }
- }
-
- var net = require('net');
-
- var host = require('../online/server.json').hostname;
- var port = require('../online/server.json').port;
-
- global.client = new net.Socket();
- client.initialized = false;
-
- client.connect(port, host, () => {
- console.log("Connected to " + host + ":" + port);
- clientWriter(JSON.stringify(sampleData) + "|");
- setInterval(() => {
- if (role === null) {
- clientWriter(JSON.stringify({
- _type: "ping"
- }) + "|")
- } else {
- clientWriter(JSON.stringify({
- _type: "ipc",
- action: "Ping",
- message: null
- }) + "|")
- }
- global.pingCrash = setTimeout(() => {
- location.href = "online.html#" + btoa(lang.online.timeout);
- }, 10000);
- global.pingStart = new Date();
- }, 1000)
- })
-
- let received = new MessageBuffer("\n")
- client.on("data", chunk => {
- received.push(chunk)
- while (!received.isFinished()) {
- const data = received.handleData()
-
- raw = data.toString().replaceAll("}{", "}|{");
- datas = raw.split("|").filter(i => i.trim() !== "");
- datas.forEach((data) => {
- try {
- inf = JSON.parse(data);
- } catch (e) {
- console.dir(data);
- throw e;
- }
-
- if (typeof inf['_type'] != "string") {
- crash(new Error("Invalid JSON data"));
- }
- if (!client.initialized) {
- switch (inf['_type']) {
- case "init":
- if (inf['name'] !== "Kartik Server") {
- crash(new Error("Invalid server"));
- }
- console.log("Connection initialized. Server running " + inf.name + " version " + inf.version + ", client ID " + inf.id);
- document.getElementById("serveraddr").innerText = host + ":" + port;
- if (inf.version.endsWith("-iridium")) {
- document.getElementById("servername").innerText = "Iridium " + inf.version.substr(0, inf.version.length - "-iridium".length);
- document.getElementById("servericon").src = "../logo/iridium.png";
- } else {
- document.getElementById("servername").innerText = "Kartik Legacy Server " + inf.version;
- document.getElementById("servericon").src = "../logo/server.png";
- }
- document.getElementById('yourid').innerText = inf.id.toUpperCase();
- document.getElementById('intro').style.display = "";
- document.getElementById('connecting').style.display = "none";
- document.getElementById('loading').style.display = "none";
- client.initialized = true;
- break;
- case "error":
- console.log(inf['type'] + ": " + inf['message']);
- break;
- default:
- crash(new Error("Trying to receive data but client not initialized"));
- break;
- }
- } else {
- switch (inf['_type']) {
- case "init":
- crash(new Error("Trying to initialize client but client is already initialized"));
- break;
- case "error":
- console.log(inf['type'] + ": " + inf['message']);
- location.href = "online.html#" + btoa(inf['type'] + ": " + inf['message']);
- break;
- case "linked":
- console.log("Now hooked into link: (H) " + inf['ids']['host'] + " <-> " + inf['ids']['guest'] + " (G)");
- document.getElementById('intro').style.display = "none";
- document.getElementById('connecting').style.display = "none";
- document.getElementById('loading').style.display = "";
- document.getElementById('loading').innerText = lang.online.generate;
- global.role = inf['role'];
- if (role === "host") {
- startHooks.forEach((hook) => {
- hook(this);
- })
- $("#online-login").fadeOut(200);
- }
- break;
- default:
- if (inf['_type'] === "ipc" && inf['action'] === "Ping") {
- clientWriter(JSON.stringify({
- _type: "ipc",
- action: "Pong",
- message: null
- }) + "|")
- return;
- }
- if ((inf['_type'] === "ipc" && inf['action'] === "Pong") || inf['_type'] === "pong") {
- pingEnd = new Date();
- ping = Math.round(pingEnd - pingStart);
- global.pingStart = null;
- clearTimeout(global.pingCrash);
- updatePing(ping);
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "posTop") {
- try {
- document.getElementById('car1').style.top = inf['message'];
- } catch (e) {}
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "progressLaps") {
- try {
- document.getElementById("laps-car1").innerText = inf['message'];
- } catch (e) {}
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "progressLose") {
- global.quitting = true;
- location.href = "win.html?sp#car1";
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "posLeft") {
- try {
- document.getElementById('car1').style.left = inf['message'];
- } catch (e) {}
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "gameIsReady") {
- startgame();
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "abort") {
- location.href = "online.html#" + btoa(lang.online.aborted);
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'] === "posRot") {
- try {
- document.getElementById('car1').style.transform = inf['message'];
- } catch (e) {}
- return;
- }
- if (inf['_type'] === "ipc" && inf['action'].startsWith("RaceData:")) {
- rd = inf['action'].substr(9);
- switch (rd) {
- case "hostCar":
- guestInfo.hostCar = inf['message'];
- if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
- onlineInitDone = true;
- startHooks.forEach((hook) => {
- hook(this);
- })
- $("#online-login").fadeOut(200);
- }
- break;
- case "guestCar":
- guestInfo.guestCar = inf['message'];
- if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
- onlineInitDone = true;
- startHooks.forEach((hook) => {
- hook(this);
- })
- $("#online-login").fadeOut(200);
- }
- break;
- case "circuit":
- guestInfo.circuit = inf['message'];
- if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
- onlineInitDone = true;
- startHooks.forEach((hook) => {
- hook(this);
- })
- $("#online-login").fadeOut(200);
- }
- break;
- case "music":
- guestInfo.music = inf['message'];
- if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
- onlineInitDone = true;
- startHooks.forEach((hook) => {
- hook(this);
- })
- $("#online-login").fadeOut(200);
- }
- break;
- }
- return;
- }
- break;
- }
- }
- })
- }
- })
-
- client.on('close', () => {
- console.log("Kicked from server");
- })
-
- client.on('error', (e) => {
- switch (e.code) {
- case "ECONNREFUSED":
- location.href = "online.html#" + btoa(lang.online.unable);
- break;
- default:
- location.href = "online.html#" + btoa(lang.online.internal);
- break;
- }
- crash(e);
- })
-
- setInterval(() => {
- if (pingStart !== null && new Date() - pingStart >= 10000) {
- location.href = "online.html#" + btoa(lang.online.timeout);
- }
- }, 50)
-})
-
-function checkOnlineLogin() {
- document.getElementById('theirid').value = document.getElementById('theirid').value.toUpperCase();
- if (/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]/gm.test(document.getElementById('theirid').value)) {
- document.getElementById('theirid').value = "";
- }
- if (document.getElementById('theirid').value.length === 8) {
- if (document.getElementById('theirid').value === document.getElementById('yourid').innerText) {
- document.getElementById('theirid').value = "";
- } else {
- if (!connecting) {
- connecting = true;
- document.getElementById('intro').style.display = "none";
- document.getElementById('connecting').style.display = "none";
- document.getElementById('loading').style.display = "";
- console.log("Linking to client " + document.getElementById('theirid').value + "...")
- clientWriter(JSON.stringify({
- _type: "link",
- client: document.getElementById('theirid').value.toLowerCase()
- }));
- }
- }
- }
-}
-
-$("#theirid").keydown(function(e) {
- if (e.keyCode === 27) { // esc
- $("body").fadeOut(200);
- setTimeout(() => {
- location.href = "menu.html?back";
- }, 250)
- }
+global.pingStart = null;
+global.connecting = false;
+global.role = null;
+global.online = true;
+global.guestInfo = {
+ hostCar: null,
+ guestCar: null,
+ circuit: null,
+ music: null
+};
+global.onlineInitDone = false;
+
+function max(input) {
+ if (toString.call(input) !== "[object Array]")
+ return false;
+ return Math.max.apply(null, input);
+}
+
+pingHistory = [];
+function updatePing(ping) {
+ if (ping < 100000) {
+ document.getElementById('ping').innerText = ping + " ms";
+
+ pingHistory.push(ping);
+ while (pingHistory.length > 70) {
+ pingHistory.shift();
+ }
+
+ dom = "";
+ highest = max(pingHistory);
+ pingHistory.forEach((p) => {
+ high = 1
+ perc = (p/highest)*100
+ if (ping > 70 && ping < 150) {
+ dom = dom + `<span style="display: inline-block;background: orange;width: ${high}px;height: ${perc}%;"></span>`;
+ } else if (ping > 150) {
+ dom = dom + `<span style="display: inline-block;background: red;width: ${high}px;height: ${perc}%;"></span>`;
+ } else {
+ dom = dom + `<span style="display: inline-block;background: limegreen;width: ${high}px;height: ${perc}%;"></span>`;
+ }
+ })
+
+ document.getElementById('ping-chart').innerHTML = dom;
+ }
+}
+
+window.addEventListener('load', () => {
+ document.getElementById('credits').style.backgroundColor = "#000000";
+ document.getElementById('cars-n1').innerText = lang.online.car0;
+ document.getElementById('cars-n2').innerText = lang.online.car1;
+
+ class MessageBuffer {
+ constructor(delimiter) {
+ this.delimiter = delimiter
+ this.buffer = ""
+ }
+
+ isFinished() {
+ if (
+ this.buffer.length === 0 ||
+ this.buffer.indexOf(this.delimiter) === -1
+ ) {
+ return true
+ }
+ return false
+ }
+
+ push(data) {
+ this.buffer += data
+ }
+
+ getMessage() {
+ const delimiterIndex = this.buffer.indexOf(this.delimiter)
+ if (delimiterIndex !== -1) {
+ const message = this.buffer.slice(0, delimiterIndex)
+ this.buffer = this.buffer.replace(message + this.delimiter, "")
+ return message
+ }
+ return null
+ }
+
+ handleData() {
+ /**
+ * Try to accumulate the buffer with messages
+ *
+ * If the server isnt sending delimiters for some reason
+ * then nothing will ever come back for these requests
+ */
+ const message = this.getMessage()
+ return message
+ }
+ }
+
+ const sampleData = {
+ _type: "init",
+ name: "Kartik Core",
+ version: require('../package.json').version,
+ id: null,
+ modded: false
+ }
+
+ global.clientWriter = (data) => {
+ client.write(data + "\n");
+ }
+
+ function crash(e) {
+ console.error(e);
+ if (!quitting) {
+ location.href = "online.html#" + btoa(lang.online.error.connection);
+ }
+ }
+
+ var net = require('net');
+
+ var host = require('../online/server.json').hostname;
+ var port = require('../online/server.json').port;
+
+ global.client = new net.Socket();
+ client.initialized = false;
+
+ client.connect(port, host, () => {
+ console.log("Connected to " + host + ":" + port);
+ clientWriter(JSON.stringify(sampleData) + "|");
+ setInterval(() => {
+ if (role === null) {
+ clientWriter(JSON.stringify({
+ _type: "ping"
+ }) + "|")
+ } else {
+ clientWriter(JSON.stringify({
+ _type: "ipc",
+ action: "Ping",
+ message: null
+ }) + "|")
+ }
+ global.pingCrash = setTimeout(() => {
+ location.href = "online.html#" + btoa(lang.online.timeout);
+ }, 10000);
+ global.pingStart = new Date();
+ }, 1000)
+ })
+
+ let received = new MessageBuffer("\n")
+ client.on("data", chunk => {
+ received.push(chunk)
+ while (!received.isFinished()) {
+ const data = received.handleData()
+
+ raw = data.toString().replaceAll("}{", "}|{");
+ datas = raw.split("|").filter(i => i.trim() !== "");
+ datas.forEach((data) => {
+ try {
+ inf = JSON.parse(data);
+ } catch (e) {
+ console.dir(data);
+ throw e;
+ }
+
+ if (typeof inf['_type'] != "string") {
+ crash(new Error("Invalid JSON data"));
+ }
+ if (!client.initialized) {
+ switch (inf['_type']) {
+ case "init":
+ if (inf['name'] !== "Kartik Server") {
+ crash(new Error("Invalid server"));
+ }
+ console.log("Connection initialized. Server running " + inf.name + " version " + inf.version + ", client ID " + inf.id);
+ document.getElementById("serveraddr").innerText = host + ":" + port;
+ if (inf.version.endsWith("-iridium")) {
+ document.getElementById("servername").innerText = "Iridium " + inf.version.substr(0, inf.version.length - "-iridium".length);
+ document.getElementById("servericon").src = "../logo/iridium.png";
+ } else {
+ document.getElementById("servername").innerText = "Kartik Legacy Server " + inf.version;
+ document.getElementById("servericon").src = "../logo/server.png";
+ }
+ document.getElementById('yourid').innerText = inf.id.toUpperCase();
+ document.getElementById('intro').style.display = "";
+ document.getElementById('connecting').style.display = "none";
+ document.getElementById('loading').style.display = "none";
+ client.initialized = true;
+ break;
+ case "error":
+ console.log(inf['type'] + ": " + inf['message']);
+ break;
+ default:
+ crash(new Error("Trying to receive data but client not initialized"));
+ break;
+ }
+ } else {
+ switch (inf['_type']) {
+ case "init":
+ crash(new Error("Trying to initialize client but client is already initialized"));
+ break;
+ case "error":
+ console.log(inf['type'] + ": " + inf['message']);
+ location.href = "online.html#" + btoa(inf['type'] + ": " + inf['message']);
+ break;
+ case "linked":
+ console.log("Now hooked into link: (H) " + inf['ids']['host'] + " <-> " + inf['ids']['guest'] + " (G)");
+ document.getElementById('intro').style.display = "none";
+ document.getElementById('connecting').style.display = "none";
+ document.getElementById('loading').style.display = "";
+ document.getElementById('loading').innerText = lang.online.generate;
+ global.role = inf['role'];
+ if (role === "host") {
+ startHooks.forEach((hook) => {
+ hook(this);
+ })
+ $("#online-login").fadeOut(200);
+ }
+ break;
+ default:
+ if (inf['_type'] === "ipc" && inf['action'] === "Ping") {
+ clientWriter(JSON.stringify({
+ _type: "ipc",
+ action: "Pong",
+ message: null
+ }) + "|")
+ return;
+ }
+ if ((inf['_type'] === "ipc" && inf['action'] === "Pong") || inf['_type'] === "pong") {
+ pingEnd = new Date();
+ ping = Math.round(pingEnd - pingStart);
+ global.pingStart = null;
+ clearTimeout(global.pingCrash);
+ updatePing(ping);
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "posTop") {
+ try {
+ document.getElementById('car1').style.top = inf['message'];
+ } catch (e) {}
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "progressLaps") {
+ try {
+ document.getElementById("laps-car1").innerText = inf['message'];
+ } catch (e) {}
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "progressLose") {
+ global.quitting = true;
+ location.href = "win.html?sp#car1";
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "posLeft") {
+ try {
+ document.getElementById('car1').style.left = inf['message'];
+ } catch (e) {}
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "gameIsReady") {
+ startgame();
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "abort") {
+ location.href = "online.html#" + btoa(lang.online.aborted);
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'] === "posRot") {
+ try {
+ document.getElementById('car1').style.transform = inf['message'];
+ } catch (e) {}
+ return;
+ }
+ if (inf['_type'] === "ipc" && inf['action'].startsWith("RaceData:")) {
+ rd = inf['action'].substr(9);
+ switch (rd) {
+ case "hostCar":
+ guestInfo.hostCar = inf['message'];
+ if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
+ onlineInitDone = true;
+ startHooks.forEach((hook) => {
+ hook(this);
+ })
+ $("#online-login").fadeOut(200);
+ }
+ break;
+ case "guestCar":
+ guestInfo.guestCar = inf['message'];
+ if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
+ onlineInitDone = true;
+ startHooks.forEach((hook) => {
+ hook(this);
+ })
+ $("#online-login").fadeOut(200);
+ }
+ break;
+ case "circuit":
+ guestInfo.circuit = inf['message'];
+ if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
+ onlineInitDone = true;
+ startHooks.forEach((hook) => {
+ hook(this);
+ })
+ $("#online-login").fadeOut(200);
+ }
+ break;
+ case "music":
+ guestInfo.music = inf['message'];
+ if (guestInfo.music !== null && guestInfo.circuit !== null && guestInfo.guestCar !== null && guestInfo.hostCar !== null && !onlineInitDone) {
+ onlineInitDone = true;
+ startHooks.forEach((hook) => {
+ hook(this);
+ })
+ $("#online-login").fadeOut(200);
+ }
+ break;
+ }
+ return;
+ }
+ break;
+ }
+ }
+ })
+ }
+ })
+
+ client.on('close', () => {
+ console.log("Kicked from server");
+ })
+
+ client.on('error', (e) => {
+ switch (e.code) {
+ case "ECONNREFUSED":
+ location.href = "online.html#" + btoa(lang.online.unable);
+ break;
+ default:
+ location.href = "online.html#" + btoa(lang.online.internal);
+ break;
+ }
+ crash(e);
+ })
+
+ setInterval(() => {
+ if (pingStart !== null && new Date() - pingStart >= 10000) {
+ location.href = "online.html#" + btoa(lang.online.timeout);
+ }
+ }, 50)
+})
+
+function checkOnlineLogin() {
+ document.getElementById('theirid').value = document.getElementById('theirid').value.toUpperCase();
+ if (/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]/gm.test(document.getElementById('theirid').value)) {
+ document.getElementById('theirid').value = "";
+ }
+ if (document.getElementById('theirid').value.length === 8) {
+ if (document.getElementById('theirid').value === document.getElementById('yourid').innerText) {
+ document.getElementById('theirid').value = "";
+ } else {
+ if (!connecting) {
+ connecting = true;
+ document.getElementById('intro').style.display = "none";
+ document.getElementById('connecting').style.display = "none";
+ document.getElementById('loading').style.display = "";
+ console.log("Linking to client " + document.getElementById('theirid').value + "...")
+ clientWriter(JSON.stringify({
+ _type: "link",
+ client: document.getElementById('theirid').value.toLowerCase()
+ }));
+ }
+ }
+ }
+}
+
+$("#theirid").keydown(function(e) {
+ if (e.keyCode === 27) { // esc
+ $("body").fadeOut(200);
+ setTimeout(() => {
+ location.href = "menu.html?back";
+ }, 250)
+ }
}) \ No newline at end of file
diff --git a/online/server.json b/online/server.json
index 4ba17eb..cd9b0df 100644
--- a/online/server.json
+++ b/online/server.json
@@ -1,4 +1,4 @@
-{
- "hostname": "kartik.hopto.org",
- "port": 8408
-}
+{
+ "hostname": "kartik.minteck.org",
+ "port": 8408
+}
diff --git a/views/script/game_music.js b/views/script/game_music.js
index 7d43a25..beed4a0 100644
--- a/views/script/game_music.js
+++ b/views/script/game_music.js
@@ -1,8 +1,8 @@
-startHooks.push(() => {
- info("MusicMgr", "Playing game" + i + ".mp3");
- if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['game' + i].file);
-})
-
-if (location.search === "?online") {
- if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['prepare'].file);
-}
+startHooks.push(() => {
+ info("MusicMgr", "Playing game" + i + ".mp3");
+ if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['game' + i].file);
+})
+
+if (location.search === "?online") {
+ if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['prepare'].file);
+}
diff --git a/views/script/menu_music.js b/views/script/menu_music.js
index d650478..e6ef323 100644
--- a/views/script/menu_music.js
+++ b/views/script/menu_music.js
@@ -1,5 +1,5 @@
-if (location.search !== "?noreset") {
- console.log("back");
- if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['title'].file);
-}
-info("MenuWindow", "Menu opened");
+if (location.search !== "?noreset") {
+ console.log("back");
+ if (require('@electron/remote').getCurrentWindow().music) require('electron').ipcRenderer.send('newmusic', kresources.music['title'].file);
+}
+info("MenuWindow", "Menu opened");
diff --git a/views/splash.svg b/views/splash.svg
index e9bfac3..3fc0572 100644
--- a/views/splash.svg
+++ b/views/splash.svg
@@ -1,2831 +1,2831 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- version="1.1"
- width="1600"
- height="770"
- id="svg622"
- sodipodi:docname="tiler.svg"
- inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <defs
- id="defs626" />
- <sodipodi:namedview
- id="namedview624"
- pagecolor="#ffffff"
- bordercolor="#999999"
- borderopacity="1"
- inkscape:pageshadow="0"
- inkscape:pageopacity="0"
- inkscape:pagecheckerboard="0"
- showgrid="false"
- inkscape:zoom="0.43798583"
- inkscape:cx="778.56401"
- inkscape:cy="374.44134"
- inkscape:window-width="1600"
- inkscape:window-height="845"
- inkscape:window-x="0"
- inkscape:window-y="26"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg622" />
- <rect
- width="1600"
- height="770"
- fill="#504b4b"
- id="rect2"
- style="fill:#064896;fill-opacity:1" />
- <rect
- width="1600"
- height="770"
- fill="#21d789"
- opacity="0"
- id="rect4" />
- <g
- id="g596">
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,123.07692131629346,-7.105427357601002e-15)"
- id="g10">
- <circle
- cx="23.999998092651367"
- cy="23.99999866485596"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle6" />
- <circle
- cx="56"
- cy="55.99999866485596"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle8" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,246.1538523160491,123.07692923912667)"
- id="g14">
- <polygon
- points="79.99999866485587,79.99999866485595 -0.0000013351441339182202,159.99999866485595 -0.0000013351441339182202,79.99999866485595 79.99999866485587,79.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon12" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,369.2307756864104,246.15385260948798)"
- id="g24">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g22">
- <polygon
- points="-0.0000013351441339182202,239.99999866485595 15.999998664855866,159.99999866485595 31.999998664855866,159.99999866485595 15.999998664855866,239.99999866485595 -0.0000013351441339182202,239.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon16" />
- <polygon
- points="31.999998092651367,239.99999866485595 47.99999809265137,159.99999866485595 63.99999809265137,159.99999866485595 47.99999809265137,239.99999866485595 31.999998092651367,239.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon18" />
- <polygon
- points="64,239.99999866485595 80,159.99999866485595 80,239.99999866485595 64,239.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon20" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,123.07692131629352,861.5384826660156)"
- id="g30">
- <circle
- cx="23.999998092651367"
- cy="263.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle26" />
- <circle
- cx="56"
- cy="295.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle28" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-492.30771460899973,615.3846376859223)"
- id="g34">
- <polygon
- points="79.99999866485587,319.9999986648559 -0.0000013351441339182202,399.9999986648559 -0.0000013351441339182202,319.9999986648559 79.99999866485587,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon32" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,738.4615572415862,615.3846341646638)"
- id="g38">
- <polygon
- points="79.99999866485587,399.999998664856 -0.0000013351441339182202,479.999998664856 -0.0000013351441339182202,399.999998664856 79.99999866485587,399.999998664856"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon36" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,123.07692307692251,1600)"
- id="g48">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g46">
- <polygon
- points="-0.0000013351441339182202,559.999998664856 15.999998664855866,479.999998664856 31.999998664855866,479.999998664856 15.999998664855866,559.999998664856 -0.0000013351441339182202,559.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon40" />
- <polygon
- points="31.999998092651367,559.999998664856 47.99999809265137,479.999998664856 63.99999809265137,479.999998664856 47.99999809265137,559.999998664856 31.999998092651367,559.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon42" />
- <polygon
- points="64,559.999998664856 80,479.999998664856 80,559.999998664856 64,559.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon44" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,246.15385143573462,-123.07693011944116)"
- id="g54">
- <circle
- cx="104"
- cy="23.99999866485596"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle50" />
- <circle
- cx="136"
- cy="55.99999866485596"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle52" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,369.2307815551758,0)"
- id="g64">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g62">
- <polygon
- points="80,159.99999866485595 96,79.99999866485595 112,79.99999866485595 96,159.99999866485595 80,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon56" />
- <polygon
- points="112,159.99999866485595 128,79.99999866485595 144,79.99999866485595 128,159.99999866485595 112,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon58" />
- <polygon
- points="144,159.99999866485595 160,79.99999866485595 160,159.99999866485595 144,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon60" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,492.3077049255371,123.0769233703613)"
- id="g70">
- <circle
- cx="104"
- cy="183.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle66" />
- <circle
- cx="136"
- cy="215.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle68" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15385055541987,615.3846321105958)"
- id="g80">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g78">
- <polygon
- points="80,319.999998664856 96,239.99999866485598 112,239.99999866485598 96,319.999998664856 80,319.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon72" />
- <polygon
- points="112,319.999998664856 128,239.99999866485598 144,239.99999866485598 128,319.999998664856 112,319.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon74" />
- <polygon
- points="144,319.999998664856 160,239.99999866485598 160,319.999998664856 144,319.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon76" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-369.23078536987305,738.4615669250489)"
- id="g84">
- <polygon
- points="160,319.9999986648559 80,399.9999986648559 80,319.9999986648559 160,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon82" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,369.2307815551759,1353.84619140625)"
- id="g90">
- <circle
- cx="104"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle86" />
- <circle
- cx="136"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle88" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g100">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g98">
- <polygon
- points="80,559.999998664856 96,479.999998664856 112,479.999998664856 96,559.999998664856 80,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon92" />
- <polygon
- points="112,559.999998664856 128,479.999998664856 144,479.999998664856 128,559.999998664856 112,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon94" />
- <polygon
- points="144,559.999998664856 160,479.999998664856 160,559.999998664856 144,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon96" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,246.15385260948784,369.23077568641065)"
- id="g104">
- <polygon
- points="240,-0.000001335144041902936 160,79.99999866485595 160,-0.000001335144041902936 240,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon102" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,615.3846282958984,369.2307815551758)"
- id="g114">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g112">
- <polygon
- points="160,159.99999866485595 176,79.99999866485595 192,79.99999866485595 176,159.99999866485595 160,159.99999866485595"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon106" />
- <polygon
- points="192,159.99999866485595 208,79.99999866485595 224,79.99999866485595 208,159.99999866485595 192,159.99999866485595"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon108" />
- <polygon
- points="224,159.99999866485595 240,79.99999866485595 240,159.99999866485595 224,159.99999866485595"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon110" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,5.684341886080802e-14,615.3846282958984)"
- id="g118">
- <polygon
- points="240,159.99999866485595 160,239.99999866485595 160,159.99999866485595 240,159.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon116" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-123.07692718505854,738.461555480957)"
- id="g124">
- <circle
- cx="184"
- cy="263.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle120" />
- <circle
- cx="216"
- cy="295.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle122" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15386199951172,861.5384902954103)"
- id="g130">
- <circle
- cx="184"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle126" />
- <circle
- cx="216"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle128" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g136">
- <circle
- cx="184"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle132" />
- <circle
- cx="216"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle134" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g146">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g144">
- <polygon
- points="160,559.999998664856 176,479.999998664856 192,479.999998664856 176,559.999998664856 160,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon138" />
- <polygon
- points="192,559.999998664856 208,479.999998664856 224,479.999998664856 208,559.999998664856 192,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon140" />
- <polygon
- points="224,559.999998664856 240,479.999998664856 240,559.999998664856 224,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon142" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g150">
- <polygon
- points="320,-0.000001335144041902936 240,79.99999866485595 240,-0.000001335144041902936 320,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon148" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,861.5384826660156,369.2307815551757)"
- id="g154">
- <polygon
- points="320,79.99999866485595 240,159.99999866485595 240,79.99999866485595 320,79.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon152" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,738.461555480957,-123.0769271850586)"
- id="g158">
- <polygon
- points="320,159.99999866485595 240,239.99999866485595 240,159.99999866485595 320,159.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon156" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g162">
- <polygon
- points="320,239.99999866485598 240,319.999998664856 240,239.99999866485598 320,239.99999866485598"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon160" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,861.5384826660156,1107.6923522949219)"
- id="g168">
- <circle
- cx="264"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle164" />
- <circle
- cx="296"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle166" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15385437011707,1107.6923370361328)"
- id="g174">
- <circle
- cx="264"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle170" />
- <circle
- cx="296"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle172" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g184">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g182">
- <polygon
- points="240,559.999998664856 256,479.999998664856 272,479.999998664856 256,559.999998664856 240,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon176" />
- <polygon
- points="272,559.999998664856 288,479.999998664856 304,479.999998664856 288,559.999998664856 272,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon178" />
- <polygon
- points="304,559.999998664856 320,479.999998664856 320,559.999998664856 304,559.999998664856"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon180" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,123.0769230769228)"
- id="g188">
- <polygon
- points="400,-0.000001335144041902936 320,79.99999866485595 320,-0.000001335144041902936 400,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon186" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g194">
- <circle
- cx="344"
- cy="103.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle190" />
- <circle
- cx="376"
- cy="135.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle192" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,246.15386199951183,861.5384902954102)"
- id="g198">
- <polygon
- points="400,159.99999866485595 320,239.99999866485595 320,159.99999866485595 400,159.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon196" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,984.6154174804688,-123.07693481445312)"
- id="g202">
- <polygon
- points="400,239.99999866485598 320,319.999998664856 320,239.99999866485598 400,239.99999866485598"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon200" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1.1368683772161603e-13,1107.6923522949219)"
- id="g206">
- <polygon
- points="400,319.9999986648559 320,399.9999986648559 320,319.9999986648559 400,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon204" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,1353.84619140625)"
- id="g216">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g214">
- <polygon
- points="320,479.999998664856 336,399.999998664856 352,399.999998664856 336,479.999998664856 320,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon208" />
- <polygon
- points="352,479.999998664856 368,399.999998664856 384,399.999998664856 368,479.999998664856 352,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon210" />
- <polygon
- points="384,479.999998664856 400,399.999998664856 400,479.999998664856 384,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon212" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,1600)"
- id="g222">
- <circle
- cx="344"
- cy="503.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle218" />
- <circle
- cx="376"
- cy="535.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle220" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g226">
- <polygon
- points="480,-0.000001335144041902936 400,79.99999866485595 400,-0.000001335144041902936 480,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon224" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g236">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g234">
- <polygon
- points="400,159.99999866485595 416,79.99999866485595 432,79.99999866485595 416,159.99999866485595 400,159.99999866485595"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon228" />
- <polygon
- points="432,159.99999866485595 448,79.99999866485595 464,79.99999866485595 448,159.99999866485595 432,159.99999866485595"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon230" />
- <polygon
- points="464,159.99999866485595 480,79.99999866485595 480,159.99999866485595 464,159.99999866485595"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon232" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,369.2307815551759,984.6154098510742)"
- id="g240">
- <polygon
- points="480,159.99999866485595 400,239.99999866485595 400,159.99999866485595 480,159.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon238" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1107.6923370361328,-246.1538543701172)"
- id="g250">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g248">
- <polygon
- points="400,319.999998664856 416,239.99999866485598 432,239.99999866485598 416,319.999998664856 400,319.999998664856"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon242" />
- <polygon
- points="432,319.999998664856 448,239.99999866485598 464,239.99999866485598 448,319.999998664856 432,319.999998664856"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon244" />
- <polygon
- points="464,319.999998664856 480,239.99999866485598 480,319.999998664856 464,319.999998664856"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon246" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,123.07691955566418,1230.769271850586)"
- id="g256">
- <circle
- cx="424"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle252" />
- <circle
- cx="456"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle254" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.84619140625,0)"
- id="g262">
- <circle
- cx="424"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle258" />
- <circle
- cx="456"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle260" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.923095703125,123.076904296875)"
- id="g268">
- <circle
- cx="424"
- cy="503.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle264" />
- <circle
- cx="456"
- cy="535.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle266" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,738.4615384615387,861.5384615384614)"
- id="g278">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g276">
- <polygon
- points="480,79.99999866485595 496,-0.000001335144041902936 512,-0.000001335144041902936 496,79.99999866485595 480,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon270" />
- <polygon
- points="512,79.99999866485595 528,-0.000001335144041902936 544,-0.000001335144041902936 528,79.99999866485595 512,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon272" />
- <polygon
- points="544,79.99999866485595 560,-0.000001335144041902936 560,79.99999866485595 544,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon274" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,984.6153907775879,-615.3846092224121)"
- id="g284">
- <circle
- cx="504"
- cy="103.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle280" />
- <circle
- cx="536"
- cy="135.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle282" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1600,615.3846282958983)"
- id="g290">
- <circle
- cx="504"
- cy="183.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle286" />
- <circle
- cx="536"
- cy="215.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle288" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g294">
- <polygon
- points="560,239.99999866485598 480,319.999998664856 480,239.99999866485598 560,239.99999866485598"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon292" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.846176147461,-246.15382385253906)"
- id="g300">
- <circle
- cx="504"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle296" />
- <circle
- cx="536"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle298" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,123.07690429687511,1476.923095703125)"
- id="g306">
- <circle
- cx="504"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle302" />
- <circle
- cx="536"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle304" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g310">
- <polygon
- points="560,479.999998664856 480,559.999998664856 480,479.999998664856 560,479.999998664856"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon308" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g320">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g318">
- <polygon
- points="560,79.99999866485595 576,-0.000001335144041902936 592,-0.000001335144041902936 576,79.99999866485595 560,79.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon312" />
- <polygon
- points="592,79.99999866485595 608,-0.000001335144041902936 624,-0.000001335144041902936 608,79.99999866485595 592,79.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon314" />
- <polygon
- points="624,79.99999866485595 640,-0.000001335144041902936 640,79.99999866485595 624,79.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon316" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,369.23078155517567)"
- id="g324">
- <polygon
- points="640,79.99999866485595 560,159.99999866485595 560,79.99999866485595 640,79.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon322" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,615.3846282958983)"
- id="g330">
- <circle
- cx="584"
- cy="183.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle326" />
- <circle
- cx="616"
- cy="215.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle328" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,492.3076934814455,1353.846176147461)"
- id="g336">
- <circle
- cx="584"
- cy="263.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle332" />
- <circle
- cx="616"
- cy="295.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle334" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g342">
- <circle
- cx="584"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle338" />
- <circle
- cx="616"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle340" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,1353.84619140625)"
- id="g346">
- <polygon
- points="640,399.999998664856 560,479.999998664856 560,399.999998664856 640,399.999998664856"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon344" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769348144531,-123.07693481445312)"
- id="g350">
- <polygon
- points="640,479.999998664856 560,559.999998664856 560,479.999998664856 640,479.999998664856"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon348" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g356">
- <circle
- cx="664"
- cy="23.99999866485596"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle352" />
- <circle
- cx="696"
- cy="55.99999866485596"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle354" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,861.5385093688967,1230.7692909240723)"
- id="g362">
- <circle
- cx="664"
- cy="103.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle358" />
- <circle
- cx="696"
- cy="135.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle360" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.8462142944336,-738.4615859985352)"
- id="g372">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g370">
- <polygon
- points="640,239.99999866485595 656,159.99999866485595 672,159.99999866485595 656,239.99999866485595 640,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon364" />
- <polygon
- points="672,239.99999866485595 688,159.99999866485595 704,159.99999866485595 688,239.99999866485595 672,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon366" />
- <polygon
- points="704,239.99999866485595 720,159.99999866485595 720,239.99999866485595 704,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon368" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.9231414794922,-615.3846588134766)"
- id="g376">
- <polygon
- points="720,239.99999866485598 640,319.999998664856 640,239.99999866485598 720,239.99999866485598"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon374" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,492.30772399902366,1600.0000762939453)"
- id="g382">
- <circle
- cx="664"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle378" />
- <circle
- cx="696"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle380" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769958496094,-369.2308044433594)"
- id="g388">
- <circle
- cx="664"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle384" />
- <circle
- cx="696"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle386" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g394">
- <circle
- cx="664"
- cy="503.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle390" />
- <circle
- cx="696"
- cy="535.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle392" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,123.07692307692272)"
- id="g398">
- <polygon
- points="800,-0.000001335144041902936 720,79.99999866485595 720,-0.000001335144041902936 800,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon396" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.8462257385254,-984.6154441833496)"
- id="g408">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g406">
- <polygon
- points="720,159.99999866485595 736,79.99999866485595 752,79.99999866485595 736,159.99999866485595 720,159.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon400" />
- <polygon
- points="752,159.99999866485595 768,79.99999866485595 784,79.99999866485595 768,159.99999866485595 752,159.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon402" />
- <polygon
- points="784,159.99999866485595 800,79.99999866485595 800,159.99999866485595 784,159.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon404" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,861.5385208129885,1476.9231491088867)"
- id="g412">
- <polygon
- points="800,159.99999866485595 720,239.99999866485595 720,159.99999866485595 800,159.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon410" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,861.5384826660154)"
- id="g422">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g420">
- <polygon
- points="720,319.999998664856 736,239.99999866485598 752,239.99999866485598 736,319.999998664856 720,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon414" />
- <polygon
- points="752,319.999998664856 768,239.99999866485598 784,239.99999866485598 768,319.999998664856 752,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon416" />
- <polygon
- points="784,319.999998664856 800,239.99999866485598 800,319.999998664856 784,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon418" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1107.6923522949219)"
- id="g426">
- <polygon
- points="800,319.9999986648559 720,399.9999986648559 720,319.9999986648559 800,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon424" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1353.84619140625)"
- id="g432">
- <circle
- cx="744"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle428" />
- <circle
- cx="776"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle430" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1600)"
- id="g438">
- <circle
- cx="744"
- cy="503.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle434" />
- <circle
- cx="776"
- cy="535.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle436" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1230.7692777193513,1353.846200796274)"
- id="g448">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g446">
- <polygon
- points="800,79.99999866485595 816,-0.000001335144041902936 832,-0.000001335144041902936 816,79.99999866485595 800,79.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon440" />
- <polygon
- points="832,79.99999866485595 848,-0.000001335144041902936 864,-0.000001335144041902936 848,79.99999866485595 832,79.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon442" />
- <polygon
- points="864,79.99999866485595 880,-0.000001335144041902936 880,79.99999866485595 864,79.99999866485595"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon444" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,369.2307815551756)"
- id="g452">
- <polygon
- points="880,79.99999866485595 800,159.99999866485595 800,79.99999866485595 880,79.99999866485595"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon450" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g462">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g460">
- <polygon
- points="800,239.99999866485595 816,159.99999866485595 832,159.99999866485595 816,239.99999866485595 800,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon454" />
- <polygon
- points="832,239.99999866485595 848,159.99999866485595 864,159.99999866485595 848,239.99999866485595 832,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon456" />
- <polygon
- points="864,239.99999866485595 880,159.99999866485595 880,239.99999866485595 864,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon458" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,861.5384826660154)"
- id="g472">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g470">
- <polygon
- points="800,319.999998664856 816,239.99999866485598 832,239.99999866485598 816,319.999998664856 800,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon464" />
- <polygon
- points="832,319.999998664856 848,239.99999866485598 864,239.99999866485598 848,319.999998664856 832,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon466" />
- <polygon
- points="864,319.999998664856 880,239.99999866485598 880,319.999998664856 864,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon468" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,1107.6923522949219)"
- id="g476">
- <polygon
- points="880,319.9999986648559 800,399.9999986648559 800,319.9999986648559 880,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon474" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1969.2308349609375,-615.3846435546875)"
- id="g482">
- <circle
- cx="824"
- cy="423.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle478" />
- <circle
- cx="856"
- cy="455.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle480" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,1600)"
- id="g486">
- <polygon
- points="880,479.999998664856 800,559.999998664856 800,479.999998664856 880,479.999998664856"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon484" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.923105093149,-1353.846182016226)"
- id="g490">
- <polygon
- points="960,-0.000001335144041902936 880,79.99999866485595 880,-0.000001335144041902936 960,-0.000001335144041902936"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon488" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g500">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g498">
- <polygon
- points="880,159.99999866485595 896,79.99999866485595 912,79.99999866485595 896,159.99999866485595 880,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon492" />
- <polygon
- points="912,159.99999866485595 928,79.99999866485595 944,79.99999866485595 928,159.99999866485595 912,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon494" />
- <polygon
- points="944,159.99999866485595 960,79.99999866485595 960,159.99999866485595 944,159.99999866485595"
- fill-opacity="0"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon496" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769577026367,-1107.6923294067383)"
- id="g510">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g508">
- <polygon
- points="880,239.99999866485595 896,159.99999866485595 912,159.99999866485595 896,239.99999866485595 880,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon502" />
- <polygon
- points="912,239.99999866485595 928,159.99999866485595 944,159.99999866485595 928,239.99999866485595 912,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon504" />
- <polygon
- points="944,239.99999866485595 960,159.99999866485595 960,239.99999866485595 944,239.99999866485595"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon506" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2830.769287109375,861.5384826660154)"
- id="g516">
- <circle
- cx="904"
- cy="263.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle512" />
- <circle
- cx="936"
- cy="295.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle514" />
- </g>
- <g
- class="tile"
- transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2830.769287109375,1107.6923522949216)"
- id="g520">
- <polygon
- points="960,319.9999986648559 880,399.9999986648559 880,319.9999986648559 960,319.9999986648559"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon518" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2092.3077392578125,-738.4615478515625)"
- id="g530">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g528">
- <polygon
- points="880,479.999998664856 896,399.999998664856 912,399.999998664856 896,479.999998664856 880,479.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon522" />
- <polygon
- points="912,479.999998664856 928,399.999998664856 944,399.999998664856 928,479.999998664856 912,479.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon524" />
- <polygon
- points="944,479.999998664856 960,399.999998664856 960,479.999998664856 944,479.999998664856"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon526" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2215.3846435546875,-615.3846435546875)"
- id="g536">
- <circle
- cx="904"
- cy="503.999998664856"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle532" />
- <circle
- cx="936"
- cy="535.999998664856"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle534" />
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1600.000009390024,-1476.923086313101)"
- id="g546">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g544">
- <polygon
- points="960,79.99999866485595 976,-0.000001335144041902936 992,-0.000001335144041902936 976,79.99999866485595 960,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon538" />
- <polygon
- points="992,79.99999866485595 1008,-0.000001335144041902936 1024,-0.000001335144041902936 1008,79.99999866485595 992,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon540" />
- <polygon
- points="1024,79.99999866485595 1040,-0.000001335144041902936 1040,79.99999866485595 1024,79.99999866485595"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon542" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g552">
- <circle
- cx="984"
- cy="103.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle548" />
- <circle
- cx="1016"
- cy="135.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle550" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g558">
- <circle
- cx="984"
- cy="183.99999866485595"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle554" />
- <circle
- cx="1016"
- cy="215.99999866485595"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#07c3f2"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#07c3f2"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle556" />
- </g>
- <g
- class="tile"
- transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1107.692306518555,1969.2307891845703)"
- id="g568">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g566">
- <polygon
- points="960,319.999998664856 976,239.99999866485598 992,239.99999866485598 976,319.999998664856 960,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon560" />
- <polygon
- points="992,319.999998664856 1008,239.99999866485598 1024,239.99999866485598 1008,319.999998664856 992,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon562" />
- <polygon
- points="1024,319.999998664856 1040,239.99999866485598 1040,319.999998664856 1024,319.999998664856"
- fill-opacity="1"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon564" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2092.3077239990234,-984.6153717041016)"
- id="g574">
- <circle
- cx="984"
- cy="343.9999986648559"
- r="24"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle570" />
- <circle
- cx="1016"
- cy="375.9999986648559"
- r="8"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- fill-opacity="1"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="circle572" />
- </g>
- <g
- class="tile"
- transform="matrix(1,0,0,1,0,0)"
- id="g584">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g582">
- <polygon
- points="960,479.999998664856 976,399.999998664856 992,399.999998664856 976,479.999998664856 960,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon576" />
- <polygon
- points="992,479.999998664856 1008,399.999998664856 1024,399.999998664856 1008,479.999998664856 992,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon578" />
- <polygon
- points="1024,479.999998664856 1040,399.999998664856 1040,479.999998664856 1024,479.999998664856"
- fill-opacity="0"
- fill="#087cfa"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#087cfa"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon580" />
- </g>
- </g>
- <g
- class="tile"
- transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2338.4615478515625,-738.4615478515625)"
- id="g594">
- <g
- clip-path="none"
- transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
- id="g592">
- <polygon
- points="960,559.999998664856 976,479.999998664856 992,479.999998664856 976,559.999998664856 960,559.999998664856"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon586" />
- <polygon
- points="992,559.999998664856 1008,479.999998664856 1024,479.999998664856 1008,559.999998664856 992,559.999998664856"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon588" />
- <polygon
- points="1024,559.999998664856 1040,479.999998664856 1040,559.999998664856 1024,559.999998664856"
- fill-opacity="0"
- fill="#21d789"
- stroke-opacity="1"
- stroke-width="1"
- stroke="#21d789"
- opacity="1"
- stroke-linejoin="round"
- stroke-linecap="round"
- id="polygon590" />
- </g>
- </g>
- </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ width="1600"
+ height="770"
+ id="svg622"
+ sodipodi:docname="tiler.svg"
+ inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs626" />
+ <sodipodi:namedview
+ id="namedview624"
+ pagecolor="#ffffff"
+ bordercolor="#999999"
+ borderopacity="1"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.43798583"
+ inkscape:cx="778.56401"
+ inkscape:cy="374.44134"
+ inkscape:window-width="1600"
+ inkscape:window-height="845"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg622" />
+ <rect
+ width="1600"
+ height="770"
+ fill="#504b4b"
+ id="rect2"
+ style="fill:#064896;fill-opacity:1" />
+ <rect
+ width="1600"
+ height="770"
+ fill="#21d789"
+ opacity="0"
+ id="rect4" />
+ <g
+ id="g596">
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,123.07692131629346,-7.105427357601002e-15)"
+ id="g10">
+ <circle
+ cx="23.999998092651367"
+ cy="23.99999866485596"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle6" />
+ <circle
+ cx="56"
+ cy="55.99999866485596"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle8" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,246.1538523160491,123.07692923912667)"
+ id="g14">
+ <polygon
+ points="79.99999866485587,79.99999866485595 -0.0000013351441339182202,159.99999866485595 -0.0000013351441339182202,79.99999866485595 79.99999866485587,79.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon12" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,369.2307756864104,246.15385260948798)"
+ id="g24">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g22">
+ <polygon
+ points="-0.0000013351441339182202,239.99999866485595 15.999998664855866,159.99999866485595 31.999998664855866,159.99999866485595 15.999998664855866,239.99999866485595 -0.0000013351441339182202,239.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon16" />
+ <polygon
+ points="31.999998092651367,239.99999866485595 47.99999809265137,159.99999866485595 63.99999809265137,159.99999866485595 47.99999809265137,239.99999866485595 31.999998092651367,239.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon18" />
+ <polygon
+ points="64,239.99999866485595 80,159.99999866485595 80,239.99999866485595 64,239.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon20" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,123.07692131629352,861.5384826660156)"
+ id="g30">
+ <circle
+ cx="23.999998092651367"
+ cy="263.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle26" />
+ <circle
+ cx="56"
+ cy="295.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle28" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-492.30771460899973,615.3846376859223)"
+ id="g34">
+ <polygon
+ points="79.99999866485587,319.9999986648559 -0.0000013351441339182202,399.9999986648559 -0.0000013351441339182202,319.9999986648559 79.99999866485587,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon32" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,738.4615572415862,615.3846341646638)"
+ id="g38">
+ <polygon
+ points="79.99999866485587,399.999998664856 -0.0000013351441339182202,479.999998664856 -0.0000013351441339182202,399.999998664856 79.99999866485587,399.999998664856"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon36" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,123.07692307692251,1600)"
+ id="g48">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g46">
+ <polygon
+ points="-0.0000013351441339182202,559.999998664856 15.999998664855866,479.999998664856 31.999998664855866,479.999998664856 15.999998664855866,559.999998664856 -0.0000013351441339182202,559.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon40" />
+ <polygon
+ points="31.999998092651367,559.999998664856 47.99999809265137,479.999998664856 63.99999809265137,479.999998664856 47.99999809265137,559.999998664856 31.999998092651367,559.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon42" />
+ <polygon
+ points="64,559.999998664856 80,479.999998664856 80,559.999998664856 64,559.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon44" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,246.15385143573462,-123.07693011944116)"
+ id="g54">
+ <circle
+ cx="104"
+ cy="23.99999866485596"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle50" />
+ <circle
+ cx="136"
+ cy="55.99999866485596"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle52" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,369.2307815551758,0)"
+ id="g64">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g62">
+ <polygon
+ points="80,159.99999866485595 96,79.99999866485595 112,79.99999866485595 96,159.99999866485595 80,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon56" />
+ <polygon
+ points="112,159.99999866485595 128,79.99999866485595 144,79.99999866485595 128,159.99999866485595 112,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon58" />
+ <polygon
+ points="144,159.99999866485595 160,79.99999866485595 160,159.99999866485595 144,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon60" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,492.3077049255371,123.0769233703613)"
+ id="g70">
+ <circle
+ cx="104"
+ cy="183.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle66" />
+ <circle
+ cx="136"
+ cy="215.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle68" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15385055541987,615.3846321105958)"
+ id="g80">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g78">
+ <polygon
+ points="80,319.999998664856 96,239.99999866485598 112,239.99999866485598 96,319.999998664856 80,319.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon72" />
+ <polygon
+ points="112,319.999998664856 128,239.99999866485598 144,239.99999866485598 128,319.999998664856 112,319.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon74" />
+ <polygon
+ points="144,319.999998664856 160,239.99999866485598 160,319.999998664856 144,319.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon76" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-369.23078536987305,738.4615669250489)"
+ id="g84">
+ <polygon
+ points="160,319.9999986648559 80,399.9999986648559 80,319.9999986648559 160,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon82" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,369.2307815551759,1353.84619140625)"
+ id="g90">
+ <circle
+ cx="104"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle86" />
+ <circle
+ cx="136"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle88" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g100">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g98">
+ <polygon
+ points="80,559.999998664856 96,479.999998664856 112,479.999998664856 96,559.999998664856 80,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon92" />
+ <polygon
+ points="112,559.999998664856 128,479.999998664856 144,479.999998664856 128,559.999998664856 112,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon94" />
+ <polygon
+ points="144,559.999998664856 160,479.999998664856 160,559.999998664856 144,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon96" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,246.15385260948784,369.23077568641065)"
+ id="g104">
+ <polygon
+ points="240,-0.000001335144041902936 160,79.99999866485595 160,-0.000001335144041902936 240,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon102" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,615.3846282958984,369.2307815551758)"
+ id="g114">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g112">
+ <polygon
+ points="160,159.99999866485595 176,79.99999866485595 192,79.99999866485595 176,159.99999866485595 160,159.99999866485595"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon106" />
+ <polygon
+ points="192,159.99999866485595 208,79.99999866485595 224,79.99999866485595 208,159.99999866485595 192,159.99999866485595"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon108" />
+ <polygon
+ points="224,159.99999866485595 240,79.99999866485595 240,159.99999866485595 224,159.99999866485595"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon110" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,5.684341886080802e-14,615.3846282958984)"
+ id="g118">
+ <polygon
+ points="240,159.99999866485595 160,239.99999866485595 160,159.99999866485595 240,159.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon116" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-123.07692718505854,738.461555480957)"
+ id="g124">
+ <circle
+ cx="184"
+ cy="263.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle120" />
+ <circle
+ cx="216"
+ cy="295.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle122" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15386199951172,861.5384902954103)"
+ id="g130">
+ <circle
+ cx="184"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle126" />
+ <circle
+ cx="216"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle128" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g136">
+ <circle
+ cx="184"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle132" />
+ <circle
+ cx="216"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle134" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g146">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g144">
+ <polygon
+ points="160,559.999998664856 176,479.999998664856 192,479.999998664856 176,559.999998664856 160,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon138" />
+ <polygon
+ points="192,559.999998664856 208,479.999998664856 224,479.999998664856 208,559.999998664856 192,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon140" />
+ <polygon
+ points="224,559.999998664856 240,479.999998664856 240,559.999998664856 224,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon142" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g150">
+ <polygon
+ points="320,-0.000001335144041902936 240,79.99999866485595 240,-0.000001335144041902936 320,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon148" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,861.5384826660156,369.2307815551757)"
+ id="g154">
+ <polygon
+ points="320,79.99999866485595 240,159.99999866485595 240,79.99999866485595 320,79.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon152" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,738.461555480957,-123.0769271850586)"
+ id="g158">
+ <polygon
+ points="320,159.99999866485595 240,239.99999866485595 240,159.99999866485595 320,159.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon156" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g162">
+ <polygon
+ points="320,239.99999866485598 240,319.999998664856 240,239.99999866485598 320,239.99999866485598"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon160" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,861.5384826660156,1107.6923522949219)"
+ id="g168">
+ <circle
+ cx="264"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle164" />
+ <circle
+ cx="296"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle166" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,-246.15385437011707,1107.6923370361328)"
+ id="g174">
+ <circle
+ cx="264"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle170" />
+ <circle
+ cx="296"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle172" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g184">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g182">
+ <polygon
+ points="240,559.999998664856 256,479.999998664856 272,479.999998664856 256,559.999998664856 240,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon176" />
+ <polygon
+ points="272,559.999998664856 288,479.999998664856 304,479.999998664856 288,559.999998664856 272,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon178" />
+ <polygon
+ points="304,559.999998664856 320,479.999998664856 320,559.999998664856 304,559.999998664856"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon180" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,123.0769230769228)"
+ id="g188">
+ <polygon
+ points="400,-0.000001335144041902936 320,79.99999866485595 320,-0.000001335144041902936 400,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon186" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g194">
+ <circle
+ cx="344"
+ cy="103.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle190" />
+ <circle
+ cx="376"
+ cy="135.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle192" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,246.15386199951183,861.5384902954102)"
+ id="g198">
+ <polygon
+ points="400,159.99999866485595 320,239.99999866485595 320,159.99999866485595 400,159.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon196" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,984.6154174804688,-123.07693481445312)"
+ id="g202">
+ <polygon
+ points="400,239.99999866485598 320,319.999998664856 320,239.99999866485598 400,239.99999866485598"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon200" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1.1368683772161603e-13,1107.6923522949219)"
+ id="g206">
+ <polygon
+ points="400,319.9999986648559 320,399.9999986648559 320,319.9999986648559 400,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon204" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,1353.84619140625)"
+ id="g216">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g214">
+ <polygon
+ points="320,479.999998664856 336,399.999998664856 352,399.999998664856 336,479.999998664856 320,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon208" />
+ <polygon
+ points="352,479.999998664856 368,399.999998664856 384,399.999998664856 368,479.999998664856 352,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon210" />
+ <polygon
+ points="384,479.999998664856 400,399.999998664856 400,479.999998664856 384,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon212" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1107.6923522949219,1600)"
+ id="g222">
+ <circle
+ cx="344"
+ cy="503.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle218" />
+ <circle
+ cx="376"
+ cy="535.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle220" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g226">
+ <polygon
+ points="480,-0.000001335144041902936 400,79.99999866485595 400,-0.000001335144041902936 480,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon224" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g236">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g234">
+ <polygon
+ points="400,159.99999866485595 416,79.99999866485595 432,79.99999866485595 416,159.99999866485595 400,159.99999866485595"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon228" />
+ <polygon
+ points="432,159.99999866485595 448,79.99999866485595 464,79.99999866485595 448,159.99999866485595 432,159.99999866485595"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon230" />
+ <polygon
+ points="464,159.99999866485595 480,79.99999866485595 480,159.99999866485595 464,159.99999866485595"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon232" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,369.2307815551759,984.6154098510742)"
+ id="g240">
+ <polygon
+ points="480,159.99999866485595 400,239.99999866485595 400,159.99999866485595 480,159.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon238" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1107.6923370361328,-246.1538543701172)"
+ id="g250">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g248">
+ <polygon
+ points="400,319.999998664856 416,239.99999866485598 432,239.99999866485598 416,319.999998664856 400,319.999998664856"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon242" />
+ <polygon
+ points="432,319.999998664856 448,239.99999866485598 464,239.99999866485598 448,319.999998664856 432,319.999998664856"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon244" />
+ <polygon
+ points="464,319.999998664856 480,239.99999866485598 480,319.999998664856 464,319.999998664856"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon246" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,123.07691955566418,1230.769271850586)"
+ id="g256">
+ <circle
+ cx="424"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle252" />
+ <circle
+ cx="456"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle254" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.84619140625,0)"
+ id="g262">
+ <circle
+ cx="424"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle258" />
+ <circle
+ cx="456"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle260" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.923095703125,123.076904296875)"
+ id="g268">
+ <circle
+ cx="424"
+ cy="503.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle264" />
+ <circle
+ cx="456"
+ cy="535.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle266" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,738.4615384615387,861.5384615384614)"
+ id="g278">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g276">
+ <polygon
+ points="480,79.99999866485595 496,-0.000001335144041902936 512,-0.000001335144041902936 496,79.99999866485595 480,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon270" />
+ <polygon
+ points="512,79.99999866485595 528,-0.000001335144041902936 544,-0.000001335144041902936 528,79.99999866485595 512,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon272" />
+ <polygon
+ points="544,79.99999866485595 560,-0.000001335144041902936 560,79.99999866485595 544,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon274" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,984.6153907775879,-615.3846092224121)"
+ id="g284">
+ <circle
+ cx="504"
+ cy="103.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle280" />
+ <circle
+ cx="536"
+ cy="135.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle282" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1600,615.3846282958983)"
+ id="g290">
+ <circle
+ cx="504"
+ cy="183.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle286" />
+ <circle
+ cx="536"
+ cy="215.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle288" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g294">
+ <polygon
+ points="560,239.99999866485598 480,319.999998664856 480,239.99999866485598 560,239.99999866485598"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon292" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.846176147461,-246.15382385253906)"
+ id="g300">
+ <circle
+ cx="504"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle296" />
+ <circle
+ cx="536"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle298" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,123.07690429687511,1476.923095703125)"
+ id="g306">
+ <circle
+ cx="504"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle302" />
+ <circle
+ cx="536"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle304" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g310">
+ <polygon
+ points="560,479.999998664856 480,559.999998664856 480,479.999998664856 560,479.999998664856"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon308" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g320">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g318">
+ <polygon
+ points="560,79.99999866485595 576,-0.000001335144041902936 592,-0.000001335144041902936 576,79.99999866485595 560,79.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon312" />
+ <polygon
+ points="592,79.99999866485595 608,-0.000001335144041902936 624,-0.000001335144041902936 608,79.99999866485595 592,79.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon314" />
+ <polygon
+ points="624,79.99999866485595 640,-0.000001335144041902936 640,79.99999866485595 624,79.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon316" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,369.23078155517567)"
+ id="g324">
+ <polygon
+ points="640,79.99999866485595 560,159.99999866485595 560,79.99999866485595 640,79.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon322" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,615.3846282958983)"
+ id="g330">
+ <circle
+ cx="584"
+ cy="183.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle326" />
+ <circle
+ cx="616"
+ cy="215.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle328" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,492.3076934814455,1353.846176147461)"
+ id="g336">
+ <circle
+ cx="584"
+ cy="263.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle332" />
+ <circle
+ cx="616"
+ cy="295.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle334" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g342">
+ <circle
+ cx="584"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle338" />
+ <circle
+ cx="616"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle340" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,1846.1538696289062,1353.84619140625)"
+ id="g346">
+ <polygon
+ points="640,399.999998664856 560,479.999998664856 560,399.999998664856 640,399.999998664856"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon344" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769348144531,-123.07693481445312)"
+ id="g350">
+ <polygon
+ points="640,479.999998664856 560,559.999998664856 560,479.999998664856 640,479.999998664856"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon348" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g356">
+ <circle
+ cx="664"
+ cy="23.99999866485596"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle352" />
+ <circle
+ cx="696"
+ cy="55.99999866485596"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle354" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,861.5385093688967,1230.7692909240723)"
+ id="g362">
+ <circle
+ cx="664"
+ cy="103.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle358" />
+ <circle
+ cx="696"
+ cy="135.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle360" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.8462142944336,-738.4615859985352)"
+ id="g372">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g370">
+ <polygon
+ points="640,239.99999866485595 656,159.99999866485595 672,159.99999866485595 656,239.99999866485595 640,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon364" />
+ <polygon
+ points="672,239.99999866485595 688,159.99999866485595 704,159.99999866485595 688,239.99999866485595 672,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon366" />
+ <polygon
+ points="704,239.99999866485595 720,159.99999866485595 720,239.99999866485595 704,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon368" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.9231414794922,-615.3846588134766)"
+ id="g376">
+ <polygon
+ points="720,239.99999866485598 640,319.999998664856 640,239.99999866485598 720,239.99999866485598"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon374" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,492.30772399902366,1600.0000762939453)"
+ id="g382">
+ <circle
+ cx="664"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle378" />
+ <circle
+ cx="696"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle380" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769958496094,-369.2308044433594)"
+ id="g388">
+ <circle
+ cx="664"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle384" />
+ <circle
+ cx="696"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle386" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g394">
+ <circle
+ cx="664"
+ cy="503.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle390" />
+ <circle
+ cx="696"
+ cy="535.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle392" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,123.07692307692272)"
+ id="g398">
+ <polygon
+ points="800,-0.000001335144041902936 720,79.99999866485595 720,-0.000001335144041902936 800,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon396" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1353.8462257385254,-984.6154441833496)"
+ id="g408">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g406">
+ <polygon
+ points="720,159.99999866485595 736,79.99999866485595 752,79.99999866485595 736,159.99999866485595 720,159.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon400" />
+ <polygon
+ points="752,159.99999866485595 768,79.99999866485595 784,79.99999866485595 768,159.99999866485595 752,159.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon402" />
+ <polygon
+ points="784,159.99999866485595 800,79.99999866485595 800,159.99999866485595 784,159.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon404" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,861.5385208129885,1476.9231491088867)"
+ id="g412">
+ <polygon
+ points="800,159.99999866485595 720,239.99999866485595 720,159.99999866485595 800,159.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon410" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,861.5384826660154)"
+ id="g422">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g420">
+ <polygon
+ points="720,319.999998664856 736,239.99999866485598 752,239.99999866485598 736,319.999998664856 720,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon414" />
+ <polygon
+ points="752,319.999998664856 768,239.99999866485598 784,239.99999866485598 768,319.999998664856 752,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon416" />
+ <polygon
+ points="784,319.999998664856 800,239.99999866485598 800,319.999998664856 784,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon418" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1107.6923522949219)"
+ id="g426">
+ <polygon
+ points="800,319.9999986648559 720,399.9999986648559 720,319.9999986648559 800,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon424" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1353.84619140625)"
+ id="g432">
+ <circle
+ cx="744"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle428" />
+ <circle
+ cx="776"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle430" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2338.461669921875,1600)"
+ id="g438">
+ <circle
+ cx="744"
+ cy="503.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle434" />
+ <circle
+ cx="776"
+ cy="535.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle436" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1230.7692777193513,1353.846200796274)"
+ id="g448">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g446">
+ <polygon
+ points="800,79.99999866485595 816,-0.000001335144041902936 832,-0.000001335144041902936 816,79.99999866485595 800,79.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon440" />
+ <polygon
+ points="832,79.99999866485595 848,-0.000001335144041902936 864,-0.000001335144041902936 848,79.99999866485595 832,79.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon442" />
+ <polygon
+ points="864,79.99999866485595 880,-0.000001335144041902936 880,79.99999866485595 864,79.99999866485595"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon444" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,369.2307815551756)"
+ id="g452">
+ <polygon
+ points="880,79.99999866485595 800,159.99999866485595 800,79.99999866485595 880,79.99999866485595"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon450" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g462">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g460">
+ <polygon
+ points="800,239.99999866485595 816,159.99999866485595 832,159.99999866485595 816,239.99999866485595 800,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon454" />
+ <polygon
+ points="832,239.99999866485595 848,159.99999866485595 864,159.99999866485595 848,239.99999866485595 832,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon456" />
+ <polygon
+ points="864,239.99999866485595 880,159.99999866485595 880,239.99999866485595 864,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon458" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,861.5384826660154)"
+ id="g472">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g470">
+ <polygon
+ points="800,319.999998664856 816,239.99999866485598 832,239.99999866485598 816,319.999998664856 800,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon464" />
+ <polygon
+ points="832,319.999998664856 848,239.99999866485598 864,239.99999866485598 848,319.999998664856 832,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon466" />
+ <polygon
+ points="864,319.999998664856 880,239.99999866485598 880,319.999998664856 864,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon468" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,1107.6923522949219)"
+ id="g476">
+ <polygon
+ points="880,319.9999986648559 800,399.9999986648559 800,319.9999986648559 880,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon474" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1969.2308349609375,-615.3846435546875)"
+ id="g482">
+ <circle
+ cx="824"
+ cy="423.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle478" />
+ <circle
+ cx="856"
+ cy="455.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle480" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2584.615478515625,1600)"
+ id="g486">
+ <polygon
+ points="880,479.999998664856 800,559.999998664856 800,479.999998664856 880,479.999998664856"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon484" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1476.923105093149,-1353.846182016226)"
+ id="g490">
+ <polygon
+ points="960,-0.000001335144041902936 880,79.99999866485595 880,-0.000001335144041902936 960,-0.000001335144041902936"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon488" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g500">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g498">
+ <polygon
+ points="880,159.99999866485595 896,79.99999866485595 912,79.99999866485595 896,159.99999866485595 880,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon492" />
+ <polygon
+ points="912,159.99999866485595 928,79.99999866485595 944,79.99999866485595 928,159.99999866485595 912,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon494" />
+ <polygon
+ points="944,159.99999866485595 960,79.99999866485595 960,159.99999866485595 944,159.99999866485595"
+ fill-opacity="0"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon496" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1723.0769577026367,-1107.6923294067383)"
+ id="g510">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g508">
+ <polygon
+ points="880,239.99999866485595 896,159.99999866485595 912,159.99999866485595 896,239.99999866485595 880,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon502" />
+ <polygon
+ points="912,239.99999866485595 928,159.99999866485595 944,159.99999866485595 928,239.99999866485595 912,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon504" />
+ <polygon
+ points="944,239.99999866485595 960,159.99999866485595 960,239.99999866485595 944,239.99999866485595"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon506" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2830.769287109375,861.5384826660154)"
+ id="g516">
+ <circle
+ cx="904"
+ cy="263.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle512" />
+ <circle
+ cx="936"
+ cy="295.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle514" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1,1.2246467991473532e-16,-1.2246467991473532e-16,-1,2830.769287109375,1107.6923522949216)"
+ id="g520">
+ <polygon
+ points="960,319.9999986648559 880,399.9999986648559 880,319.9999986648559 960,319.9999986648559"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon518" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2092.3077392578125,-738.4615478515625)"
+ id="g530">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g528">
+ <polygon
+ points="880,479.999998664856 896,399.999998664856 912,399.999998664856 896,479.999998664856 880,479.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon522" />
+ <polygon
+ points="912,479.999998664856 928,399.999998664856 944,399.999998664856 928,479.999998664856 912,479.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon524" />
+ <polygon
+ points="944,479.999998664856 960,399.999998664856 960,479.999998664856 944,479.999998664856"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon526" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2215.3846435546875,-615.3846435546875)"
+ id="g536">
+ <circle
+ cx="904"
+ cy="503.999998664856"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle532" />
+ <circle
+ cx="936"
+ cy="535.999998664856"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle534" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,1600.000009390024,-1476.923086313101)"
+ id="g546">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g544">
+ <polygon
+ points="960,79.99999866485595 976,-0.000001335144041902936 992,-0.000001335144041902936 976,79.99999866485595 960,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon538" />
+ <polygon
+ points="992,79.99999866485595 1008,-0.000001335144041902936 1024,-0.000001335144041902936 1008,79.99999866485595 992,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon540" />
+ <polygon
+ points="1024,79.99999866485595 1040,-0.000001335144041902936 1040,79.99999866485595 1024,79.99999866485595"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon542" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g552">
+ <circle
+ cx="984"
+ cy="103.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle548" />
+ <circle
+ cx="1016"
+ cy="135.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle550" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g558">
+ <circle
+ cx="984"
+ cy="183.99999866485595"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle554" />
+ <circle
+ cx="1016"
+ cy="215.99999866485595"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#07c3f2"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#07c3f2"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle556" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(-1.8369701987210297e-16,-1,1,-1.8369701987210297e-16,1107.692306518555,1969.2307891845703)"
+ id="g568">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g566">
+ <polygon
+ points="960,319.999998664856 976,239.99999866485598 992,239.99999866485598 976,319.999998664856 960,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon560" />
+ <polygon
+ points="992,319.999998664856 1008,239.99999866485598 1024,239.99999866485598 1008,319.999998664856 992,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon562" />
+ <polygon
+ points="1024,319.999998664856 1040,239.99999866485598 1040,319.999998664856 1024,319.999998664856"
+ fill-opacity="1"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon564" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2092.3077239990234,-984.6153717041016)"
+ id="g574">
+ <circle
+ cx="984"
+ cy="343.9999986648559"
+ r="24"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle570" />
+ <circle
+ cx="1016"
+ cy="375.9999986648559"
+ r="8"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ fill-opacity="1"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="circle572" />
+ </g>
+ <g
+ class="tile"
+ transform="matrix(1,0,0,1,0,0)"
+ id="g584">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g582">
+ <polygon
+ points="960,479.999998664856 976,399.999998664856 992,399.999998664856 976,479.999998664856 960,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon576" />
+ <polygon
+ points="992,479.999998664856 1008,399.999998664856 1024,399.999998664856 1008,479.999998664856 992,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon578" />
+ <polygon
+ points="1024,479.999998664856 1040,399.999998664856 1040,479.999998664856 1024,479.999998664856"
+ fill-opacity="0"
+ fill="#087cfa"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#087cfa"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon580" />
+ </g>
+ </g>
+ <g
+ class="tile"
+ transform="matrix(6.123233995736766e-17,1,-1,6.123233995736766e-17,2338.4615478515625,-738.4615478515625)"
+ id="g594">
+ <g
+ clip-path="none"
+ transform="matrix(1.5384615384615385,0,0,1.5384615384615385,0,0)"
+ id="g592">
+ <polygon
+ points="960,559.999998664856 976,479.999998664856 992,479.999998664856 976,559.999998664856 960,559.999998664856"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon586" />
+ <polygon
+ points="992,559.999998664856 1008,479.999998664856 1024,479.999998664856 1008,559.999998664856 992,559.999998664856"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon588" />
+ <polygon
+ points="1024,559.999998664856 1040,479.999998664856 1040,559.999998664856 1024,559.999998664856"
+ fill-opacity="0"
+ fill="#21d789"
+ stroke-opacity="1"
+ stroke-width="1"
+ stroke="#21d789"
+ opacity="1"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ id="polygon590" />
+ </g>
+ </g>
+ </g>
+</svg>